/** * Unit tests for HTTP API - Ticket Number Format Validation * * Note: Testing Convex component packages with convex-test requires special setup * due to the @convex-dev/agent dependency. These tests verify ticket number formats * used by the HTTP API endpoints. * * For full integration testing of queries/mutations, run the component in a real * Convex deployment or see the main project's test patterns. * * Prompt generation tests are in prompts.test.ts * API key format tests are in apiKeys.test.ts */ import { describe, it, expect } from "vitest"; describe("HTTP API - Ticket Number Format", () => { describe("Bug Report Ticket Numbers", () => { it("follows BUG-YYYY-NNNN format", () => { const validPattern = /^BUG-\d{4}-\d{4}$/; expect("BUG-2025-0001").toMatch(validPattern); expect("BUG-2025-0123").toMatch(validPattern); expect("BUG-2024-9999").toMatch(validPattern); }); it("pads sequence number to 4 digits", () => { const formatTicketNumber = (year: number, seq: number) => `BUG-${year}-${seq.toString().padStart(4, "0")}`; expect(formatTicketNumber(2025, 1)).toBe("BUG-2025-0001"); expect(formatTicketNumber(2025, 42)).toBe("BUG-2025-0042"); expect(formatTicketNumber(2025, 999)).toBe("BUG-2025-0999"); expect(formatTicketNumber(2025, 1234)).toBe("BUG-2025-1234"); }); }); describe("Feedback Ticket Numbers", () => { it("follows FB-YYYY-NNNN format", () => { const validPattern = /^FB-\d{4}-\d{4}$/; expect("FB-2025-0001").toMatch(validPattern); expect("FB-2025-0123").toMatch(validPattern); expect("FB-2024-9999").toMatch(validPattern); }); it("pads sequence number to 4 digits", () => { const formatTicketNumber = (year: number, seq: number) => `FB-${year}-${seq.toString().padStart(4, "0")}`; expect(formatTicketNumber(2025, 1)).toBe("FB-2025-0001"); expect(formatTicketNumber(2025, 42)).toBe("FB-2025-0042"); expect(formatTicketNumber(2025, 999)).toBe("FB-2025-0999"); expect(formatTicketNumber(2025, 1234)).toBe("FB-2025-1234"); }); }); describe("Ticket Number Parsing", () => { it("can identify bug tickets by prefix", () => { const ticketNumber = "BUG-2025-0001"; expect(ticketNumber.startsWith("BUG-")).toBe(true); expect(ticketNumber.startsWith("FB-")).toBe(false); }); it("can identify feedback tickets by prefix", () => { const ticketNumber = "FB-2025-0001"; expect(ticketNumber.startsWith("FB-")).toBe(true); expect(ticketNumber.startsWith("BUG-")).toBe(false); }); it("normalizes ticket numbers to uppercase", () => { const lowercase = "bug-2025-0001"; const normalized = lowercase.toUpperCase(); expect(normalized).toBe("BUG-2025-0001"); }); }); });