package store import ( "context" "path/filepath" "testing" ) func TestMigrateAndFoundation(t *testing.T) { ctx := context.Background() path := filepath.Join(t.TempDir(), "control.db") st, err := Open(path) if err != nil { t.Fatalf("Open: %v", err) } defer st.Close() if err := st.Migrate(ctx); err != nil { t.Fatalf("Migrate: %v", err) } // Migrate is idempotent. if err := st.Migrate(ctx); err != nil { t.Fatalf("second Migrate: %v", err) } n, err := st.CountDevices(ctx) if err != nil { t.Fatalf("CountDevices: %v", err) } if n != 0 { t.Errorf("CountDevices = %d, want 0", n) } if err := st.Audit(ctx, "sam", "test", nil, "phase1"); err != nil { t.Fatalf("Audit: %v", err) } // Every ยง7 table must exist after migration. want := []string{ "devices", "schedules", "blocklist", "allowlist", "state", "telemetry", "overrides", "audit", } for _, table := range want { var name string err := st.DB().QueryRowContext(ctx, `SELECT name FROM sqlite_master WHERE type='table' AND name=?`, table).Scan(&name) if err != nil { t.Errorf("table %q missing: %v", table, err) } } }