Skip to content
Snippets Groups Projects
UrgentRequest.test.tsx 1.41 KiB
Newer Older
Chris's avatar
Chris committed
import * as React from 'react';
Chris's avatar
Chris committed
import { render } from '@testing-library/react';
Chris's avatar
Chris committed
import UrgentRequest from './UrgentRequest';
import userEvent from '@testing-library/user-event';

const mockSubmit: React.MouseEventHandler<HTMLButtonElement> = jest.fn().mockImplementation((e) => e.preventDefault());
Chris's avatar
Chris committed

describe('<UrgentRequest>', () => {
  it('renders the option to make a contact request urgent', () => {
Chris's avatar
Chris committed
    const { getByRole } = render(
      <UrgentRequest
        submit={mockSubmit}
      />,
Chris's avatar
Chris committed
    );
    const urgentFieldset = getByRole('group');
    const urgentInput = getByRole('textbox');
    const urgentSubmit = getByRole('button');

    // See expected elements
    expect(document.body.contains(urgentFieldset));

    // Expected default values
    expect(urgentInput).toHaveValue('');
    expect(urgentSubmit).toBeDisabled();

    // Try typing something that doesn't change the urgent status
    userEvent.type(urgentInput, 'NOT URGENT');
    expect(urgentInput).toHaveValue('NOT URGENT');
    expect(urgentSubmit).toBeDisabled();

    // Fill in URGENT to change the urgent status
Chris's avatar
Chris committed
    userEvent.clear(urgentInput);
Chris's avatar
Chris committed
    userEvent.type(urgentInput, 'URGENT');
    // State was updated..
    expect(urgentInput).toHaveValue('URGENT');
    expect(urgentSubmit).toBeEnabled();

    // Can submit now..
    userEvent.click(urgentSubmit);
    // Triggers a message sent up the hierarchy..
    expect(mockSubmit).toBeCalled();
Chris's avatar
Chris committed
  });
});