package models import ( "os" "strings" "testing" ) // El fallback de GetAiConfigForService puede terminar usando una config que no // declara el servicio pedido. Lo que no puede es agarrar una dedicada a // embeddings o a Whisper: esos endpoints no conversan, y el error del proveedor // no se parece en nada a la causa real. func TestConfigsDeUsoEspecialNoSirvenDeComodin(t *testing.T) { casos := map[string]bool{ "whisper": true, "umind_embeddings": true, "landing,umind_embeddings": true, "": false, "ia": false, "landing,query_runner": false, } for modulo, want := range casos { if got := esConfigDeUsoEspecial(modulo); got != want { t.Errorf("esConfigDeUsoEspecial(%q) = %v, want %v", modulo, got, want) } } } // La consulta de todo resolvedor global tiene que excluir las configs de // cliente. Sin ese filtro, la config que carga un cliente —que no lleva módulo, // ninguna lo lleva— cae en el fallback y pasa a atender tareas nuestras: // clasificar correos de soporte, importar plantillas, la vCard. Su cuenta // pagando nuestro trabajo, y sin que se entere ninguno de los dos. // // Se verifica sobre el código porque son consultas a base: acá no hay una. func TestLosResolvedoresGlobalesExcluyenConfigsDeCliente(t *testing.T) { fuente, err := os.ReadFile("ai_config.go") if err != nil { t.Fatal(err) } texto := string(fuente) // Toda función que resuelve una config para uso del sistema. resolvedores := []string{ "func GetAiConfigForService(", "func GetWhisperConfig(", "func GetUmindEmbeddingsConfig(", "func GetAgenteBotAiConfig(", "func GetAgenteBotConfig(", "func HayAiConfigParaModulo(", } for _, firma := range resolvedores { i := strings.Index(texto, firma) if i < 0 { t.Errorf("no encontré %s — ¿se renombró?", firma) continue } // El cuerpo hasta la próxima función de nivel superior. resto := texto[i+len(firma):] if j := strings.Index(resto, "\nfunc "); j > 0 { resto = resto[:j] } if !strings.Contains(resto, "tenant_id IS NULL") { t.Errorf("%s no filtra tenant_id IS NULL: puede devolver la config de un cliente para una tarea del sistema", firma) } } }