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}