From fd4517c6d9418e15548f485d473a0fd561f9801d Mon Sep 17 00:00:00 2001 From: sneak Date: Thu, 15 Oct 2026 16:36:52 +0000 Subject: [PATCH] Test that losing the state directory ends every login session (part of #256) A pixa started on an empty state directory must refuse a session cookie from before, and a login on it must open the generator page. With the count of logouts, the new pixa starts from 0 again and accepts the old cookie, so this test fails until the count is replaced. Model: opus-5-5 --- internal/server/logout_internal_test.go | 37 +++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/internal/server/logout_internal_test.go b/internal/server/logout_internal_test.go index e473301..2d46d76 100644 --- a/internal/server/logout_internal_test.go +++ b/internal/server/logout_internal_test.go @@ -4,6 +4,7 @@ import ( "net/http" "net/http/httptest" "net/url" + "path/filepath" "regexp" "strings" "testing" @@ -230,3 +231,39 @@ func TestLogoutOutlastsRestart(t *testing.T) { "still opens the generator page") } } + +// TestLostStateDirectoryEndsEveryLoginSession verifies that a pixa started on +// an empty state directory, as pixad is after a restart that lost its state +// directory, refuses a session cookie from before, and that a login on it +// opens the generator page. +func TestLostStateDirectoryEndsEveryLoginSession(t *testing.T) { + t.Parallel() + + s := newTestServer(t) + + before := logIn(t, s) + if !opensGeneratorPage(t, s, before) { + t.Fatal("logging in did not open the generator page") + } + + emptyStateDir := *s.config + emptyStateDir.StateDir = t.TempDir() + emptyStateDir.DBURL = "file:" + + filepath.Join(emptyStateDir.StateDir, "state.sqlite3") + + restarted := startPixa(t, &emptyStateDir) + + opens := opensGeneratorPage(t, restarted, before) + t.Logf("on an empty state directory, the cookie from before opens the "+ + "generator page: %v", opens) + + if opens { + t.Error("on an empty state directory, a cookie from before still " + + "opens the generator page") + } + + if !opensGeneratorPage(t, restarted, logIn(t, restarted)) { + t.Error("a login on an empty state directory does not open the " + + "generator page") + } +}