import React from 'react';
import {
act,
render,
screen,
waitFor,
waitForElementToBeRemoved,
} from '@testing-library/react';
import userEvent from '@testing-library/user-event';
import { axe } from 'jest-axe';
import { H2 } from '@leafygreen-ui/typography';
import InlineDefinition from '.';
const shardDefinition =
'Sharding is a method for horizontally scaling across multiple replica sets by breaking up large datasets (e.g. partitioning) into smaller parts. Sharding is native to MongoDB.';
const renderInlineDefinition = () => {
return render(
Shard{' '}
your cluster
,
);
};
describe('packages/inline-definition', () => {
describe('a11y', () => {
test('does not have basic accessibility issues', async () => {
const { container, getByText } = renderInlineDefinition();
const results = await axe(container);
expect(results).toHaveNoViolations();
let newResults = null as any;
act(() => void userEvent.hover(getByText('Shard')));
await act(async () => {
newResults = await axe(container);
});
expect(newResults).toHaveNoViolations();
});
});
test('renders children to the DOM', () => {
renderInlineDefinition();
expect(screen.getByText('Shard')).toBeVisible();
});
test('does not render definition to the DOM', () => {
renderInlineDefinition();
expect(screen.queryByText(shardDefinition)).not.toBeInTheDocument();
});
test('definition appears on hover', async () => {
renderInlineDefinition();
const children = screen.getByText('Shard');
userEvent.hover(children);
await waitFor(() =>
expect(screen.getByText(shardDefinition)).toBeVisible(),
);
userEvent.unhover(children);
await waitForElementToBeRemoved(screen.getByText(shardDefinition));
});
/* eslint-disable jest/no-disabled-tests */
describe.skip('Tests behave as expected', () => {
test('Requires a definition prop and children', () => {
/// @ts-expect-error
;
/// @ts-expect-error
;
Lorem Ipsum;
});
test('Allows any subset of TooltipProps', () => {
Lorem Ipsum
;
});
});
});