|
13 | 13 | // limitations under the License. |
14 | 14 |
|
15 | 15 | import React from 'react'; |
16 | | -import { shallow } from 'enzyme'; |
17 | | - |
| 16 | +import { render, screen, fireEvent } from '@testing-library/react'; |
| 17 | +import '@testing-library/jest-dom'; |
18 | 18 | import DetailsCard from '.'; |
19 | 19 |
|
20 | 20 | describe('DetailsCard', () => { |
21 | 21 | const header = 'Details Card Header'; |
22 | 22 |
|
23 | 23 | it('renders string details', () => { |
24 | | - const details = 'test details'; |
25 | | - expect(shallow(<DetailsCard details={details} header={header} />)).toMatchSnapshot(); |
| 24 | + render(<DetailsCard details="test details" header={header} />); |
| 25 | + expect(screen.getByText('test details')).toBeInTheDocument(); |
| 26 | + expect(screen.getByText(header)).toBeInTheDocument(); |
26 | 27 | }); |
27 | 28 |
|
28 | 29 | it('handles empty details array', () => { |
29 | | - const details = []; |
30 | | - expect(shallow(<DetailsCard details={details} header={header} />)).toMatchSnapshot(); |
| 30 | + const { container } = render(<DetailsCard details={[]} header={header} />); |
| 31 | + expect(container.querySelector('.DetailsCard--DetailsWrapper')?.textContent).toBe(''); |
31 | 32 | }); |
32 | 33 |
|
33 | 34 | it('renders list details', () => { |
34 | 35 | const details = ['foo', 'bar', 'baz']; |
35 | | - expect(shallow(<DetailsCard details={details} header={header} />)).toMatchSnapshot(); |
| 36 | + render(<DetailsCard details={details} header={header} />); |
| 37 | + details.forEach(item => { |
| 38 | + expect(screen.getByText(item)).toBeInTheDocument(); |
| 39 | + }); |
36 | 40 | }); |
37 | 41 |
|
38 | 42 | it('renders table details', () => { |
39 | 43 | const details = [{ value: 'foo' }]; |
40 | | - expect(shallow(<DetailsCard details={details} header={header} />)).toMatchSnapshot(); |
| 44 | + render(<DetailsCard details={details} header={header} />); |
| 45 | + expect(screen.getByText('foo')).toBeInTheDocument(); |
41 | 46 | }); |
42 | 47 |
|
43 | 48 | it('renders table details with column defs', () => { |
44 | 49 | const columnDefs = ['col']; |
45 | 50 | const details = [{ [columnDefs[0]]: 'foo' }]; |
46 | | - expect( |
47 | | - shallow(<DetailsCard columnDefs={columnDefs} details={details} header={header} />) |
48 | | - ).toMatchSnapshot(); |
| 51 | + render(<DetailsCard columnDefs={columnDefs} details={details} header={header} />); |
| 52 | + expect(screen.getByText('foo')).toBeInTheDocument(); |
49 | 53 | }); |
50 | 54 |
|
51 | 55 | it('renders with description', () => { |
52 | 56 | const description = 'test description'; |
53 | | - expect(shallow(<DetailsCard description={description} header={header} />)).toMatchSnapshot(); |
| 57 | + render(<DetailsCard description={description} header={header} details="..." />); |
| 58 | + expect(screen.getByText(description)).toBeInTheDocument(); |
54 | 59 | }); |
55 | 60 |
|
56 | 61 | it('renders with className', () => { |
57 | | - const className = 'test className'; |
58 | | - expect(shallow(<DetailsCard className={className} header={header} />)).toMatchSnapshot(); |
| 62 | + const className = 'test-className'; |
| 63 | + const { container } = render(<DetailsCard className={className} header={header} details="..." />); |
| 64 | + expect(container.firstChild).toHaveClass(className); |
59 | 65 | }); |
60 | 66 |
|
61 | | - it('renders as collapsible', () => { |
62 | | - expect( |
63 | | - shallow(<DetailsCard header={header} />) |
64 | | - .find('.DetailsCard--DetailsWrapper') |
65 | | - .hasClass('is-collapsed') |
66 | | - ).toBe(false); |
| 67 | + it('renders as collapsible and toggles collapsed state', () => { |
| 68 | + const { container } = render(<DetailsCard header={header} details="info" collapsible />); |
| 69 | + const collapsedWrapper = container.querySelector('.DetailsCard--DetailsWrapper'); |
| 70 | + expect(collapsedWrapper).toHaveClass('is-collapsed'); |
67 | 71 |
|
68 | | - const wrapper = shallow(<DetailsCard collapsible header={header} />); |
69 | | - expect(wrapper.find('.DetailsCard--DetailsWrapper').hasClass('is-collapsed')).toBe(true); |
70 | | - expect(wrapper).toMatchSnapshot(); |
| 72 | + const toggleBtn = container.querySelector('button'); |
| 73 | + expect(toggleBtn).toBeInTheDocument(); |
71 | 74 |
|
72 | | - wrapper.find('button').simulate('click'); |
73 | | - expect(wrapper.find('.DetailsCard--DetailsWrapper').hasClass('is-collapsed')).toBe(false); |
| 75 | + fireEvent.click(toggleBtn); |
| 76 | + expect(collapsedWrapper).not.toHaveClass('is-collapsed'); |
74 | 77 |
|
75 | | - wrapper.find('button').simulate('click'); |
76 | | - expect(wrapper.find('.DetailsCard--DetailsWrapper').hasClass('is-collapsed')).toBe(true); |
| 78 | + fireEvent.click(toggleBtn); |
| 79 | + expect(collapsedWrapper).toHaveClass('is-collapsed'); |
77 | 80 | }); |
78 | 81 | }); |
0 commit comments