diff options
| author | Lukasz Kasprzak <lukas@labunix.xyz> | 2026-07-24 15:01:03 +0200 |
|---|---|---|
| committer | Lukasz Kasprzak <lukas@labunix.xyz> | 2026-07-24 15:01:03 +0200 |
| commit | 2453b598def94649cc7ce9af7155bfaad40cce12 (patch) | |
| tree | 0267ac67c2e9d108bcf4b3006d55aaafc5deb8d8 /internal/web/server_test.go | |
| parent | 35f98e0a8a0573d51a4412ec7f60c7de068acfe6 (diff) | |
| download | lectio-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.go | 68 |
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() } |
