// Exemplos de uso dos padrões MCP fictícios
// Controller:
// const controller = new UserController();
// controller.getUser({ params: { id: '1' } }, { status: () => ({ json: console.log }), json: console.log });
//
// Entity:
// const user = new User('1', 'Alice', 'alice@email.com', new Date(), new Date());
//
// Service:
// const service = new UserService();
// service.findById('1').then(console.log);
//
// Module:
// const module = new UserModule();
// module.userController.getUser(...);
//
// Middleware:
// authMiddleware({ headers: {} }, { status: () => ({ json: console.log }), json: console.log }, () => console.log('next'));
//
// Helper:
// formatDate(new Date());
//
// Redis:
// await cacheUser('1', user);
// const cached = await getCachedUser('1');
import { loadFile } from "../utils/fileLoader.js";
import { buildContext } from "../utils/contextBuilder.js";
import { callModel } from "../utils/modelApi.js";
import { TEST_GENERATOR_TEMPLATE } from "../utils/promptTemplates.js";
/**
* MCP Tool: testGenerator
* Gera testes para um arquivo de código.
* Agora com logs, tratamento de erro e retorno detalhado para fins de apresentação.
*/
export async function run(params: { target_file: string; framework?: string; template?: string }) {
console.log("[testGenerator] Iniciando geração de testes...");
console.log("[testGenerator] Parâmetros recebidos:", params);
try {
const targetFile = params.target_file;
const framework = params.framework || "jest";
// Carrega o conteúdo do arquivo alvo
const codeContent = await loadFile(targetFile);
console.log("[testGenerator] Conteúdo do arquivo carregado (primeiros 200 chars):", codeContent.slice(0, 200));
// Gera o contexto a partir do código
const context = buildContext(codeContent);
console.log("[testGenerator] Contexto gerado (primeiros 200 chars):", context.slice(0, 200));
// Usa template customizado se fornecido, senão o padrão
const template = params.template || TEST_GENERATOR_TEMPLATE;
const prompt = template
.replace("{code}", context)
.replace("{framework}", framework);
console.log("[testGenerator] Prompt final (primeiros 200 chars):", prompt.slice(0, 200));
// Chama o modelo
const response = await callModel(prompt);
console.log("[testGenerator] Resposta do modelo:", response);
// Retorna informações detalhadas para apresentação
return {
tests: response,
context,
prompt,
params
};
} catch (error: any) {
console.error("[testGenerator] Erro ao gerar testes:", error);
return {
error: true,
message: error?.message || String(error),
params
};
}
}