import React from 'react'; import { vi, describe, it, expect, test } from 'vitest'; import { render, screen } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import { isDesktop, useLayoutType } from '@openmrs/esm-framework'; import { mockBasePanel } from '__mocks__'; import LabSetPanel from './lab-set-panel.component'; const mockUseLayoutType = vi.mocked(useLayoutType); const mockIsDesktop = vi.mocked(isDesktop); describe('LabSetPanel', () => { const user = userEvent.setup(); const mockSetActivePanel = vi.fn(); it('renders the panel header, columns, and observations when provided', () => { render(); expect(screen.getByRole('table')).toBeInTheDocument(); expect(screen.getByRole('heading', { name: /hematology/i })).toBeInTheDocument(); expect(screen.getByText(/01 — Jan — 2024,\s+\d{1,2}:\d{2}(\s*[AP]M)?/i)).toBeInTheDocument(); expect(screen.getByRole('columnheader', { name: /test name/i })).toBeInTheDocument(); expect(screen.getByRole('columnheader', { name: /value/i })).toBeInTheDocument(); expect(screen.getByRole('columnheader', { name: /reference range/i })).toBeInTheDocument(); expect(screen.getByText(/test name/i)).toBeInTheDocument(); expect(screen.getByText(/value/i)).toBeInTheDocument(); expect(screen.getByText(/reference range/i)).toBeInTheDocument(); const cbcRow = screen.getByRole('row', { name: /complete blood count.*120 g\/dL.*100-150 g\/dL/i }); const hemoglobinRow = screen.getByRole('row', { name: /hemoglobin.*8 g\/dL.*12-16 g\/dL/i }); const hematocritRow = screen.getByRole('row', { name: /hematocrit.*50 %.*35-45 %/i }); expect(cbcRow).toBeInTheDocument(); expect(hemoglobinRow).toBeInTheDocument(); expect(hematocritRow).toBeInTheDocument(); expect(cbcRow).not.toHaveClass('low', 'high'); expect(hemoglobinRow).toHaveClass('low'); expect(hematocritRow).toHaveClass('high'); }); it('clicking on the panel header sets the active panel', async () => { render(); const buttonElement = screen.getByRole('button', { name: /hematology/i, }); await user.click(buttonElement); expect(mockSetActivePanel).toHaveBeenCalledWith(mockBasePanel); }); it('renders the panel without reference ranges when not provided', () => { const panelWithoutRange = mockBasePanel; panelWithoutRange.entries.forEach((entry) => { entry.range = undefined; }); render(); expect(screen.getByRole('columnheader', { name: /test name/i })).toBeInTheDocument(); expect(screen.getByRole('columnheader', { name: /value/i })).toBeInTheDocument(); expect(screen.queryByRole('columnheader', { name: /reference range/i })).not.toBeInTheDocument(); expect(screen.getByRole('row', { name: /hemoglobin.*8 g\/dL/i })).toBeInTheDocument(); expect(screen.getByRole('row', { name: /hematocrit.*50 %/i })).toBeInTheDocument(); }); it('adjusts the table size based on the layout', () => { mockUseLayoutType.mockReturnValue('large-desktop'); mockIsDesktop.mockReturnValue(true); const { rerender } = render( , ); expect(screen.getByRole('table')).toHaveClass('cds--data-table--sm'); mockUseLayoutType.mockReturnValue('tablet'); mockIsDesktop.mockReturnValue(false); rerender(); expect(screen.getByRole('table')).toHaveClass('cds--data-table--md'); }); });