Skip to content

Commit e54fa0c

Browse files
committed
fix detox tests
1 parent 943796b commit e54fa0c

File tree

7 files changed

+71
-83
lines changed

7 files changed

+71
-83
lines changed

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,9 @@ DerivedData
2929
*.xcuserstate
3030
project.xcworkspace
3131

32+
#Detox
33+
#
34+
artifacts
3235

3336
# Android/IntelliJ
3437
#

android/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ android {
1919
buildToolsVersion safeExtGet('buildToolsVersion', '28.0.3')
2020

2121
defaultConfig {
22-
minSdkVersion safeExtGet('minSdkVersion', 16)
22+
minSdkVersion safeExtGet('minSdkVersion', 18)
2323
targetSdkVersion safeExtGet('targetSdkVersion', 26)
2424
versionCode 1
2525
versionName "1.0"

example/App.js

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@ export const App = () => {
3333
'{dayofweek.abbreviated(2)}',
3434
);
3535

36+
const hidePicker = () => setShow(false);
37+
3638
const handleResetPress = () => {
3739
setDate(undefined);
3840
};
@@ -72,16 +74,20 @@ export const App = () => {
7274

7375
const showTimepickerDefaultWithInterval = () => {
7476
showMode('time');
75-
setDisplay('default');
7677
setMinInterval(5);
78+
setDisplay('default');
7779
};
7880

7981
const showTimepickerSpinnerWithInterval = () => {
8082
showMode('time');
81-
setDisplay('spinner');
8283
setMinInterval(5);
84+
setDisplay('spinner');
8385
};
8486

87+
const currentDateTime = moment
88+
.utc(date)
89+
.format(mode === 'time' ? 'HH:mm' : 'MM/DD/YYYY');
90+
8591
if (Platform.OS !== 'windows') {
8692
return (
8793
<>
@@ -146,7 +152,7 @@ export const App = () => {
146152
</View>
147153
<View style={styles.button}>
148154
<Button
149-
testID="timePickerIntervalButton"
155+
testID="timePickerDefaultIntervalButton"
150156
onPress={showTimepickerDefaultWithInterval}
151157
title="Show time picker default (with 5 min interval)!"
152158
/>
@@ -160,19 +166,18 @@ export const App = () => {
160166
</View>
161167
<View style={styles.header}>
162168
<Text testID="dateTimeText" style={styles.dateTimeText}>
163-
{mode === 'time' && moment.utc(date).format('HH:mm')}
164-
{mode === 'date' && moment.utc(date).format('MM/DD/YYYY')}
169+
{currentDateTime}
165170
</Text>
166171
<Button
167172
testID="hidePicker"
168-
onPress={() => setShow(false)}
173+
onPress={hidePicker}
169174
title="hide picker"
170175
/>
171176
</View>
172177
{show && (
173178
<DateTimePicker
174179
testID="dateTimePicker"
175-
minuteInterval={5}
180+
minuteInterval={interval}
176181
timeZoneOffsetInMinutes={0}
177182
value={date}
178183
mode={mode}
@@ -212,7 +217,7 @@ export const App = () => {
212217
<Picker
213218
style={{width: 200, height: 35}}
214219
selectedValue={dateFormat}
215-
onValueChange={value => setDateFormat(value)}>
220+
onValueChange={setDateFormat}>
216221
<Picker.Item
217222
label="day month year"
218223
value="day month year"

example/android/build.gradle

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,17 @@
33
buildscript {
44
ext {
55
kotlinVersion = "1.3.71"
6-
buildToolsVersion = "29.0.3"
6+
buildToolsVersion = "28.0.3"
77
minSdkVersion = 18
8-
compileSdkVersion = 29
9-
targetSdkVersion = 29
8+
compileSdkVersion = 28
9+
targetSdkVersion = 26
1010
}
1111
repositories {
1212
google()
1313
jcenter()
1414
}
1515
dependencies {
16-
classpath('com.android.tools.build:gradle:3.5.2')
16+
classpath 'com.android.tools.build:gradle:3.5.3'
1717
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion"
1818

1919
// NOTE: Do not place your application dependencies here; they belong

example/e2e/detoxTest.spec.js

Lines changed: 47 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@ describe('Example', () => {
2222
});
2323

2424
it('should have title and hermes indicator on android', async () => {
25+
await waitFor(element(by.id('appRootView')))
26+
.toBeVisible()
27+
.withTimeout(5000);
2528
await expect(element(by.id('appRootView'))).toBeVisible();
2629
await expect(element(by.text('Example DateTime Picker'))).toBeVisible();
2730
if (device.getPlatform() === 'android') {
@@ -30,7 +33,7 @@ describe('Example', () => {
3033
});
3134

3235
it('should show date picker after tapping datePicker button', async () => {
33-
element(by.id('datePickerButton')).tap();
36+
await element(by.id('datePickerButton')).tap();
3437

3538
if (global.device.getPlatform() === 'ios') {
3639
await expect(
@@ -42,7 +45,7 @@ describe('Example', () => {
4245
});
4346

4447
it('Nothing should happen if date doesn`t change', async () => {
45-
element(by.id('datePickerButton')).tap();
48+
await element(by.id('datePickerButton')).tap();
4649
const dateTimeText = element(by.id('dateTimeText'));
4750

4851
if (global.device.getPlatform() === 'ios') {
@@ -57,23 +60,23 @@ describe('Example', () => {
5760
);
5861
testElement.swipe('left', 'fast', '100');
5962
testElement.tapAtPoint({x: 50, y: 200});
60-
element(by.text('CANCEL')).tap();
63+
await element(by.text('CANCEL')).tap();
6164
}
6265

6366
await expect(dateTimeText).toHaveText('08/21/2020');
6467
});
6568

6669
it('should update dateTimeText when date changes', async () => {
67-
element(by.id('datePickerButton')).tap();
70+
await element(by.id('datePickerButton')).tap();
6871
const dateTimeText = element(by.id('dateTimeText'));
6972

7073
if (global.device.getPlatform() === 'ios') {
7174
const testElement = element(
7275
by.type('UIPickerView').withAncestor(by.id('dateTimePicker')),
7376
);
74-
testElement.setColumnToValue(0, 'November');
75-
testElement.setColumnToValue(1, '3');
76-
testElement.setColumnToValue(2, '1800');
77+
await testElement.setColumnToValue(0, 'November');
78+
await testElement.setColumnToValue(1, '3');
79+
await testElement.setColumnToValue(2, '1800');
7780

7881
await expect(dateTimeText).toHaveText('11/03/1800');
7982
} else {
@@ -82,16 +85,16 @@ describe('Example', () => {
8285
.type('android.widget.ScrollView')
8386
.withAncestor(by.type('android.widget.DatePicker')),
8487
);
85-
testElement.swipe('left', 'fast', '100');
86-
testElement.tapAtPoint({x: 50, y: 200});
87-
element(by.text('OK')).tap();
88+
await testElement.swipe('left', 'fast', '100');
89+
await testElement.tapAtPoint({x: 50, y: 200});
90+
await element(by.text('OK')).tap();
8891

8992
await expect(dateTimeText).toHaveText('09/13/2020');
9093
}
9194
});
9295

9396
it('should show time picker after tapping timePicker button', async () => {
94-
element(by.id('timePickerButton')).tap();
97+
await element(by.id('timePickerButton')).tap();
9598

9699
if (global.device.getPlatform() === 'ios') {
97100
await expect(
@@ -103,7 +106,7 @@ describe('Example', () => {
103106
});
104107

105108
it('Nothing should happen if time doesn`t change', async () => {
106-
element(by.id('timePickerButton')).tap();
109+
await element(by.id('timePickerButton')).tap();
107110
const dateTimeText = element(by.id('dateTimeText'));
108111

109112
if (global.device.getPlatform() === 'ios') {
@@ -119,16 +122,16 @@ describe('Example', () => {
119122
});
120123

121124
it('should change time text when time changes', async () => {
122-
element(by.id('timePickerButton')).tap();
125+
await element(by.id('timePickerButton')).tap();
123126
const dateTimeText = element(by.id('dateTimeText'));
124127

125128
if (global.device.getPlatform() === 'ios') {
126129
const testElement = element(
127130
by.type('UIPickerView').withAncestor(by.id('dateTimePicker')),
128131
);
129-
testElement.setColumnToValue(0, '2');
130-
testElement.setColumnToValue(1, '44');
131-
testElement.setColumnToValue(2, 'PM');
132+
await testElement.setColumnToValue(0, '2');
133+
await testElement.setColumnToValue(1, '44');
134+
await testElement.setColumnToValue(2, 'PM');
132135

133136
await expect(dateTimeText).toHaveText('14:44');
134137
} else {
@@ -139,105 +142,82 @@ describe('Example', () => {
139142
}
140143
});
141144

142-
it("shouldn't change time text when time changes to less than half of minuteInterval", async () => {
143-
element(by.id('timePickerIntervalButton')).tap();
145+
it('should correct time text when using minuteInterval', async () => {
146+
await element(by.id('timePickerDefaultIntervalButton')).tap();
144147
const dateTimeText = element(by.id('dateTimeText'));
145148

146149
if (global.device.getPlatform() === 'ios') {
147150
const testElement = element(
148151
by.type('UIPickerView').withAncestor(by.id('dateTimePicker')),
149152
);
150-
testElement.setColumnToValue(0, '2');
151-
testElement.setColumnToValue(1, '42');
152-
testElement.setColumnToValue(2, 'PM');
153-
154-
await expect(dateTimeText).toHaveText('14:40');
155-
} else {
156-
const keyboardButton = element(
157-
by.type('androidx.appcompat.widget.AppCompatImageButton'),
158-
);
159-
keyboardButton.tap();
160-
const testElement = element(
161-
by
162-
.type('androidx.appcompat.widget.AppCompatEditText')
163-
.and(by.text('15')),
164-
);
165-
testElement.tap();
166-
testElement.replaceText('17');
167-
element(by.text('OK')).tap();
168-
169-
await expect(dateTimeText).toHaveText('23:15');
170-
}
171-
});
172-
173-
it('should change time text when time changes to more than half of minuteInterval', async () => {
174-
element(by.id('timePickerIntervalButton')).tap();
175-
const dateTimeText = element(by.id('dateTimeText'));
176-
177-
if (global.device.getPlatform() === 'ios') {
178-
const testElement = element(
179-
by.type('UIPickerView').withAncestor(by.id('dateTimePicker')),
180-
);
181-
testElement.setColumnToValue(0, '2');
182-
testElement.setColumnToValue(1, '44');
183-
testElement.setColumnToValue(2, 'PM');
153+
await testElement.setColumnToValue(0, '2');
154+
await testElement.setColumnToValue(1, '45');
155+
await testElement.setColumnToValue(2, 'PM');
184156

185157
await expect(dateTimeText).toHaveText('14:45');
186158
} else {
187159
const keyboardButton = element(
188160
by.type('androidx.appcompat.widget.AppCompatImageButton'),
189161
);
190-
keyboardButton.tap();
162+
await keyboardButton.tap();
191163
const testElement = element(
192164
by
193165
.type('androidx.appcompat.widget.AppCompatEditText')
194166
.and(by.text('15')),
195167
);
196-
testElement.tap();
197-
testElement.replaceText('18');
198-
element(by.text('OK')).tap();
168+
await testElement.tap();
169+
await testElement.replaceText('18');
170+
await element(by.text('OK')).tap();
199171

200172
await expect(dateTimeText).toHaveText('23:20');
201173
}
202174
});
203175

204-
it('should correct input on the fly on android', async () => {
205-
element(by.id('timePickerIntervalButton')).tap();
176+
it('should change minutes when pressing in default interval button', async () => {
177+
await element(by.id('timePickerDefaultIntervalButton')).tap();
206178
const dateTimeText = element(by.id('dateTimeText'));
207179

208-
if (global.device.getPlatform() !== 'ios') {
180+
if (global.device.getPlatform() === 'android') {
209181
const keyboardButton = element(
210182
by.type('androidx.appcompat.widget.AppCompatImageButton'),
211183
);
212-
keyboardButton.tap();
184+
await keyboardButton.tap();
213185

214-
element(
186+
await element(
215187
by
216188
.type('androidx.appcompat.widget.AppCompatEditText')
217189
.and(by.text('15')),
218190
).tap();
219-
element(
191+
192+
await element(
220193
by
221194
.type('androidx.appcompat.widget.AppCompatEditText')
222195
.and(by.text('15')),
223196
).tapBackspaceKey();
197+
224198
element(
225199
by
226200
.type('androidx.appcompat.widget.AppCompatEditText')
227201
.and(by.text('1')),
228-
).typeText('8');
202+
);
203+
204+
const minuteTextinput = element(
205+
by.type('androidx.appcompat.widget.AppCompatEditText'),
206+
).atIndex(1);
207+
208+
await minuteTextinput.replaceText('55');
229209

230210
await expect(
231211
element(
232212
by
233213
.type('androidx.appcompat.widget.AppCompatEditText')
234-
.and(by.text('18')),
214+
.and(by.text('55')),
235215
),
236-
).toExist();
216+
).toBeVisible();
237217

238-
element(by.text('OK')).tap();
218+
await element(by.text('OK')).tap();
239219

240-
await expect(dateTimeText).toHaveText('23:20');
220+
await expect(dateTimeText).toHaveText('23:55');
241221
}
242222
});
243223
});

example/e2e/init.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ detoxCircus.getEnv().addEventsListener(assignReporter);
99
detoxCircus.getEnv().addEventsListener(specReporter);
1010

1111
// Set the default timeout
12-
jest.setTimeout(130000);
12+
jest.setTimeout(13000);
1313

1414
beforeAll(async () => {
1515
await detox.init(config);

example/ios/Podfile.lock

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -292,7 +292,7 @@ PODS:
292292
- React-cxxreact (= 0.62.2)
293293
- React-jsi (= 0.62.2)
294294
- ReactCommon/callinvoker (= 0.62.2)
295-
- RNDateTimePicker (2.3.2):
295+
- RNDateTimePicker (2.4.0):
296296
- React
297297
- Yoga (1.14.0)
298298
- YogaKit (1.18.1):
@@ -453,7 +453,7 @@ SPEC CHECKSUMS:
453453
React-RCTText: fae545b10cfdb3d247c36c56f61a94cfd6dba41d
454454
React-RCTVibration: 4356114dbcba4ce66991096e51a66e61eda51256
455455
ReactCommon: ed4e11d27609d571e7eee8b65548efc191116eb3
456-
RNDateTimePicker: 4bd49e09f91ca73d69119a9e1173b0d43b82f5e5
456+
RNDateTimePicker: c4285bfdd87430f1e575b81a4742b7586a09d53e
457457
Yoga: 3ebccbdd559724312790e7742142d062476b698e
458458
YogaKit: f782866e155069a2cca2517aafea43200b01fd5a
459459

0 commit comments

Comments
 (0)