package migrations import ( "testing" "github.com/sujit-baniya/fiber-boilerplate/pkg/models" ) // El refactor multi-agente dejó columnas viejas con su NOT NULL original, y // GORM no las toca. El síntoma en producción es: // // null value in column "site_key" violates not-null constraint (23502) // // Si un nombre de tabla acá no coincide con el TableName() real, la migración // consulta information_schema, no encuentra nada y sigue de largo sin avisar: // el bug quedaría igual y el arranque se vería sano. Por eso se comparan // contra los modelos en vez de confiar en las cadenas escritas a mano. func TestTablasHuerfanasCoincidenConLosModelos(t *testing.T) { reales := map[string]bool{ models.UmindTenant{}.TableName(): true, models.UmindDocumento{}.TableName(): true, models.UmindChunk{}.TableName(): true, models.UmindMensaje{}.TableName(): true, models.UmindHerramienta{}.TableName(): true, models.UmindCanal{}.TableName(): true, models.UmindConexion{}.TableName(): true, } for _, h := range ColumnasHuerfanasUmind { if !reales[h.Tabla] { t.Errorf("la tabla %q no corresponde a ningún TableName() de uMind — la migración no encontraría la columna", h.Tabla) } } // Las siete tablas afectadas tienen que estar cubiertas: si falta una, // insertar en ella sigue fallando. if len(ColumnasHuerfanasUmind) != len(reales) { t.Errorf("hay %d entradas para %d tablas afectadas", len(ColumnasHuerfanasUmind), len(reales)) } } // Las columnas huérfanas ya no deben existir en los structs: si alguna volvió // a mapearse, liberar su NOT NULL sería incorrecto. func TestLasColumnasHuerfanasYaNoSeMapean(t *testing.T) { // UmindTenant ya no debe tener SiteKey; vive en UmindAgente. if _, tiene := any(models.UmindAgente{}).(interface{ TableName() string }); !tiene { t.Skip("modelo inesperado") } a := models.UmindAgente{SiteKey: "umk_x"} if a.SiteKey != "umk_x" { t.Error("UmindAgente debería ser el dueño de SiteKey") } }