1 | import React from 'react';
|
2 | import { render, screen } from '@testing-library/react';
|
3 | import user from '@testing-library/user-event';
|
4 | import '@testing-library/jest-dom';
|
5 | import { AccordionHeader, AccordionContext } from '..';
|
6 | import { testForCustomClass, testForCustomTag } from '../testUtils';
|
7 |
|
8 | describe('AccordionHeader', () => {
|
9 | it('should render with "accordion-header" class', () => {
|
10 | render(
|
11 | <AccordionHeader targetId="cool-accordion" data-testid="accordion-header">
|
12 | Heading
|
13 | </AccordionHeader>,
|
14 | );
|
15 |
|
16 | expect(screen.getByTestId('accordion-header')).toHaveClass(
|
17 | 'accordion-header',
|
18 | );
|
19 | expect(screen.getByText(/heading/i)).toHaveClass(
|
20 | 'accordion-button collapsed',
|
21 | );
|
22 | });
|
23 |
|
24 | it('should render additional classes', () => {
|
25 | testForCustomClass(AccordionHeader, { targetId: 'cool-accordion' });
|
26 | });
|
27 |
|
28 | it('should render custom tag', () => {
|
29 | testForCustomTag(AccordionHeader, { targetId: 'cool-accordion' });
|
30 | });
|
31 |
|
32 | it('should be open if open == targetId', () => {
|
33 | render(
|
34 | <AccordionContext.Provider value={{ open: 'open-accordion' }}>
|
35 | <AccordionHeader targetId="open-accordion">Header open</AccordionHeader>
|
36 | <AccordionHeader targetId="closed-accordion">
|
37 | Header close
|
38 | </AccordionHeader>
|
39 | </AccordionContext.Provider>,
|
40 | );
|
41 |
|
42 | expect(screen.getByText(/header open/i)).not.toHaveClass('collapsed');
|
43 | expect(screen.getByText(/header close/i)).toHaveClass('collapsed');
|
44 | });
|
45 |
|
46 | it('should toggle collapse if accordion-button is clicked', async () => {
|
47 | const toggle = jest.fn();
|
48 |
|
49 | render(
|
50 | <AccordionContext.Provider value={{ toggle }}>
|
51 | <AccordionHeader data-testid="accordion-body" targetId="cool-accordion">
|
52 | Heading
|
53 | </AccordionHeader>
|
54 | </AccordionContext.Provider>,
|
55 | );
|
56 |
|
57 | await user.click(screen.getByText(/heading/i));
|
58 | expect(toggle.mock.calls[0][0]).toBe('cool-accordion');
|
59 | });
|
60 | });
|