import * as React from 'react'; import { screen } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import { renderWithLivenessProvider, getMockedFunction } from '../../__mocks__'; import { useLivenessActor } from '../../hooks/useLivenessActor'; import { CancelButton } from '../CancelButton'; jest.mock('../../hooks/useLivenessActor'); const mockUseLivenessActor = getMockedFunction(useLivenessActor); describe('CancelButton', () => { const mockActorState: any = jest.fn(); const mockActorSend = jest.fn(); const buttonAriaLabel = 'Cancel Liveness check'; beforeEach(() => { mockUseLivenessActor.mockReturnValue([mockActorState, mockActorSend]); }); afterEach(() => { jest.clearAllMocks(); }); it('should render the component content appropriately', () => { renderWithLivenessProvider(); expect( screen.getByRole('button', { name: buttonAriaLabel }) ).toBeInTheDocument(); }); it('should render the component content appropriately on mobile', () => { renderWithLivenessProvider(); expect(screen.getByTestId('close-icon')).toBeInTheDocument(); }); it('should call the send method on cancel', () => { renderWithLivenessProvider(); userEvent.click(screen.getByRole('button', { name: buttonAriaLabel })); expect(mockActorSend).toHaveBeenCalledWith({ type: 'CANCEL', }); }); it('should render nothing if the machine state is done', () => { mockUseLivenessActor.mockReturnValueOnce([ { done: true } as any, mockActorSend, ]); renderWithLivenessProvider(); expect( screen.queryByRole('button', { name: buttonAriaLabel }) ).not.toBeInTheDocument(); }); });