package database import ( "context" "path/filepath" "testing" "sneak.berlin/go/vaultik/internal/types" ) // Common fixture values shared by the internal repository tests. const ( internalTestHost = "test-host" internalTestSnapshotID = "test-snapshot" internalTestFilePath = "/test.txt" internalTestFile1 = "/file1.txt" internalTestFile2 = "/file2.txt" // countFilesQuery counts the rows of the files table. countFilesQuery = "SELECT COUNT(*) FROM files" ) // mustCreateFileRow inserts the file row, failing the test on error. func mustCreateFileRow(t *testing.T, repos *Repositories, file *File) { t.Helper() err := repos.Files.Create(context.Background(), nil, file) if err != nil { t.Fatalf("failed to create file %s: %v", file.Path, err) } } // mustAddFileToSnapshot associates a file with a snapshot, failing the // test on error. func mustAddFileToSnapshot( t *testing.T, repos *Repositories, snapshotID string, fileID types.FileID, ) { t.Helper() err := repos.Snapshots.AddFileByID(context.Background(), nil, snapshotID, fileID) if err != nil { t.Fatal(err) } } // setupTestDB creates an on-disk test database in a per-test temp // directory and returns it along with a cleanup func that closes it. func setupTestDB(t *testing.T) (*DB, func()) { t.Helper() ctx := context.Background() dbPath := filepath.Join(t.TempDir(), "test.db") db, err := New(ctx, dbPath) if err != nil { t.Fatalf("failed to create database: %v", err) } cleanup := func() { err := db.Close() if err != nil { t.Errorf("failed to close database: %v", err) } } return db, cleanup } // countRow runs a single-integer COUNT-style query and returns the value. func countRow(t *testing.T, db *DB, query string, args ...any) int { t.Helper() var count int err := db.conn.QueryRowContext(context.Background(), query, args...).Scan(&count) if err != nil { t.Fatal(err) } return count }