1 | import React from 'react';
|
2 | import { render, screen } from '@testing-library/react';
|
3 | import '@testing-library/jest-dom';
|
4 | import user from '@testing-library/user-event';
|
5 | import { UncontrolledCollapse } from '..';
|
6 |
|
7 | describe('UncontrolledCollapse', () => {
|
8 | let toggler;
|
9 | let togglers;
|
10 |
|
11 | beforeEach(() => {
|
12 | document.body.innerHTML = `
|
13 | <div>
|
14 | <button id="toggler">Click Me</button>
|
15 | <button class="toggler">Toggler 1</button>
|
16 | <button class="toggler">Toggler 2</button>
|
17 | </div>`;
|
18 | toggler = document.getElementById('toggler');
|
19 | togglers = document.getElementsByClassName('toggler');
|
20 |
|
21 | jest.useFakeTimers();
|
22 | });
|
23 |
|
24 | afterEach(() => {
|
25 | jest.clearAllTimers();
|
26 | document.body.innerHTML = '';
|
27 | toggler = null;
|
28 | togglers = null;
|
29 | });
|
30 |
|
31 | it('should be a Collapse', () => {
|
32 | render(
|
33 | <UncontrolledCollapse data-testid="collapse" toggler="#toggler">
|
34 | Yo!
|
35 | </UncontrolledCollapse>,
|
36 | );
|
37 |
|
38 | expect(screen.getByTestId('collapse')).toHaveClass('collapse');
|
39 | });
|
40 |
|
41 | it('should toggle isOpen when toggle is called', async () => {
|
42 | render(
|
43 | <UncontrolledCollapse data-testid="collapse" toggler="#toggler">
|
44 | Yo!
|
45 | </UncontrolledCollapse>,
|
46 | );
|
47 |
|
48 | await user.click(screen.getByText(/click me/i));
|
49 | jest.advanceTimersByTime(1000);
|
50 |
|
51 | expect(screen.getByTestId('collapse')).toHaveClass('show');
|
52 | });
|
53 |
|
54 | it('should toggle for multiple togglers', async () => {
|
55 | render(
|
56 | <UncontrolledCollapse data-testid="collapse" toggler=".toggler">
|
57 | Yo!
|
58 | </UncontrolledCollapse>,
|
59 | );
|
60 |
|
61 | expect(screen.getByTestId('collapse')).not.toHaveClass('show');
|
62 |
|
63 | await user.click(screen.getByText(/toggler 1/i));
|
64 | jest.advanceTimersByTime(1000);
|
65 | expect(screen.getByTestId('collapse')).toHaveClass('show');
|
66 |
|
67 | await user.click(screen.getByText(/toggler 2/i));
|
68 | jest.advanceTimersByTime(1000);
|
69 | expect(screen.getByTestId('collapse')).not.toHaveClass('show');
|
70 | });
|
71 | });
|