apps/bookmarks/db_test.go 2.2 K raw
1
package main
2
3
import (
4
	"database/sql"
5
	"testing"
6
7
	sharedsqlite "github.com/stevedylandev/andromeda/pkg/sqlite"
8
)
9
10
func openBookmarksTestDB(t *testing.T) *sql.DB {
11
	t.Helper()
12
	db, err := sharedsqlite.Open("file:bookmarks-test?mode=memory&cache=shared", schema)
13
	if err != nil {
14
		t.Fatal(err)
15
	}
16
	return db
17
}
18
19
func TestCategoriesAndBookmarkCRUD(t *testing.T) {
20
	db := openBookmarksTestDB(t)
21
	defer db.Close()
22
	cat, err := createCategory(db, "Reading")
23
	if err != nil {
24
		t.Fatal(err)
25
	}
26
	if cat.ShortID == "" || cat.Position != 1 {
27
		t.Fatalf("category %#v", cat)
28
	}
29
	if got, err := getCategoryByName(db, " Reading "); err != nil || got == nil || got.ID != cat.ID {
30
		t.Fatalf("category by name %#v err %v", got, err)
31
	}
32
	cats, err := listCategories(db)
33
	if err != nil || len(cats) != 1 {
34
		t.Fatalf("cats %#v err %v", cats, err)
35
	}
36
37
	fav := "https://example.com/favicon.ico"
38
	link, err := createLink(db, "Example", "https://example.com", &fav, cat.ID)
39
	if err != nil {
40
		t.Fatal(err)
41
	}
42
	if link.ShortID == "" || link.FaviconURL == nil || *link.FaviconURL != fav {
43
		t.Fatalf("link %#v", link)
44
	}
45
	dup, err := createLink(db, "Example 2", "https://example.com", nil, cat.ID)
46
	if err != nil {
47
		t.Fatal(err)
48
	}
49
	if dup.ID == link.ID {
50
		t.Fatal("duplicate URL should create a distinct bookmark")
51
	}
52
	links, err := listLinks(db)
53
	if err != nil {
54
		t.Fatal(err)
55
	}
56
	if len(links) != 2 {
57
		t.Fatalf("links %#v", links)
58
	}
59
	missingFav, err := listLinksMissingFavicon(db)
60
	if err != nil {
61
		t.Fatal(err)
62
	}
63
	if len(missingFav) != 1 || missingFav[0].ID != dup.ID {
64
		t.Fatalf("missing fav %#v", missingFav)
65
	}
66
	if err := updateLinkFavicon(db, dup.ID, &fav); err != nil {
67
		t.Fatal(err)
68
	}
69
	missingFav, err = listLinksMissingFavicon(db)
70
	if err != nil || len(missingFav) != 0 {
71
		t.Fatalf("missing after update %#v err %v", missingFav, err)
72
	}
73
74
	deleted, err := deleteLinkByShortID(db, link.ShortID)
75
	if err != nil || !deleted {
76
		t.Fatalf("delete link %v err %v", deleted, err)
77
	}
78
	deleted, err = deleteLinkByShortID(db, "missing")
79
	if err != nil || deleted {
80
		t.Fatalf("delete missing link %v err %v", deleted, err)
81
	}
82
	deleted, err = deleteCategoryByShortID(db, cat.ShortID)
83
	if err != nil || !deleted {
84
		t.Fatalf("delete category %v err %v", deleted, err)
85
	}
86
}