Spaces:
Sleeping
Sleeping
| /** | |
| * requestEnhancer.test.ts — Unit test S39 RequestEnhancer | |
| * | |
| * Copertura (10 test): | |
| * 1. enhanceRequest: ritorna EnhancedRequest valido | |
| * 2. code_fix breve → enhanced ha detailSuffix | |
| * 3. debug → suggerimenti include "stack trace" | |
| * 4. refactor → suggerimento rischio alta priorità | |
| * 5. full_app → modelTier premium nel classification | |
| * 6. richiesta lunga (>200 char) → nessun suffix aggiunto | |
| * 7. getHighPrioritySuggestions: solo suggerimenti high | |
| * 8. hasActionableSuggestions: true per debug | |
| * 9. hasActionableSuggestions: false per domanda semplice | |
| * 10. DI _setTestEnhancer: custom enhancer usato | |
| * | |
| * SESSIONE: S39 — TaskClassifier + ConfidenceEngine + RequestEnhancer | |
| */ | |
| import { describe, it, expect, afterEach } from "vitest"; | |
| import { | |
| enhanceRequest, | |
| getHighPrioritySuggestions, | |
| hasActionableSuggestions, | |
| _setTestEnhancer, | |
| _resetEnhancer, | |
| } from "@/lib/requestEnhancer"; | |
| afterEach(() => { | |
| _resetEnhancer(); | |
| }); | |
| describe("enhanceRequest", () => { | |
| it("1. ritorna EnhancedRequest con tutti i campi obbligatori", () => { | |
| const r = enhanceRequest("Fix questo bug"); | |
| expect(r.original).toBe("Fix questo bug"); | |
| expect(typeof r.enhanced).toBe("string"); | |
| expect(r.enhanced.length).toBeGreaterThan(0); | |
| expect(Array.isArray(r.suggestions)).toBe(true); | |
| expect(typeof r.hasChanges).toBe("boolean"); | |
| expect(r.confidence).toBeGreaterThan(0); | |
| expect(r.classification).toBeDefined(); | |
| }); | |
| it("2. code_fix breve → enhanced contiene hint su file/errore", () => { | |
| const r = enhanceRequest("fix questa funzione"); | |
| expect(r.hasChanges).toBe(true); | |
| expect(r.enhanced.length).toBeGreaterThan("fix questa funzione".length); | |
| }); | |
| it("3. debug → suggestions include riferimento a stack trace", () => { | |
| const r = enhanceRequest("non funziona, crasha"); | |
| const texts = r.suggestions.map(s => s.message.toLowerCase()); | |
| expect(texts.some(t => t.includes("stack") || t.includes("errore") || t.includes("error"))).toBe(true); | |
| }); | |
| it("4. refactor → suggerimento rischio ad alta priorità", () => { | |
| const r = enhanceRequest("Refactor il modulo di autenticazione"); | |
| const highRisk = r.suggestions.filter(s => s.priority === "high" && s.kind === "risk"); | |
| expect(highRisk.length).toBeGreaterThan(0); | |
| }); | |
| it("5. full_app → classification.modelTier = premium", () => { | |
| const r = enhanceRequest("Crea un'app completa da zero con React e TypeScript"); | |
| expect(r.classification.modelTier).toBe("premium"); | |
| expect(r.classification.needsPlan).toBe(true); | |
| }); | |
| it("6. richiesta lunga >200 char → nessun suffix aggiunto (già abbastanza dettagliata)", () => { | |
| const long = "Fix questo bug. ".repeat(15); // >200 chars | |
| const r = enhanceRequest(long); | |
| expect(r.enhanced.trim()).toBe(long.trim()); | |
| }); | |
| }); | |
| describe("getHighPrioritySuggestions", () => { | |
| it("7. debug → almeno 1 suggerimento high priority", () => { | |
| const sug = getHighPrioritySuggestions("Il componente non funziona, crasha all'avvio"); | |
| expect(sug.length).toBeGreaterThan(0); | |
| expect(sug.every(s => s.priority === "high")).toBe(true); | |
| }); | |
| it("7b. tutti i suggerimenti ritornati sono high priority", () => { | |
| const sug = getHighPrioritySuggestions("refactor questo modulo enorme"); | |
| for (const s of sug) { | |
| expect(s.priority).toBe("high"); | |
| } | |
| }); | |
| }); | |
| describe("hasActionableSuggestions", () => { | |
| it("8. debug → hasActionableSuggestions=true", () => { | |
| expect(hasActionableSuggestions("Il codice non funziona crasha ovunque")).toBe(true); | |
| }); | |
| it("9. domanda banale → hasActionableSuggestions=false", () => { | |
| expect(hasActionableSuggestions("Ciao, come stai?")).toBe(false); | |
| }); | |
| }); | |
| describe("DI _setTestEnhancer", () => { | |
| it("10. custom enhancer viene usato al posto del default", () => { | |
| _setTestEnhancer((original, cls) => ({ | |
| original, | |
| enhanced: "CUSTOM: " + original, | |
| classification: cls, | |
| suggestions: [], | |
| hasChanges: true, | |
| confidence: 1.0, | |
| })); | |
| const r = enhanceRequest("test"); | |
| expect(r.enhanced).toBe("CUSTOM: test"); | |
| expect(r.confidence).toBe(1.0); | |
| }); | |
| }); | |