aboutsummaryrefslogtreecommitdiff
path: root/internal/web/server_test.go
diff options
context:
space:
mode:
authorLukasz Kasprzak <lukas@labunix.xyz>2026-07-24 15:01:03 +0200
committerLukasz Kasprzak <lukas@labunix.xyz>2026-07-24 15:01:03 +0200
commit2453b598def94649cc7ce9af7155bfaad40cce12 (patch)
tree0267ac67c2e9d108bcf4b3006d55aaafc5deb8d8 /internal/web/server_test.go
parent35f98e0a8a0573d51a4412ec7f60c7de068acfe6 (diff)
downloadlectio-2453b598def94649cc7ce9af7155bfaad40cce12.tar.gz
lectio-2453b598def94649cc7ce9af7155bfaad40cce12.zip
web: /settings page to edit config + books.toml, persisted and applied live; v0.14.0
Diffstat (limited to 'internal/web/server_test.go')
-rw-r--r--internal/web/server_test.go68
1 files changed, 68 insertions, 0 deletions
diff --git a/internal/web/server_test.go b/internal/web/server_test.go
index 5f15796..ee36318 100644
--- a/internal/web/server_test.go
+++ b/internal/web/server_test.go
@@ -4,11 +4,13 @@ import (
"net"
"net/http"
"net/http/httptest"
+ "net/url"
"os"
"path/filepath"
"strings"
"testing"
+ "github.com/lukaszkasprzak/lectio/internal/bible"
"github.com/lukaszkasprzak/lectio/internal/config"
"github.com/lukaszkasprzak/lectio/internal/liturgy"
)
@@ -499,3 +501,69 @@ func TestReaderArrowsDriveChapSelect(t *testing.T) {
t.Errorf("server did not render the requested Luke 12")
}
}
+
+func TestSettingsGet(t *testing.T) {
+ srv := NewServer(config.Default())
+ rec := httptest.NewRecorder()
+ srv.ServeHTTP(rec, httptest.NewRequest("GET", "/settings", nil))
+ if rec.Code != 200 {
+ t.Fatalf("status %d", rec.Code)
+ }
+ b := rec.Body.String()
+ if !strings.Contains(b, `name="ui_language"`) || !strings.Contains(b, `name="books"`) {
+ t.Errorf("settings form missing fields")
+ }
+}
+
+func TestSettingsPostAppliesLive(t *testing.T) {
+ t.Setenv("LECTIO_CONFIG", filepath.Join(t.TempDir(), "config.toml"))
+ srv := NewServer(config.Default()) // starts ui_language=en
+
+ form := url.Values{}
+ form.Set("lectionary", "new")
+ form.Set("traditional_lang", "pl")
+ form.Set("ui_language", "pl") // change it
+ form.Set("sigla_style", "auto")
+ form.Set("web_display", "vertical")
+ form.Set("web_theme", "transfiguration")
+ form.Set("default_version", "bt")
+ form["versions"] = []string{"bt", "wuj", "vul", "grb", "drb"}
+ form.Set("books", string(bibleDefaultBooks()))
+
+ post := httptest.NewRequest("POST", "/settings", strings.NewReader(form.Encode()))
+ post.Header.Set("Content-Type", "application/x-www-form-urlencoded")
+ rec := httptest.NewRecorder()
+ srv.ServeHTTP(rec, post)
+ if rec.Code != http.StatusSeeOther {
+ t.Fatalf("post status %d, want 303", rec.Code)
+ }
+
+ // Live-applied: the daily page now renders Polish chrome (ui_language=pl).
+ idx := httptest.NewRecorder()
+ srv.ServeHTTP(idx, httptest.NewRequest("GET", "/", nil))
+ if !strings.Contains(idx.Body.String(), `lang="pl"`) {
+ t.Errorf("ui_language change not applied live")
+ }
+}
+
+func TestSettingsPostInvalidBooks(t *testing.T) {
+ t.Setenv("LECTIO_CONFIG", filepath.Join(t.TempDir(), "config.toml"))
+ srv := NewServer(config.Default())
+ form := url.Values{}
+ form.Set("lectionary", "new")
+ form.Set("ui_language", "en")
+ form.Set("web_display", "vertical")
+ form.Set("web_theme", "transfiguration")
+ form.Set("default_version", "bt")
+ form["versions"] = []string{"bt"}
+ form.Set("books", "this is not [valid toml")
+ post := httptest.NewRequest("POST", "/settings", strings.NewReader(form.Encode()))
+ post.Header.Set("Content-Type", "application/x-www-form-urlencoded")
+ rec := httptest.NewRecorder()
+ srv.ServeHTTP(rec, post)
+ if rec.Code != 200 || !strings.Contains(rec.Body.String(), "books.toml") {
+ t.Errorf("invalid books should re-render with an error, got %d", rec.Code)
+ }
+}
+
+func bibleDefaultBooks() []byte { return bible.DefaultBooksTOML() }