From 54316d45cfbea00fc19e68eb09bb222ae5643fa7 Mon Sep 17 00:00:00 2001 From: DocFast CEO Date: Mon, 9 Mar 2026 17:12:22 +0100 Subject: [PATCH] fix: resolve all TypeScript strict-mode errors in test files MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - convert-sanitized: use 'as Record' cast for optional mock call args - error-responses: fix module path (database.js → db.js) and mock return type - recover-initial-db-fallback: fix mock return type (undefined → true) - render-timing: remove non-existent .prepare property check - usage-flush: cast mock request objects to any for test setup Zero tsc --noEmit errors. 608 tests passing. --- src/__tests__/convert-sanitized.test.ts | 10 +++++----- src/__tests__/error-responses.test.ts | 8 ++++---- src/__tests__/recover-initial-db-fallback.test.ts | 2 +- src/__tests__/render-timing.test.ts | 2 +- src/__tests__/usage-flush.test.ts | 4 ++-- 5 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/__tests__/convert-sanitized.test.ts b/src/__tests__/convert-sanitized.test.ts index a7aaa92..da55288 100644 --- a/src/__tests__/convert-sanitized.test.ts +++ b/src/__tests__/convert-sanitized.test.ts @@ -38,7 +38,7 @@ describe("convert routes use sanitized PDF options", () => { .send({ html: "

Test

", format: "a4" }); expect(vi.mocked(renderPdf)).toHaveBeenCalledOnce(); - const opts = vi.mocked(renderPdf).mock.calls[0][1]; + const opts = vi.mocked(renderPdf).mock.calls[0]![1] as Record; expect(opts.format).toBe("A4"); }); @@ -51,7 +51,7 @@ describe("convert routes use sanitized PDF options", () => { .send({ markdown: "# Test", format: "letter" }); expect(vi.mocked(renderPdf)).toHaveBeenCalledOnce(); - const opts = vi.mocked(renderPdf).mock.calls[0][1]; + const opts = vi.mocked(renderPdf).mock.calls[0]![1] as Record; expect(opts.format).toBe("Letter"); }); @@ -64,7 +64,7 @@ describe("convert routes use sanitized PDF options", () => { .send({ url: "https://example.com", format: "a3" }); expect(vi.mocked(renderUrlPdf)).toHaveBeenCalledOnce(); - const opts = vi.mocked(renderUrlPdf).mock.calls[0][1]; + const opts = vi.mocked(renderUrlPdf).mock.calls[0]![1] as Record; expect(opts.format).toBe("A3"); }); }); @@ -79,7 +79,7 @@ describe("demo routes use sanitized PDF options", () => { .send({ html: "

Test

", format: "a4" }); expect(vi.mocked(renderPdf)).toHaveBeenCalledOnce(); - const opts = vi.mocked(renderPdf).mock.calls[0][1]; + const opts = vi.mocked(renderPdf).mock.calls[0]![1] as Record; expect(opts.format).toBe("A4"); }); @@ -92,7 +92,7 @@ describe("demo routes use sanitized PDF options", () => { .send({ markdown: "# Test", format: "a4" }); expect(vi.mocked(renderPdf)).toHaveBeenCalledOnce(); - const opts = vi.mocked(renderPdf).mock.calls[0][1]; + const opts = vi.mocked(renderPdf).mock.calls[0]![1] as Record; expect(opts.format).toBe("A4"); }); }); diff --git a/src/__tests__/error-responses.test.ts b/src/__tests__/error-responses.test.ts index 2dafab0..af143cc 100644 --- a/src/__tests__/error-responses.test.ts +++ b/src/__tests__/error-responses.test.ts @@ -226,12 +226,12 @@ describe("Error Response Security - Admin Cleanup", () => { const mockAdminAuth = (req: any, res: any, next: any) => next(); // Mock database functions - vi.mock("../services/database.js", () => ({ + vi.mock("../services/db.js", () => ({ cleanupStaleData: vi.fn(), })); - const { cleanupStaleData } = await import("../services/database.js"); - vi.mocked(cleanupStaleData).mockResolvedValue({ deletedCount: 5 }); + const { cleanupStaleData } = await import("../services/db.js"); + vi.mocked(cleanupStaleData).mockResolvedValue({ expiredVerifications: 3, orphanedUsage: 2 }); // Create minimal app app = express(); @@ -250,7 +250,7 @@ describe("Error Response Security - Admin Cleanup", () => { }); it("does not expose error message (no 'message' field)", async () => { - const { cleanupStaleData } = await import("../services/database.js"); + const { cleanupStaleData } = await import("../services/db.js"); const internalError = new Error("Database connection pool exhausted"); vi.mocked(cleanupStaleData).mockRejectedValue(internalError); diff --git a/src/__tests__/recover-initial-db-fallback.test.ts b/src/__tests__/recover-initial-db-fallback.test.ts index bcb5951..a9e6c47 100644 --- a/src/__tests__/recover-initial-db-fallback.test.ts +++ b/src/__tests__/recover-initial-db-fallback.test.ts @@ -63,7 +63,7 @@ describe("POST /v1/recover DB fallback (BUG-110)", () => { vi.clearAllMocks(); mockGetAllKeys.mockReturnValue([]); mockCreatePending.mockResolvedValue({ code: "123456" } as any); - mockSendEmail.mockResolvedValue(undefined); + mockSendEmail.mockResolvedValue(true); }); it("sends verification email via DB fallback when key not in cache but exists in DB", async () => { diff --git a/src/__tests__/render-timing.test.ts b/src/__tests__/render-timing.test.ts index 79b1355..5560c28 100644 --- a/src/__tests__/render-timing.test.ts +++ b/src/__tests__/render-timing.test.ts @@ -108,7 +108,7 @@ describe("PDF render timing", () => { vi.mocked(renderPdf).mockResolvedValue({ pdf: Buffer.from("%PDF-1.4 mock"), durationMs: 30 } as any); const dbMod = await import("../services/db.js"); - if (vi.isMockFunction(dbMod.default?.prepare)) { + if (vi.isMockFunction((dbMod as Record).default)) { // db is already mocked elsewhere } }); diff --git a/src/__tests__/usage-flush.test.ts b/src/__tests__/usage-flush.test.ts index 886760c..18a5f86 100644 --- a/src/__tests__/usage-flush.test.ts +++ b/src/__tests__/usage-flush.test.ts @@ -20,8 +20,8 @@ describe("flushDirtyEntries – independent key flushing", () => { const next = vi.fn(); const res = { status: vi.fn(() => ({ json: vi.fn() })) }; - usageMod.usageMiddleware({ apiKeyInfo: { key: "key-good" } }, res, next); - usageMod.usageMiddleware({ apiKeyInfo: { key: "key-bad" } }, res, next); + usageMod.usageMiddleware({ apiKeyInfo: { key: "key-good" } } as any, res as any, next); + usageMod.usageMiddleware({ apiKeyInfo: { key: "key-bad" } } as any, res as any, next); // Track which keys were successfully upserted const flushedKeys: string[] = [];