Files
Redflag/docs/B1_PreFix_Tests.md
jpetree331 ab676c3b83 test(database): B-1 pre-fix tests for migration and schema bugs
Pre-fix test suite documenting 9 database migration and schema
integrity bugs. Tests FAIL where they assert correct post-fix
behavior, PASS where they document current buggy state.

Tests added:
- F-B1-11 P0: main.go swallows migration errors (3 tests)
- F-B1-13: Duplicate migration numbers 009/012 (2 tests)
- F-B1-1: Migration 024 self-insert into schema_migrations (2 tests)
- F-B1-2: Migration 024 references non-existent column (2 tests)
- F-B1-3: Migration 018 wrong file suffix (2 tests)
- F-B1-4: Migration 018 GRANT to wrong role (1 test)
- F-B1-15: 7+ migrations not idempotent (2 tests)
- F-B1-5: Missing agent_commands sent_at index (2 tests)
- F-B1-6: N+1 query in GetDashboardStats (2 tests)
- F-B1-10: No background refresh token cleanup (2 tests)

Current state: 10 PASS, 10 FAIL, 0 SKIP.
All A-series tests continue to pass (no regressions).
See docs/B1_PreFix_Tests.md for full inventory.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-29 06:42:19 -04:00

5.6 KiB

B-1 Pre-Fix Test Suite

Date: 2026-03-29 Branch: culurien Purpose: Document database migration and schema bugs BEFORE fixes. Reference: docs/B1_Database_Audit.md


Test Files Created

File Package Bugs Documented
aggregator-server/internal/database/migration_runner_test.go database_test F-B1-11, F-B1-13
aggregator-server/internal/database/migrations/migration024_test.go migrations_test F-B1-1, F-B1-2
aggregator-server/internal/database/migrations/migration018_test.go migrations_test F-B1-3, F-B1-4
aggregator-server/internal/database/migrations/idempotency_test.go migrations_test F-B1-15
aggregator-server/internal/database/migrations/index_audit_test.go migrations_test F-B1-5
aggregator-server/internal/api/handlers/stats_n1_test.go handlers_test F-B1-6
aggregator-server/internal/database/refresh_token_cleanup_test.go database_test F-B1-10

How to Run

cd aggregator-server && go test ./internal/database/... -v
cd aggregator-server && go test ./internal/database/migrations/... -v
cd aggregator-server && go test ./internal/api/handlers/... -v -run TestGetDashboardStats

Test Inventory

migration_runner_test.go

Test Bug Asserts State After Fix
TestMigrationFailureReturnsError F-B1-11 Runner processes .up.sql files PASS PASS
TestServerStartsAfterMigrationFailure F-B1-11 main.go swallows migration errors PASS update
TestServerMustAbortOnMigrationFailure F-B1-11 main.go must abort on failure FAIL PASS
TestMigrationRunnerDetectsDuplicateNumbers F-B1-13 Duplicate 009/012 prefixes exist PASS update
TestMigrationRunnerShouldRejectDuplicateNumbers F-B1-13 No duplicate prefixes allowed FAIL PASS

migration024_test.go

Test Bug Asserts State After Fix
TestMigration024HasSelfInsert F-B1-1 024 contains INSERT INTO schema_migrations PASS update
TestMigration024ShouldNotHaveSelfInsert F-B1-1 024 must NOT self-insert FAIL PASS
TestMigration024ReferencesDeprecatedColumn F-B1-2 024 uses deprecated column PASS update
TestMigration024ColumnExistsInSchema F-B1-2 deprecated must be defined before 024 FAIL PASS

migration018_test.go

Test Bug Asserts State After Fix
TestMigration018ScannerConfigHasWrongSuffix F-B1-3 .sql file exists (not .up.sql) PASS update
TestMigration018ScannerConfigHasCorrectSuffix F-B1-3 .up.sql file must exist FAIL PASS
TestMigration018ScannerConfigHasNoGrantToWrongRole F-B1-4 No GRANT to redflag_user FAIL PASS

idempotency_test.go

Test Bug Asserts State After Fix
TestMigrationsHaveIdempotencyViolations F-B1-15 Violations exist (>0) PASS update
TestAllMigrationsAreIdempotent F-B1-15 Zero violations FAIL PASS

index_audit_test.go

Test Bug Asserts State After Fix
TestStuckCommandsIndexIsMissing F-B1-5 No sent_at index on agent_commands PASS update
TestStuckCommandsIndexExists F-B1-5 sent_at index must exist FAIL PASS

stats_n1_test.go

Test Bug Asserts State After Fix
TestGetDashboardStatsHasNPlusOneLoop F-B1-6 Query inside agent loop PASS update
TestGetDashboardStatsUsesJoin F-B1-6 No per-agent query loop FAIL PASS

refresh_token_cleanup_test.go

Test Bug Asserts State After Fix
TestNoBackgroundRefreshTokenCleanup F-B1-10 No background cleanup exists PASS update
TestBackgroundRefreshTokenCleanupExists F-B1-10 Background cleanup must exist FAIL PASS

State-Change Summary

Test Current After Fix
TestMigrationFailureReturnsError PASS PASS
TestServerStartsAfterMigrationFailure PASS FAIL (update)
TestServerMustAbortOnMigrationFailure FAIL PASS
TestMigrationRunnerDetectsDuplicateNumbers PASS FAIL (update)
TestMigrationRunnerShouldRejectDuplicateNumbers FAIL PASS
TestNoBackgroundRefreshTokenCleanup PASS FAIL (update)
TestBackgroundRefreshTokenCleanupExists FAIL PASS
TestMigrationsHaveIdempotencyViolations PASS FAIL (update)
TestAllMigrationsAreIdempotent FAIL PASS
TestStuckCommandsIndexIsMissing PASS FAIL (update)
TestStuckCommandsIndexExists FAIL PASS
TestMigration018ScannerConfigHasWrongSuffix PASS FAIL (update)
TestMigration018ScannerConfigHasCorrectSuffix FAIL PASS
TestMigration018ScannerConfigHasNoGrantToWrongRole FAIL PASS
TestMigration024HasSelfInsert PASS FAIL (update)
TestMigration024ShouldNotHaveSelfInsert FAIL PASS
TestMigration024ReferencesDeprecatedColumn PASS FAIL (update)
TestMigration024ColumnExistsInSchema FAIL PASS
TestGetDashboardStatsHasNPlusOneLoop PASS FAIL (update)
TestGetDashboardStatsUsesJoin FAIL PASS

Bold FAIL = tests asserting correct post-fix behavior (will flip to PASS).


Notes

  1. All tests are static analysis / source inspection — no live database required.
  2. All A-series tests continue to pass (no regressions from B-1 test additions).
  3. The idempotency test excludes migrations 025-026 (A-series, already idempotent).