UNPKG

1.96 kBJavaScriptView Raw
1import React from 'react';
2import { render, screen } from '@testing-library/react';
3import user from '@testing-library/user-event';
4import '@testing-library/jest-dom';
5import { AccordionHeader, AccordionContext } from '..';
6import { testForCustomClass, testForCustomTag } from '../testUtils';
7
8describe('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});