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>
This commit is contained in:
126
docs/B1_PreFix_Tests.md
Normal file
126
docs/B1_PreFix_Tests.md
Normal file
@@ -0,0 +1,126 @@
|
||||
# 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
|
||||
|
||||
```bash
|
||||
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).
|
||||
Reference in New Issue
Block a user