From 22ed35515a8cb5738f51dcf83f4c997996fd8848 Mon Sep 17 00:00:00 2001 From: ToBinio Date: Fri, 27 Feb 2026 11:19:36 +0100 Subject: [PATCH] improve exportProjectStats test setup --- test/nuxt/exportProjectStats.test.ts | 90 ++++++++++++++++++++++------ 1 file changed, 72 insertions(+), 18 deletions(-) diff --git a/test/nuxt/exportProjectStats.test.ts b/test/nuxt/exportProjectStats.test.ts index ec40172..f0f0576 100644 --- a/test/nuxt/exportProjectStats.test.ts +++ b/test/nuxt/exportProjectStats.test.ts @@ -1,26 +1,80 @@ -import { describe, expect, it, vi } from "vitest"; +import { beforeEach, describe, expect, it, vi } from "vitest"; import { exportStatsOverTime } from "~~/server/utils/api/export/projectStats"; import type { ProjectTypes } from "~~/shared/utils/project"; +const mockGetBulk = vi.hoisted(() => vi.fn()); + +vi.mock("~~/server/utils/db/kv", async () => { + return { + KV: { + ProjectStats: { + getBulk: mockGetBulk, + }, + }, + }; +}); + describe("exportProjectStats", () => { + beforeEach(() => { + vi.clearAllMocks(); + }); + it("can handle no data", async () => { - vi.mock(import("~~/server/utils/db/kv"), () => { - return { - KV: { - ProjectStats: { - getBulk: async ( - _dates: Date[], - _type: ProjectTypes, - _versionCategory: VersionCategories, - _exclusive: boolean, - ): Promise<(ProjectStats | Error)[]> => { - console.log("Mocked getBulk called"); - return []; - }, - }, - }, - } as typeof import("~~/server/utils/db/kv"); - }); + mockGetBulk.mockResolvedValue([]); + + const result = await exportStatsOverTime( + "all", + "mod", + true, + new Date("2025-01-01"), + "1.21.1", + (data) => { + return data.count; + }, + undefined, + ); + + expect(result.data.length).toBe(0); + }); + + it("can handle no error", async () => { + mockGetBulk.mockImplementation( + async (dates: Date[]): Promise<(ProjectStats | Error)[]> => { + return dates.map((_) => { + return new Error("Mock error"); + }); + }, + ); + const result = await exportStatsOverTime( + "all", + "mod", + true, + new Date("2025-01-01"), + "1.21.1", + (data) => { + return data.count; + }, + undefined, + ); + + expect(result.data.length).toBe(0); + }); + + it("correctly passes values", async () => { + mockGetBulk.mockImplementation( + async ( + _dates: Date[], + type: ProjectTypes, + versionCategory: VersionCategories, + exclusive: boolean, + ): Promise<(ProjectStats | Error)[]> => { + expect(type).toBe("mod"); + expect(versionCategory).toBe("all"); + expect(exclusive).toBe(true); + + return []; + }, + ); const result = await exportStatsOverTime( "all", -- 2.51.2