import { describe, it, expect } from "vitest"; import { generateBugPrompt, generateFeedbackPrompt } from "./prompts"; describe("Prompt Generation", () => { describe("generateBugPrompt", () => { const baseBug = { ticketNumber: "BUG-2025-0001", title: "Login button not working", description: "When I click the login button, nothing happens", severity: "high" as const, url: "https://app.example.com/login", route: "/login", browserInfo: JSON.stringify({ browser: "Chrome", version: "120" }), consoleErrors: JSON.stringify(["TypeError: Cannot read property 'submit' of null"]), viewportWidth: 1920, viewportHeight: 1080, createdAt: Date.now(), }; it("generates fix template prompt", () => { const prompt = generateBugPrompt(baseBug, "fix"); expect(prompt).toContain("BUG-2025-0001"); expect(prompt).toContain("Login button not working"); expect(prompt.toLowerCase()).toContain("high"); expect(prompt.toLowerCase()).toContain("fix"); }); it("generates analyze template prompt", () => { const prompt = generateBugPrompt(baseBug, "analyze"); expect(prompt).toContain("BUG-2025-0001"); expect(prompt.toLowerCase()).toContain("analy"); // Analysis or analyze }); it("generates codebuff template prompt", () => { const prompt = generateBugPrompt(baseBug, "codebuff"); expect(prompt).toContain("BUG-2025-0001"); expect(prompt).toContain("Login button not working"); }); it("generates implement template prompt", () => { const prompt = generateBugPrompt(baseBug, "implement"); expect(prompt).toContain("BUG-2025-0001"); }); it("includes AI analysis when available", () => { const bugWithAI = { ...baseBug, aiSummary: "The login form submit handler is not properly bound", aiRootCauseAnalysis: "React event handler not attached correctly", aiSuggestedFix: "Check that the onClick handler is properly bound to the button element", aiReproductionSteps: ["Navigate to /login", "Click login button", "Observe nothing happens"], }; const prompt = generateBugPrompt(bugWithAI, "fix"); expect(prompt).toContain("The login form submit handler is not properly bound"); expect(prompt).toContain("React event handler not attached correctly"); expect(prompt).toContain("Check that the onClick handler is properly bound"); }); it("includes console errors when available", () => { const prompt = generateBugPrompt(baseBug, "fix"); expect(prompt).toContain("TypeError: Cannot read property 'submit' of null"); }); it("handles missing optional fields gracefully", () => { const minimalBug = { ticketNumber: "BUG-2025-0002", title: "Simple bug", description: "A simple bug", severity: "low" as const, url: "https://example.com", browserInfo: "{}", viewportWidth: 1920, viewportHeight: 1080, createdAt: Date.now(), }; const prompt = generateBugPrompt(minimalBug, "fix"); expect(prompt).toContain("BUG-2025-0002"); expect(prompt).toContain("Simple bug"); }); }); describe("generateFeedbackPrompt", () => { const baseFeedback = { ticketNumber: "FB-2025-0001", type: "feature_request" as const, title: "Add dark mode support", description: "Please add a dark mode option for the app", priority: "important" as const, url: "https://app.example.com/settings", route: "/settings", createdAt: Date.now(), }; it("generates implement template prompt", () => { const prompt = generateFeedbackPrompt(baseFeedback, "implement"); expect(prompt).toContain("FB-2025-0001"); expect(prompt).toContain("Add dark mode support"); expect(prompt.toLowerCase()).toContain("feature"); // Feature Request expect(prompt.toLowerCase()).toContain("important"); }); it("generates fix template prompt", () => { const prompt = generateFeedbackPrompt(baseFeedback, "fix"); expect(prompt).toContain("FB-2025-0001"); }); it("generates analyze template prompt", () => { const prompt = generateFeedbackPrompt(baseFeedback, "analyze"); expect(prompt).toContain("FB-2025-0001"); expect(prompt.toLowerCase()).toContain("analy"); // Analysis or analyze }); it("generates codebuff template prompt", () => { const prompt = generateFeedbackPrompt(baseFeedback, "codebuff"); expect(prompt).toContain("FB-2025-0001"); expect(prompt).toContain("Add dark mode support"); }); it("includes AI analysis when available", () => { const feedbackWithAI = { ...baseFeedback, aiSummary: "User wants dark mode for better accessibility", aiImpactAnalysis: "High user impact - many users have requested this", aiActionItems: ["Add theme toggle", "Create dark color palette", "Persist preference"], aiEstimatedEffort: "medium" as const, }; const prompt = generateFeedbackPrompt(feedbackWithAI, "implement"); expect(prompt).toContain("User wants dark mode for better accessibility"); expect(prompt).toContain("High user impact"); }); it("handles change_request type", () => { const changeRequest = { ...baseFeedback, type: "change_request" as const, title: "Change button color", }; const prompt = generateFeedbackPrompt(changeRequest, "implement"); expect(prompt.toLowerCase()).toContain("change"); // Change Request expect(prompt).toContain("Change button color"); }); it("handles general feedback type", () => { const generalFeedback = { ...baseFeedback, type: "general" as const, title: "Great product!", description: "I love using this app", }; const prompt = generateFeedbackPrompt(generalFeedback, "analyze"); expect(prompt).toContain("general"); expect(prompt).toContain("Great product!"); }); it("handles critical priority", () => { const criticalFeedback = { ...baseFeedback, priority: "critical" as const, }; const prompt = generateFeedbackPrompt(criticalFeedback, "implement"); expect(prompt.toLowerCase()).toContain("critical"); }); }); });