Files
DoGaMa-serv/internal/persistence/sqlite/store_test.go
T
codex 8c16f81fa6
CI / validate (pull_request) Successful in 25m59s
chore(release): prepare RC packaging and dev compose
2026-08-14 17:26:47 +02:00

83 lines
2.6 KiB
Go

package sqlite_test
import (
"context"
"path/filepath"
"testing"
"git.zaynet.fr/DoGaMa/DoGaMa-serv/internal/persistence/sqlite"
)
func TestOpenInitializesCurrentSchemaAndConfiguration(t *testing.T) {
path := filepath.Join(t.TempDir(), "dogama.db")
db, err := sqlite.Open(context.Background(), path)
if err != nil {
t.Fatal(err)
}
defer db.Close()
for _, table := range []string{"users", "instance_memberships", "permission_overrides", "installation_requests", "backup_policies", "backups", "imports", "notification_channels", "notification_deliveries", "audit_events"} {
var found int
if err := db.QueryRow("SELECT COUNT(*) FROM sqlite_master WHERE type='table' AND name=?", table).Scan(&found); err != nil {
t.Fatal(err)
}
if found != 1 {
t.Fatalf("required table %q is missing", table)
}
}
var email, language int
if err := db.QueryRow("SELECT COUNT(*) FROM pragma_table_info('users') WHERE name='email'").Scan(&email); err != nil {
t.Fatal(err)
}
if err := db.QueryRow("SELECT COUNT(*) FROM pragma_table_info('users') WHERE name='language'").Scan(&language); err != nil {
t.Fatal(err)
}
if email != 1 || language != 1 {
t.Fatalf("users fields: email=%d language=%d", email, language)
}
var legacy int
if err := db.QueryRow("SELECT COUNT(*) FROM sqlite_master WHERE type='table' AND name='schema_migrations'").Scan(&legacy); err != nil {
t.Fatal(err)
}
if legacy != 0 {
t.Fatal("legacy migration ledger was created")
}
var foreignKeys, busyTimeout int
var journalMode string
if err := db.QueryRow("PRAGMA foreign_keys").Scan(&foreignKeys); err != nil {
t.Fatal(err)
}
if err := db.QueryRow("PRAGMA busy_timeout").Scan(&busyTimeout); err != nil {
t.Fatal(err)
}
if err := db.QueryRow("PRAGMA journal_mode").Scan(&journalMode); err != nil {
t.Fatal(err)
}
if foreignKeys != 1 || busyTimeout != 5000 || journalMode != "wal" {
t.Fatalf("unexpected pragmas: foreign_keys=%d busy_timeout=%d journal_mode=%s", foreignKeys, busyTimeout, journalMode)
}
}
func TestOpenReusesInitializedCurrentSchema(t *testing.T) {
path := filepath.Join(t.TempDir(), "dogama.db")
first, err := sqlite.Open(context.Background(), path)
if err != nil {
t.Fatal(err)
}
if err := first.Close(); err != nil {
t.Fatal(err)
}
second, err := sqlite.Open(context.Background(), path)
if err != nil {
t.Fatalf("reopen initialized database: %v", err)
}
defer second.Close()
var found int
if err := second.QueryRow("SELECT COUNT(*) FROM sqlite_master WHERE type='table' AND name='system_state'").Scan(&found); err != nil {
t.Fatal(err)
}
if found != 1 {
t.Fatal("system state table is missing after reopen")
}
}