@telus-uds/components-base 1.14.3 → 1.15.0
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 +15 -2
- package/__tests17__/A11yText/A11yText.test.jsx +34 -0
- package/__tests17__/ActivityIndicator/ActivityIndicator.test.jsx +68 -0
- package/__tests17__/ActivityIndicator/__snapshots__/ActivityIndicator.test.jsx.snap +299 -0
- package/__tests17__/Box/Box.test.jsx +111 -0
- package/__tests17__/Button/Button.test.jsx +86 -0
- package/__tests17__/Button/ButtonBase.test.jsx +82 -0
- package/__tests17__/Button/ButtonGroup.test.jsx +347 -0
- package/__tests17__/Button/ButtonLink.test.jsx +61 -0
- package/__tests17__/Card/Card.test.jsx +63 -0
- package/__tests17__/Carousel/Carousel.test.jsx +128 -0
- package/__tests17__/Carousel/CarouselTabs.test.jsx +142 -0
- package/__tests17__/Checkbox/Checkbox.test.jsx +94 -0
- package/__tests17__/Checkbox/CheckboxGroup.test.jsx +246 -0
- package/__tests17__/Divider/Divider.test.jsx +91 -0
- package/__tests17__/ExpandCollapse/ExpandCollapse.test.jsx +109 -0
- package/__tests17__/Feedback/Feedback.test.jsx +42 -0
- package/__tests17__/FlexGrid/Col.test.jsx +261 -0
- package/__tests17__/FlexGrid/FlexGrid.test.jsx +136 -0
- package/__tests17__/FlexGrid/Row.test.jsx +273 -0
- package/__tests17__/HorizontalScroll/HorizontalScroll.test.jsx +165 -0
- package/__tests17__/Icon/Icon.test.jsx +61 -0
- package/__tests17__/IconButton/IconButton.test.jsx +52 -0
- package/__tests17__/InputLabel/InputLabel.test.jsx +28 -0
- package/__tests17__/InputLabel/__snapshots__/InputLabel.test.jsx.snap +3 -0
- package/__tests17__/InputSupports/InputSupports.test.jsx +60 -0
- package/__tests17__/Link/Link.test.jsx +63 -0
- package/__tests17__/Link/TextButton.test.jsx +35 -0
- package/__tests17__/List/List.test.jsx +82 -0
- package/__tests17__/Modal/Modal.test.jsx +47 -0
- package/__tests17__/Notification/Notification.test.jsx +20 -0
- package/__tests17__/Pagination/Pagination.test.jsx +160 -0
- package/__tests17__/Progress/Progress.test.jsx +79 -0
- package/__tests17__/Radio/Radio.test.jsx +87 -0
- package/__tests17__/Radio/RadioGroup.test.jsx +220 -0
- package/__tests17__/RadioCard/RadioCard.test.jsx +87 -0
- package/__tests17__/RadioCard/RadioCardGroup.test.jsx +246 -0
- package/__tests17__/Search/Search.test.jsx +87 -0
- package/__tests17__/Select/Select.test.jsx +94 -0
- package/__tests17__/SideNav/SideNav.test.jsx +110 -0
- package/__tests17__/Skeleton/Skeleton.test.jsx +61 -0
- package/__tests17__/SkipLink/SkipLink.test.jsx +61 -0
- package/__tests17__/Spacer/Spacer.test.jsx +63 -0
- package/__tests17__/StackView/StackView.test.jsx +211 -0
- package/__tests17__/StackView/StackWrap.test.jsx +47 -0
- package/__tests17__/StackView/getStackedContent.test.jsx +295 -0
- package/__tests17__/StepTracker/StepTracker.test.jsx +108 -0
- package/__tests17__/Tabs/Tabs.test.jsx +49 -0
- package/__tests17__/Tags/Tags.test.jsx +327 -0
- package/__tests17__/TextInput/TextArea.test.jsx +35 -0
- package/__tests17__/TextInput/TextInputBase.test.jsx +125 -0
- package/__tests17__/ThemeProvider/ThemeProvider.test.jsx +80 -0
- package/__tests17__/ThemeProvider/useThemeTokens.test.jsx +514 -0
- package/__tests17__/ThemeProvider/utils/theme-tokens.test.js +41 -0
- package/__tests17__/ToggleSwitch/ToggleSwitch.test.jsx +82 -0
- package/__tests17__/ToggleSwitch/ToggleSwitchGroup.test.jsx +192 -0
- package/__tests17__/Tooltip/Tooltip.test.jsx +65 -0
- package/__tests17__/Tooltip/getTooltipPosition.test.js +79 -0
- package/__tests17__/Typography/typography.test.jsx +90 -0
- package/__tests17__/utils/children.test.jsx +128 -0
- package/__tests17__/utils/containUniqueFields.test.js +25 -0
- package/__tests17__/utils/input.test.js +375 -0
- package/__tests17__/utils/props.test.js +36 -0
- package/__tests17__/utils/semantics.test.jsx +34 -0
- package/__tests17__/utils/useCopy.test.js +42 -0
- package/__tests17__/utils/useResponsiveProp.test.jsx +202 -0
- package/__tests17__/utils/useSpacingScale.test.jsx +273 -0
- package/__tests17__/utils/useUniqueId.test.js +31 -0
- package/component-docs.json +85 -438
- package/lib/A11yInfoProvider/index.js +14 -5
- package/lib/Button/ButtonGroup.js +3 -2
- package/lib/Checkbox/Checkbox.js +9 -6
- package/lib/ExpandCollapse/Control.js +6 -5
- package/lib/ExpandCollapse/Panel.js +5 -4
- package/lib/List/ListItem.js +10 -236
- package/lib/List/ListItemBase.js +162 -0
- package/lib/List/ListItemContent.js +85 -0
- package/lib/List/ListItemMark.js +158 -0
- package/lib/List/PressableListItemBase.js +147 -0
- package/lib/Notification/Notification.js +2 -1
- package/lib/Pagination/Pagination.js +4 -3
- package/lib/Radio/Radio.js +9 -6
- package/lib/RadioCard/RadioCard.js +9 -6
- package/lib/Tabs/Tabs.js +12 -3
- package/lib/Tags/Tags.js +3 -3
- package/lib/TextInput/TextInput.js +5 -4
- package/lib/ViewportProvider/useViewportListener.js +11 -5
- package/lib/utils/hasOwnProperty.js +18 -0
- package/lib/utils/props/a11yProps.js +212 -45
- package/lib/utils/props/getPropSelector.js +47 -5
- package/lib/utils/useResponsiveProp.js +5 -3
- package/lib/utils/withLinkRouter.js +3 -5
- package/lib-module/A11yInfoProvider/index.js +14 -4
- package/lib-module/Button/ButtonGroup.js +3 -2
- package/lib-module/Checkbox/Checkbox.js +9 -6
- package/lib-module/ExpandCollapse/Control.js +6 -5
- package/lib-module/ExpandCollapse/Panel.js +5 -4
- package/lib-module/List/ListItem.js +13 -235
- package/lib-module/List/ListItemBase.js +139 -0
- package/lib-module/List/ListItemContent.js +66 -0
- package/lib-module/List/ListItemMark.js +143 -0
- package/lib-module/List/PressableListItemBase.js +117 -0
- package/lib-module/Notification/Notification.js +2 -1
- package/lib-module/Pagination/Pagination.js +5 -3
- package/lib-module/Radio/Radio.js +9 -6
- package/lib-module/RadioCard/RadioCard.js +9 -6
- package/lib-module/Tabs/Tabs.js +13 -4
- package/lib-module/Tags/Tags.js +3 -3
- package/lib-module/TextInput/TextInput.js +5 -4
- package/lib-module/ViewportProvider/useViewportListener.js +10 -4
- package/lib-module/utils/hasOwnProperty.js +11 -0
- package/lib-module/utils/props/a11yProps.js +210 -45
- package/lib-module/utils/props/getPropSelector.js +44 -5
- package/lib-module/utils/useResponsiveProp.js +3 -4
- package/lib-module/utils/withLinkRouter.js +3 -5
- package/package.json +11 -16
- package/src/A11yInfoProvider/index.jsx +20 -4
- package/src/Button/ButtonGroup.jsx +4 -2
- package/src/Checkbox/Checkbox.jsx +7 -3
- package/src/ExpandCollapse/Control.jsx +8 -5
- package/src/ExpandCollapse/Panel.jsx +7 -5
- package/src/List/ListItem.jsx +12 -191
- package/src/List/ListItemBase.jsx +118 -0
- package/src/List/ListItemContent.jsx +52 -0
- package/src/List/ListItemMark.jsx +99 -0
- package/src/List/PressableListItemBase.jsx +102 -0
- package/src/Notification/Notification.jsx +1 -1
- package/src/Pagination/Pagination.jsx +6 -1
- package/src/Radio/Radio.jsx +7 -3
- package/src/RadioCard/RadioCard.jsx +7 -3
- package/src/Tabs/Tabs.jsx +19 -2
- package/src/Tags/Tags.jsx +3 -3
- package/src/TextInput/TextInput.jsx +4 -4
- package/src/ViewportProvider/useViewportListener.js +10 -5
- package/src/utils/hasOwnProperty.js +11 -0
- package/src/utils/props/a11yProps.js +168 -55
- package/src/utils/props/getPropSelector.js +45 -4
- package/src/utils/useResponsiveProp.js +3 -3
- package/src/utils/withLinkRouter.jsx +1 -3
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import React from 'react'
|
|
2
|
+
import { render } from '@testing-library/react-native'
|
|
3
|
+
import { Platform, Text } from 'react-native'
|
|
4
|
+
import testTheme from '../../__fixtures__/testTheme'
|
|
5
|
+
|
|
6
|
+
import Theme from '../../__fixtures__/Theme'
|
|
7
|
+
import ButtonBase from '../../src/Button/ButtonBase'
|
|
8
|
+
|
|
9
|
+
beforeEach(() => jest.clearAllMocks())
|
|
10
|
+
|
|
11
|
+
describe('ButtonBase with render function child', () => {
|
|
12
|
+
it('receives tokens in render function child', () => {
|
|
13
|
+
const { tokens } = testTheme.components.Button
|
|
14
|
+
const arbitraryWeight = '300'
|
|
15
|
+
const { getByText } = render(
|
|
16
|
+
<Theme>
|
|
17
|
+
<ButtonBase onPress={() => {}} tokens={{ ...tokens, fontWeight: arbitraryWeight }}>
|
|
18
|
+
{({ textStyles }) => <Text style={textStyles}>Function child</Text>}
|
|
19
|
+
</ButtonBase>
|
|
20
|
+
</Theme>
|
|
21
|
+
)
|
|
22
|
+
|
|
23
|
+
// Check we're not getting false positive pass on undefined values
|
|
24
|
+
expect(tokens.color).toBeTruthy()
|
|
25
|
+
expect(tokens.fontSize).toBeTruthy()
|
|
26
|
+
|
|
27
|
+
expect(getByText('Function child')).toHaveStyle({
|
|
28
|
+
color: tokens.color,
|
|
29
|
+
fontSize: tokens.fontSize,
|
|
30
|
+
fontWeight: arbitraryWeight
|
|
31
|
+
})
|
|
32
|
+
})
|
|
33
|
+
|
|
34
|
+
it('receives button state in render function', () => {
|
|
35
|
+
const { getByText } = render(
|
|
36
|
+
<Theme>
|
|
37
|
+
<ButtonBase onPress={() => {}} selected>
|
|
38
|
+
{({ selected, inactive }) => (
|
|
39
|
+
<>
|
|
40
|
+
<Text>{`A: Selected: ${selected}`}</Text>
|
|
41
|
+
<Text>{`A: Inactive: ${inactive}`}</Text>
|
|
42
|
+
</>
|
|
43
|
+
)}
|
|
44
|
+
</ButtonBase>
|
|
45
|
+
<ButtonBase onPress={() => {}} inactive>
|
|
46
|
+
{({ selected, inactive }) => (
|
|
47
|
+
<>
|
|
48
|
+
<Text>{`B: Selected: ${selected}`}</Text>
|
|
49
|
+
<Text>{`B: Inactive: ${inactive}`}</Text>
|
|
50
|
+
</>
|
|
51
|
+
)}
|
|
52
|
+
</ButtonBase>
|
|
53
|
+
<ButtonBase onPress={() => {}}>
|
|
54
|
+
{({ pressed, hovered, focused }) => (
|
|
55
|
+
<>
|
|
56
|
+
<Text>{`C: Pressed: ${pressed}`}</Text>
|
|
57
|
+
<Text>{`C: Hovered: ${hovered}`}</Text>
|
|
58
|
+
<Text>{`C: Focused: ${focused}`}</Text>
|
|
59
|
+
</>
|
|
60
|
+
)}
|
|
61
|
+
</ButtonBase>
|
|
62
|
+
</Theme>
|
|
63
|
+
)
|
|
64
|
+
|
|
65
|
+
expect(getByText(/^A: Selected:/)).toHaveTextContent(/true$/)
|
|
66
|
+
expect(getByText(/^A: Inactive:/)).toHaveTextContent(/false$/)
|
|
67
|
+
|
|
68
|
+
expect(getByText(/^B: Selected:/)).toHaveTextContent(/false$/)
|
|
69
|
+
expect(getByText(/^B: Inactive:/)).toHaveTextContent(/true$/)
|
|
70
|
+
|
|
71
|
+
// React Native Testing Library doesn't seem to support Pressable state changes.
|
|
72
|
+
// Best we can do is confirm we're getting the default false and not undefined.
|
|
73
|
+
expect(getByText(/^C: Pressed:/)).toHaveTextContent(/false$/)
|
|
74
|
+
|
|
75
|
+
// TODO: this won't be called until cross-platform Jest tests are configured
|
|
76
|
+
// see https://github.com/telus/universal-design-system/issues/319
|
|
77
|
+
if (Platform.OS === 'web') {
|
|
78
|
+
expect(getByText(/^C: Hovered:/)).toHaveTextContent(/false$/)
|
|
79
|
+
expect(getByText(/^C: Focused:/)).toHaveTextContent(/false$/)
|
|
80
|
+
}
|
|
81
|
+
})
|
|
82
|
+
})
|
|
@@ -0,0 +1,347 @@
|
|
|
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 ButtonGroup from '../../src/Button/ButtonGroup'
|
|
7
|
+
|
|
8
|
+
const items = [
|
|
9
|
+
{ label: 'One', id: 'one', accessibilityLabel: 'Option one' },
|
|
10
|
+
{ label: 'Two', id: 'two', accessibilityLabel: 'Option two' },
|
|
11
|
+
{ label: 'Three', id: 'three', accessibilityLabel: 'Option three' },
|
|
12
|
+
{ label: 'Four', id: 'four', accessibilityLabel: 'Option four' }
|
|
13
|
+
]
|
|
14
|
+
const checked = { checked: true }
|
|
15
|
+
|
|
16
|
+
// expect().toHaveTextContent doesn't work on arrays, expect().toContain etc doesn't match elements
|
|
17
|
+
const containsText = (queryResult, text) =>
|
|
18
|
+
queryResult.some((testInstance) => toHaveTextContent(testInstance, text).pass)
|
|
19
|
+
|
|
20
|
+
describe('ButtonGroup', () => {
|
|
21
|
+
// eslint-disable-next-line no-console
|
|
22
|
+
const consoleError = console.error
|
|
23
|
+
beforeEach(() => {
|
|
24
|
+
// eslint-disable-next-line no-console
|
|
25
|
+
console.error = () => {}
|
|
26
|
+
})
|
|
27
|
+
afterEach(() => {
|
|
28
|
+
// eslint-disable-next-line no-console
|
|
29
|
+
console.error = consoleError
|
|
30
|
+
})
|
|
31
|
+
|
|
32
|
+
it('Throws if has `values` without `onChange`', () => {
|
|
33
|
+
expect(() =>
|
|
34
|
+
render(
|
|
35
|
+
<Theme>
|
|
36
|
+
<ButtonGroup items={items} values={['one']} />
|
|
37
|
+
</Theme>
|
|
38
|
+
)
|
|
39
|
+
).toThrow(/values.+without.+onChange/)
|
|
40
|
+
})
|
|
41
|
+
it("Doesn't throw if has `values` without `onChange` and is read only", () => {
|
|
42
|
+
expect(() =>
|
|
43
|
+
render(
|
|
44
|
+
<Theme>
|
|
45
|
+
<ButtonGroup items={items} values={['one']} readOnly />
|
|
46
|
+
</Theme>
|
|
47
|
+
)
|
|
48
|
+
).not.toThrow()
|
|
49
|
+
})
|
|
50
|
+
it('Throws if has both `values` and `initialValues`', () => {
|
|
51
|
+
expect(() =>
|
|
52
|
+
render(
|
|
53
|
+
<Theme>
|
|
54
|
+
<ButtonGroup items={items} values={['one']} initialValues={['one']} onChange={() => {}} />
|
|
55
|
+
</Theme>
|
|
56
|
+
)
|
|
57
|
+
).toThrow(/both(?=.*initialValues)(?=.*values){2}/)
|
|
58
|
+
})
|
|
59
|
+
})
|
|
60
|
+
|
|
61
|
+
describe('ButtonGroup (uncontrolled)', () => {
|
|
62
|
+
it('Selects one and only one item by default', async () => {
|
|
63
|
+
const { getByText, queryAllByA11yState } = render(
|
|
64
|
+
<Theme>
|
|
65
|
+
<ButtonGroup items={items} />
|
|
66
|
+
</Theme>
|
|
67
|
+
)
|
|
68
|
+
|
|
69
|
+
expect(queryAllByA11yState(checked)).toHaveLength(0)
|
|
70
|
+
|
|
71
|
+
const one = getByText('One')
|
|
72
|
+
await fireEvent.press(one)
|
|
73
|
+
expect(queryAllByA11yState(checked)).toHaveLength(1)
|
|
74
|
+
expect(containsText(queryAllByA11yState(checked), 'One')).toBeTruthy()
|
|
75
|
+
|
|
76
|
+
const two = getByText('Two')
|
|
77
|
+
await fireEvent.press(two)
|
|
78
|
+
expect(queryAllByA11yState(checked)).toHaveLength(1)
|
|
79
|
+
expect(containsText(queryAllByA11yState(checked), 'Two')).toBeTruthy()
|
|
80
|
+
expect(containsText(queryAllByA11yState(checked), 'One')).not.toBeTruthy()
|
|
81
|
+
})
|
|
82
|
+
|
|
83
|
+
it('Deselects if the selected item is pressed', async () => {
|
|
84
|
+
const { getByText, queryAllByA11yState } = render(
|
|
85
|
+
<Theme>
|
|
86
|
+
<ButtonGroup items={items} />
|
|
87
|
+
</Theme>
|
|
88
|
+
)
|
|
89
|
+
|
|
90
|
+
expect(queryAllByA11yState(checked)).toHaveLength(0)
|
|
91
|
+
|
|
92
|
+
const three = getByText('Three')
|
|
93
|
+
await fireEvent.press(three)
|
|
94
|
+
expect(queryAllByA11yState(checked)).toHaveLength(1)
|
|
95
|
+
expect(containsText(queryAllByA11yState(checked), 'Three')).toBeTruthy()
|
|
96
|
+
|
|
97
|
+
await fireEvent.press(three)
|
|
98
|
+
expect(queryAllByA11yState(checked)).toHaveLength(0)
|
|
99
|
+
expect(containsText(queryAllByA11yState(checked), 'Three')).not.toBeTruthy()
|
|
100
|
+
})
|
|
101
|
+
|
|
102
|
+
it('Is accessible as a radio button by default', async () => {
|
|
103
|
+
const { queryAllByA11yRole, queryAllByA11yState } = render(
|
|
104
|
+
<Theme>
|
|
105
|
+
<ButtonGroup items={items} />
|
|
106
|
+
</Theme>
|
|
107
|
+
)
|
|
108
|
+
expect(queryAllByA11yRole('checkbox')).toHaveLength(0)
|
|
109
|
+
expect(queryAllByA11yRole('radiogroup')).toHaveLength(1)
|
|
110
|
+
const radios = queryAllByA11yRole('radio')
|
|
111
|
+
expect(radios).toHaveLength(4)
|
|
112
|
+
|
|
113
|
+
expect(queryAllByA11yState(checked)).toHaveLength(0)
|
|
114
|
+
await fireEvent.press(radios[0])
|
|
115
|
+
expect(queryAllByA11yState(checked)).toHaveLength(1)
|
|
116
|
+
})
|
|
117
|
+
|
|
118
|
+
it('Selects <= two items when maxValues === 2', async () => {
|
|
119
|
+
const { getByText, queryAllByA11yState } = render(
|
|
120
|
+
<Theme>
|
|
121
|
+
<ButtonGroup items={items} maxValues={2} />
|
|
122
|
+
</Theme>
|
|
123
|
+
)
|
|
124
|
+
|
|
125
|
+
expect(queryAllByA11yState(checked)).toHaveLength(0)
|
|
126
|
+
|
|
127
|
+
const one = getByText('One')
|
|
128
|
+
await fireEvent.press(one)
|
|
129
|
+
expect(queryAllByA11yState(checked)).toHaveLength(1)
|
|
130
|
+
expect(containsText(queryAllByA11yState(checked), 'One')).toBeTruthy()
|
|
131
|
+
|
|
132
|
+
const two = getByText('Two')
|
|
133
|
+
await fireEvent.press(two)
|
|
134
|
+
expect(queryAllByA11yState(checked)).toHaveLength(2)
|
|
135
|
+
expect(containsText(queryAllByA11yState(checked), 'Two')).toBeTruthy()
|
|
136
|
+
expect(containsText(queryAllByA11yState(checked), 'One')).toBeTruthy()
|
|
137
|
+
|
|
138
|
+
const three = getByText('Three')
|
|
139
|
+
await fireEvent.press(three)
|
|
140
|
+
expect(queryAllByA11yState(checked)).toHaveLength(2)
|
|
141
|
+
expect(containsText(queryAllByA11yState(checked), 'Three')).toBeTruthy()
|
|
142
|
+
expect(containsText(queryAllByA11yState(checked), 'Two')).toBeTruthy()
|
|
143
|
+
expect(containsText(queryAllByA11yState(checked), 'One')).not.toBeTruthy()
|
|
144
|
+
|
|
145
|
+
const four = getByText('Four')
|
|
146
|
+
await fireEvent.press(four)
|
|
147
|
+
expect(queryAllByA11yState(checked)).toHaveLength(2)
|
|
148
|
+
expect(containsText(queryAllByA11yState(checked), 'Four')).toBeTruthy()
|
|
149
|
+
expect(containsText(queryAllByA11yState(checked), 'Three')).toBeTruthy()
|
|
150
|
+
expect(containsText(queryAllByA11yState(checked), 'Two')).not.toBeTruthy()
|
|
151
|
+
expect(containsText(queryAllByA11yState(checked), 'One')).not.toBeTruthy()
|
|
152
|
+
})
|
|
153
|
+
|
|
154
|
+
it('Is accessible as checkboxes button when maxValues > 1', async () => {
|
|
155
|
+
const { queryAllByA11yRole, queryAllByA11yState } = render(
|
|
156
|
+
<Theme>
|
|
157
|
+
<ButtonGroup items={items} maxValues={2} />
|
|
158
|
+
</Theme>
|
|
159
|
+
)
|
|
160
|
+
|
|
161
|
+
expect(queryAllByA11yRole('radiogroup')).toHaveLength(0)
|
|
162
|
+
expect(queryAllByA11yRole('radio')).toHaveLength(0)
|
|
163
|
+
|
|
164
|
+
const checks = queryAllByA11yRole('checkbox')
|
|
165
|
+
expect(checks).toHaveLength(4)
|
|
166
|
+
|
|
167
|
+
expect(queryAllByA11yState(checked)).toHaveLength(0)
|
|
168
|
+
await fireEvent.press(checks[0])
|
|
169
|
+
expect(queryAllByA11yState(checked)).toHaveLength(1)
|
|
170
|
+
})
|
|
171
|
+
|
|
172
|
+
it('Selects unlimited items when maxValues is turned off', async () => {
|
|
173
|
+
const { getByText, queryAllByA11yState } = render(
|
|
174
|
+
<Theme>
|
|
175
|
+
<ButtonGroup items={items} maxValues={null} />
|
|
176
|
+
</Theme>
|
|
177
|
+
)
|
|
178
|
+
|
|
179
|
+
expect(queryAllByA11yState(checked)).toHaveLength(0)
|
|
180
|
+
|
|
181
|
+
const one = getByText('One')
|
|
182
|
+
await fireEvent.press(one)
|
|
183
|
+
expect(queryAllByA11yState(checked)).toHaveLength(1)
|
|
184
|
+
expect(containsText(queryAllByA11yState(checked), 'One')).toBeTruthy()
|
|
185
|
+
|
|
186
|
+
const two = getByText('Two')
|
|
187
|
+
await fireEvent.press(two)
|
|
188
|
+
expect(queryAllByA11yState(checked)).toHaveLength(2)
|
|
189
|
+
expect(containsText(queryAllByA11yState(checked), 'Two')).toBeTruthy()
|
|
190
|
+
expect(containsText(queryAllByA11yState(checked), 'One')).toBeTruthy()
|
|
191
|
+
|
|
192
|
+
const three = getByText('Three')
|
|
193
|
+
await fireEvent.press(three)
|
|
194
|
+
expect(queryAllByA11yState(checked)).toHaveLength(3)
|
|
195
|
+
expect(containsText(queryAllByA11yState(checked), 'Three')).toBeTruthy()
|
|
196
|
+
expect(containsText(queryAllByA11yState(checked), 'Two')).toBeTruthy()
|
|
197
|
+
expect(containsText(queryAllByA11yState(checked), 'One')).toBeTruthy()
|
|
198
|
+
|
|
199
|
+
const four = getByText('Four')
|
|
200
|
+
await fireEvent.press(four)
|
|
201
|
+
expect(queryAllByA11yState(checked)).toHaveLength(4)
|
|
202
|
+
expect(containsText(queryAllByA11yState(checked), 'Four')).toBeTruthy()
|
|
203
|
+
expect(containsText(queryAllByA11yState(checked), 'Three')).toBeTruthy()
|
|
204
|
+
expect(containsText(queryAllByA11yState(checked), 'Two')).toBeTruthy()
|
|
205
|
+
expect(containsText(queryAllByA11yState(checked), 'One')).toBeTruthy()
|
|
206
|
+
})
|
|
207
|
+
|
|
208
|
+
it('Auto-selects any provided initialValues', async () => {
|
|
209
|
+
const { getByText, queryAllByA11yState } = render(
|
|
210
|
+
<Theme>
|
|
211
|
+
<ButtonGroup items={items} initialValues={['one', 'two']} maxValues={3} />
|
|
212
|
+
</Theme>
|
|
213
|
+
)
|
|
214
|
+
expect(queryAllByA11yState(checked)).toHaveLength(2)
|
|
215
|
+
expect(containsText(queryAllByA11yState(checked), 'One')).toBeTruthy()
|
|
216
|
+
expect(containsText(queryAllByA11yState(checked), 'Two')).toBeTruthy()
|
|
217
|
+
|
|
218
|
+
const three = getByText('Three')
|
|
219
|
+
await fireEvent.press(three)
|
|
220
|
+
|
|
221
|
+
expect(queryAllByA11yState(checked)).toHaveLength(3)
|
|
222
|
+
expect(containsText(queryAllByA11yState(checked), 'Three')).toBeTruthy()
|
|
223
|
+
expect(containsText(queryAllByA11yState(checked), 'Two')).toBeTruthy()
|
|
224
|
+
expect(containsText(queryAllByA11yState(checked), 'One')).toBeTruthy()
|
|
225
|
+
|
|
226
|
+
const four = getByText('Four')
|
|
227
|
+
await fireEvent.press(four)
|
|
228
|
+
expect(queryAllByA11yState(checked)).toHaveLength(3)
|
|
229
|
+
expect(containsText(queryAllByA11yState(checked), 'Four')).toBeTruthy()
|
|
230
|
+
expect(containsText(queryAllByA11yState(checked), 'Three')).toBeTruthy()
|
|
231
|
+
expect(containsText(queryAllByA11yState(checked), 'Two')).toBeTruthy()
|
|
232
|
+
expect(containsText(queryAllByA11yState(checked), 'One')).not.toBeTruthy()
|
|
233
|
+
|
|
234
|
+
const two = getByText('Two')
|
|
235
|
+
await fireEvent.press(two)
|
|
236
|
+
expect(queryAllByA11yState(checked)).toHaveLength(2)
|
|
237
|
+
expect(containsText(queryAllByA11yState(checked), 'Four')).toBeTruthy()
|
|
238
|
+
expect(containsText(queryAllByA11yState(checked), 'Three')).toBeTruthy()
|
|
239
|
+
expect(containsText(queryAllByA11yState(checked), 'Two')).not.toBeTruthy()
|
|
240
|
+
expect(containsText(queryAllByA11yState(checked), 'One')).not.toBeTruthy()
|
|
241
|
+
})
|
|
242
|
+
})
|
|
243
|
+
|
|
244
|
+
describe('ButtonGroup (controlled)', () => {
|
|
245
|
+
it('Calls onChange handler on press in controlled mode, providing pressed id', async () => {
|
|
246
|
+
const handleChange = jest.fn((arg) => arg)
|
|
247
|
+
const { getByText } = render(
|
|
248
|
+
<Theme>
|
|
249
|
+
<ButtonGroup items={items} values={[]} onChange={handleChange} />
|
|
250
|
+
</Theme>
|
|
251
|
+
)
|
|
252
|
+
|
|
253
|
+
expect(handleChange).toHaveBeenCalledTimes(0)
|
|
254
|
+
|
|
255
|
+
const one = getByText('One')
|
|
256
|
+
await fireEvent(one, 'press', { nativeEvent: 'example' })
|
|
257
|
+
expect(handleChange).toHaveBeenCalledTimes(1)
|
|
258
|
+
expect(handleChange).toHaveBeenLastCalledWith(['one'], { nativeEvent: 'example' })
|
|
259
|
+
|
|
260
|
+
const two = getByText('Two')
|
|
261
|
+
await fireEvent(two, 'press', { nativeEvent: 'example2' })
|
|
262
|
+
expect(handleChange).toHaveBeenCalledTimes(2)
|
|
263
|
+
expect(handleChange).toHaveBeenLastCalledWith(['two'], { nativeEvent: 'example2' })
|
|
264
|
+
})
|
|
265
|
+
|
|
266
|
+
it("Doesn't change its own selection if `values` is passed", async () => {
|
|
267
|
+
const { getByText, queryAllByA11yState } = render(
|
|
268
|
+
<Theme>
|
|
269
|
+
<ButtonGroup items={items} values={['one']} onChange={() => {}} />
|
|
270
|
+
</Theme>
|
|
271
|
+
)
|
|
272
|
+
|
|
273
|
+
expect(queryAllByA11yState(checked)).toHaveLength(1)
|
|
274
|
+
expect(containsText(queryAllByA11yState(checked), 'One')).toBeTruthy()
|
|
275
|
+
|
|
276
|
+
const one = getByText('One')
|
|
277
|
+
await fireEvent.press(one)
|
|
278
|
+
expect(queryAllByA11yState(checked)).toHaveLength(1)
|
|
279
|
+
expect(containsText(queryAllByA11yState(checked), 'One')).toBeTruthy()
|
|
280
|
+
|
|
281
|
+
const two = getByText('Two')
|
|
282
|
+
await fireEvent.press(two)
|
|
283
|
+
expect(queryAllByA11yState(checked)).toHaveLength(1)
|
|
284
|
+
expect(containsText(queryAllByA11yState(checked), 'Two')).not.toBeTruthy()
|
|
285
|
+
expect(containsText(queryAllByA11yState(checked), 'One')).toBeTruthy()
|
|
286
|
+
})
|
|
287
|
+
|
|
288
|
+
it('Does not render an invalid `values` invalidly', async () => {
|
|
289
|
+
const { queryAllByA11yState } = render(
|
|
290
|
+
<Theme>
|
|
291
|
+
<ButtonGroup
|
|
292
|
+
items={items}
|
|
293
|
+
values={['one', 'two', 'three']}
|
|
294
|
+
maxValues={2}
|
|
295
|
+
onChange={() => {}}
|
|
296
|
+
/>
|
|
297
|
+
</Theme>
|
|
298
|
+
)
|
|
299
|
+
expect(queryAllByA11yState(checked)).toHaveLength(2)
|
|
300
|
+
expect(containsText(queryAllByA11yState(checked), 'One')).not.toBeTruthy()
|
|
301
|
+
expect(containsText(queryAllByA11yState(checked), 'Two')).toBeTruthy()
|
|
302
|
+
expect(containsText(queryAllByA11yState(checked), 'Three')).toBeTruthy()
|
|
303
|
+
})
|
|
304
|
+
})
|
|
305
|
+
|
|
306
|
+
describe('ButtonGroup (read-only)', () => {
|
|
307
|
+
it("Doesn't call onChange handler when read-only", async () => {
|
|
308
|
+
const handleChange = jest.fn((arg) => arg)
|
|
309
|
+
const { getByText } = render(
|
|
310
|
+
<Theme>
|
|
311
|
+
<ButtonGroup items={items} values={[]} onChange={handleChange} readOnly />
|
|
312
|
+
</Theme>
|
|
313
|
+
)
|
|
314
|
+
|
|
315
|
+
expect(handleChange).toHaveBeenCalledTimes(0)
|
|
316
|
+
|
|
317
|
+
const one = getByText('One')
|
|
318
|
+
await fireEvent.press(one)
|
|
319
|
+
expect(handleChange).toHaveBeenCalledTimes(0)
|
|
320
|
+
|
|
321
|
+
const two = getByText('Two')
|
|
322
|
+
await fireEvent.press(two)
|
|
323
|
+
expect(handleChange).toHaveBeenCalledTimes(0)
|
|
324
|
+
})
|
|
325
|
+
|
|
326
|
+
it("Doesn't change its selection on press", async () => {
|
|
327
|
+
const { getByText, queryAllByA11yState } = render(
|
|
328
|
+
<Theme>
|
|
329
|
+
<ButtonGroup items={items} values={['one']} readOnly />
|
|
330
|
+
</Theme>
|
|
331
|
+
)
|
|
332
|
+
|
|
333
|
+
expect(queryAllByA11yState(checked)).toHaveLength(1)
|
|
334
|
+
expect(containsText(queryAllByA11yState(checked), 'One')).toBeTruthy()
|
|
335
|
+
|
|
336
|
+
const one = getByText('One')
|
|
337
|
+
await fireEvent.press(one)
|
|
338
|
+
expect(queryAllByA11yState(checked)).toHaveLength(1)
|
|
339
|
+
expect(containsText(queryAllByA11yState(checked), 'One')).toBeTruthy()
|
|
340
|
+
|
|
341
|
+
const two = getByText('Two')
|
|
342
|
+
await fireEvent.press(two)
|
|
343
|
+
expect(queryAllByA11yState(checked)).toHaveLength(1)
|
|
344
|
+
expect(containsText(queryAllByA11yState(checked), 'Two')).not.toBeTruthy()
|
|
345
|
+
expect(containsText(queryAllByA11yState(checked), 'One')).toBeTruthy()
|
|
346
|
+
})
|
|
347
|
+
})
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import React from 'react'
|
|
2
|
+
import { Platform, Linking } from 'react-native'
|
|
3
|
+
import { render, fireEvent } from '@testing-library/react-native'
|
|
4
|
+
|
|
5
|
+
import Theme from '../../__fixtures__/Theme'
|
|
6
|
+
import ButtonLink from '../../src/Button/ButtonLink'
|
|
7
|
+
|
|
8
|
+
const href = 'https://example.com'
|
|
9
|
+
const label = 'Test ButtonLink'
|
|
10
|
+
|
|
11
|
+
describe('ButtonLink', () => {
|
|
12
|
+
it('renders an accessible link', async () => {
|
|
13
|
+
const { getByRole } = render(
|
|
14
|
+
<Theme>
|
|
15
|
+
<ButtonLink href={href}>{label}</ButtonLink>
|
|
16
|
+
</Theme>
|
|
17
|
+
)
|
|
18
|
+
|
|
19
|
+
const link = getByRole('link')
|
|
20
|
+
expect(link).toHaveTextContent(label)
|
|
21
|
+
})
|
|
22
|
+
|
|
23
|
+
// TODO: this won't be called until cross-platform Jest tests are configured
|
|
24
|
+
// see https://github.com/telus/universal-design-system/issues/319
|
|
25
|
+
if (Platform.OS === 'web') {
|
|
26
|
+
it('defers to platform link handling (web)', async () => {
|
|
27
|
+
// This test is untested
|
|
28
|
+
jest.spyOn(Linking, 'openURL')
|
|
29
|
+
const originalValue = Platform.OS
|
|
30
|
+
Platform.OS = 'web'
|
|
31
|
+
const { getByRole } = render(
|
|
32
|
+
<Theme>
|
|
33
|
+
<ButtonLink href={href}>{label}</ButtonLink>
|
|
34
|
+
</Theme>
|
|
35
|
+
)
|
|
36
|
+
|
|
37
|
+
const el = getByRole('link')
|
|
38
|
+
fireEvent.press(el)
|
|
39
|
+
expect(Linking.openURL).not.toHaveBeenCalled()
|
|
40
|
+
Platform.OS = originalValue
|
|
41
|
+
})
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
// Default jest OS is ios, this will always be called until
|
|
45
|
+
// https://github.com/telus/universal-design-system/issues/319
|
|
46
|
+
if (Platform.OS !== 'web') {
|
|
47
|
+
it('calls Linking.openURL (mobile)', async () => {
|
|
48
|
+
jest.spyOn(Linking, 'openURL').mockImplementation(() => {})
|
|
49
|
+
const { getByRole } = render(
|
|
50
|
+
<Theme>
|
|
51
|
+
<ButtonLink href={href}>{label}</ButtonLink>
|
|
52
|
+
</Theme>
|
|
53
|
+
)
|
|
54
|
+
|
|
55
|
+
const el = getByRole('link')
|
|
56
|
+
fireEvent.press(el)
|
|
57
|
+
expect(Linking.openURL).toHaveBeenCalledTimes(1)
|
|
58
|
+
expect(Linking.openURL).toHaveBeenCalledWith(href)
|
|
59
|
+
})
|
|
60
|
+
}
|
|
61
|
+
})
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import React from 'react'
|
|
2
|
+
import { render } from '@testing-library/react-native'
|
|
3
|
+
import { Text } from 'react-native'
|
|
4
|
+
|
|
5
|
+
import { Card } from '../../src'
|
|
6
|
+
import Theme from '../../__fixtures__/Theme'
|
|
7
|
+
import testTheme from '../../__fixtures__/testTheme'
|
|
8
|
+
|
|
9
|
+
const contentText = 'This is a card'
|
|
10
|
+
|
|
11
|
+
const setup = ({ tokens } = {}) =>
|
|
12
|
+
render(
|
|
13
|
+
<Theme>
|
|
14
|
+
<Card tokens={tokens}>
|
|
15
|
+
<Text>{contentText}</Text>
|
|
16
|
+
</Card>
|
|
17
|
+
</Theme>
|
|
18
|
+
)
|
|
19
|
+
|
|
20
|
+
describe('Card', () => {
|
|
21
|
+
it('renders the card content', () => {
|
|
22
|
+
const { getByText } = setup()
|
|
23
|
+
const cardContent = getByText(contentText)
|
|
24
|
+
expect(cardContent).toBeTruthy()
|
|
25
|
+
})
|
|
26
|
+
|
|
27
|
+
it('renders the default style properly', () => {
|
|
28
|
+
const defaultStyle = testTheme.components.Card.tokens
|
|
29
|
+
const { getByText } = setup()
|
|
30
|
+
const card = getByText(contentText).parent
|
|
31
|
+
expect(card).toHaveStyle(defaultStyle)
|
|
32
|
+
})
|
|
33
|
+
|
|
34
|
+
it('renders a card with a custom background color', () => {
|
|
35
|
+
const backgroundColor = '#0F0F0F'
|
|
36
|
+
const { getByText } = setup({ tokens: { backgroundColor } })
|
|
37
|
+
const card = getByText(contentText).parent
|
|
38
|
+
expect(card).toHaveStyle({ backgroundColor })
|
|
39
|
+
})
|
|
40
|
+
|
|
41
|
+
it('renders a card with a custom border', () => {
|
|
42
|
+
const border = {
|
|
43
|
+
borderColor: '#123456',
|
|
44
|
+
borderWidth: 7,
|
|
45
|
+
borderRadius: 8
|
|
46
|
+
}
|
|
47
|
+
const { getByText } = setup({ tokens: { ...border } })
|
|
48
|
+
const card = getByText(contentText).parent
|
|
49
|
+
expect(card).toHaveStyle({ ...border })
|
|
50
|
+
})
|
|
51
|
+
|
|
52
|
+
it('renders a card with a custom padding', () => {
|
|
53
|
+
const padding = {
|
|
54
|
+
paddingBottom: 1,
|
|
55
|
+
paddingLeft: 2,
|
|
56
|
+
paddingRight: 3,
|
|
57
|
+
paddingTop: 4
|
|
58
|
+
}
|
|
59
|
+
const { getByText } = setup({ tokens: { ...padding } })
|
|
60
|
+
const card = getByText(contentText).parent
|
|
61
|
+
expect(card).toHaveStyle({ ...padding })
|
|
62
|
+
})
|
|
63
|
+
})
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import React from 'react'
|
|
2
|
+
import { Text } from 'react-native'
|
|
3
|
+
import { render, fireEvent } from '@testing-library/react-native'
|
|
4
|
+
|
|
5
|
+
import { Carousel } from '../../src'
|
|
6
|
+
import Theme from '../../__fixtures__/Theme'
|
|
7
|
+
|
|
8
|
+
const setup = (args = {}) =>
|
|
9
|
+
render(
|
|
10
|
+
<Theme>
|
|
11
|
+
<Carousel {...args}>
|
|
12
|
+
<Carousel.Item testID="firstSlide">
|
|
13
|
+
<Text>First</Text>
|
|
14
|
+
</Carousel.Item>
|
|
15
|
+
<Carousel.Item testID="secondSlide">
|
|
16
|
+
<Text>Second</Text>
|
|
17
|
+
</Carousel.Item>
|
|
18
|
+
<Carousel.Item testID="thirdSlide">
|
|
19
|
+
<Text>Third</Text>
|
|
20
|
+
</Carousel.Item>
|
|
21
|
+
</Carousel>
|
|
22
|
+
</Theme>
|
|
23
|
+
)
|
|
24
|
+
|
|
25
|
+
const getButtonLabel = (item, of = 3, itemLabel = 'item') => `Show ${itemLabel} ${item} of ${of}`
|
|
26
|
+
|
|
27
|
+
describe('Carousel', () => {
|
|
28
|
+
it('renders the first Carousel slide', () => {
|
|
29
|
+
const { getByTestId } = setup()
|
|
30
|
+
|
|
31
|
+
expect(getByTestId('firstSlide')).not.toHaveProp('focusable')
|
|
32
|
+
expect(getByTestId('secondSlide')).toHaveProp('focusable', false)
|
|
33
|
+
expect(getByTestId('thirdSlide')).toHaveProp('focusable', false)
|
|
34
|
+
})
|
|
35
|
+
|
|
36
|
+
it('renders the second Carousel slide when clicked on next button', async () => {
|
|
37
|
+
const { getByTestId, getByA11yLabel } = setup()
|
|
38
|
+
|
|
39
|
+
await fireEvent.press(getByA11yLabel(getButtonLabel(2)))
|
|
40
|
+
|
|
41
|
+
expect(getByTestId('firstSlide')).toHaveProp('focusable', false)
|
|
42
|
+
expect(getByTestId('secondSlide')).not.toHaveProp('focusable')
|
|
43
|
+
expect(getByTestId('thirdSlide')).toHaveProp('focusable', false)
|
|
44
|
+
})
|
|
45
|
+
|
|
46
|
+
it('renders the third Carousel slide when clicked on next button twice', async () => {
|
|
47
|
+
const { getByTestId, getByA11yLabel } = setup()
|
|
48
|
+
|
|
49
|
+
await fireEvent.press(getByA11yLabel(getButtonLabel(2)))
|
|
50
|
+
await fireEvent.press(getByA11yLabel(getButtonLabel(3)))
|
|
51
|
+
|
|
52
|
+
expect(getByTestId('firstSlide')).toHaveProp('focusable', false)
|
|
53
|
+
expect(getByTestId('secondSlide')).toHaveProp('focusable', false)
|
|
54
|
+
expect(getByTestId('thirdSlide')).not.toHaveProp('focusable')
|
|
55
|
+
})
|
|
56
|
+
|
|
57
|
+
it('has correct accessibilityValue values for each slide', async () => {
|
|
58
|
+
const { getByA11yLabel, getByTestId } = setup({ testID: 'outer-container' })
|
|
59
|
+
|
|
60
|
+
const getContainer = () => getByTestId('outer-container')
|
|
61
|
+
|
|
62
|
+
expect(getContainer()).toHaveProp('accessibilityValue', {
|
|
63
|
+
now: 1,
|
|
64
|
+
min: 1,
|
|
65
|
+
max: 3
|
|
66
|
+
})
|
|
67
|
+
await fireEvent.press(getByA11yLabel(getButtonLabel(2)))
|
|
68
|
+
|
|
69
|
+
expect(getContainer()).toHaveProp('accessibilityValue', {
|
|
70
|
+
now: 2,
|
|
71
|
+
min: 1,
|
|
72
|
+
max: 3
|
|
73
|
+
})
|
|
74
|
+
|
|
75
|
+
await fireEvent.press(getByA11yLabel(getButtonLabel(3)))
|
|
76
|
+
|
|
77
|
+
expect(getContainer()).toHaveProp('accessibilityValue', {
|
|
78
|
+
now: 3,
|
|
79
|
+
min: 1,
|
|
80
|
+
max: 3
|
|
81
|
+
})
|
|
82
|
+
})
|
|
83
|
+
|
|
84
|
+
it('hides previous button and displays next button when on first slide', async () => {
|
|
85
|
+
const { getByTestId } = setup()
|
|
86
|
+
|
|
87
|
+
expect(getByTestId('previous-button-container')).toHaveStyle({ visibility: 'hidden' })
|
|
88
|
+
expect(getByTestId('next-button-container')).toHaveStyle({ visibility: 'visible' })
|
|
89
|
+
})
|
|
90
|
+
|
|
91
|
+
it('displays previous and next buttons when not on first or last slide', async () => {
|
|
92
|
+
const { getByTestId, getByA11yLabel } = setup()
|
|
93
|
+
|
|
94
|
+
expect(getByTestId('previous-button-container')).toHaveStyle({ visibility: 'hidden' })
|
|
95
|
+
expect(getByTestId('next-button-container')).toHaveStyle({ visibility: 'visible' })
|
|
96
|
+
|
|
97
|
+
await fireEvent.press(getByA11yLabel(getButtonLabel(2)))
|
|
98
|
+
|
|
99
|
+
expect(getByTestId('previous-button-container')).toHaveStyle({ visibility: 'visible' })
|
|
100
|
+
expect(getByTestId('next-button-container')).toHaveStyle({ visibility: 'visible' })
|
|
101
|
+
})
|
|
102
|
+
|
|
103
|
+
it('hides next button and displays previous button when on last slide', async () => {
|
|
104
|
+
const { getByTestId, getByA11yLabel } = setup()
|
|
105
|
+
|
|
106
|
+
expect(getByTestId('previous-button-container')).toHaveStyle({ visibility: 'hidden' })
|
|
107
|
+
expect(getByTestId('next-button-container')).toHaveStyle({ visibility: 'visible' })
|
|
108
|
+
|
|
109
|
+
await fireEvent.press(getByA11yLabel(getButtonLabel(2)))
|
|
110
|
+
await fireEvent.press(getByA11yLabel(getButtonLabel(3)))
|
|
111
|
+
|
|
112
|
+
expect(getByTestId('previous-button-container')).toHaveStyle({ visibility: 'visible' })
|
|
113
|
+
expect(getByTestId('next-button-container')).toHaveStyle({ visibility: 'hidden' })
|
|
114
|
+
})
|
|
115
|
+
|
|
116
|
+
it('hides panel navigation when `showPanelNavigation` is false', () => {
|
|
117
|
+
const { queryByRole } = setup({ tokens: { showPanelNavigation: false } })
|
|
118
|
+
|
|
119
|
+
expect(queryByRole('progressbar')).toBeFalsy()
|
|
120
|
+
})
|
|
121
|
+
|
|
122
|
+
it('hides previous/next navigation when `showPreviousNextNavigation` is false', () => {
|
|
123
|
+
const { queryByTestId } = setup({ tokens: { showPreviousNextNavigation: false } })
|
|
124
|
+
|
|
125
|
+
expect(queryByTestId('previous-button-container')).toBeFalsy()
|
|
126
|
+
expect(queryByTestId('next-button-container')).toBeFalsy()
|
|
127
|
+
})
|
|
128
|
+
})
|