diff --git a/apps/api/test-utils/setup.ts b/apps/api/test-utils/setup.ts index aac55151..31f0f066 100644 --- a/apps/api/test-utils/setup.ts +++ b/apps/api/test-utils/setup.ts @@ -1,5 +1,5 @@ import { vi, afterEach } from "vitest"; -import "@playfulprogramming/test-fixtures"; +import { createDbMock } from "@playfulprogramming/test-fixtures"; afterEach(() => { vi.clearAllMocks(); @@ -19,54 +19,4 @@ vi.mock("@playfulprogramming/redis", () => { return { redis: undefined }; }); -vi.mock("@playfulprogramming/db", () => { - return { - posts: { - slug: {}, - collectionSlug: {}, - }, - postData: { - slug: {}, - locale: {}, - title: {}, - bannerImage: {}, - wordCount: {}, - publishedAt: {}, - noindex: {}, - }, - postTags: { - postSlug: {}, - tag: {}, - }, - profiles: { - slug: {}, - name: {}, - description: {}, - profileImage: {}, - }, - postAuthors: { - postSlug: {}, - authorSlug: {}, - }, - db: { - query: { - postImages: { - findFirst: vi.fn(), - }, - urlMetadata: { - findFirst: vi.fn(), - }, - collections: { - findMany: vi.fn(), - }, - posts: { - findFirst: vi.fn(), - }, - profiles: { - findMany: vi.fn(), - }, - }, - select: vi.fn(), - }, - }; -}); +vi.mock("@playfulprogramming/db", () => createDbMock()); diff --git a/apps/worker/test-utils/setup.ts b/apps/worker/test-utils/setup.ts index f7c9052c..ed9c43c6 100644 --- a/apps/worker/test-utils/setup.ts +++ b/apps/worker/test-utils/setup.ts @@ -1,6 +1,6 @@ import "./server.ts"; import { vi, afterEach, beforeEach } from "vitest"; -import "@playfulprogramming/test-fixtures"; +import { createDbMock } from "@playfulprogramming/test-fixtures"; import { s3 } from "@playfulprogramming/s3"; import { Readable } from "node:stream"; @@ -40,92 +40,7 @@ vi.mock("@playfulprogramming/s3", () => { }; }); -vi.mock("@playfulprogramming/db", () => { - const insertMap = new Map(); - const insertMockResponse = () => { - const onConflictDoUpdate = vi.fn(); - return { values: vi.fn(() => ({ onConflictDoUpdate })) }; - }; - - const deleteMap = new Map(); - const deleteMockResponse = () => { - const returning = vi.fn(); - return { where: vi.fn(() => ({ returning })) }; - }; - - const db = { - insert: vi.fn((arg) => { - return ( - insertMap.get(arg) ?? insertMap.set(arg, insertMockResponse()).get(arg) - ); - }), - delete: vi.fn((arg) => { - return ( - deleteMap.get(arg) ?? deleteMap.set(arg, deleteMockResponse()).get(arg) - ); - }), - select: vi.fn(), - transaction: vi.fn((cb: (tx: unknown) => unknown) => cb(db)), - }; - - return { - profiles: { - slug: {}, - }, - profileAchievements: { - profileSlug: {}, - achievementId: {}, - }, - authorRoles: { - profileSlug: {}, - role: {}, - }, - posts: { - slug: {}, - }, - collections: { - slug: {}, - }, - collectionData: { - slug: {}, - locale: {}, - }, - collectionAuthors: { - collectionSlug: {}, - authorSlug: {}, - }, - collectionTags: { - collectionSlug: {}, - tag: {}, - }, - postData: { - slug: {}, - locale: {}, - version: {}, - }, - postAuthors: { - postSlug: {}, - authorSlug: {}, - }, - postTags: { - postSlug: {}, - tag: {}, - }, - postAttachments: { - postSlug: {}, - attachmentName: {}, - }, - collectionChapters: { - postSlug: {}, - locale: {}, - }, - urlMetadata: {}, - urlMetadataPost: {}, - urlMetadataGist: {}, - urlMetadataGistFile: {}, - db, - }; -}); +vi.mock("@playfulprogramming/db", () => createDbMock()); vi.mock("@playfulprogramming/github-api", async (importOriginal) => { const actual = await importOriginal(); diff --git a/packages/test-fixtures/src/db-mock.ts b/packages/test-fixtures/src/db-mock.ts new file mode 100644 index 00000000..94020f7a --- /dev/null +++ b/packages/test-fixtures/src/db-mock.ts @@ -0,0 +1,114 @@ +import { vi } from "vitest"; + +export function createDbMock() { + const insertMap = new Map(); + const insertMockResponse = () => { + const onConflictDoUpdate = vi.fn(); + return { values: vi.fn(() => ({ onConflictDoUpdate })) }; + }; + + const deleteMap = new Map(); + const deleteMockResponse = () => { + const returning = vi.fn(); + return { where: vi.fn(() => ({ returning })) }; + }; + + const db = { + insert: vi.fn((arg) => { + return ( + insertMap.get(arg) ?? insertMap.set(arg, insertMockResponse()).get(arg) + ); + }), + delete: vi.fn((arg) => { + return ( + deleteMap.get(arg) ?? deleteMap.set(arg, deleteMockResponse()).get(arg) + ); + }), + select: vi.fn(), + transaction: vi.fn((cb: (tx: unknown) => unknown) => cb(db)), + query: { + postImages: { + findFirst: vi.fn(), + }, + urlMetadata: { + findFirst: vi.fn(), + }, + collections: { + findMany: vi.fn(), + }, + posts: { + findFirst: vi.fn(), + }, + profiles: { + findMany: vi.fn(), + }, + }, + }; + + return { + profiles: { + slug: {}, + name: {}, + description: {}, + profileImage: {}, + }, + profileAchievements: { + profileSlug: {}, + achievementId: {}, + }, + authorRoles: { + profileSlug: {}, + role: {}, + }, + posts: { + slug: {}, + collectionSlug: {}, + }, + collections: { + slug: {}, + }, + collectionData: { + slug: {}, + locale: {}, + }, + collectionAuthors: { + collectionSlug: {}, + authorSlug: {}, + }, + collectionTags: { + collectionSlug: {}, + tag: {}, + }, + postData: { + slug: {}, + locale: {}, + version: {}, + title: {}, + bannerImage: {}, + wordCount: {}, + publishedAt: {}, + noindex: {}, + }, + postAuthors: { + postSlug: {}, + authorSlug: {}, + }, + postTags: { + postSlug: {}, + tag: {}, + }, + postAttachments: { + postSlug: {}, + attachmentName: {}, + }, + collectionChapters: { + postSlug: {}, + locale: {}, + }, + urlMetadata: {}, + urlMetadataPost: {}, + urlMetadataGist: {}, + urlMetadataGistFile: {}, + db, + }; +} diff --git a/packages/test-fixtures/src/index.ts b/packages/test-fixtures/src/index.ts index c56177d7..4f226aea 100644 --- a/packages/test-fixtures/src/index.ts +++ b/packages/test-fixtures/src/index.ts @@ -1 +1,3 @@ import "./env-stubs.ts"; + +export { createDbMock } from "./db-mock.ts";