-
Notifications
You must be signed in to change notification settings - Fork 14
/
AccordionGroup.test.js
99 lines (95 loc) · 4.58 KB
/
AccordionGroup.test.js
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
import React from "react";
import { render, fireEvent } from "@testing-library/react";
import DxcAccordionGroup from "./AccordionGroup";
describe("Accordion component tests", () => {
test("Uncontrolled accordion group calls correct function on click", () => {
const onActiveChange = jest.fn();
const { getByText, getAllByRole } = render(
<DxcAccordionGroup margin="large" onActiveChange={onActiveChange}>
<DxcAccordionGroup.Accordion label="Accordion1" padding="medium" margin="large">
<div>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse malesuada lacus ex, sit amet blandit
leo lobortis eget.
</div>
</DxcAccordionGroup.Accordion>
<DxcAccordionGroup.Accordion label="Accordion2" padding="medium">
<div>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse malesuada lacus ex, sit amet blandit
leo lobortis eget.
</div>
</DxcAccordionGroup.Accordion>
</DxcAccordionGroup>
);
expect(getAllByRole("button")[0].getAttribute("aria-expanded")).toBe("false");
expect(getAllByRole("button")[1].getAttribute("aria-expanded")).toBe("false");
fireEvent.click(getByText("Accordion1"));
expect(onActiveChange).toHaveBeenCalled();
expect(getAllByRole("button")[0].getAttribute("aria-expanded")).toBe("true");
expect(getAllByRole("button")[1].getAttribute("aria-expanded")).toBe("false");
});
test("Uncontrolled accordion group renders initially with an accordion expanded using defaultIndexActive", () => {
const { queryByText, getByText, getAllByRole } = render(
<DxcAccordionGroup defaultIndexActive={1}>
<DxcAccordionGroup.Accordion label="Accordion1" padding="medium">
<div>First accordion</div>
</DxcAccordionGroup.Accordion>
<DxcAccordionGroup.Accordion label="Accordion2" padding="medium">
<div>Second accordion</div>
</DxcAccordionGroup.Accordion>
</DxcAccordionGroup>
);
expect(getAllByRole("button")[0].getAttribute("aria-expanded")).toBe("false");
expect(getAllByRole("button")[1].getAttribute("aria-expanded")).toBe("true");
expect(getByText("Second accordion")).toBeTruthy();
expect(queryByText("First accordion")).toBeFalsy();
});
test("Controlled accordion with indexActive change", () => {
const onActiveChange = jest.fn();
const { queryByText, getByText, getAllByRole, rerender } = render(
<DxcAccordionGroup margin="large" indexActive={1} onActiveChange={onActiveChange}>
<DxcAccordionGroup.Accordion label="Accordion1" padding="medium" margin="large">
<div>Text1</div>
</DxcAccordionGroup.Accordion>
<DxcAccordionGroup.Accordion label="Accordion2" padding="medium">
<div>Text2</div>
</DxcAccordionGroup.Accordion>
</DxcAccordionGroup>
);
expect(queryByText("Text1")).toBeFalsy();
expect(getByText("Text2")).toBeTruthy();
fireEvent.click(getByText("Accordion1"));
fireEvent.click(getByText("Accordion2"));
expect(onActiveChange.mock.calls[0][0]).toBe(0);
expect(onActiveChange.mock.calls[1][0]).toBe(1);
expect(getAllByRole("button")[0].getAttribute("aria-expanded")).toBe("false");
expect(getAllByRole("button")[1].getAttribute("aria-expanded")).toBe("true");
rerender(
<DxcAccordionGroup margin="large" indexActive={0} onActiveChange={onActiveChange}>
<DxcAccordionGroup.Accordion label="Accordion1" padding="medium" margin="large">
<div>Text1</div>
</DxcAccordionGroup.Accordion>
<DxcAccordionGroup.Accordion label="Accordion2" padding="medium">
<div>Text2</div>
</DxcAccordionGroup.Accordion>
</DxcAccordionGroup>
);
expect(getAllByRole("button")[0].getAttribute("aria-expanded")).toBe("true");
expect(getAllByRole("button")[1].getAttribute("aria-expanded")).toBe("false");
});
test("Disabled uncontrolled accordion group", () => {
const onActiveChange = jest.fn();
const { getByText } = render(
<DxcAccordionGroup margin="large" onActiveChange={onActiveChange} disabled={true}>
<DxcAccordionGroup.Accordion label="Accordion1" padding="medium" margin="large">
<div>Text1</div>
</DxcAccordionGroup.Accordion>
<DxcAccordionGroup.Accordion label="Accordion2" padding="medium">
<div>Text2</div>
</DxcAccordionGroup.Accordion>
</DxcAccordionGroup>
);
fireEvent.click(getByText("Accordion1"));
fireEvent.click(getByText("Accordion2"));
expect(onActiveChange).toHaveBeenCalledTimes(0);
});
});