aboutsummaryrefslogtreecommitdiffstats
path: root/src/components/templates/page/page.test.tsx
blob: 21c5a86b2cbf87377366c9bf6761063101848d35 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
import { describe, expect, it } from '@jest/globals';
import { render, screen as rtlScreen } from '../../../../tests/utils';
import type { BreadcrumbsItem } from '../../organisms';
import { Page } from './page';
import { PageBody } from './page-body';

describe('Page', () => {
  it('renders its children', () => {
    const body =
      'Consequatur deleniti eligendi quidem sint et nobis ut qui. Dolores modi eos. Cupiditate aliquid sunt consequatur voluptatem laudantium.';

    render(
      <Page>
        <PageBody>{body}</PageBody>
      </Page>
    );

    expect(rtlScreen.getByText(body)).toBeInTheDocument();
  });

  it('can render the breadcrumbs', () => {
    const body =
      'Consequatur deleniti eligendi quidem sint et nobis ut qui. Dolores modi eos. Cupiditate aliquid sunt consequatur voluptatem laudantium.';
    const breadcrumbs = [
      { id: 'home', name: 'Home', url: '#home' },
      { id: 'blog', name: 'Blog', url: '#blog' },
    ] satisfies BreadcrumbsItem[];

    render(
      <Page breadcrumbs={breadcrumbs}>
        <PageBody>{body}</PageBody>
      </Page>
    );

    expect(rtlScreen.getByRole('navigation')).toHaveAccessibleName(
      'Breadcrumbs'
    );
    expect(rtlScreen.getAllByRole('listitem')).toHaveLength(breadcrumbs.length);
  });

  it('can have a class modifier based on a prop', () => {
    const body =
      'Consequatur deleniti eligendi quidem sint et nobis ut qui. Dolores modi eos. Cupiditate aliquid sunt consequatur voluptatem laudantium.';

    render(<Page isBodyLastChild>{body}</Page>);

    expect(rtlScreen.getByText(body)).toHaveClass('page--body-last');
  });
});