arche / internal/issuedb/issuedb_test.go

commit 154431fd
 1package issuedb_test
 2
 3import (
 4	"testing"
 5
 6	"arche/internal/issuedb"
 7
 8	_ "github.com/mattn/go-sqlite3"
 9)
10
11func TestIssueDB_Open_CreatesTables(t *testing.T) {
12	dir := t.TempDir()
13	db, err := issuedb.Open(dir)
14	if err != nil {
15		t.Fatalf("Open: %v", err)
16	}
17	defer db.Close()
18
19	if db.Issues == nil {
20		t.Error("Issues store is nil")
21	}
22	if db.Wiki == nil {
23		t.Error("Wiki store is nil")
24	}
25}
26
27func TestIssueDB_IssuesAndWikiShareDB(t *testing.T) {
28	dir := t.TempDir()
29	db, err := issuedb.Open(dir)
30	if err != nil {
31		t.Fatalf("Open: %v", err)
32	}
33	defer db.Close()
34
35	id, err := db.Issues.CreateIssue("Test issue", "body", "alice")
36	if err != nil {
37		t.Fatalf("CreateIssue: %v", err)
38	}
39
40	got, err := db.Issues.GetIssue(id)
41	if err != nil {
42		t.Fatalf("GetIssue: %v", err)
43	}
44	if got.Title != "Test issue" {
45		t.Errorf("title: want %q got %q", "Test issue", got.Title)
46	}
47
48	if err := db.Wiki.Set("home", "Welcome to the wiki", "alice"); err != nil {
49		t.Fatalf("Wiki.Set: %v", err)
50	}
51
52	page, err := db.Wiki.Get("home")
53	if err != nil {
54		t.Fatalf("Wiki.Get: %v", err)
55	}
56	if page.Content != "Welcome to the wiki" {
57		t.Errorf("wiki content mismatch: %+v", page)
58	}
59}
60
61func TestIssueDB_Reopen_Persists(t *testing.T) {
62	dir := t.TempDir()
63
64	db1, err := issuedb.Open(dir)
65	if err != nil {
66		t.Fatalf("Open 1: %v", err)
67	}
68	id, err := db1.Issues.CreateIssue("Persist test", "", "bob")
69	if err != nil {
70		t.Fatalf("CreateIssue: %v", err)
71	}
72	db1.Close()
73
74	db2, err := issuedb.Open(dir)
75	if err != nil {
76		t.Fatalf("Open 2: %v", err)
77	}
78	defer db2.Close()
79
80	got, err := db2.Issues.GetIssue(id)
81	if err != nil {
82		t.Fatalf("GetIssue after reopen: %v", err)
83	}
84	if got.Title != "Persist test" {
85		t.Errorf("title after reopen: want %q got %q", "Persist test", got.Title)
86	}
87}
88
89func TestIssueDB_MigrationsIdempotent(t *testing.T) {
90	dir := t.TempDir()
91
92	for i := range 2 {
93		db, err := issuedb.Open(dir)
94		if err != nil {
95			t.Fatalf("Open iteration %d: %v", i, err)
96		}
97		db.Close()
98	}
99}