/* eslint-disable @typescript-eslint/no-empty-function */ import React from 'react'; import { screen, render, waitFor } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import { Context as ResponsiveContext } from 'react-responsive'; import { useOverlayTriggerState, OverlayTriggerState } from 'react-stately'; import { DOMAttributes, FocusableElement } from '@react-types/shared'; import { useOverlayTrigger } from 'react-aria'; import { PreviewPanel } from './PreviewPanel'; function PreviewPanelTestWrapper({ constructFunction, }: { constructFunction: ( previewModalState: OverlayTriggerState, overlayProps: DOMAttributes, ) => JSX.Element; }) { const previewModalState = useOverlayTriggerState({}); const { overlayProps } = useOverlayTrigger({ type: 'dialog' }, previewModalState); return constructFunction(previewModalState, overlayProps); } function mockResource(properties: Partial = {}): any { return { id: 'test-resource', name: 'Test resource', type: { code: 'folder', name: 'Folder' }, status: { code: 'live', name: 'Live' }, url: 'https://no-where.com', urls: [], childCount: 0, ...properties, }; } const ResourceComponent = () => { return
TestResource
; }; describe('PreviewPanel', () => { it('Renders a message when no item selected', async () => { const onSelect = jest.fn(); const onClose = jest.fn(); render( { return ( ); }} />, ); await waitFor(() => { expect(screen.getAllByText('Make a selection to see more info here.')).toBeTruthy(); }); }); it('Renders tablet / desktop very above 640px', async () => { const onSelect = jest.fn(); const onClose = jest.fn(); render( { return ( ); }} /> , ); await waitFor(() => { expect(screen.queryByRole('dialog')).toBeFalsy(); expect(screen.queryByText('TestResource')).toBeTruthy(); }); }); it('Renders mobile below 640px', async () => { const onSelect = jest.fn(); const onClose = jest.fn(); render( { return ( ); }} /> , ); await waitFor(() => { expect(screen.queryByRole('dialog')).toBeTruthy(); expect(screen.queryByText('TestResource')).toBeTruthy(); }); }); it('Clicking select button return source and id of resource being shown', async () => { const onSelect = jest.fn(); const onClose = jest.fn(); const resource = mockResource(); render( { return ( ); }} />, ); const user = userEvent.setup(); user.click(screen.getByRole('button')); await waitFor(() => { expect(onSelect).toHaveBeenCalledWith(resource); }); }); });