apps/jotts/tui/backend_test.go 2.3 K raw
1
package tui
2
3
import (
4
	"path/filepath"
5
	"testing"
6
)
7
8
func writeTestConfig(t *testing.T, dir, remoteURL, apiKey string) {
9
	t.Helper()
10
	t.Setenv("XDG_CONFIG_HOME", dir)
11
	if err := SaveConfig(Config{RemoteURL: remoteURL, APIKey: apiKey}); err != nil {
12
		t.Fatalf("save config: %v", err)
13
	}
14
}
15
16
func TestResolveBackendUsesConfiguredRemoteByDefault(t *testing.T) {
17
	cfgDir := t.TempDir()
18
	writeTestConfig(t, cfgDir, "https://notes.example.com", "secret")
19
	t.Setenv("JOTTS_REMOTE_URL", "")
20
	t.Setenv("JOTTS_API_KEY", "")
21
	t.Setenv("JOTTS_DB_PATH", filepath.Join(t.TempDir(), "local.sqlite"))
22
23
	backend, err := ResolveBackend(Options{})
24
	if err != nil {
25
		t.Fatalf("resolve backend: %v", err)
26
	}
27
	defer backend.Close()
28
29
	remote, ok := backend.(*RemoteBackend)
30
	if !ok {
31
		t.Fatalf("expected remote backend, got %T", backend)
32
	}
33
	if remote.BaseURL != "https://notes.example.com" {
34
		t.Fatalf("expected configured remote URL, got %q", remote.BaseURL)
35
	}
36
	if remote.APIKey != "secret" {
37
		t.Fatalf("expected configured API key, got %q", remote.APIKey)
38
	}
39
}
40
41
func TestResolveBackendExplicitDBOverridesConfiguredRemote(t *testing.T) {
42
	cfgDir := t.TempDir()
43
	writeTestConfig(t, cfgDir, "https://notes.example.com", "secret")
44
	t.Setenv("JOTTS_REMOTE_URL", "")
45
	t.Setenv("JOTTS_API_KEY", "")
46
47
	dbPath := filepath.Join(t.TempDir(), "local.sqlite")
48
	backend, err := ResolveBackend(Options{DBPath: dbPath})
49
	if err != nil {
50
		t.Fatalf("resolve backend: %v", err)
51
	}
52
	defer backend.Close()
53
54
	if _, ok := backend.(*LocalBackend); !ok {
55
		t.Fatalf("expected local backend, got %T", backend)
56
	}
57
}
58
59
func TestResolveBackendExplicitRemoteOverridesExplicitDB(t *testing.T) {
60
	cfgDir := t.TempDir()
61
	writeTestConfig(t, cfgDir, "https://notes.example.com", "secret")
62
	t.Setenv("JOTTS_REMOTE_URL", "")
63
	t.Setenv("JOTTS_API_KEY", "")
64
65
	backend, err := ResolveBackend(Options{
66
		RemoteURL: "https://override.example.com",
67
		APIKey:    "override-key",
68
		DBPath:    filepath.Join(t.TempDir(), "local.sqlite"),
69
	})
70
	if err != nil {
71
		t.Fatalf("resolve backend: %v", err)
72
	}
73
	defer backend.Close()
74
75
	remote, ok := backend.(*RemoteBackend)
76
	if !ok {
77
		t.Fatalf("expected remote backend, got %T", backend)
78
	}
79
	if remote.BaseURL != "https://override.example.com" {
80
		t.Fatalf("expected explicit remote URL, got %q", remote.BaseURL)
81
	}
82
	if remote.APIKey != "override-key" {
83
		t.Fatalf("expected explicit API key, got %q", remote.APIKey)
84
	}
85
}