import { describe, it, expect, beforeAll } from "vitest"; const describeIntegration = process.env.DATABASE_URL ? describe : describe.skip; import { getLlmFieldsConfigByUser, upsertLlmFieldConfig, initializeDefaultLlmFields } from "./db"; describeIntegration("LLM Fields Configuration", () => { const testUserId = 99999; // Use a high ID to avoid conflicts beforeAll(async () => { // Initialize default fields for test user await initializeDefaultLlmFields(testUserId); }); it("should initialize default fields for a new user", async () => { const fields = await getLlmFieldsConfigByUser(testUserId); expect(fields).toBeDefined(); expect(fields.length).toBeGreaterThan(0); // Check that default required fields exist const supplierName = fields.find(f => f.fieldName === "supplierName"); const invoiceNumber = fields.find(f => f.fieldName === "invoiceNumber"); const invoiceDate = fields.find(f => f.fieldName === "invoiceDate"); const totalAmount = fields.find(f => f.fieldName === "totalAmount"); expect(supplierName).toBeDefined(); expect(supplierName?.isRequired).toBe(1); expect(invoiceNumber).toBeDefined(); expect(invoiceNumber?.isRequired).toBe(1); expect(invoiceDate).toBeDefined(); expect(invoiceDate?.isRequired).toBe(1); expect(totalAmount).toBeDefined(); expect(totalAmount?.isRequired).toBe(1); }); it("should update field configuration", async () => { // Make deliveryNoteNumber required await upsertLlmFieldConfig({ userId: testUserId, fieldName: "deliveryNoteNumber", displayName: "Numéro de bon de livraison", isRequired: 1, displayOrder: 5, }); const fields = await getLlmFieldsConfigByUser(testUserId); const deliveryNote = fields.find(f => f.fieldName === "deliveryNoteNumber"); expect(deliveryNote).toBeDefined(); expect(deliveryNote?.isRequired).toBe(1); // Make it optional again await upsertLlmFieldConfig({ userId: testUserId, fieldName: "deliveryNoteNumber", displayName: "Numéro de bon de livraison", isRequired: 0, displayOrder: 5, }); const fieldsAfter = await getLlmFieldsConfigByUser(testUserId); const deliveryNoteAfter = fieldsAfter.find(f => f.fieldName === "deliveryNoteNumber"); expect(deliveryNoteAfter).toBeDefined(); expect(deliveryNoteAfter?.isRequired).toBe(0); }); it("should return fields in correct display order", async () => { const fields = await getLlmFieldsConfigByUser(testUserId); // Check that fields are sorted by displayOrder for (let i = 1; i < fields.length; i++) { expect(fields[i].displayOrder).toBeGreaterThanOrEqual(fields[i - 1].displayOrder); } }); });