import { h } from 'preact';
import { render } from '@testing-library/preact';
import { axe } from 'jest-axe';
import '@testing-library/jest-dom';
import { AccessibilitySuggestions } from '../AccessibilitySuggestions';
describe('', () => {
it('should have no a11y violations', async () => {
const { container } = render(
,
);
const results = await axe(container);
expect(results).toHaveNoViolations();
});
it('should display a list of maximum 3 suggestions', () => {
const lintErrors = [1, 2, 3, 4].map((item) => ({
errorDetail: '/detailUrl',
ruleNames: ['no-empty-alt-text'],
errorContext: `Suggestion ${item}`,
}));
const { getAllByRole, getByText, queryByText } = render(
,
);
const listItems = getAllByRole('listitem');
expect(listItems).toHaveLength(3);
expect(getByText('Suggestion 1')).toBeInTheDocument();
expect(getByText('Suggestion 2')).toBeInTheDocument();
expect(getByText('Suggestion 3')).toBeInTheDocument();
expect(queryByText('Suggestion 4')).not.toBeInTheDocument();
const detailLinks = getAllByRole('link', {
name: 'Learn more about accessible images',
});
expect(detailLinks).toHaveLength(3);
});
it('should only show image errors if there are 3 or more', () => {
const imageErrors = [
{
errorDetail: '/detailUrl',
ruleNames: ['no-empty-alt-text'],
errorContext: 'No empty alt text 1',
},
{
errorDetail: '/detailUrl',
ruleNames: ['no-default-alt-text'],
errorContext: 'No default alt text 1',
},
{
errorDetail: '/detailUrl',
ruleNames: ['no-empty-alt-text'],
errorContext: 'No empty alt text 2',
},
];
const otherErrors = [
{
errorDetail: '/detailUrl',
ruleNames: ['other'],
errorContext: 'Other 1',
},
{
errorDetail: '/detailUrl',
ruleNames: ['other'],
errorContext: 'Other 2',
},
];
const { getAllByRole, getByText, queryByText } = render(
,
);
const listItems = getAllByRole('listitem');
expect(listItems).toHaveLength(3);
imageErrors.forEach((imageError) => {
expect(getByText(imageError.errorContext)).toBeInTheDocument();
});
const imageDetailLinks = getAllByRole('link', {
name: 'Learn more about accessible images',
});
expect(imageDetailLinks).toHaveLength(3);
otherErrors.forEach((otherError) => {
expect(queryByText(otherError.errorContext)).not.toBeInTheDocument();
});
});
it('should show other errors if there are fewer than 3 image errors', () => {
const imageErrors = [
{
errorDetail: '/detailUrl',
ruleNames: ['no-empty-alt-text'],
errorContext: 'No empty alt text 1',
},
{
errorDetail: '/detailUrl',
ruleNames: ['no-default-alt-text'],
errorContext: 'No default alt text 1',
},
];
const otherErrors = [
{
errorDetail: '/detailUrl',
ruleNames: ['other'],
errorContext: 'Other 1',
},
{
errorDetail: '/detailUrl',
ruleNames: ['other'],
errorContext: 'Other 2',
},
];
const { getAllByRole, getByText, queryByText } = render(
,
);
const listItems = getAllByRole('listitem');
expect(listItems).toHaveLength(3);
imageErrors.forEach((imageError) => {
expect(getByText(imageError.errorContext)).toBeInTheDocument();
});
expect(
getAllByRole('link', {
name: 'Learn more about accessible images',
}),
).toHaveLength(2);
expect(getByText('Other 1')).toBeInTheDocument();
expect(queryByText('Other 2')).not.toBeInTheDocument();
expect(
getAllByRole('link', {
name: 'Learn more about accessible headings',
}),
).toHaveLength(1);
});
});