settings_test.go
⎇
Raw
1package repository
2
3import "testing"
4
5// A fresh database is seeded by migration, so GetAll must report those values
6// rather than the struct's zero value.
7func TestSettingsRepositoryDefaults(t *testing.T) {
8 db := setupTestDB(t)
9 defer db.Close()
10
11 settings, err := NewSettingsRepository(db).GetAll()
12 if err != nil {
13 t.Fatalf("get all: %v", err)
14 }
15 if settings.RefreshInterval != 5 {
16 t.Errorf("RefreshInterval = %d, want 5", settings.RefreshInterval)
17 }
18 if settings.AutoRefreshLibrary {
19 t.Error("AutoRefreshLibrary should default to off")
20 }
21 if !settings.AutoRefreshDownloads {
22 t.Error("AutoRefreshDownloads should default to on")
23 }
24 if settings.Cookies != "" {
25 t.Errorf("Cookies = %q, want empty", settings.Cookies)
26 }
27}
28
29func TestSettingsRepositoryRoundTrip(t *testing.T) {
30 db := setupTestDB(t)
31 defer db.Close()
32 repo := NewSettingsRepository(db)
33
34 for key, value := range map[string]string{
35 "refresh_interval": "12",
36 "auto_refresh_library": "1",
37 "auto_refresh_downloads": "0",
38 "cookies": "# Netscape HTTP Cookie File\n",
39 } {
40 // Set twice: the second call must update in place rather than conflict on
41 // the primary key.
42 if err := repo.Set(key, "placeholder"); err != nil {
43 t.Fatalf("set %s: %v", key, err)
44 }
45 if err := repo.Set(key, value); err != nil {
46 t.Fatalf("update %s: %v", key, err)
47 }
48 }
49
50 settings, err := repo.GetAll()
51 if err != nil {
52 t.Fatalf("get all: %v", err)
53 }
54 if settings.RefreshInterval != 12 {
55 t.Errorf("RefreshInterval = %d, want 12", settings.RefreshInterval)
56 }
57 if !settings.AutoRefreshLibrary {
58 t.Error("AutoRefreshLibrary = false, want true")
59 }
60 if settings.AutoRefreshDownloads {
61 t.Error("AutoRefreshDownloads = true, want false")
62 }
63 if got, err := repo.Get("cookies"); err != nil || got != "# Netscape HTTP Cookie File\n" {
64 t.Errorf("Get(cookies) = %q, %v", got, err)
65 }
66}
67
68// A non-numeric interval must not overwrite the default with zero, which would
69// make the page refresh in a loop.
70func TestSettingsRepositoryIgnoresUnparseableInterval(t *testing.T) {
71 db := setupTestDB(t)
72 defer db.Close()
73 repo := NewSettingsRepository(db)
74
75 if err := repo.Set("refresh_interval", "not a number"); err != nil {
76 t.Fatal(err)
77 }
78 settings, err := repo.GetAll()
79 if err != nil {
80 t.Fatal(err)
81 }
82 if settings.RefreshInterval != 5 {
83 t.Errorf("RefreshInterval = %d, want the default 5", settings.RefreshInterval)
84 }
85}
86
87// A key that was never written reads as empty, not as an error: the cookies
88// lookup runs on every download.
89func TestSettingsRepositoryGetMissingKey(t *testing.T) {
90 db := setupTestDB(t)
91 defer db.Close()
92
93 got, err := NewSettingsRepository(db).Get("nothing_here")
94 if err != nil {
95 t.Errorf("Get on a missing key returned %v, want no error", err)
96 }
97 if got != "" {
98 t.Errorf("Get = %q, want empty", got)
99 }
100}
101