package repository import "testing" // A fresh database is seeded by migration, so GetAll must report those values // rather than the struct's zero value. func TestSettingsRepositoryDefaults(t *testing.T) { db := setupTestDB(t) defer db.Close() settings, err := NewSettingsRepository(db).GetAll() if err != nil { t.Fatalf("get all: %v", err) } if settings.RefreshInterval != 5 { t.Errorf("RefreshInterval = %d, want 5", settings.RefreshInterval) } if settings.AutoRefreshLibrary { t.Error("AutoRefreshLibrary should default to off") } if !settings.AutoRefreshDownloads { t.Error("AutoRefreshDownloads should default to on") } if settings.Cookies != "" { t.Errorf("Cookies = %q, want empty", settings.Cookies) } } func TestSettingsRepositoryRoundTrip(t *testing.T) { db := setupTestDB(t) defer db.Close() repo := NewSettingsRepository(db) for key, value := range map[string]string{ "refresh_interval": "12", "auto_refresh_library": "1", "auto_refresh_downloads": "0", "cookies": "# Netscape HTTP Cookie File\n", } { // Set twice: the second call must update in place rather than conflict on // the primary key. if err := repo.Set(key, "placeholder"); err != nil { t.Fatalf("set %s: %v", key, err) } if err := repo.Set(key, value); err != nil { t.Fatalf("update %s: %v", key, err) } } settings, err := repo.GetAll() if err != nil { t.Fatalf("get all: %v", err) } if settings.RefreshInterval != 12 { t.Errorf("RefreshInterval = %d, want 12", settings.RefreshInterval) } if !settings.AutoRefreshLibrary { t.Error("AutoRefreshLibrary = false, want true") } if settings.AutoRefreshDownloads { t.Error("AutoRefreshDownloads = true, want false") } if got, err := repo.Get("cookies"); err != nil || got != "# Netscape HTTP Cookie File\n" { t.Errorf("Get(cookies) = %q, %v", got, err) } } // A non-numeric interval must not overwrite the default with zero, which would // make the page refresh in a loop. func TestSettingsRepositoryIgnoresUnparseableInterval(t *testing.T) { db := setupTestDB(t) defer db.Close() repo := NewSettingsRepository(db) if err := repo.Set("refresh_interval", "not a number"); err != nil { t.Fatal(err) } settings, err := repo.GetAll() if err != nil { t.Fatal(err) } if settings.RefreshInterval != 5 { t.Errorf("RefreshInterval = %d, want the default 5", settings.RefreshInterval) } } // A key that was never written reads as empty, not as an error: the cookies // lookup runs on every download. func TestSettingsRepositoryGetMissingKey(t *testing.T) { db := setupTestDB(t) defer db.Close() got, err := NewSettingsRepository(db).Get("nothing_here") if err != nil { t.Errorf("Get on a missing key returned %v, want no error", err) } if got != "" { t.Errorf("Get = %q, want empty", got) } }