package db import ( "os" "path/filepath" "testing" ) func TestOpenCreatesDatabase(t *testing.T) { dir := t.TempDir() dbPath := filepath.Join(dir, "test.db") db, err := Open(dbPath) if err != nil { t.Fatalf("Open() error: %v", err) } defer db.Close() if _, err := os.Stat(dbPath); os.IsNotExist(err) { t.Fatal("database file was not created") } } func TestOpenSetsWALMode(t *testing.T) { dir := t.TempDir() db, err := Open(filepath.Join(dir, "test.db")) if err != nil { t.Fatalf("Open() error: %v", err) } defer db.Close() var mode string err = db.QueryRow("PRAGMA journal_mode").Scan(&mode) if err != nil { t.Fatalf("PRAGMA query error: %v", err) } if mode != "wal" { t.Errorf("journal_mode = %q, want %q", mode, "wal") } } func TestOpenSetsBusyTimeout(t *testing.T) { dir := t.TempDir() db, err := Open(filepath.Join(dir, "test.db")) if err != nil { t.Fatalf("Open() error: %v", err) } defer db.Close() var timeout int err = db.QueryRow("PRAGMA busy_timeout").Scan(&timeout) if err != nil { t.Fatalf("PRAGMA query error: %v", err) } if timeout != 5000 { t.Errorf("busy_timeout = %d, want %d", timeout, 5000) } } func TestMigrateCreatesAllTables(t *testing.T) { dir := t.TempDir() db, err := Open(filepath.Join(dir, "test.db")) if err != nil { t.Fatalf("Open() error: %v", err) } defer db.Close() if err := Migrate(db); err != nil { t.Fatalf("Migrate() error: %v", err) } expectedTables := []string{ "groups", "connections", "credentials", "ssh_keys", "themes", "connection_history", "host_keys", "settings", } for _, table := range expectedTables { var name string err := db.QueryRow( "SELECT name FROM sqlite_master WHERE type='table' AND name=?", table, ).Scan(&name) if err != nil { t.Errorf("table %q not found: %v", table, err) } } }