import React from 'react'; import { vi, describe, it, expect, test } from 'vitest'; import { useTranslation } from 'react-i18next'; import { screen } from '@testing-library/react'; import { mockOrderStockData } from '__mocks__'; import { renderWithSwr } from 'tools'; import { useOrderStockInfo } from '../hooks/useOrderStockInfo'; import OrderStockDetailsComponent from './order-stock-details.component'; const mockUseOrderStockInfo = vi.mocked(useOrderStockInfo); vi.mock('../hooks/useOrderStockInfo', () => ({ useOrderStockInfo: vi.fn(), })); describe('OrderStockDetailsComponent', () => { const mockOrderItemUuid = 'test-uuid'; it('renders loading skeleton when data is loading', () => { mockUseOrderStockInfo.mockReturnValue({ data: null, isLoading: true, error: null, }); renderWithSwr(); expect(screen.getByRole('paragraph')).toBeInTheDocument(); }); it('renders nothing when stock data is null', () => { mockUseOrderStockInfo.mockReturnValue({ data: null, isLoading: false, error: null, }); const { container } = renderWithSwr(); expect(container).toBeEmptyDOMElement(); }); it('renders "In Stock" when item is active and has positive quantity', () => { mockUseOrderStockInfo.mockReturnValue({ data: mockOrderStockData, isLoading: false, error: null, }); renderWithSwr(); expect(screen.getByText(/In stock/i)).toBeInTheDocument(); expect(screen.getByText('CheckmarkFilledIcon')).toBeInTheDocument(); }); it('renders "Out of Stock" when item has zero quantity', () => { const outOfStockData = { ...mockOrderStockData, entry: [ { ...mockOrderStockData.entry[0], resource: { ...mockOrderStockData.entry[0].resource, netContent: { value: 0, unit: 'units', }, }, }, ], }; mockUseOrderStockInfo.mockReturnValue({ data: outOfStockData, isLoading: false, error: null, }); renderWithSwr(); expect(screen.getByText(/Out of stock/i)).toBeInTheDocument(); expect(screen.getByText('CloseFilledIcon')).toBeInTheDocument(); }); it('renders "Out of Stock" when item is inactive', () => { const inactiveData = { ...mockOrderStockData, entry: [ { ...mockOrderStockData.entry[0], resource: { ...mockOrderStockData.entry[0].resource, status: 'inactive', }, }, ], }; mockUseOrderStockInfo.mockReturnValue({ data: inactiveData, isLoading: false, error: null, }); renderWithSwr(); expect(screen.getByText(/Out of stock/i)).toBeInTheDocument(); expect(screen.getByText('CloseFilledIcon')).toBeInTheDocument(); }); it('renders "Out of Stock" when entry array is empty', () => { const emptyData = { ...mockOrderStockData, entry: [], }; mockUseOrderStockInfo.mockReturnValue({ data: emptyData, isLoading: false, error: null, }); renderWithSwr(); expect(screen.getByText(/Out of stock/i)).toBeInTheDocument(); expect(screen.getByText('CloseFilledIcon')).toBeInTheDocument(); }); });