@telus-uds/components-base 1.8.0 → 1.8.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +13 -2
- package/package.json +4 -4
- package/.storybook/main.js +0 -11
- package/.storybook/preview.js +0 -37
- package/.turbo/turbo-build.log +0 -8
- package/.turbo/turbo-lint.log +0 -3
- package/CHANGELOG.json +0 -311
- package/__fixtures__/Accessible.js +0 -34
- package/__fixtures__/Accessible.native.js +0 -34
- package/__fixtures__/Theme.jsx +0 -13
- package/__fixtures__/Viewport.jsx +0 -17
- package/__fixtures__/test-utils.js +0 -25
- package/__fixtures__/testTheme.js +0 -1830
- package/__tests__/A11yText/A11yText.test.jsx +0 -34
- package/__tests__/ActivityIndicator/ActivityIndicator.test.jsx +0 -68
- package/__tests__/ActivityIndicator/__snapshots__/ActivityIndicator.test.jsx.snap +0 -287
- package/__tests__/Box/Box.test.jsx +0 -111
- package/__tests__/Button/Button.test.jsx +0 -86
- package/__tests__/Button/ButtonBase.test.jsx +0 -82
- package/__tests__/Button/ButtonGroup.test.jsx +0 -347
- package/__tests__/Button/ButtonLink.test.jsx +0 -61
- package/__tests__/Card/Card.test.jsx +0 -63
- package/__tests__/Checkbox/Checkbox.test.jsx +0 -94
- package/__tests__/Checkbox/CheckboxGroup.test.jsx +0 -246
- package/__tests__/Divider/Divider.test.jsx +0 -91
- package/__tests__/ExpandCollapse/ExpandCollapse.test.jsx +0 -109
- package/__tests__/Feedback/Feedback.test.jsx +0 -42
- package/__tests__/FlexGrid/Col.test.jsx +0 -261
- package/__tests__/FlexGrid/FlexGrid.test.jsx +0 -136
- package/__tests__/FlexGrid/Row.test.jsx +0 -273
- package/__tests__/HorizontalScroll/HorizontalScroll.test.jsx +0 -165
- package/__tests__/Icon/Icon.test.jsx +0 -61
- package/__tests__/IconButton/IconButton.test.jsx +0 -52
- package/__tests__/InputLabel/InputLabel.test.jsx +0 -28
- package/__tests__/InputLabel/__snapshots__/InputLabel.test.jsx.snap +0 -3
- package/__tests__/InputSupports/InputSupports.test.jsx +0 -60
- package/__tests__/Link/Link.test.jsx +0 -63
- package/__tests__/Link/TextButton.test.jsx +0 -35
- package/__tests__/List/List.test.jsx +0 -60
- package/__tests__/Modal/Modal.test.jsx +0 -47
- package/__tests__/Notification/Notification.test.jsx +0 -20
- package/__tests__/Pagination/Pagination.test.jsx +0 -160
- package/__tests__/Progress/Progress.test.jsx +0 -79
- package/__tests__/Radio/Radio.test.jsx +0 -87
- package/__tests__/Radio/RadioGroup.test.jsx +0 -220
- package/__tests__/RadioCard/RadioCard.test.jsx +0 -87
- package/__tests__/RadioCard/RadioCardGroup.test.jsx +0 -246
- package/__tests__/Search/Search.test.jsx +0 -73
- package/__tests__/Select/Select.test.jsx +0 -94
- package/__tests__/SideNav/SideNav.test.jsx +0 -110
- package/__tests__/Skeleton/Skeleton.test.jsx +0 -61
- package/__tests__/Spacer/Spacer.test.jsx +0 -63
- package/__tests__/StackView/StackView.test.jsx +0 -216
- package/__tests__/StackView/StackWrap.test.jsx +0 -47
- package/__tests__/StackView/getStackedContent.test.jsx +0 -295
- package/__tests__/StepTracker/StepTracker.test.jsx +0 -94
- package/__tests__/Tabs/Tabs.test.jsx +0 -40
- package/__tests__/Tags/Tags.test.jsx +0 -327
- package/__tests__/TextInput/TextArea.test.jsx +0 -35
- package/__tests__/TextInput/TextInputBase.test.jsx +0 -125
- package/__tests__/ThemeProvider/ThemeProvider.test.jsx +0 -77
- package/__tests__/ThemeProvider/useThemeTokens.test.jsx +0 -514
- package/__tests__/ThemeProvider/utils/theme-tokens.test.js +0 -41
- package/__tests__/ToggleSwitch/ToggleSwitch.test.jsx +0 -82
- package/__tests__/ToggleSwitch/ToggleSwitchGroup.test.jsx +0 -192
- package/__tests__/Tooltip/Tooltip.test.jsx +0 -65
- package/__tests__/Tooltip/getTooltipPosition.test.js +0 -79
- package/__tests__/Typography/typography.test.jsx +0 -90
- package/__tests__/utils/children.test.jsx +0 -128
- package/__tests__/utils/containUniqueFields.test.js +0 -25
- package/__tests__/utils/input.test.js +0 -375
- package/__tests__/utils/props.test.js +0 -36
- package/__tests__/utils/semantics.test.jsx +0 -34
- package/__tests__/utils/useCopy.test.js +0 -42
- package/__tests__/utils/useResponsiveProp.test.jsx +0 -202
- package/__tests__/utils/useSpacingScale.test.jsx +0 -273
- package/__tests__/utils/useUniqueId.test.js +0 -31
- package/babel.config.js +0 -35
- package/generate-component-docs.js +0 -72
- package/jest.config.js +0 -32
- package/stories/A11yText/A11yText.stories.jsx +0 -71
- package/stories/ActivityIndicator/ActivityIndicator.stories.jsx +0 -22
- package/stories/Box/Box.stories.jsx +0 -143
- package/stories/Button/Button.stories.jsx +0 -72
- package/stories/Button/ButtonGroup.stories.jsx +0 -81
- package/stories/Button/ButtonLink.stories.jsx +0 -30
- package/stories/Card/Card.stories.jsx +0 -62
- package/stories/Checkbox/Checkbox.stories.jsx +0 -94
- package/stories/Divider/Divider.stories.jsx +0 -68
- package/stories/ExpandCollapse/ExpandCollapse.stories.jsx +0 -112
- package/stories/Feedback/Feedback.stories.jsx +0 -96
- package/stories/FlexGrid/01 FlexGrid.stories.jsx +0 -54
- package/stories/FlexGrid/02 Row.stories.jsx +0 -41
- package/stories/FlexGrid/03 Col.stories.jsx +0 -141
- package/stories/Icon/Icon.stories.jsx +0 -79
- package/stories/IconButton/IconButton.stories.jsx +0 -50
- package/stories/InputLabel/InputLabel.stories.jsx +0 -39
- package/stories/Link/ChevronLink.stories.jsx +0 -48
- package/stories/Link/Link.stories.jsx +0 -90
- package/stories/Link/TextButton.stories.jsx +0 -79
- package/stories/List/List.stories.jsx +0 -117
- package/stories/Modal/Modal.stories.jsx +0 -54
- package/stories/Notification/Notification.stories.jsx +0 -82
- package/stories/Pagination/Pagination.stories.jsx +0 -64
- package/stories/Progress/Progress.stories.jsx +0 -93
- package/stories/Radio/Radio.stories.jsx +0 -100
- package/stories/RadioCard/RadioCard.stories.jsx +0 -98
- package/stories/Search/Search.stories.jsx +0 -66
- package/stories/Select/Select.stories.jsx +0 -55
- package/stories/SideNav/SideNav.stories.jsx +0 -42
- package/stories/SideNav/SideNavItem.stories.jsx +0 -9
- package/stories/SideNav/SideNavItemsGroup.stories.jsx +0 -17
- package/stories/Skeleton/Skeleton.stories.jsx +0 -36
- package/stories/Spacer/Spacer.stories.jsx +0 -38
- package/stories/StackView/StackView.stories.jsx +0 -75
- package/stories/StackView/StackWrap.stories.jsx +0 -64
- package/stories/StepTracker/StepTracker.stories.jsx +0 -71
- package/stories/Tabs/Tabs.stories.jsx +0 -98
- package/stories/Tags/Tags.stories.jsx +0 -69
- package/stories/TextInput/TextArea.stories.jsx +0 -101
- package/stories/TextInput/TextInput.stories.jsx +0 -141
- package/stories/ToggleSwitch/ToggleSwitch.stories.jsx +0 -64
- package/stories/ToggleSwitch/ToggleSwitchGroup.stories.jsx +0 -81
- package/stories/Tooltip/Tooltip.stories.jsx +0 -81
- package/stories/TooltipButton/TooltipButton.stories.jsx +0 -11
- package/stories/Typography/Typography.stories.jsx +0 -49
- package/stories/platform-supports.jsx +0 -32
- package/stories/platform-supports.native.jsx +0 -3
- package/stories/supports.jsx +0 -236
|
@@ -1,246 +0,0 @@
|
|
|
1
|
-
import React from 'react'
|
|
2
|
-
import { render, fireEvent } from '@testing-library/react-native'
|
|
3
|
-
import { toHaveTextContent } from '@testing-library/jest-native'
|
|
4
|
-
|
|
5
|
-
import Theme from '../../__fixtures__/Theme'
|
|
6
|
-
import RadioCardGroup from '../../src/RadioCard/RadioCardGroup'
|
|
7
|
-
import Typography from '../../src/Typography'
|
|
8
|
-
|
|
9
|
-
const items = [
|
|
10
|
-
{ title: 'One', id: 'one', content: <Typography>More card 1 content</Typography> },
|
|
11
|
-
{ title: 'Two', id: 'two', content: <Typography>More card 2 content</Typography> },
|
|
12
|
-
{ title: 'Three', id: 'three', content: <Typography>More card 3 content</Typography> },
|
|
13
|
-
{ title: 'Four', id: 'four', content: <Typography>More card 4 content</Typography> }
|
|
14
|
-
]
|
|
15
|
-
const checked = { checked: true }
|
|
16
|
-
|
|
17
|
-
// expect().toHaveTextContent doesn't work on arrays, expect().toContain etc doesn't match elements
|
|
18
|
-
const containsText = (queryResult, text) =>
|
|
19
|
-
queryResult.some((testInstance) => toHaveTextContent(testInstance, text).pass)
|
|
20
|
-
|
|
21
|
-
describe('RadioCardGroup', () => {
|
|
22
|
-
// eslint-disable-next-line no-console
|
|
23
|
-
const consoleError = console.error
|
|
24
|
-
beforeEach(() => {
|
|
25
|
-
// eslint-disable-next-line no-console
|
|
26
|
-
console.error = () => {}
|
|
27
|
-
})
|
|
28
|
-
afterEach(() => {
|
|
29
|
-
// eslint-disable-next-line no-console
|
|
30
|
-
console.error = consoleError
|
|
31
|
-
})
|
|
32
|
-
|
|
33
|
-
it('Throws if has `checkedId` without `onChange`', () => {
|
|
34
|
-
expect(() =>
|
|
35
|
-
render(
|
|
36
|
-
<Theme>
|
|
37
|
-
<RadioCardGroup items={items} checkedId="one" />
|
|
38
|
-
</Theme>
|
|
39
|
-
)
|
|
40
|
-
).toThrow(/value.+without.+onChange/)
|
|
41
|
-
})
|
|
42
|
-
it("Doesn't throw if has `checkedId` without `onChange` and is read only", () => {
|
|
43
|
-
expect(() =>
|
|
44
|
-
render(
|
|
45
|
-
<Theme>
|
|
46
|
-
<RadioCardGroup items={items} checkedId="one" readOnly />
|
|
47
|
-
</Theme>
|
|
48
|
-
)
|
|
49
|
-
).not.toThrow()
|
|
50
|
-
})
|
|
51
|
-
it('Throws if has both `checkedId` and `initialCheckedId`', () => {
|
|
52
|
-
expect(() =>
|
|
53
|
-
render(
|
|
54
|
-
<Theme>
|
|
55
|
-
<RadioCardGroup
|
|
56
|
-
items={items}
|
|
57
|
-
initialCheckedId="one"
|
|
58
|
-
checkedId="one"
|
|
59
|
-
onChange={() => {}}
|
|
60
|
-
/>
|
|
61
|
-
</Theme>
|
|
62
|
-
)
|
|
63
|
-
).toThrow(/both(?=.*initialValue)(?=.*value){2}/)
|
|
64
|
-
})
|
|
65
|
-
})
|
|
66
|
-
|
|
67
|
-
describe('RadioCardGroup (uncontrolled)', () => {
|
|
68
|
-
it('Selects one and only one item', async () => {
|
|
69
|
-
const { getByText, queryAllByA11yState } = render(
|
|
70
|
-
<Theme>
|
|
71
|
-
<RadioCardGroup items={items} />
|
|
72
|
-
</Theme>
|
|
73
|
-
)
|
|
74
|
-
|
|
75
|
-
expect(queryAllByA11yState(checked)).toHaveLength(0)
|
|
76
|
-
|
|
77
|
-
const one = getByText('One')
|
|
78
|
-
await fireEvent.press(one)
|
|
79
|
-
expect(queryAllByA11yState(checked)).toHaveLength(1)
|
|
80
|
-
expect(containsText(queryAllByA11yState(checked), 'One')).toBeTruthy()
|
|
81
|
-
|
|
82
|
-
const two = getByText('Two')
|
|
83
|
-
await fireEvent.press(two)
|
|
84
|
-
expect(queryAllByA11yState(checked)).toHaveLength(1)
|
|
85
|
-
expect(containsText(queryAllByA11yState(checked), 'Two')).toBeTruthy()
|
|
86
|
-
expect(containsText(queryAllByA11yState(checked), 'One')).not.toBeTruthy()
|
|
87
|
-
})
|
|
88
|
-
|
|
89
|
-
it('Treats presses on content the same as presses on title', async () => {
|
|
90
|
-
const { getByText, queryAllByA11yState } = render(
|
|
91
|
-
<Theme>
|
|
92
|
-
<RadioCardGroup items={items} />
|
|
93
|
-
</Theme>
|
|
94
|
-
)
|
|
95
|
-
|
|
96
|
-
expect(queryAllByA11yState(checked)).toHaveLength(0)
|
|
97
|
-
|
|
98
|
-
const one = getByText('More card 1 content')
|
|
99
|
-
await fireEvent.press(one)
|
|
100
|
-
expect(queryAllByA11yState(checked)).toHaveLength(1)
|
|
101
|
-
expect(containsText(queryAllByA11yState(checked), 'One')).toBeTruthy()
|
|
102
|
-
|
|
103
|
-
const two = getByText('More card 2 content')
|
|
104
|
-
await fireEvent.press(two)
|
|
105
|
-
expect(queryAllByA11yState(checked)).toHaveLength(1)
|
|
106
|
-
expect(containsText(queryAllByA11yState(checked), 'Two')).toBeTruthy()
|
|
107
|
-
expect(containsText(queryAllByA11yState(checked), 'One')).not.toBeTruthy()
|
|
108
|
-
})
|
|
109
|
-
|
|
110
|
-
it('Does not deselect if the selected item is pressed', async () => {
|
|
111
|
-
const { getByText, queryAllByA11yState } = render(
|
|
112
|
-
<Theme>
|
|
113
|
-
<RadioCardGroup items={items} />
|
|
114
|
-
</Theme>
|
|
115
|
-
)
|
|
116
|
-
|
|
117
|
-
expect(queryAllByA11yState(checked)).toHaveLength(0)
|
|
118
|
-
|
|
119
|
-
const three = getByText('Three')
|
|
120
|
-
await fireEvent.press(three)
|
|
121
|
-
expect(queryAllByA11yState(checked)).toHaveLength(1)
|
|
122
|
-
expect(containsText(queryAllByA11yState(checked), 'Three')).toBeTruthy()
|
|
123
|
-
|
|
124
|
-
await fireEvent.press(three)
|
|
125
|
-
expect(queryAllByA11yState(checked)).toHaveLength(1)
|
|
126
|
-
expect(containsText(queryAllByA11yState(checked), 'Three')).toBeTruthy()
|
|
127
|
-
})
|
|
128
|
-
|
|
129
|
-
it('Is accessible as a radio button', async () => {
|
|
130
|
-
const { queryAllByA11yRole, queryAllByA11yState } = render(
|
|
131
|
-
<Theme>
|
|
132
|
-
<RadioCardGroup items={items} />
|
|
133
|
-
</Theme>
|
|
134
|
-
)
|
|
135
|
-
expect(queryAllByA11yRole('checkbox')).toHaveLength(0)
|
|
136
|
-
expect(queryAllByA11yRole('radiogroup').length).toBeTruthy()
|
|
137
|
-
const radios = queryAllByA11yRole('radio')
|
|
138
|
-
expect(radios).toHaveLength(4)
|
|
139
|
-
|
|
140
|
-
expect(queryAllByA11yState(checked)).toHaveLength(0)
|
|
141
|
-
await fireEvent.press(radios[0])
|
|
142
|
-
expect(queryAllByA11yState(checked)).toHaveLength(1)
|
|
143
|
-
})
|
|
144
|
-
|
|
145
|
-
it('Auto-selects initialCheckedId', async () => {
|
|
146
|
-
const { getByText, queryAllByA11yState } = render(
|
|
147
|
-
<Theme>
|
|
148
|
-
<RadioCardGroup items={items} initialCheckedId="two" />
|
|
149
|
-
</Theme>
|
|
150
|
-
)
|
|
151
|
-
expect(queryAllByA11yState(checked)).toHaveLength(1)
|
|
152
|
-
expect(containsText(queryAllByA11yState(checked), 'One')).not.toBeTruthy()
|
|
153
|
-
expect(containsText(queryAllByA11yState(checked), 'Two')).toBeTruthy()
|
|
154
|
-
|
|
155
|
-
const three = getByText('Three')
|
|
156
|
-
await fireEvent.press(three)
|
|
157
|
-
|
|
158
|
-
expect(queryAllByA11yState(checked)).toHaveLength(1)
|
|
159
|
-
expect(containsText(queryAllByA11yState(checked), 'Three')).toBeTruthy()
|
|
160
|
-
expect(containsText(queryAllByA11yState(checked), 'Two')).not.toBeTruthy()
|
|
161
|
-
expect(containsText(queryAllByA11yState(checked), 'One')).not.toBeTruthy()
|
|
162
|
-
})
|
|
163
|
-
})
|
|
164
|
-
|
|
165
|
-
describe('RadioCardGroup (controlled)', () => {
|
|
166
|
-
it('Calls onChange handler on press in controlled mode, providing pressed id', async () => {
|
|
167
|
-
const handleChange = jest.fn((arg) => arg)
|
|
168
|
-
const { getByText } = render(
|
|
169
|
-
<Theme>
|
|
170
|
-
<RadioCardGroup items={items} checkedId={null} onChange={handleChange} />
|
|
171
|
-
</Theme>
|
|
172
|
-
)
|
|
173
|
-
|
|
174
|
-
expect(handleChange).toHaveBeenCalledTimes(0)
|
|
175
|
-
|
|
176
|
-
const one = getByText('One')
|
|
177
|
-
await fireEvent(one, 'press', { nativeEvent: 'example' })
|
|
178
|
-
expect(handleChange).toHaveBeenCalledTimes(1)
|
|
179
|
-
expect(handleChange).toHaveBeenLastCalledWith('one', { nativeEvent: 'example' })
|
|
180
|
-
|
|
181
|
-
const two = getByText('Two')
|
|
182
|
-
await fireEvent(two, 'press', { nativeEvent: 'example2' })
|
|
183
|
-
expect(handleChange).toHaveBeenCalledTimes(2)
|
|
184
|
-
expect(handleChange).toHaveBeenLastCalledWith('two', { nativeEvent: 'example2' })
|
|
185
|
-
})
|
|
186
|
-
|
|
187
|
-
it("Doesn't change its own selection if `checkedId` is passed", async () => {
|
|
188
|
-
const { getByText, queryAllByA11yState } = render(
|
|
189
|
-
<Theme>
|
|
190
|
-
<RadioCardGroup items={items} checkedId="one" onChange={() => {}} />
|
|
191
|
-
</Theme>
|
|
192
|
-
)
|
|
193
|
-
|
|
194
|
-
expect(queryAllByA11yState(checked)).toHaveLength(1)
|
|
195
|
-
expect(containsText(queryAllByA11yState(checked), 'One')).toBeTruthy()
|
|
196
|
-
|
|
197
|
-
const two = getByText('Two')
|
|
198
|
-
await fireEvent.press(two)
|
|
199
|
-
expect(queryAllByA11yState(checked)).toHaveLength(1)
|
|
200
|
-
expect(containsText(queryAllByA11yState(checked), 'Two')).not.toBeTruthy()
|
|
201
|
-
expect(containsText(queryAllByA11yState(checked), 'One')).toBeTruthy()
|
|
202
|
-
})
|
|
203
|
-
})
|
|
204
|
-
|
|
205
|
-
describe('RadioCardGroup (read-only)', () => {
|
|
206
|
-
it("Doesn't call onChange handler when read-only", async () => {
|
|
207
|
-
const handleChange = jest.fn((arg) => arg)
|
|
208
|
-
const { getByText } = render(
|
|
209
|
-
<Theme>
|
|
210
|
-
<RadioCardGroup items={items} checkedId="two" onChange={handleChange} readOnly />
|
|
211
|
-
</Theme>
|
|
212
|
-
)
|
|
213
|
-
|
|
214
|
-
expect(handleChange).toHaveBeenCalledTimes(0)
|
|
215
|
-
|
|
216
|
-
const one = getByText('One')
|
|
217
|
-
await fireEvent.press(one)
|
|
218
|
-
expect(handleChange).toHaveBeenCalledTimes(0)
|
|
219
|
-
|
|
220
|
-
const two = getByText('Two')
|
|
221
|
-
await fireEvent.press(two)
|
|
222
|
-
expect(handleChange).toHaveBeenCalledTimes(0)
|
|
223
|
-
})
|
|
224
|
-
|
|
225
|
-
it("Doesn't change its selection on press", async () => {
|
|
226
|
-
const { getByText, queryAllByA11yState } = render(
|
|
227
|
-
<Theme>
|
|
228
|
-
<RadioCardGroup items={items} checkedId="one" readOnly />
|
|
229
|
-
</Theme>
|
|
230
|
-
)
|
|
231
|
-
|
|
232
|
-
expect(queryAllByA11yState(checked)).toHaveLength(1)
|
|
233
|
-
expect(containsText(queryAllByA11yState(checked), 'One')).toBeTruthy()
|
|
234
|
-
|
|
235
|
-
const one = getByText('One')
|
|
236
|
-
await fireEvent.press(one)
|
|
237
|
-
expect(queryAllByA11yState(checked)).toHaveLength(1)
|
|
238
|
-
expect(containsText(queryAllByA11yState(checked), 'One')).toBeTruthy()
|
|
239
|
-
|
|
240
|
-
const two = getByText('Two')
|
|
241
|
-
await fireEvent.press(two)
|
|
242
|
-
expect(queryAllByA11yState(checked)).toHaveLength(1)
|
|
243
|
-
expect(containsText(queryAllByA11yState(checked), 'Two')).not.toBeTruthy()
|
|
244
|
-
expect(containsText(queryAllByA11yState(checked), 'One')).toBeTruthy()
|
|
245
|
-
})
|
|
246
|
-
})
|
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
import React from 'react'
|
|
2
|
-
import { render, fireEvent } from '@testing-library/react-native'
|
|
3
|
-
|
|
4
|
-
import { Search } from '../../src'
|
|
5
|
-
import Theme from '../../__fixtures__/Theme'
|
|
6
|
-
import { fireChange } from '../../__fixtures__/test-utils'
|
|
7
|
-
|
|
8
|
-
describe('Search', () => {
|
|
9
|
-
const commonProps = {
|
|
10
|
-
accessibilityLabel: 'input',
|
|
11
|
-
copy: {
|
|
12
|
-
clearButtonAccessibilityLabel: 'clear-button',
|
|
13
|
-
submitButtonAccessibilityLabel: 'submit-button'
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
it('triggers the onSubmit callback when submitted', () => {
|
|
18
|
-
const onSubmit = jest.fn()
|
|
19
|
-
|
|
20
|
-
const { getByA11yLabel } = render(
|
|
21
|
-
<Search onSubmit={onSubmit} initialValue="initial value" {...commonProps} />,
|
|
22
|
-
{
|
|
23
|
-
wrapper: Theme
|
|
24
|
-
}
|
|
25
|
-
)
|
|
26
|
-
|
|
27
|
-
expect(onSubmit).not.toHaveBeenCalled()
|
|
28
|
-
|
|
29
|
-
fireEvent(getByA11yLabel('submit-button'), 'press', { nativeEvent: 'example' })
|
|
30
|
-
|
|
31
|
-
expect(onSubmit).toHaveBeenCalledTimes(1)
|
|
32
|
-
expect(onSubmit).toHaveBeenLastCalledWith('initial value', { nativeEvent: 'example' })
|
|
33
|
-
|
|
34
|
-
fireChange(getByA11yLabel('input'), 'new value')
|
|
35
|
-
fireEvent(getByA11yLabel('submit-button'), 'press', { nativeEvent: 'example' })
|
|
36
|
-
|
|
37
|
-
expect(onSubmit).toHaveBeenCalledTimes(2)
|
|
38
|
-
expect(onSubmit).toHaveBeenLastCalledWith('new value', { nativeEvent: 'example' })
|
|
39
|
-
})
|
|
40
|
-
|
|
41
|
-
it('shows the clear button when text is entered', () => {
|
|
42
|
-
const { getByA11yLabel } = render(<Search {...commonProps} />, {
|
|
43
|
-
wrapper: Theme
|
|
44
|
-
})
|
|
45
|
-
|
|
46
|
-
expect(() => getByA11yLabel('clear-button')).toThrow()
|
|
47
|
-
|
|
48
|
-
fireChange(getByA11yLabel('input'), 'test value')
|
|
49
|
-
|
|
50
|
-
expect(() => getByA11yLabel('clear-button')).not.toThrow()
|
|
51
|
-
})
|
|
52
|
-
|
|
53
|
-
it('removes the input value when clear button is pressed', () => {
|
|
54
|
-
const onClear = jest.fn()
|
|
55
|
-
const onChange = jest.fn()
|
|
56
|
-
|
|
57
|
-
const { getByA11yLabel } = render(
|
|
58
|
-
<Search initialValue="test value" onClear={onClear} onChange={onChange} {...commonProps} />,
|
|
59
|
-
{
|
|
60
|
-
wrapper: Theme
|
|
61
|
-
}
|
|
62
|
-
)
|
|
63
|
-
|
|
64
|
-
expect(onClear).not.toHaveBeenCalled()
|
|
65
|
-
expect(onChange).not.toHaveBeenCalled()
|
|
66
|
-
|
|
67
|
-
fireEvent(getByA11yLabel('clear-button'), 'press', { nativeEvent: 'example' })
|
|
68
|
-
|
|
69
|
-
expect(onClear).toHaveBeenCalledTimes(1)
|
|
70
|
-
expect(onChange).toHaveBeenCalledTimes(1)
|
|
71
|
-
expect(onChange).toHaveBeenLastCalledWith('', { nativeEvent: 'example' })
|
|
72
|
-
})
|
|
73
|
-
})
|
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
import React from 'react'
|
|
2
|
-
import { render, fireEvent } from '@testing-library/react-native'
|
|
3
|
-
|
|
4
|
-
import { Platform } from 'react-native'
|
|
5
|
-
import { Select } from '../../src'
|
|
6
|
-
import Theme from '../../__fixtures__/Theme'
|
|
7
|
-
|
|
8
|
-
describe('Select', () => {
|
|
9
|
-
it('renders', () => {
|
|
10
|
-
render(
|
|
11
|
-
<Select>
|
|
12
|
-
<Select.Item value="item-1">Item 1</Select.Item>
|
|
13
|
-
<Select.Item value="item-2">Item 2</Select.Item>
|
|
14
|
-
</Select>,
|
|
15
|
-
{
|
|
16
|
-
wrapper: Theme
|
|
17
|
-
}
|
|
18
|
-
)
|
|
19
|
-
})
|
|
20
|
-
|
|
21
|
-
if (Platform.OS === 'web') {
|
|
22
|
-
it('renders a placeholder', () => {
|
|
23
|
-
const { queryByText } = render(<Select placeholder="Test placeholder value" />, {
|
|
24
|
-
wrapper: Theme
|
|
25
|
-
})
|
|
26
|
-
|
|
27
|
-
expect(queryByText('Non-existing value')).toBeFalsy()
|
|
28
|
-
expect(queryByText('Test placeholder value')).not.toBeFalsy()
|
|
29
|
-
})
|
|
30
|
-
|
|
31
|
-
it('changes value when controlled', () => {
|
|
32
|
-
const onChange = jest.fn()
|
|
33
|
-
|
|
34
|
-
const { getByTestId } = render(
|
|
35
|
-
<Select value="item-2" onChange={onChange} testID="Test-Select">
|
|
36
|
-
<Select.Item value="item-1">Item 1</Select.Item>
|
|
37
|
-
<Select.Item value="item-2">Item 2</Select.Item>
|
|
38
|
-
</Select>,
|
|
39
|
-
{
|
|
40
|
-
wrapper: Theme
|
|
41
|
-
}
|
|
42
|
-
)
|
|
43
|
-
|
|
44
|
-
expect(onChange).not.toHaveBeenCalled()
|
|
45
|
-
|
|
46
|
-
fireEvent.change(getByTestId('Test-Select'), { target: { value: 'item-1' } })
|
|
47
|
-
|
|
48
|
-
expect(onChange).toHaveBeenCalledTimes(1)
|
|
49
|
-
expect(onChange).toHaveBeenLastCalledWith('item-1')
|
|
50
|
-
})
|
|
51
|
-
|
|
52
|
-
it('changes value when uncontrolled', () => {
|
|
53
|
-
const onChange = jest.fn()
|
|
54
|
-
|
|
55
|
-
const { getByTestId } = render(
|
|
56
|
-
<Select initialValue="item-2" onChange={onChange} testID="Test-Select">
|
|
57
|
-
<Select.Item value="item-1">Item 1</Select.Item>
|
|
58
|
-
<Select.Item value="item-2">Item 2</Select.Item>
|
|
59
|
-
</Select>,
|
|
60
|
-
{
|
|
61
|
-
wrapper: Theme
|
|
62
|
-
}
|
|
63
|
-
)
|
|
64
|
-
|
|
65
|
-
expect(onChange).not.toHaveBeenCalled()
|
|
66
|
-
|
|
67
|
-
const event = { target: { value: 'item-1' } }
|
|
68
|
-
fireEvent.change(getByTestId('Test-Select'), event)
|
|
69
|
-
|
|
70
|
-
expect(onChange).toHaveBeenCalledTimes(1)
|
|
71
|
-
expect(onChange).toHaveBeenLastCalledWith('item-1', event)
|
|
72
|
-
})
|
|
73
|
-
|
|
74
|
-
it("doesn't change value when readOnly", () => {
|
|
75
|
-
const onChange = jest.fn()
|
|
76
|
-
|
|
77
|
-
const { getByTestId } = render(
|
|
78
|
-
<Select value="item-2" onChange={onChange} testID="Test-Select" readOnly>
|
|
79
|
-
<Select.Item value="item-1">Item 1</Select.Item>
|
|
80
|
-
<Select.Item value="item-2">Item 2</Select.Item>
|
|
81
|
-
</Select>,
|
|
82
|
-
{
|
|
83
|
-
wrapper: Theme
|
|
84
|
-
}
|
|
85
|
-
)
|
|
86
|
-
|
|
87
|
-
expect(onChange).not.toHaveBeenCalled()
|
|
88
|
-
|
|
89
|
-
fireEvent.change(getByTestId('Test-Select'), { target: { value: 'item-1' } })
|
|
90
|
-
|
|
91
|
-
expect(onChange).not.toHaveBeenCalled()
|
|
92
|
-
})
|
|
93
|
-
}
|
|
94
|
-
})
|
|
@@ -1,110 +0,0 @@
|
|
|
1
|
-
import React from 'react'
|
|
2
|
-
import { Platform } from 'react-native'
|
|
3
|
-
import { render, fireEvent } from '@testing-library/react-native'
|
|
4
|
-
|
|
5
|
-
import { SideNav } from '../../src'
|
|
6
|
-
import Theme from '../../__fixtures__/Theme'
|
|
7
|
-
|
|
8
|
-
describe('SideNav', () => {
|
|
9
|
-
// TODO: this won't be called until cross-platform Jest tests are configured
|
|
10
|
-
// see https://github.com/telus/universal-design-system/issues/319
|
|
11
|
-
if (Platform.OS === 'web') {
|
|
12
|
-
it('renders group items inaccessible when collapsed', () => {
|
|
13
|
-
const { getByRole } = render(
|
|
14
|
-
<SideNav>
|
|
15
|
-
<SideNav.ItemsGroup label="Test group">
|
|
16
|
-
<SideNav.Item>Test item</SideNav.Item>
|
|
17
|
-
</SideNav.ItemsGroup>
|
|
18
|
-
</SideNav>,
|
|
19
|
-
{
|
|
20
|
-
wrapper: Theme
|
|
21
|
-
}
|
|
22
|
-
)
|
|
23
|
-
|
|
24
|
-
expect(getByRole('link')).toHaveProp('focusable', false)
|
|
25
|
-
})
|
|
26
|
-
|
|
27
|
-
it('makes the group items accessible when expanded', () => {
|
|
28
|
-
const { getByRole, getByText } = render(
|
|
29
|
-
<SideNav>
|
|
30
|
-
<SideNav.ItemsGroup label="Test group">
|
|
31
|
-
<SideNav.Item>Test item</SideNav.Item>
|
|
32
|
-
</SideNav.ItemsGroup>
|
|
33
|
-
</SideNav>,
|
|
34
|
-
{
|
|
35
|
-
wrapper: Theme
|
|
36
|
-
}
|
|
37
|
-
)
|
|
38
|
-
|
|
39
|
-
expect(getByRole('link')).toHaveProp('focusable', false) // groups are collapsed by default
|
|
40
|
-
|
|
41
|
-
fireEvent.press(getByText('Test group'))
|
|
42
|
-
|
|
43
|
-
expect(getByRole('link')).not.toHaveProp('focusable')
|
|
44
|
-
})
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
it('expands multiple groups when accordion = false', () => {
|
|
48
|
-
const { getAllByA11yState, getByText } = render(
|
|
49
|
-
<SideNav accordion={false}>
|
|
50
|
-
<SideNav.ItemsGroup label="Test group 1">
|
|
51
|
-
<SideNav.Item>Test item</SideNav.Item>
|
|
52
|
-
</SideNav.ItemsGroup>
|
|
53
|
-
<SideNav.ItemsGroup label="Test group 2">
|
|
54
|
-
<SideNav.Item>Test item</SideNav.Item>
|
|
55
|
-
</SideNav.ItemsGroup>
|
|
56
|
-
</SideNav>,
|
|
57
|
-
{
|
|
58
|
-
wrapper: Theme
|
|
59
|
-
}
|
|
60
|
-
)
|
|
61
|
-
|
|
62
|
-
fireEvent.press(getByText('Test group 1'))
|
|
63
|
-
fireEvent.press(getByText('Test group 2'))
|
|
64
|
-
|
|
65
|
-
expect(getAllByA11yState({ expanded: true }).length).toBe(2)
|
|
66
|
-
})
|
|
67
|
-
|
|
68
|
-
it('expands only one group when accordion = true', () => {
|
|
69
|
-
const { getAllByA11yState, getByText } = render(
|
|
70
|
-
<SideNav accordion>
|
|
71
|
-
<SideNav.ItemsGroup label="Test group 1">
|
|
72
|
-
<SideNav.Item>Test item</SideNav.Item>
|
|
73
|
-
</SideNav.ItemsGroup>
|
|
74
|
-
<SideNav.ItemsGroup label="Test group 2">
|
|
75
|
-
<SideNav.Item>Test item</SideNav.Item>
|
|
76
|
-
</SideNav.ItemsGroup>
|
|
77
|
-
</SideNav>,
|
|
78
|
-
{
|
|
79
|
-
wrapper: Theme
|
|
80
|
-
}
|
|
81
|
-
)
|
|
82
|
-
|
|
83
|
-
fireEvent.press(getByText('Test group 1'))
|
|
84
|
-
fireEvent.press(getByText('Test group 2'))
|
|
85
|
-
|
|
86
|
-
expect(getAllByA11yState({ expanded: true }).length).toBe(1)
|
|
87
|
-
})
|
|
88
|
-
|
|
89
|
-
describe('Item', () => {
|
|
90
|
-
it('triggers the onPress callback when pressed', () => {
|
|
91
|
-
const itemId = 'item-id'
|
|
92
|
-
const groupId = 'group-id'
|
|
93
|
-
const onPress = jest.fn()
|
|
94
|
-
|
|
95
|
-
const { getByText } = render(
|
|
96
|
-
<SideNav.Item onPress={onPress} itemId={itemId} groupId={groupId}>
|
|
97
|
-
Test item
|
|
98
|
-
</SideNav.Item>,
|
|
99
|
-
{
|
|
100
|
-
wrapper: Theme
|
|
101
|
-
}
|
|
102
|
-
)
|
|
103
|
-
|
|
104
|
-
fireEvent.press(getByText('Test item'))
|
|
105
|
-
|
|
106
|
-
expect(onPress).toHaveBeenCalledTimes(1)
|
|
107
|
-
expect(onPress).toHaveBeenLastCalledWith(itemId, groupId)
|
|
108
|
-
})
|
|
109
|
-
})
|
|
110
|
-
})
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
import React from 'react'
|
|
2
|
-
import { render } from '@testing-library/react-native'
|
|
3
|
-
|
|
4
|
-
import { Skeleton } from '../../src'
|
|
5
|
-
import Theme from '../../__fixtures__/Theme'
|
|
6
|
-
import testTheme from '../../__fixtures__/testTheme'
|
|
7
|
-
|
|
8
|
-
jest.mock('react-native/Libraries/Animated/NativeAnimatedHelper')
|
|
9
|
-
const { tokens } = testTheme.components.Skeleton
|
|
10
|
-
|
|
11
|
-
const setup = ({ size = 10, characters, lines, shape } = {}) =>
|
|
12
|
-
render(
|
|
13
|
-
<Theme>
|
|
14
|
-
<Skeleton
|
|
15
|
-
size={size}
|
|
16
|
-
characters={characters}
|
|
17
|
-
lines={lines}
|
|
18
|
-
shape={shape}
|
|
19
|
-
aria-label="loader"
|
|
20
|
-
/>
|
|
21
|
-
</Theme>
|
|
22
|
-
)
|
|
23
|
-
|
|
24
|
-
describe('Skeleton', () => {
|
|
25
|
-
it('should calculate line width based on baseWidth', () => {
|
|
26
|
-
const { getByTestId } = setup()
|
|
27
|
-
const { characters, baseWidth } = tokens
|
|
28
|
-
const lineWidth = characters * baseWidth
|
|
29
|
-
|
|
30
|
-
const element = getByTestId('skeleton')
|
|
31
|
-
|
|
32
|
-
expect(element).toHaveStyle({ width: lineWidth })
|
|
33
|
-
})
|
|
34
|
-
|
|
35
|
-
it('render a circle', () => {
|
|
36
|
-
const { getByTestId } = setup({ shape: 'circle' })
|
|
37
|
-
const { radius } = tokens
|
|
38
|
-
|
|
39
|
-
const element = getByTestId('skeleton')
|
|
40
|
-
|
|
41
|
-
expect(element.width).toEqual(element.height)
|
|
42
|
-
expect(element).toHaveStyle({ borderRadius: radius })
|
|
43
|
-
})
|
|
44
|
-
|
|
45
|
-
it('render a square', () => {
|
|
46
|
-
const { getByTestId } = setup({ shape: 'box' })
|
|
47
|
-
|
|
48
|
-
const element = getByTestId('skeleton')
|
|
49
|
-
|
|
50
|
-
expect(element.width).toEqual(element.height)
|
|
51
|
-
})
|
|
52
|
-
|
|
53
|
-
it('render multiple lines', () => {
|
|
54
|
-
const lines = 8
|
|
55
|
-
const { queryAllByTestId } = setup({ lines })
|
|
56
|
-
|
|
57
|
-
const elements = queryAllByTestId('skeleton')
|
|
58
|
-
|
|
59
|
-
expect(elements.length).toEqual(lines)
|
|
60
|
-
})
|
|
61
|
-
})
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
import React from 'react'
|
|
2
|
-
import { render } from '@testing-library/react-native'
|
|
3
|
-
|
|
4
|
-
import { Spacer } from '../../src'
|
|
5
|
-
import Theme from '../../__fixtures__/Theme'
|
|
6
|
-
|
|
7
|
-
const testID = 'spacer'
|
|
8
|
-
|
|
9
|
-
describe('Spacer', () => {
|
|
10
|
-
it('has smallest size from spacing scale by default', () => {
|
|
11
|
-
const expectedSize = 4 // from __fixtures__/testTheme.js
|
|
12
|
-
const { getByTestId } = render(<Spacer testID={testID} />, { wrapper: Theme })
|
|
13
|
-
expect(getByTestId(testID)).toHaveStyle({
|
|
14
|
-
height: expectedSize
|
|
15
|
-
})
|
|
16
|
-
})
|
|
17
|
-
|
|
18
|
-
it('has size from spacing scale if space prop passed', () => {
|
|
19
|
-
const expectedSize = 8 // from __fixtures__/testTheme.js
|
|
20
|
-
const { getByTestId } = render(<Spacer space={2} testID={testID} />, { wrapper: Theme })
|
|
21
|
-
expect(getByTestId(testID)).toHaveStyle({
|
|
22
|
-
height: expectedSize
|
|
23
|
-
})
|
|
24
|
-
})
|
|
25
|
-
|
|
26
|
-
it('has no size if 0 passed in', () => {
|
|
27
|
-
const expectedSize = 0
|
|
28
|
-
const { getByTestId } = render(<Spacer space={0} testID={testID} />, { wrapper: Theme })
|
|
29
|
-
expect(getByTestId(testID)).toHaveStyle({
|
|
30
|
-
height: expectedSize
|
|
31
|
-
})
|
|
32
|
-
})
|
|
33
|
-
})
|
|
34
|
-
|
|
35
|
-
describe('Spacer (row)', () => {
|
|
36
|
-
it('has smallest size from spacing scale by default', () => {
|
|
37
|
-
const expectedSize = 4 // from __fixtures__/testTheme.js
|
|
38
|
-
const { getByTestId } = render(<Spacer testID={testID} direction="row" />, { wrapper: Theme })
|
|
39
|
-
expect(getByTestId(testID)).toHaveStyle({
|
|
40
|
-
width: expectedSize
|
|
41
|
-
})
|
|
42
|
-
})
|
|
43
|
-
|
|
44
|
-
it('has size from spacing scale if space prop passed', () => {
|
|
45
|
-
const expectedSize = 8 // from __fixtures__/testTheme.js
|
|
46
|
-
const { getByTestId } = render(<Spacer space={2} testID={testID} direction="row" />, {
|
|
47
|
-
wrapper: Theme
|
|
48
|
-
})
|
|
49
|
-
expect(getByTestId(testID)).toHaveStyle({
|
|
50
|
-
width: expectedSize
|
|
51
|
-
})
|
|
52
|
-
})
|
|
53
|
-
|
|
54
|
-
it('has no size if 0 passed in', () => {
|
|
55
|
-
const expectedSize = 0
|
|
56
|
-
const { getByTestId } = render(<Spacer space={0} testID={testID} direction="row" />, {
|
|
57
|
-
wrapper: Theme
|
|
58
|
-
})
|
|
59
|
-
expect(getByTestId(testID)).toHaveStyle({
|
|
60
|
-
width: expectedSize
|
|
61
|
-
})
|
|
62
|
-
})
|
|
63
|
-
})
|