import React from 'react'; import { beforeEach, describe, expect, it, vi } from 'vitest'; import '@testing-library/jest-dom/vitest'; import userEvent from '@testing-library/user-event'; import { type AppProps } from 'single-spa'; import { render, screen } from '@testing-library/react'; import Root from './devtools.component'; vi.mock('./import-map.component', () => ({ __esModule: true, default: () =>
Mock Import Map
, importMapOverridden: false, })); vi.mock('@openmrs/esm-framework', async () => { const actual = await vi.importActual('@openmrs/esm-framework'); return { ...actual, getCoreTranslation: (key: string) => key, }; }); const defaultProps: AppProps = { name: '@openmrs/esm-devtools-app-page-0', singleSpa: {}, mountParcel: vi.fn(), }; describe('DevTools', () => { beforeEach(() => { localStorage.clear(); delete window.spaEnv; vi.resetModules(); }); describe('Root component', () => { it('should not render DevTools in production without the devtools localStorage flag', () => { window.spaEnv = 'production'; const { container } = render(); expect(container).toBeEmptyDOMElement(); }); it('should render DevTools in development environments', () => { window.spaEnv = 'development'; render(); expect(screen.getByRole('button', { name: '{···}' })).toBeInTheDocument(); }); it('should not render DevTools when only the devtools localStorage flag is set', () => { window.spaEnv = 'production'; localStorage.setItem('openmrs:devtools', 'true'); const { container } = render(); expect(container).toBeEmptyDOMElement(); }); }); describe('DevTools component', () => { const user = userEvent.setup(); beforeEach(() => { window.spaEnv = 'development'; }); it('should toggle DevToolsPopup when clicking trigger button', async () => { render(); const triggerButton = screen.getByRole('button', { name: '{···}' }); // Initially, popup should not be present expect(screen.queryByRole('dialog')).not.toBeInTheDocument(); // Click to open await user.click(triggerButton); expect(screen.getByRole('dialog')).toBeInTheDocument(); // Click to close await user.click(triggerButton); expect(screen.queryByRole('dialog')).not.toBeInTheDocument(); }); }); });