import React from 'react';
import { describe, expect, it, vi } from 'vitest';
import '@testing-library/jest-dom/vitest';
import { render, screen } from '@testing-library/react';
import { useLayoutType } from '@openmrs/esm-react-utils';
import { ErrorState } from '.';
const mockUseLayoutType = vi.mocked(useLayoutType);
describe('ErrorState', () => {
it('renders an error state widget card', () => {
const testError = {
response: {
status: 500,
statusText: 'Internal Server Error',
},
};
render();
expect(screen.getByRole('heading', { name: /appointments/i })).toBeInTheDocument();
expect(screen.getByText(/Error 500: Internal Server Error/i)).toBeInTheDocument();
expect(
screen.getByText(
/Sorry, there was a problem displaying this information. You can try to reload this page, or contact the site administrator and quote the error code above./i,
),
).toBeInTheDocument();
});
it('should render tablet layout when layout type is tablet', () => {
mockUseLayoutType.mockReturnValue('tablet');
render();
// eslint-disable-next-line testing-library/no-node-access
expect(screen.getByRole('heading').parentElement?.getAttribute('class')).toContain('tabletHeader');
});
it('should render desktop layout when layout type is not tablet', () => {
mockUseLayoutType.mockReturnValue('small-desktop');
render();
// eslint-disable-next-line testing-library/no-node-access
expect(screen.getByRole('heading').parentElement?.getAttribute('class')).toContain('desktopHeader');
});
it('should handle error with partial response data', () => {
const error = { response: { status: 404 } };
render();
expect(screen.getByText(/Error 404:/i)).toBeInTheDocument();
});
});