- go.mod module path (and every internal/vibetree import) inventree -> vibetree - cmd/inventree/ -> cmd/vibetree/, deploy/inventree.service -> vibetree.service - Default site name (seed data + the siteName template func's fallback) is now "vibetree", shown in the navbar, <title>, and login page - Session cookie renamed inventree_session -> vibetree_session - Default DB path data/inventree.db -> data/vibetree.db, CLI/log text, Dockerfile, docker-compose.yml, README, .gitignore/.dockerignore all updated to match Existing installs: this changes the session cookie name (users will be signed out once) and the default DB filename (point -db at your existing file, or rename it, to keep your data).
77 lines
1.8 KiB
Go
77 lines
1.8 KiB
Go
package database_test
|
|
|
|
import (
|
|
"path/filepath"
|
|
"testing"
|
|
|
|
"vibetree/internal/database"
|
|
)
|
|
|
|
func TestOpenSetsPragmasAndMigrates(t *testing.T) {
|
|
dir := t.TempDir()
|
|
db, err := database.Open(filepath.Join(dir, "test.db"))
|
|
if err != nil {
|
|
t.Fatalf("open: %v", err)
|
|
}
|
|
defer db.Close()
|
|
|
|
var journalMode string
|
|
if err := db.QueryRow(`PRAGMA journal_mode`).Scan(&journalMode); err != nil {
|
|
t.Fatalf("query journal_mode: %v", err)
|
|
}
|
|
if journalMode != "wal" {
|
|
t.Fatalf("expected WAL journal mode, got %q", journalMode)
|
|
}
|
|
|
|
var fk int
|
|
if err := db.QueryRow(`PRAGMA foreign_keys`).Scan(&fk); err != nil {
|
|
t.Fatalf("query foreign_keys: %v", err)
|
|
}
|
|
if fk != 1 {
|
|
t.Fatalf("expected foreign_keys=1, got %d", fk)
|
|
}
|
|
|
|
var userCount int
|
|
if err := db.QueryRow(`SELECT COUNT(*) FROM users`).Scan(&userCount); err != nil {
|
|
t.Fatalf("query users: %v", err)
|
|
}
|
|
if userCount != 1 {
|
|
t.Fatalf("expected 1 seeded admin user, got %d", userCount)
|
|
}
|
|
|
|
var statusCount int
|
|
if err := db.QueryRow(`SELECT COUNT(*) FROM statuses`).Scan(&statusCount); err != nil {
|
|
t.Fatalf("query statuses: %v", err)
|
|
}
|
|
if statusCount != 5 {
|
|
t.Fatalf("expected 5 seeded statuses, got %d", statusCount)
|
|
}
|
|
}
|
|
|
|
func TestMigrateIsIdempotent(t *testing.T) {
|
|
dir := t.TempDir()
|
|
path := filepath.Join(dir, "test.db")
|
|
|
|
db1, err := database.Open(path)
|
|
if err != nil {
|
|
t.Fatalf("first open: %v", err)
|
|
}
|
|
db1.Close()
|
|
|
|
// Re-opening (and re-migrating) an already-migrated database must not
|
|
// error or duplicate seed data.
|
|
db2, err := database.Open(path)
|
|
if err != nil {
|
|
t.Fatalf("second open: %v", err)
|
|
}
|
|
defer db2.Close()
|
|
|
|
var userCount int
|
|
if err := db2.QueryRow(`SELECT COUNT(*) FROM users`).Scan(&userCount); err != nil {
|
|
t.Fatalf("query users: %v", err)
|
|
}
|
|
if userCount != 1 {
|
|
t.Fatalf("expected still 1 seeded admin user after reopen, got %d", userCount)
|
|
}
|
|
}
|