-
Notifications
You must be signed in to change notification settings - Fork 35
Expand file tree
/
Copy pathBulkSelect.test.tsx
More file actions
139 lines (122 loc) · 4.42 KB
/
Copy pathBulkSelect.test.tsx
File metadata and controls
139 lines (122 loc) · 4.42 KB
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
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
import { render, screen } from '@testing-library/react';
import userEvent from '@testing-library/user-event';
import BulkSelect from './BulkSelect';
describe('BulkSelect component', () => {
test('should render', () => {
expect(render(
<BulkSelect
canSelectAll
pageCount={5}
totalCount={10}
selectedCount={2}
pageSelected={false}
pagePartiallySelected={true}
onSelect={() => null}
/>)).toMatchSnapshot();
});
test('should render with dropdownListProps', async () => {
const user = userEvent.setup();
render(
<BulkSelect
canSelectAll
pageCount={5}
totalCount={10}
selectedCount={2}
pageSelected={false}
pagePartiallySelected={true}
onSelect={() => null}
dropdownListProps={{ className: 'custom-dropdown-list' }}
/>
);
// Open the dropdown by clicking the toggle button
const toggleButton = screen.getByLabelText('Bulk select toggle');
await user.click(toggleButton);
// Now the dropdown list should be visible with the custom class
const dropdownList = document.querySelector('.custom-dropdown-list');
expect(dropdownList).toBeInTheDocument();
expect(dropdownList).toHaveClass('pf-v6-c-menu__list');
});
test('should render with menuToggleProps', () => {
render(
<BulkSelect
canSelectAll
pageCount={5}
totalCount={10}
selectedCount={2}
pageSelected={false}
pagePartiallySelected={true}
onSelect={() => null}
menuToggleProps={{ isDisabled: true, className: 'custom-menu-toggle' }}
/>
);
const toggleButton = screen.getByLabelText('Bulk select toggle');
expect(toggleButton).toBeInTheDocument();
// Confirm the split button toggle is disabled
expect(toggleButton).toBeDisabled();
// Confirm the split button toggle receives the correct PatternFly class
expect(toggleButton).toHaveClass('pf-v6-c-menu-toggle__button');
// Confirm the split button toggle wrapper receives the custom class
const toggleWrapper = toggleButton.parentElement;
expect(toggleWrapper).toBeInTheDocument();
expect(toggleWrapper).toHaveClass('custom-menu-toggle');
});
test('should render with custom i18n labels', async () => {
const user = userEvent.setup();
render(
<BulkSelect
canSelectAll
pageCount={5}
totalCount={10}
selectedCount={2}
pageSelected={false}
pagePartiallySelected={true}
onSelect={() => null}
selectNoneLabel="Aucune sélection (0)"
selectPageLabel={(pageCount) => `Sélectionner la page${pageCount ? ` (${pageCount})` : ''}`}
selectAllLabel={(totalCount) => `Tout sélectionner${totalCount ? ` (${totalCount})` : ''}`}
selectedLabel={(selectedCount) => `${selectedCount} sélectionné${selectedCount > 1 ? 's' : ''}`}
/>
);
// Check custom selected label
expect(screen.getByText('2 sélectionnés')).toBeInTheDocument();
// Open the dropdown to check option labels
const toggleButton = screen.getByLabelText('Bulk select toggle');
await user.click(toggleButton);
// Check custom dropdown labels
expect(screen.getByText('Aucune sélection (0)')).toBeInTheDocument();
expect(screen.getByText('Sélectionner la page (5)')).toBeInTheDocument();
expect(screen.getByText('Tout sélectionner (10)')).toBeInTheDocument();
});
test('should disable Select none when nothing is selected', async () => {
const user = userEvent.setup();
render(
<BulkSelect
canSelectAll
pageCount={5}
totalCount={10}
selectedCount={0}
pageSelected={false}
pagePartiallySelected={false}
onSelect={() => null}
/>
);
await user.click(screen.getByLabelText('Bulk select toggle'));
expect(screen.getByRole('menuitem', { name: 'Select none (0)' })).toBeDisabled();
});
test('should enable Select none when at least one row is selected', async () => {
const user = userEvent.setup();
render(
<BulkSelect
canSelectAll
pageCount={5}
totalCount={10}
selectedCount={1}
pageSelected={false}
pagePartiallySelected={true}
onSelect={() => null}
/>
);
await user.click(screen.getByLabelText('Bulk select toggle'));
expect(screen.getByRole('menuitem', { name: 'Select none (0)' })).not.toBeDisabled();
});
});