Files
kandev/apps/backend/internal/user/store/sqlite_test.go
T
2026-06-14 22:33:34 +01:00

103 lines
3.0 KiB
Go

package store
import (
"context"
"testing"
"time"
"github.com/jmoiron/sqlx"
_ "github.com/mattn/go-sqlite3"
"github.com/kandev/kandev/internal/user/models"
)
type settingsScanner struct {
raw string
}
func (s settingsScanner) Scan(dest ...any) error {
*(dest[0].(*string)) = s.raw
*(dest[1].(*time.Time)) = time.Time{}
return nil
}
func TestScanUserSettingsChangesPanelLayoutDefault(t *testing.T) {
t.Run("empty settings default to tree", func(t *testing.T) {
settings, err := scanUserSettings(settingsScanner{raw: "{}"}, DefaultUserID)
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
if settings.ChangesPanelLayout != "tree" {
t.Fatalf("expected ChangesPanelLayout=tree, got %q", settings.ChangesPanelLayout)
}
})
t.Run("missing layout defaults to tree", func(t *testing.T) {
settings, err := scanUserSettings(settingsScanner{raw: `{"chat_submit_key":"cmd_enter"}`}, DefaultUserID)
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
if settings.ChangesPanelLayout != "tree" {
t.Fatalf("expected ChangesPanelLayout=tree, got %q", settings.ChangesPanelLayout)
}
})
t.Run("explicit flat is preserved", func(t *testing.T) {
settings, err := scanUserSettings(settingsScanner{raw: `{"changes_panel_layout":"flat"}`}, DefaultUserID)
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
if settings.ChangesPanelLayout != "flat" {
t.Fatalf("expected ChangesPanelLayout=flat, got %q", settings.ChangesPanelLayout)
}
})
}
func TestScanUserSettingsSystemMetricsDisplayDefault(t *testing.T) {
settings, err := scanUserSettings(settingsScanner{raw: "{}"}, DefaultUserID)
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
if settings.SystemMetricsDisplay.ShowInTopbar {
t.Fatal("system metrics display should default to disabled")
}
settings, err = scanUserSettings(settingsScanner{raw: `{"system_metrics_display":{"show_in_topbar":true}}`}, DefaultUserID)
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
if !settings.SystemMetricsDisplay.ShowInTopbar {
t.Fatal("expected stored system metrics display preference")
}
}
func TestSQLiteRepositorySystemMetricsDisplayRoundTrip(t *testing.T) {
conn, err := sqlx.Open("sqlite3", ":memory:")
if err != nil {
t.Fatalf("open sqlite: %v", err)
}
conn.SetMaxOpenConns(1)
t.Cleanup(func() { _ = conn.Close() })
repo, err := newSQLiteRepositoryWithDB(conn, conn)
if err != nil {
t.Fatalf("new repo: %v", err)
}
ctx := context.Background()
settings, err := repo.GetUserSettings(ctx, DefaultUserID)
if err != nil {
t.Fatalf("get defaults: %v", err)
}
settings.SystemMetricsDisplay = models.SystemMetricsDisplaySettings{ShowInTopbar: true}
if err := repo.UpsertUserSettings(ctx, settings); err != nil {
t.Fatalf("upsert settings: %v", err)
}
got, err := repo.GetUserSettings(ctx, DefaultUserID)
if err != nil {
t.Fatalf("get settings: %v", err)
}
if !got.SystemMetricsDisplay.ShowInTopbar {
t.Fatal("expected system metrics display preference to round-trip")
}
}