Skip to content

Commit 087813c

Browse files
committed
fix detox tests
1 parent 943796b commit 087813c

File tree

7 files changed

+68
-84
lines changed

7 files changed

+68
-84
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: 44 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -22,15 +22,14 @@ describe('Example', () => {
2222
});
2323

2424
it('should have title and hermes indicator on android', async () => {
25-
await expect(element(by.id('appRootView'))).toBeVisible();
2625
await expect(element(by.text('Example DateTime Picker'))).toBeVisible();
2726
if (device.getPlatform() === 'android') {
2827
await expect(element(by.id('hermesIndicator'))).toExist();
2928
}
3029
});
3130

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

3534
if (global.device.getPlatform() === 'ios') {
3635
await expect(
@@ -42,7 +41,7 @@ describe('Example', () => {
4241
});
4342

4443
it('Nothing should happen if date doesn`t change', async () => {
45-
element(by.id('datePickerButton')).tap();
44+
await element(by.id('datePickerButton')).tap();
4645
const dateTimeText = element(by.id('dateTimeText'));
4746

4847
if (global.device.getPlatform() === 'ios') {
@@ -57,23 +56,23 @@ describe('Example', () => {
5756
);
5857
testElement.swipe('left', 'fast', '100');
5958
testElement.tapAtPoint({x: 50, y: 200});
60-
element(by.text('CANCEL')).tap();
59+
await element(by.text('CANCEL')).tap();
6160
}
6261

6362
await expect(dateTimeText).toHaveText('08/21/2020');
6463
});
6564

6665
it('should update dateTimeText when date changes', async () => {
67-
element(by.id('datePickerButton')).tap();
66+
await element(by.id('datePickerButton')).tap();
6867
const dateTimeText = element(by.id('dateTimeText'));
6968

7069
if (global.device.getPlatform() === 'ios') {
7170
const testElement = element(
7271
by.type('UIPickerView').withAncestor(by.id('dateTimePicker')),
7372
);
74-
testElement.setColumnToValue(0, 'November');
75-
testElement.setColumnToValue(1, '3');
76-
testElement.setColumnToValue(2, '1800');
73+
await testElement.setColumnToValue(0, 'November');
74+
await testElement.setColumnToValue(1, '3');
75+
await testElement.setColumnToValue(2, '1800');
7776

7877
await expect(dateTimeText).toHaveText('11/03/1800');
7978
} else {
@@ -82,16 +81,16 @@ describe('Example', () => {
8281
.type('android.widget.ScrollView')
8382
.withAncestor(by.type('android.widget.DatePicker')),
8483
);
85-
testElement.swipe('left', 'fast', '100');
86-
testElement.tapAtPoint({x: 50, y: 200});
87-
element(by.text('OK')).tap();
84+
await testElement.swipe('left', 'fast', '100');
85+
await testElement.tapAtPoint({x: 50, y: 200});
86+
await element(by.text('OK')).tap();
8887

8988
await expect(dateTimeText).toHaveText('09/13/2020');
9089
}
9190
});
9291

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

9695
if (global.device.getPlatform() === 'ios') {
9796
await expect(
@@ -103,7 +102,7 @@ describe('Example', () => {
103102
});
104103

105104
it('Nothing should happen if time doesn`t change', async () => {
106-
element(by.id('timePickerButton')).tap();
105+
await element(by.id('timePickerButton')).tap();
107106
const dateTimeText = element(by.id('dateTimeText'));
108107

109108
if (global.device.getPlatform() === 'ios') {
@@ -119,16 +118,16 @@ describe('Example', () => {
119118
});
120119

121120
it('should change time text when time changes', async () => {
122-
element(by.id('timePickerButton')).tap();
121+
await element(by.id('timePickerButton')).tap();
123122
const dateTimeText = element(by.id('dateTimeText'));
124123

125124
if (global.device.getPlatform() === 'ios') {
126125
const testElement = element(
127126
by.type('UIPickerView').withAncestor(by.id('dateTimePicker')),
128127
);
129-
testElement.setColumnToValue(0, '2');
130-
testElement.setColumnToValue(1, '44');
131-
testElement.setColumnToValue(2, 'PM');
128+
await testElement.setColumnToValue(0, '2');
129+
await testElement.setColumnToValue(1, '44');
130+
await testElement.setColumnToValue(2, 'PM');
132131

133132
await expect(dateTimeText).toHaveText('14:44');
134133
} else {
@@ -139,105 +138,82 @@ describe('Example', () => {
139138
}
140139
});
141140

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

146145
if (global.device.getPlatform() === 'ios') {
147146
const testElement = element(
148147
by.type('UIPickerView').withAncestor(by.id('dateTimePicker')),
149148
);
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');
149+
await testElement.setColumnToValue(0, '2');
150+
await testElement.setColumnToValue(1, '45');
151+
await testElement.setColumnToValue(2, 'PM');
184152

185153
await expect(dateTimeText).toHaveText('14:45');
186154
} else {
187155
const keyboardButton = element(
188156
by.type('androidx.appcompat.widget.AppCompatImageButton'),
189157
);
190-
keyboardButton.tap();
158+
await keyboardButton.tap();
191159
const testElement = element(
192160
by
193161
.type('androidx.appcompat.widget.AppCompatEditText')
194162
.and(by.text('15')),
195163
);
196-
testElement.tap();
197-
testElement.replaceText('18');
198-
element(by.text('OK')).tap();
164+
await testElement.tap();
165+
await testElement.replaceText('18');
166+
await element(by.text('OK')).tap();
199167

200168
await expect(dateTimeText).toHaveText('23:20');
201169
}
202170
});
203171

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

208-
if (global.device.getPlatform() !== 'ios') {
176+
if (global.device.getPlatform() === 'android') {
209177
const keyboardButton = element(
210178
by.type('androidx.appcompat.widget.AppCompatImageButton'),
211179
);
212-
keyboardButton.tap();
180+
await keyboardButton.tap();
213181

214-
element(
182+
await element(
215183
by
216184
.type('androidx.appcompat.widget.AppCompatEditText')
217185
.and(by.text('15')),
218186
).tap();
219-
element(
187+
188+
await element(
220189
by
221190
.type('androidx.appcompat.widget.AppCompatEditText')
222191
.and(by.text('15')),
223192
).tapBackspaceKey();
193+
224194
element(
225195
by
226196
.type('androidx.appcompat.widget.AppCompatEditText')
227197
.and(by.text('1')),
228-
).typeText('8');
198+
);
199+
200+
const minuteTextinput = element(
201+
by.type('androidx.appcompat.widget.AppCompatEditText'),
202+
).atIndex(1);
203+
204+
await minuteTextinput.replaceText('55');
229205

230206
await expect(
231207
element(
232208
by
233209
.type('androidx.appcompat.widget.AppCompatEditText')
234-
.and(by.text('18')),
210+
.and(by.text('55')),
235211
),
236-
).toExist();
212+
).toBeVisible();
237213

238-
element(by.text('OK')).tap();
214+
await element(by.text('OK')).tap();
239215

240-
await expect(dateTimeText).toHaveText('23:20');
216+
await expect(dateTimeText).toHaveText('23:55');
241217
}
242218
});
243219
});

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)