import { render, screen } from '@testing-library/react';
import userEvent from '@testing-library/user-event';
import { Box } from './Box';
describe('Box', () => {
it('keeps design-system style props out of the rendered HTML', () => {
// Under styled-components v6 (which forwards unknown props to the DOM),
// Box must filter its open-ended styled-system props so they never surface
// as invalid HTML attributes on the element.
render(
,
);
const el = screen.getByTestId('b');
expect(el.hasAttribute('mt')).toBe(false);
expect(el.hasAttribute('bg')).toBe(false);
expect(el.hasAttribute('flexDirection')).toBe(false);
expect(el.hasAttribute('flexdirection')).toBe(false);
expect(el.hasAttribute('alignItems')).toBe(false);
expect(el.hasAttribute('justifyContent')).toBe(false);
});
it('forwards accessibility attributes and click handlers to the element', async () => {
const onClick = jest.fn();
render(
,
);
const el = screen.getByTestId('b');
expect(el.getAttribute('id')).toBe('my-box');
expect(el.getAttribute('role')).toBe('region');
expect(el.getAttribute('aria-label')).toBe('a box');
expect(el.getAttribute('data-custom')).toBe('keep');
await userEvent.click(el);
expect(onClick).toHaveBeenCalledTimes(1);
});
it('renders as the element given by the "as" prop', () => {
render();
expect(screen.getByTestId('b').tagName).toBe('SECTION');
});
});