/** * Tests unitaires pour le module FreePro Settings * Couvre : helpers DB, service auto-import, procédures tRPC */ import { describe, it, expect, vi, beforeEach } from "vitest"; // ── Tests helpers freeproAutoImport ──────────────────────────────────────── describe("frequencyToMs", () => { it("retourne 0 pour manual", async () => { const { frequencyToMs } = await import("./freeproAutoImport"); expect(frequencyToMs("manual")).toBe(0); }); it("retourne 24h en ms pour daily", async () => { const { frequencyToMs } = await import("./freeproAutoImport"); expect(frequencyToMs("daily")).toBe(24 * 60 * 60 * 1000); }); it("retourne 7j en ms pour weekly", async () => { const { frequencyToMs } = await import("./freeproAutoImport"); expect(frequencyToMs("weekly")).toBe(7 * 24 * 60 * 60 * 1000); }); it("retourne 30j en ms pour monthly", async () => { const { frequencyToMs } = await import("./freeproAutoImport"); expect(frequencyToMs("monthly")).toBe(30 * 24 * 60 * 60 * 1000); }); it("retourne 0 pour une valeur inconnue", async () => { const { frequencyToMs } = await import("./freeproAutoImport"); expect(frequencyToMs("unknown")).toBe(0); }); }); // ── Tests runFreeproAutoImport ───────────────────────────────────────────── describe("runFreeproAutoImport", () => { beforeEach(() => { vi.resetModules(); }); it("retourne un message d'erreur si les paramètres ne sont pas configurés", async () => { vi.doMock("./db", () => ({ getFreeproSettings: vi.fn().mockResolvedValue(null), updateFreeproLastRun: vi.fn().mockResolvedValue(undefined), getFreeproImportsByUser: vi.fn().mockResolvedValue([]), createFreeproImport: vi.fn().mockResolvedValue(1), })); const { runFreeproAutoImport } = await import("./freeproAutoImport"); const result = await runFreeproAutoImport(999); expect(result.success).toBe(false); expect(result.message).toContain("Paramètres FreePro non configurés"); }); it("retourne une erreur si les identifiants sont manquants", async () => { vi.doMock("./db", () => ({ getFreeproSettings: vi.fn().mockResolvedValue({ id: 1, userId: 1, portalUrl: "https://pro.free.fr", loginEmail: null, loginPassword: null, frequency: "manual", maxAnteriority: null, autoEnabled: 0, lastSuccessAt: null, lastStatus: null, lastImportCount: 0, createdAt: new Date(), updatedAt: new Date(), }), updateFreeproLastRun: vi.fn().mockResolvedValue(undefined), getFreeproImportsByUser: vi.fn().mockResolvedValue([]), createFreeproImport: vi.fn().mockResolvedValue(1), })); const { runFreeproAutoImport } = await import("./freeproAutoImport"); const result = await runFreeproAutoImport(1); expect(result.success).toBe(false); expect(result.message).toContain("Identifiants FreePro non configurés"); }); }); // ── Tests startFreeproAutoJob / stopFreeproAutoJob ───────────────────────── describe("startFreeproAutoJob / stopFreeproAutoJob", () => { it("démarre et arrête un job sans erreur", async () => { const { startFreeproAutoJob, stopFreeproAutoJob } = await import("./freeproAutoImport"); // Utiliser un intervalle très long pour ne pas déclencher le callback startFreeproAutoJob(99999, 999999999); // Arrêter immédiatement stopFreeproAutoJob(99999); // Arrêter à nouveau (ne doit pas lever d'erreur) stopFreeproAutoJob(99999); }); });