feat(database): add repairSmokeAIAdviceIndexes function and corresponding tests
- Implemented repairSmokeAIAdviceIndexes to manage the unique index for fa_smoke_ai_advice. - Added unit tests for the new function to ensure correct index recreation and validation. - Updated AutoMigrate to include the new index repair function.
This commit is contained in:
@@ -79,3 +79,54 @@ func TestRepairSmokeAINextSmokeIndexesKeepsCorrectIndex(t *testing.T) {
|
||||
t.Fatalf("unmet expectations: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestRepairSmokeAIAdviceIndexesRecreatesBrokenIndex(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
db, mock, cleanup := newMockDB(t)
|
||||
defer cleanup()
|
||||
|
||||
mock.ExpectQuery("SHOW INDEX FROM `fa_smoke_ai_advice` WHERE Key_name = \\?").
|
||||
WithArgs("uniq_smoke_ai_advice").
|
||||
WillReturnRows(
|
||||
sqlmock.NewRows([]string{"Key_name", "Seq_in_index", "Column_name"}).
|
||||
AddRow("uniq_smoke_ai_advice", 1, "uid").
|
||||
AddRow("uniq_smoke_ai_advice", 2, "advice_date").
|
||||
AddRow("uniq_smoke_ai_advice", 3, "prompt_version"),
|
||||
)
|
||||
mock.ExpectExec("ALTER TABLE `fa_smoke_ai_advice` DROP INDEX `uniq_smoke_ai_advice`").
|
||||
WillReturnResult(sqlmock.NewResult(0, 0))
|
||||
mock.ExpectExec("ALTER TABLE `fa_smoke_ai_advice` ADD UNIQUE KEY `uniq_smoke_ai_advice` \\(`uid`,`type`,`advice_date`,`prompt_version`\\)").
|
||||
WillReturnResult(sqlmock.NewResult(0, 0))
|
||||
|
||||
if err := repairSmokeAIAdviceIndexes(db); err != nil {
|
||||
t.Fatalf("repairSmokeAIAdviceIndexes: %v", err)
|
||||
}
|
||||
if err := mock.ExpectationsWereMet(); err != nil {
|
||||
t.Fatalf("unmet expectations: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestRepairSmokeAIAdviceIndexesKeepsCorrectIndex(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
db, mock, cleanup := newMockDB(t)
|
||||
defer cleanup()
|
||||
|
||||
mock.ExpectQuery("SHOW INDEX FROM `fa_smoke_ai_advice` WHERE Key_name = \\?").
|
||||
WithArgs("uniq_smoke_ai_advice").
|
||||
WillReturnRows(
|
||||
sqlmock.NewRows([]string{"Key_name", "Seq_in_index", "Column_name"}).
|
||||
AddRow("uniq_smoke_ai_advice", 1, "uid").
|
||||
AddRow("uniq_smoke_ai_advice", 2, "type").
|
||||
AddRow("uniq_smoke_ai_advice", 3, "advice_date").
|
||||
AddRow("uniq_smoke_ai_advice", 4, "prompt_version"),
|
||||
)
|
||||
|
||||
if err := repairSmokeAIAdviceIndexes(db); err != nil {
|
||||
t.Fatalf("repairSmokeAIAdviceIndexes: %v", err)
|
||||
}
|
||||
if err := mock.ExpectationsWereMet(); err != nil {
|
||||
t.Fatalf("unmet expectations: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user