import { ok, type ValueOf } from "@tailor-platform/erp-kit/core"; import { vi } from "vitest"; import type { InventoryCommands, InventoryQueries, ItemManagementQueries, PurchaseCommands, PurchaseQueries, } from "../module"; export type Item = NonNullable< Awaited>["value"]["item"] >; export function mockItemManagementQueries( item: Item | null, ): Pick { return { getItem: () => Promise.resolve({ ok: true, value: { item } }), }; } export type StorageLocation = NonNullable< Awaited>["value"]["storageLocation"] >; export type PurchaseOrderLineForMatching = ValueOf< Awaited> >["purchaseOrderLines"][number]; export type InventoryLedgerEntry = ValueOf< Awaited> >["inventoryLedgerEntries"][number]; export const mockInventoryQueries = (store: { storageLocation?: StorageLocation; }): Pick => ({ getStorageLocation: vi.fn(() => Promise.resolve( store.storageLocation ? ok({ storageLocation: store.storageLocation, stockLevels: [] }) : ok({ storageLocation: null, stockLevels: [] }), ), ), }); export const mockInventoryCommands = ( result: Awaited> = ok({ inventoryLedgerEntries: [], }), ) => ({ postInventoryLedger: vi.fn(() => Promise.resolve(result), ), }); export const mockPurchaseCommands = ( result: Awaited> = ok({ purchaseOrderIds: [], }), ) => ({ recalculatePurchaseOrderReceiptStatus: vi.fn< PurchaseCommands["recalculatePurchaseOrderReceiptStatus"] >(() => Promise.resolve(result)), }); export const mockPurchaseQueries = (store: { purchaseOrderLines?: PurchaseOrderLineForMatching[]; }) => ({ listPurchaseOrderLinesForMatching: vi.fn( (_db, input) => Promise.resolve( ok({ purchaseOrderLines: (store.purchaseOrderLines ?? []).filter((line) => input.purchaseOrderLineIds.includes(line.id), ), }), ), ), });