import { vi } from 'vitest'; export type TableMock = { toArray: ReturnType; add: ReturnType; update: ReturnType; where: ReturnType; filter: ReturnType; count: ReturnType; }; const createWhere = () => ({ equals: vi.fn().mockReturnValue({ first: vi.fn().mockResolvedValue(undefined) }), }); export const makeTableMock = (items: T[] = []): TableMock => ({ toArray: vi.fn().mockResolvedValue([...items]), add: vi.fn().mockResolvedValue(undefined), update: vi.fn().mockResolvedValue(undefined), where: vi.fn().mockImplementation(() => createWhere()), filter: vi.fn().mockReturnValue({ first: vi.fn().mockResolvedValue(undefined) }), count: vi.fn().mockResolvedValue(0), }); export const makeMockDb = (overrides: Partial> = {}) => { const products = makeTableMock(overrides.products ?? []); const categories = makeTableMock(overrides.categories ?? []); const pickLists = makeTableMock(overrides.pickLists ?? []); const pickItems = makeTableMock(overrides.pickItems ?? []); const importExportLogs = makeTableMock(overrides.importExportLogs ?? []); const transaction = vi .fn() .mockImplementation(async (_mode: any, ...args: any[]) => { const cb = args[args.length - 1]; if (typeof cb === 'function') { return cb(); } return undefined; }); const open = vi.fn().mockResolvedValue(undefined); return { products, categories, pickLists, pickItems, importExportLogs, transaction, open, }; };