import { test, expect } from 'vitest';
import { render, screen, within } from '@testing-library/react';
import ErrorSummary from './ErrorSummary';
const ERROR_FRAGMENT_ID = 'did-resolve';
const ERROR_TEXT = 'Did this resolve your issue?';
test('error summary renders correctly', () => {
render(
);
const errorSummaryElement = screen.getByTestId('errorsummary');
const errorSummaryTitle = within(errorSummaryElement).getByRole('heading');
const errorSummaryList = within(errorSummaryElement).getByRole('list');
expect(errorSummaryElement).toHaveClass('ds_error-summary');
expect(errorSummaryElement).toHaveAttribute('role', 'alert');
expect(errorSummaryElement).toHaveAttribute('aria-labelledby', errorSummaryTitle.id);
expect(errorSummaryElement.tagName).toEqual('DIV');
expect(errorSummaryTitle).toHaveClass('ds_error-summary__title');
expect(errorSummaryTitle).toHaveAttribute('id');
expect(errorSummaryTitle.tagName).toEqual('H2');
expect(errorSummaryTitle.textContent).toEqual('There is a problem');
expect(errorSummaryList).toHaveClass('ds_error-summary__list');
expect(errorSummaryList.tagName).toEqual('UL');
});
test('error summary with custom title', () => {
const TITLE_TEXT = 'Foo';
render(
);
const errorSummaryElement = screen.getByTestId('errorsummary');
const errorSummaryTitle = within(errorSummaryElement).getByRole('heading');
expect(errorSummaryTitle.textContent).toEqual(TITLE_TEXT);
});
test('error summary item with link', () => {
render(
{ERROR_TEXT}
);
const errorSummaryItem = screen.getByRole('listitem');
const errorSummaryLink = within(errorSummaryItem).queryByRole('link');
expect(errorSummaryItem.tagName).toEqual('LI');
expect(errorSummaryLink).toBeInTheDocument();
expect(errorSummaryLink).toHaveAttribute('href', '#' + ERROR_FRAGMENT_ID);
expect(errorSummaryLink?.tagName).toEqual('A');
expect(errorSummaryLink?.textContent).toEqual(ERROR_TEXT);
});
test('error summary item with no link', () => {
render(
{ERROR_TEXT}
);
const errorSummaryItem = screen.getByRole('listitem');
const errorSummaryLink = within(errorSummaryItem).queryByRole('link');
expect(errorSummaryItem.tagName).toEqual('LI');
expect(errorSummaryLink).not.toBeInTheDocument();
expect(errorSummaryItem?.textContent).toEqual(ERROR_TEXT);
});
test('error summary item with custom element', () => {
render(
(
)}>
{ERROR_TEXT}
);
const errorSummaryItem = screen.getByRole('listitem');
const errorSummaryLink = within(errorSummaryItem).queryByRole('link');
expect(errorSummaryItem.tagName).toEqual('LI');
expect(errorSummaryLink).toBeInTheDocument();
expect(errorSummaryLink).toHaveAttribute('href', '#' + ERROR_FRAGMENT_ID);
expect(errorSummaryLink?.tagName).toEqual('STRONG');
expect(errorSummaryLink?.textContent).toEqual(ERROR_TEXT);
});
test('passing additional props', () => {
render(
)
const errorSummaryElement = screen.getByTestId('errorsummary');
expect(errorSummaryElement?.dataset.test).toEqual('foo');
});
test('passing additional CSS classes', () => {
render(
)
const errorSummaryElement = screen.getByTestId('errorsummary');
expect(errorSummaryElement).toHaveClass('foo', 'ds_error-summary');
});