@@ -5,13 +5,15 @@ const {
5
5
getDatePickerAndroid,
6
6
getDateTimePickerControlIOS,
7
7
getInlineTimePickerIOS,
8
+ getDatePickerButtonIOS,
8
9
} = require ( './utils/matchers' ) ;
9
10
const {
10
11
userChangesTimeValue,
11
12
userOpensPicker,
12
13
userTapsCancelButtonAndroid,
13
14
userTapsOkButtonAndroid,
14
- userDismissesCompactDatePicker,
15
+ userSelectsDayInCalendar,
16
+ userSwipesTimezoneListUntilDesiredIsVisible,
15
17
} = require ( './utils/actions' ) ;
16
18
const { isIOS, isAndroid, wait, Platform} = require ( './utils/utils' ) ;
17
19
const { device} = require ( 'detox' ) ;
@@ -63,15 +65,15 @@ describe('e2e tests', () => {
63
65
await userOpensPicker ( { mode : 'date' , display : 'default' } ) ;
64
66
65
67
if ( isIOS ( ) ) {
66
- await element (
67
- by . traits ( [ 'staticText' ] ) . withAncestor ( by . label ( 'Date Picker' ) ) ,
68
- ) . tap ( ) ;
68
+ await elementById ( 'DateTimePickerScrollView' ) . scrollTo ( 'bottom' ) ;
69
+ await getDatePickerButtonIOS ( ) . tap ( ) ;
70
+
69
71
// 'label' maps to 'description' in view hierarchy debugger
70
72
const nextMonthArrow = element ( by . label ( 'Next Month' ) ) ;
71
73
72
74
await nextMonthArrow . tap ( ) ;
73
75
await nextMonthArrow . tap ( ) ;
74
- await userDismissesCompactDatePicker ( ) ;
76
+ await getDatePickerButtonIOS ( ) . tap ( ) ;
75
77
} else {
76
78
const calendarHorizontalScrollView = element (
77
79
by
@@ -119,9 +121,11 @@ describe('e2e tests', () => {
119
121
ios : 'inline' ,
120
122
android : 'default' ,
121
123
} ) ;
124
+ await elementById ( 'DateTimePickerScrollView' ) . scrollTo ( 'top' ) ;
122
125
await userOpensPicker ( { mode : 'time' , display} ) ;
123
126
124
127
if ( isIOS ( ) ) {
128
+ await elementById ( 'DateTimePickerScrollView' ) . scrollTo ( 'bottom' ) ;
125
129
await expect ( getInlineTimePickerIOS ( ) ) . toBeVisible ( ) ;
126
130
} else {
127
131
await expect ( element ( by . type ( 'android.widget.TimePicker' ) ) ) . toBeVisible ( ) ;
@@ -165,16 +169,19 @@ describe('e2e tests', () => {
165
169
166
170
await expect ( elementById ( 'overriddenTzName' ) ) . toHaveText ( 'Europe/Prague' ) ;
167
171
168
- await elementById ( 'timezone ' ) . swipe ( 'left' , 'fast' , 0.5 ) ;
172
+ await elementById ( 'DateTimePickerScrollView ' ) . scrollTo ( 'bottom' ) ;
169
173
170
174
let timeZone = 'America/Vancouver' ;
175
+ await waitFor ( elementById ( 'timezone' ) ) . toBeVisible ( ) . withTimeout ( 1000 ) ;
176
+ await userSwipesTimezoneListUntilDesiredIsVisible ( timeZone ) ;
177
+
171
178
if ( isAndroid ( ) ) {
172
179
timeZone = timeZone . toUpperCase ( ) ;
173
180
}
174
181
175
182
await waitFor ( elementByText ( timeZone ) ) . toBeVisible ( ) . withTimeout ( 1000 ) ;
176
183
177
- await elementByText ( timeZone ) . tap ( ) ;
184
+ await elementByText ( timeZone ) . multiTap ( 2 ) ;
178
185
179
186
await assertTimeLabels ( {
180
187
utcTime : '2021-11-13T01:00:00Z' ,
@@ -188,17 +195,21 @@ describe('e2e tests', () => {
188
195
} ) ;
189
196
190
197
it ( 'daylight saving should work properly' , async ( ) => {
191
- await elementById ( 'timezone ' ) . swipe ( 'left' , 'fast' , 0.5 ) ;
198
+ await elementById ( 'DateTimePickerScrollView ' ) . scrollTo ( 'bottom' ) ;
192
199
193
200
let timeZone = 'America/Vancouver' ;
201
+ await waitFor ( elementById ( 'timezone' ) ) . toBeVisible ( ) . withTimeout ( 1000 ) ;
202
+ await userSwipesTimezoneListUntilDesiredIsVisible ( timeZone ) ;
203
+
194
204
if ( isAndroid ( ) ) {
195
205
timeZone = timeZone . toUpperCase ( ) ;
196
206
}
197
207
198
208
await waitFor ( elementByText ( timeZone ) ) . toBeVisible ( ) . withTimeout ( 1000 ) ;
199
209
200
- await elementByText ( timeZone ) . tap ( ) ;
210
+ await elementByText ( timeZone ) . multiTap ( 2 ) ;
201
211
212
+ await elementById ( 'DateTimePickerScrollView' ) . scrollTo ( 'top' ) ;
202
213
await userOpensPicker ( { mode : 'date' , display : getPickerDisplay ( ) } ) ;
203
214
204
215
if ( isIOS ( ) ) {
@@ -228,6 +239,7 @@ describe('e2e tests', () => {
228
239
await uiDevice . pressEnter ( ) ;
229
240
await userTapsOkButtonAndroid ( ) ;
230
241
242
+ await elementById ( 'DateTimePickerScrollView' ) . scrollTo ( 'top' ) ;
231
243
await userOpensPicker ( { mode : 'time' , display : getPickerDisplay ( ) } ) ;
232
244
await userChangesTimeValue ( { hours : '2' , minutes : '0' } ) ;
233
245
await userTapsOkButtonAndroid ( ) ;
@@ -275,6 +287,8 @@ describe('e2e tests', () => {
275
287
tzOffsetPreset = tzOffsetPreset . toUpperCase ( ) ;
276
288
}
277
289
290
+ await elementById ( 'DateTimePickerScrollView' ) . scrollTo ( 'top' ) ;
291
+
278
292
await userOpensPicker ( {
279
293
mode : 'time' ,
280
294
display : getPickerDisplay ( ) ,
@@ -310,7 +324,9 @@ describe('e2e tests', () => {
310
324
await expect ( elementById ( 'utcTime' ) ) . toHaveText ( '2021-11-13T00:00:00Z' ) ;
311
325
312
326
// Ensure you can select tomorrow (iOS)
327
+ await elementById ( 'DateTimePickerScrollView' ) . scrollTo ( 'top' ) ;
313
328
await userOpensPicker ( { mode : 'date' , display : getPickerDisplay ( ) } ) ;
329
+ await elementById ( 'DateTimePickerScrollView' ) . scrollTo ( 'bottom' ) ;
314
330
await testElement . setDatePickerDate ( '2021-11-14T01:00:00Z' , 'ISO8601' ) ;
315
331
} else {
316
332
const uiDevice = device . getUiDevice ( ) ;
@@ -445,4 +461,47 @@ describe('e2e tests', () => {
445
461
} ) ;
446
462
} ) ;
447
463
} ) ;
464
+
465
+ describe ( ':android: firstDayOfWeek functionality' , ( ) => {
466
+ it . each ( [
467
+ {
468
+ firstDayOfWeekIn : 'Sunday' ,
469
+ selectDayPositions : { xPosIn : - 2 , yPosIn : 4 } ,
470
+ } ,
471
+ {
472
+ firstDayOfWeekIn : 'Tuesday' ,
473
+ selectDayPositions : { xPosIn : 3 , yPosIn : 3 } ,
474
+ } ,
475
+ ] ) (
476
+ ':android: picker should have $firstDayOfWeekIn as firstDayOfWeek and select Sunday date' ,
477
+ async ( { firstDayOfWeekIn, selectDayPositions} ) => {
478
+ const targetDate = '2021-11-07T01:00:00Z' ;
479
+ const targetDateWithTZ = '2021-11-07T02:00:00+01:00' ;
480
+
481
+ await userOpensPicker ( {
482
+ mode : 'date' ,
483
+ display : getPickerDisplay ( ) ,
484
+ firstDayOfWeek : firstDayOfWeekIn ,
485
+ } ) ;
486
+ await expect ( getDatePickerAndroid ( ) ) . toBeVisible ( ) ;
487
+
488
+ const uiDevice = device . getUiDevice ( ) ;
489
+ await userSelectsDayInCalendar ( uiDevice , {
490
+ xPos : selectDayPositions . xPosIn ,
491
+ yPos : selectDayPositions . yPosIn ,
492
+ } ) ;
493
+
494
+ await userTapsOkButtonAndroid ( ) ;
495
+
496
+ await expect ( elementById ( 'firstDayOfWeek' ) ) . toHaveText (
497
+ firstDayOfWeekIn ,
498
+ ) ;
499
+
500
+ await assertTimeLabels ( {
501
+ utcTime : targetDate ,
502
+ deviceTime : targetDateWithTZ ,
503
+ } ) ;
504
+ } ,
505
+ ) ;
506
+ } ) ;
448
507
} ) ;
0 commit comments