package contract import ( "context" "io/fs" "path/filepath" "testing" assets "shared-album" "shared-album/internal/albums" "shared-album/internal/auth" "shared-album/internal/db" "shared-album/internal/members" "shared-album/internal/notifications" "shared-album/internal/photos" "shared-album/internal/sharelinks" "shared-album/internal/social" ) func TestSQLiteContract(t *testing.T) { path := filepath.Join(t.TempDir(), "meta.db") migFS, err := fs.Sub(assets.Migrations, "migrations/sqlite") if err != nil { t.Fatalf("migrations fs: %v", err) } if err := db.MigrateSQLite(path, migFS); err != nil { t.Fatalf("migrate: %v", err) } database, err := db.OpenSQLite(path) if err != nil { t.Fatalf("open: %v", err) } t.Cleanup(func() { database.Close() }) Run(t, Repos{ Auth: auth.NewSQLiteStore(database), Albums: albums.NewSQLiteStore(database), Members: members.NewSQLiteStore(database), Photos: photos.NewSQLiteStore(database), Social: social.NewSQLiteStore(database), Notifications: notifications.NewSQLiteStore(database), ShareLinks: sharelinks.NewSQLiteStore(database), Reset: func(ctx context.Context) error { tables := []string{ "variant_jobs", "photo_objects", "objects", "photo_tags", "tags", "refresh_tokens", "share_links", "notifications", "likes", "comments", "invites", "album_members", "photos", "albums", "users", } for _, tbl := range tables { if _, err := database.ExecContext(ctx, "DELETE FROM "+tbl); err != nil { return err } } return nil }, }) }