import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'; const printItemLabelMock = vi.fn(); const formatPrintErrorMessageMock = vi.fn(); vi.mock('../../../src/api/labels.js', () => ({ printItemLabel: (...args) => printItemLabelMock(...args), formatPrintErrorMessage: (...args) => formatPrintErrorMessageMock(...args), })); vi.mock('../../../src/api/stock.js', () => ({ getStockEntry: vi.fn(), adjustStockEntry: vi.fn(), useStockItem: vi.fn(), listStockEntries: vi.fn(async () => []), listGroupedStockEntries: vi.fn(async () => []), updateStockItem: vi.fn(), })); vi.mock('../../../src/api/locations.js', () => ({ fetchLocations: vi.fn(async () => ({ flat: [], tree: [] })), })); const { stockDetailPageData } = await import('../../../src/features/stock/stock-detail-page.js'); describe('stock print label actions', () => { beforeEach(() => { printItemLabelMock.mockReset(); formatPrintErrorMessageMock.mockReset(); globalThis.window = { __loncApp: { navigate: vi.fn(), }, }; }); afterEach(() => { vi.restoreAllMocks(); delete globalThis.window; }); it('prints from stock detail and shows success alert', async () => { printItemLabelMock.mockResolvedValueOnce(null); const addAlert = vi.fn(); const store = { addAlert }; const data = stockDetailPageData(store); data.entry = { uuid_b64: 'uuid-1', name: 'Rice' }; await data.printLabel(); expect(printItemLabelMock).toHaveBeenCalledWith(store, 'uuid-1'); expect(addAlert).toHaveBeenCalledWith({ type: 'success', message: 'Rice label sent to printer.', }); }); it('shows parsed warning when detail printing fails', async () => { printItemLabelMock.mockRejectedValueOnce(new Error('boom')); formatPrintErrorMessageMock.mockReturnValueOnce('Printer unavailable.'); const addAlert = vi.fn(); const store = { addAlert }; const data = stockDetailPageData(store); data.entry = { uuid_b64: 'uuid-1', name: 'Rice' }; await data.printLabel(); expect(addAlert).toHaveBeenCalledWith({ type: 'warning', message: 'Could not print Rice label: Printer unavailable.', }); }); });