import { err, ok } from "@tailor-platform/erp-kit/core"; import { vi } from "vitest"; import type { WorkforceQueries } from "../module"; export interface MockAssignment { id: string; workerEmploymentId: string; positionId: string; effectiveStart: Date; effectiveEnd: Date | null; } export interface MockWorkerEmployment { id: string; workerId: string; companyId: string; employmentTypeId: string; workRegimeId: string; } export interface MockWorker { id: string; userId: string; } export interface MockPosition { id: string; jobProfileId: string; } type MockedWorkforceQueries = Pick< WorkforceQueries, "getAssignment" | "getWorkerEmployment" | "getWorker" | "getPosition" >; export const mockWorkforceQueries = (store: { assignments?: MockAssignment[]; workerEmployments?: MockWorkerEmployment[]; workers?: MockWorker[]; positions?: MockPosition[]; }): MockedWorkforceQueries => { const getAssignment = vi.fn((_db: unknown, input: { id: string }) => { const assignment = store.assignments?.find((a) => a.id === input.id); if (!assignment) { return Promise.resolve(err(new Error(`no Assignment for id ${input.id}`))); } return Promise.resolve(ok({ assignment })); }); const getWorkerEmployment = vi.fn((_db: unknown, input: { id: string }) => Promise.resolve( ok({ workerEmployment: store.workerEmployments?.find((we) => we.id === input.id) ?? null }), ), ); const getWorker = vi.fn((_db: unknown, input: { id: string }) => Promise.resolve(ok({ worker: store.workers?.find((w) => w.id === input.id) ?? null })), ); const getPosition = vi.fn((_db: unknown, input: { id: string }) => Promise.resolve(ok({ position: store.positions?.find((p) => p.id === input.id) ?? null })), ); return { getAssignment, getWorkerEmployment, getWorker, getPosition, } as unknown as MockedWorkforceQueries; };