UNPKG

@amsterdam/design-system-react

Version:

All React components from the Amsterdam Design System. Use it to compose pages in your website or application.

97 lines (96 loc) 5.25 kB
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime"; /** * @license EUPL-1.2+ * Copyright Gemeente Amsterdam */ import { render, screen } from '@testing-library/react'; import { createRef } from 'react'; import { describe, expect, it } from 'vitest'; import { Label } from './Label'; describe('Label', () => { it('renders an HTML label element', () => { const { container } = render(_jsx(Label, { htmlFor: "form-control" })); const label = container.querySelector('label:only-child'); expect(label).toBeInTheDocument(); expect(label).toBeVisible(); }); it('renders an HTML label element with for attribute', () => { const { container } = render(_jsx(Label, { htmlFor: "form-control" })); const label = container.querySelector('label[for="form-control"]:only-child'); expect(label).toBeInTheDocument(); }); it('renders a design system BEM class name', () => { const { container } = render(_jsx(Label, { htmlFor: "form-control" })); const label = container.querySelector(':only-child'); expect(label).toHaveClass('ams-label'); }); it('renders rich text content', () => { const { container } = render(_jsxs(Label, { htmlFor: "form-control", children: [_jsx("strong", { children: "Current" }), " password"] })); const label = container.querySelector(':only-child'); const richText = label?.querySelector('strong'); expect(richText).toBeInTheDocument(); }); it('can be associated with an HTML form input', () => { render(_jsxs(_Fragment, { children: [_jsx(Label, { htmlFor: "email", children: "Email" }), _jsx("input", { id: "email", type: "email" })] })); const textbox = screen.getByRole('textbox', { name: 'Email', }); expect(textbox).toBeInTheDocument(); expect(textbox).toBeVisible(); }); it('can be hidden', () => { const { container } = render(_jsx(Label, { hidden: true, htmlFor: "form-control" })); const label = container.querySelector(':only-child'); expect(label).not.toBeVisible(); }); it('renders an extra class name', () => { const { container } = render(_jsx(Label, { className: "extra", htmlFor: "form-control" })); const label = container.querySelector(':only-child'); expect(label).toHaveClass('ams-label extra'); }); it('supports ForwardRef in React', () => { const ref = createRef(); const { container } = render(_jsx(Label, { htmlFor: "form-control", ref: ref })); const div = container.querySelector(':only-child'); expect(ref.current).toBe(div); }); it('renders the provided hint text after the label', () => { const { container } = render(_jsx(Label, { hint: "hint text", htmlFor: "form-control", children: "Label" })); const label = container.querySelector('label:only-child'); expect(label).toHaveTextContent('Label (hint text)'); }); it('renders the default hint text after the label', () => { const { container } = render(_jsx(Label, { htmlFor: "form-control", optional: true, children: "Label" })); const label = container.querySelector('label:only-child'); expect(label).toHaveTextContent('Label (niet verplicht)'); }); it('renders the provided hint text after the label when `optional` is set to `false`', () => { const { container } = render(_jsx(Label, { hint: "not required", htmlFor: "form-control", optional: true, children: "Label" })); const label = container.querySelector('label:only-child'); expect(label).toHaveTextContent('Label (not required)'); }); it('renders the provided hint text after the label while `optional` is set to `false`', () => { const { container } = render(_jsx(Label, { hint: "required", htmlFor: "form-control", optional: false, children: "Label" })); const label = container.querySelector('label:only-child'); expect(label).toHaveTextContent('Label (required)'); }); it('renders a Heading component', () => { render(_jsx(Label, { isPageHeading: true, children: "Label" })); const heading = screen.getByRole('heading', { name: 'Label' }); expect(heading).toBeInTheDocument(); }); it('renders the correct class names when `inFieldSet` is true', () => { const { container } = render(_jsx(Label, { inFieldSet: true, optional: true, children: "Label" })); const label = container.querySelector('label:only-child'); const hint = label?.querySelector('.ams-hint'); expect(label).toHaveClass('ams-label--in-fieldset'); expect(hint).toHaveClass('ams-hint--in-fieldset'); }); it('passes additional props', () => { const { container } = render(_jsx(Label, { "aria-hidden": "false", "data-test": "data-test", htmlFor: "form-control", id: "id", optional: true })); const component = container.querySelector(':only-child'); expect(component).toHaveAttribute('aria-hidden', 'false'); expect(component).toHaveAttribute('id', 'id'); expect(component).toHaveAttribute('data-test', 'data-test'); }); });