Skip to content

Commit 3b4d289

Browse files
committed
Fix tests after modal changes
1 parent 32b6850 commit 3b4d289

File tree

9 files changed

+54
-54
lines changed

9 files changed

+54
-54
lines changed

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,8 +74,8 @@
7474
"@react-native/metro-config": "0.73.5",
7575
"@react-native/typescript-config": "0.73.1",
7676
"@shopify/flash-list": "^1.2.1",
77-
"@testing-library/react-hooks": "^7.0.2",
78-
"@testing-library/react-native": "^11.5.2",
77+
"@testing-library/react-hooks": "^8.0.1",
78+
"@testing-library/react-native": "^11.5.1",
7979
"@types/hoist-non-react-statics": "^3.3.1",
8080
"@types/jest": "^29.2.1",
8181
"@types/lodash": "^4.0.0",

src/components/modal/Modal.driver.new.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,9 @@ export const ModalDriver = (props: ComponentProps) => {
77
const overlayDriver = ButtonDriver({renderTree, testID: `${testID}.TouchableOverlay`});
88

99
const isVisible = () => {
10-
return !!driver.getElement().props.visible;
10+
// Note: when modal is not visible it's not being rendered
11+
// return !!driver.getElement().props.visible;
12+
return !!driver.queryElement()?.props?.visible;
1113
};
1214

1315
return {...driver, isVisible, pressOnBackground: overlayDriver.press};

src/components/picker/Picker.driver.new.ts

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,14 @@ import {TextFieldDriver} from '../textField/TextField.driver.new';
33
import {ModalDriver} from '../modal/Modal.driver.new';
44
import {DialogDriver} from '../../incubator/Dialog/Dialog.driver.new';
55
import {ButtonDriver} from '../button/Button.driver.new';
6+
import {ExpandableOverlayDriver} from '../../incubator/expandableOverlay/ExpandableOverlay.driver';
7+
8+
export const PickerDriver = (props: ComponentProps, useDialog: boolean) => {
9+
const mainDriver = ExpandableOverlayDriver({
10+
renderTree: props.renderTree,
11+
testID: props.testID
12+
}, useDialog);
613

7-
export const PickerDriver = (props: ComponentProps) => {
814
const textFieldDriver = TextFieldDriver({
915
renderTree: props.renderTree,
1016
testID: `${props.testID}.input`
@@ -27,7 +33,7 @@ export const PickerDriver = (props: ComponentProps) => {
2733
});
2834

2935
const exists = () => {
30-
return textFieldDriver.exists();
36+
return mainDriver.exists();
3137
};
3238

3339
const getValue = (): string | undefined => {
@@ -36,6 +42,7 @@ export const PickerDriver = (props: ComponentProps) => {
3642

3743
const open = (): void => {
3844
textFieldDriver.press();
45+
mainDriver.open();
3946
};
4047

4148
const cancel = (): void => {

src/components/picker/__tests__/index.spec.tsx

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,8 @@ const TestCase = (props?: any) => {
2424
};
2525

2626
const getDriver = (props?: any) => {
27-
return PickerDriver({renderTree: render(<TestCase {...props}/>), testID});
27+
const renderTree = render(<TestCase {...props}/>);
28+
return PickerDriver({renderTree, testID}, props?.useDialog);
2829
};
2930

3031
const onPress = jest.fn();
@@ -159,7 +160,7 @@ describe('Picker', () => {
159160

160161
describe('Dialog', () => {
161162
const dialogProps = {useDialog: true, customPickerProps: {migrateDialog: true}};
162-
163+
163164
describe('Test value', () => {
164165
it('Get correct value of a single item', () => {
165166
const driver = getDriver({
@@ -201,7 +202,7 @@ describe('Picker', () => {
201202
act(() => driver.open());
202203
await waitFor(() => expect(driver.isOpen()).toBeTruthy());
203204
act(() => driver.dismissDialog());
204-
await waitFor(() => expect(driver.dismissDialog()).toBeFalsy());
205+
await waitFor(() => expect(driver.isOpen()).toBeFalsy());
205206
});
206207
});
207208

@@ -212,7 +213,6 @@ describe('Picker', () => {
212213
act(() => driver.open());
213214
await waitFor(() => expect(driver.isOpen()).toBeTruthy());
214215
driver.selectItem(countries[2].label);
215-
act(() => driver.dismissDialog());
216216
await waitFor(() => expect(driver.isOpen()).toBeFalsy());
217217
expect(driver.getValue()).toEqual(countries[2].label);
218218
});
@@ -244,7 +244,7 @@ describe('Picker', () => {
244244
act(() => driver.open());
245245
await waitFor(() => expect(driver.isOpen()).toBeTruthy());
246246
act(() => driver.dismissDialog());
247-
await waitFor(() => expect(driver.dismissDialog()).toBeFalsy());
247+
await waitFor(() => expect(driver.isOpen()).toBeFalsy());
248248
expect(onDismiss).toHaveBeenCalledTimes(1);
249249
});
250250
});
@@ -258,7 +258,7 @@ describe('Picker', () => {
258258
describe('Picker field types', () => {
259259
describe('Test filter field type', () => {
260260
const placeholderText = 'Select a Filter';
261-
261+
262262
it('should render a filter picker', () => {
263263
const driver = getDriver({fieldType: 'filter', placeholder: placeholderText});
264264
expect(driver.isOpen()).toBeFalsy();
@@ -267,11 +267,11 @@ describe('Picker', () => {
267267
expect(label.props.children).toEqual(placeholderText);
268268
});
269269
});
270-
270+
271271
describe('Test settings field type', () => {
272272
const labelText = 'Settings';
273273
const placeholderText = 'Select a setting';
274-
274+
275275
it('should render a settings picker with label', async () => {
276276
const driver = getDriver({fieldType: 'settings', label: labelText, placeholder: placeholderText});
277277
const label = screen.getByTestId(`${testID}.settings.type.label`);

src/incubator/Dialog/__tests__/index.new.spec.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ describe('Incubator.Dialog sanity checks', () => {
104104
const onDismiss = jest.fn();
105105
const component = <TestCase2 onDismiss={onDismiss}/>;
106106
const {dialogDriver} = getDriver(component);
107-
expect(dialogDriver.exists()).toBeTruthy();
107+
expect(dialogDriver.exists()).toBeFalsy();
108108
expect(dialogDriver.isVisible()).toBeFalsy();
109109
});
110110
});

src/incubator/expandableOverlay/ExpandableOverlay.driver.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,12 @@ import {DialogDriver} from '../Dialog/Dialog.driver.new';
33
import {type ComponentProps, useComponentDriver} from '../../testkit/new/Component.driver';
44
import {usePressableDriver} from '../../testkit/new/usePressable.driver';
55

6-
export const ExpandableOverlayDriver = (props: ComponentProps) => {
6+
export const ExpandableOverlayDriver = (props: ComponentProps, useDialog: boolean) => {
77
const {renderTree, testID} = props;
88

99
const driver = usePressableDriver(useComponentDriver({renderTree, testID}));
10-
const isUsingDialog = !!renderTree.queryByTestId(`${testID}.overlay.modal`);
10+
// const isUsingDialog = !!renderTree.queryByTestId(`${testID}.overlay.modal`);
11+
const isUsingDialog = useDialog;
1112

1213
const overlayDriver = (isUsingDialog ? DialogDriver : ModalDriver)({
1314
renderTree,

src/incubator/expandableOverlay/__tests__/index.spec.tsx

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ const universe = 'Hello Universe';
1717

1818
const TestCase = (props: Omit<ExpandableOverlayProps, 'testID'>) => {
1919
return (
20-
//@ts-expect-error
2120
<ExpandableOverlay migrateDialog expandableContent={<Text>{universe}</Text>} {...props} testID={testID}>
2221
<View>
2322
<Text>{helloWorld}</Text>
@@ -28,15 +27,15 @@ const TestCase = (props: Omit<ExpandableOverlayProps, 'testID'>) => {
2827

2928
const getDriver = <T extends ExpandableOverlayProps>(props: T) => {
3029
const renderTree = render(<TestCase {...props}/>);
31-
const driver = ExpandableOverlayDriver({renderTree, testID});
30+
const driver = ExpandableOverlayDriver({renderTree, testID}, props.useDialog ?? false);
3231
return {driver, renderTree};
3332
};
3433

3534
describe('ExpandableOverlay', () => {
3635
describe('With Dialog (useDialog)', () => {
3736
it('Sanity', () => {
3837
const {driver} = getDriver({useDialog: true});
39-
expect(driver.exists()).toBeTruthy();
38+
expect(driver.exists()).toBeFalsy();
4039
});
4140

4241
it('Test open', () => {
@@ -66,7 +65,7 @@ describe('ExpandableOverlay', () => {
6665
describe('With Modal', () => {
6766
it('Sanity', () => {
6867
const {driver} = getDriver({});
69-
expect(driver.exists()).toBeTruthy();
68+
expect(driver.exists()).toBeFalsy();
7069
});
7170

7271
it('Test open', () => {

src/testkit/new/Component.driver.ts

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
import {ReactTestInstance} from 'react-test-renderer';
22
import {within} from '@testing-library/react-native';
3-
43
export interface ComponentProps {
54
renderTree: ReturnType<typeof within>; // Note: This changed was asked for integration with amino. This still gives all querying functionality.
65
testID: string | RegExp;
76
}
87

98
export interface ComponentDriverResult {
109
getElement: () => ReactTestInstance;
10+
queryElement:() => ReactTestInstance | undefined;
1111
exists: () => boolean;
1212
}
1313

@@ -28,6 +28,15 @@ export const useComponentDriver = (props: ComponentProps): ComponentDriverResult
2828
}
2929
};
3030

31+
const queryElement = (): ReactTestInstance => {
32+
const elements = renderTree.queryAllByTestId(testID);
33+
if (elements.length > 1) {
34+
console.warn(`Found more than one element with testID: ${testID}`);
35+
}
36+
37+
return elements?.[0];
38+
};
39+
3140
const exists = (): boolean => {
3241
try {
3342
getElement();
@@ -37,7 +46,7 @@ export const useComponentDriver = (props: ComponentProps): ComponentDriverResult
3746
}
3847
};
3948

40-
return {getElement, exists};
49+
return {getElement, queryElement, exists};
4150
};
4251

4352
export const ComponentDriver = (props: ComponentProps): ComponentDriverResult => {

yarn.lock

Lines changed: 14 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -3370,29 +3370,29 @@ __metadata:
33703370
languageName: node
33713371
linkType: hard
33723372

3373-
"@testing-library/react-hooks@npm:^7.0.2":
3374-
version: 7.0.2
3375-
resolution: "@testing-library/react-hooks@npm:7.0.2"
3373+
"@testing-library/react-hooks@npm:^8.0.1":
3374+
version: 8.0.1
3375+
resolution: "@testing-library/react-hooks@npm:8.0.1"
33763376
dependencies:
33773377
"@babel/runtime": ^7.12.5
3378-
"@types/react": ">=16.9.0"
3379-
"@types/react-dom": ">=16.9.0"
3380-
"@types/react-test-renderer": ">=16.9.0"
33813378
react-error-boundary: ^3.1.0
33823379
peerDependencies:
3383-
react: ">=16.9.0"
3384-
react-dom: ">=16.9.0"
3385-
react-test-renderer: ">=16.9.0"
3380+
"@types/react": ^16.9.0 || ^17.0.0
3381+
react: ^16.9.0 || ^17.0.0
3382+
react-dom: ^16.9.0 || ^17.0.0
3383+
react-test-renderer: ^16.9.0 || ^17.0.0
33863384
peerDependenciesMeta:
3385+
"@types/react":
3386+
optional: true
33873387
react-dom:
33883388
optional: true
33893389
react-test-renderer:
33903390
optional: true
3391-
checksum: 27c6169b5c9832bd02dcea232e6a0a3cd8d4504e13ecb49d57eb5ab6bea5e2f1bff65f3102068b7e57eec3cbd671326dc0b277335014b0edfbdedf11a1fe6db5
3391+
checksum: 7fe44352e920deb5cb1876f80d64e48615232072c9d5382f1e0284b3aab46bb1c659a040b774c45cdf084a5257b8fe463f7e08695ad8480d8a15635d4d3d1f6d
33923392
languageName: node
33933393
linkType: hard
33943394

3395-
"@testing-library/react-native@npm:^11.5.2":
3395+
"@testing-library/react-native@npm:^11.5.1":
33963396
version: 11.5.4
33973397
resolution: "@testing-library/react-native@npm:11.5.4"
33983398
dependencies:
@@ -3557,15 +3557,6 @@ __metadata:
35573557
languageName: node
35583558
linkType: hard
35593559

3560-
"@types/react-dom@npm:>=16.9.0":
3561-
version: 18.3.0
3562-
resolution: "@types/react-dom@npm:18.3.0"
3563-
dependencies:
3564-
"@types/react": "*"
3565-
checksum: a0cd9b1b815a6abd2a367a9eabdd8df8dd8f13f95897b2f9e1359ea3ac6619f957c1432ece004af7d95e2a7caddbba19faa045f831f32d6263483fc5404a7596
3566-
languageName: node
3567-
linkType: hard
3568-
35693560
"@types/react-native@npm:0.73.0":
35703561
version: 0.73.0
35713562
resolution: "@types/react-native@npm:0.73.0"
@@ -3575,16 +3566,7 @@ __metadata:
35753566
languageName: node
35763567
linkType: hard
35773568

3578-
"@types/react-test-renderer@npm:>=16.9.0":
3579-
version: 18.3.0
3580-
resolution: "@types/react-test-renderer@npm:18.3.0"
3581-
dependencies:
3582-
"@types/react": "*"
3583-
checksum: c53683990bd194cb68e3987bda79c78eff41517f7a747e92f3e54217c2ce3addd031b8a45bf631982c909cc2caeeb905372f322758e05bb76c03754a3f24426e
3584-
languageName: node
3585-
linkType: hard
3586-
3587-
"@types/react@npm:*, @types/react@npm:18.3.7, @types/react@npm:>=16.9.0":
3569+
"@types/react@npm:*, @types/react@npm:18.3.7":
35883570
version: 18.3.7
35893571
resolution: "@types/react@npm:18.3.7"
35903572
dependencies:
@@ -10324,8 +10306,8 @@ __metadata:
1032410306
"@react-native/metro-config": 0.73.5
1032510307
"@react-native/typescript-config": 0.73.1
1032610308
"@shopify/flash-list": ^1.2.1
10327-
"@testing-library/react-hooks": ^7.0.2
10328-
"@testing-library/react-native": ^11.5.2
10309+
"@testing-library/react-hooks": ^8.0.1
10310+
"@testing-library/react-native": ^11.5.1
1032910311
"@types/hoist-non-react-statics": ^3.3.1
1033010312
"@types/jest": ^29.2.1
1033110313
"@types/lodash": ^4.0.0

0 commit comments

Comments
 (0)