@@ -3,10 +3,12 @@ package com.example.util.simpletimetracker
3
3
import android.view.View
4
4
import android.widget.DatePicker
5
5
import android.widget.TimePicker
6
+ import androidx.annotation.IdRes
6
7
import androidx.test.espresso.Espresso.onView
7
8
import androidx.test.espresso.contrib.PickerActions
8
9
import androidx.test.espresso.contrib.PickerActions.setTime
9
10
import androidx.test.espresso.matcher.ViewMatchers.hasDescendant
11
+ import androidx.test.espresso.matcher.ViewMatchers.hasSibling
10
12
import androidx.test.espresso.matcher.ViewMatchers.isDescendantOfA
11
13
import androidx.test.espresso.matcher.ViewMatchers.withClassName
12
14
import androidx.test.espresso.matcher.ViewMatchers.withId
@@ -21,6 +23,7 @@ import com.example.util.simpletimetracker.utils.clickOnRecyclerItem
21
23
import com.example.util.simpletimetracker.utils.clickOnViewWithId
22
24
import com.example.util.simpletimetracker.utils.clickOnViewWithText
23
25
import com.example.util.simpletimetracker.utils.longClickOnView
26
+ import com.example.util.simpletimetracker.utils.scrollRecyclerToView
24
27
import com.example.util.simpletimetracker.utils.tryAction
25
28
import com.example.util.simpletimetracker.utils.typeTextIntoView
26
29
import com.example.util.simpletimetracker.utils.unconstrainedClickOnView
@@ -158,7 +161,6 @@ class ChangeRunningRecordTest : BaseUiTest() {
158
161
color = lastColor,
159
162
text = lastEmoji,
160
163
timeStarted = timeStartedPreview,
161
- goalTime = " " ,
162
164
comment = comment
163
165
)
164
166
}
@@ -357,6 +359,280 @@ class ChangeRunningRecordTest : BaseUiTest() {
357
359
clickOnViewWithText(R .string.change_record_comment_field)
358
360
}
359
361
362
+ @Test
363
+ fun goalTimes () {
364
+ fun checkGoal (typeName : String , @IdRes goalTextId : Int , goal : String ) {
365
+ allOf(
366
+ isDescendantOfA(withId(R .id.viewRunningRecordItem)),
367
+ hasSibling(withText(typeName)),
368
+ withId(goalTextId),
369
+ withSubstring(goal),
370
+ ).let (::checkViewIsDisplayed)
371
+ }
372
+
373
+ fun checkNoGoal (typeName : String , @IdRes goalTextId : Int ) {
374
+ allOf(
375
+ isDescendantOfA(withId(R .id.viewRunningRecordItem)),
376
+ hasSibling(withText(typeName)),
377
+ withId(goalTextId),
378
+ ).let (::checkViewIsNotDisplayed)
379
+ }
380
+
381
+ fun checkGoalMark (typeName : String , @IdRes checkId : Int , isVisible : Boolean ) {
382
+ allOf(
383
+ isDescendantOfA(withId(R .id.viewRunningRecordItem)),
384
+ hasSibling(withText(typeName)),
385
+ withId(checkId),
386
+ ).let {
387
+ if (isVisible) checkViewIsDisplayed(it) else checkViewIsNotDisplayed(it)
388
+ }
389
+ }
390
+
391
+ fun scrollTo (typeName : String ) {
392
+ tryAction {
393
+ scrollRecyclerToView(
394
+ R .id.rvRunningRecordsList,
395
+ allOf(withId(R .id.viewRunningRecordItem), hasDescendant(withText(typeName)))
396
+ )
397
+ }
398
+ }
399
+
400
+ val sessionGoal = getString(R .string.change_record_type_session_goal_time).lowercase()
401
+ val dailyGoal = getString(R .string.change_record_type_daily_goal_time).lowercase()
402
+ val weeklyGoal = getString(R .string.change_record_type_weekly_goal_time).lowercase()
403
+ val currentTime = Calendar .getInstance().timeInMillis
404
+
405
+ val noGoals = " noGoals"
406
+ val sessionGoalNotFinished = " sessionGoalNotFinished"
407
+ val sessionGoalFinished = " sessionGoalFinished"
408
+ val dailyGoalNotFinished = " dailyGoalNotFinished"
409
+ val dailyGoalFinished = " dailyGoalFinished"
410
+ val weeklyGoalNotFinished = " weeklyGoalNotFinished"
411
+ val weeklyGoalFinished = " weeklyGoalFinished"
412
+ val allGoalsNotFinished = " allGoalsNotFinished"
413
+ val allGoalsFinished = " allGoalsFinished"
414
+ val allGoalsSessionFinished = " allGoalsSessionFinished"
415
+ val allGoalsDailyFinished = " allGoalsDailyFinished"
416
+ val allGoalsWeeklyFinished = " allGoalsWeeklyFinished"
417
+
418
+ // Add data
419
+ testUtils.addActivity(noGoals)
420
+ testUtils.addRunningRecord(noGoals)
421
+
422
+ testUtils.addActivity(sessionGoalNotFinished, goalTime = TimeUnit .MINUTES .toSeconds(10 ))
423
+ testUtils.addRecord(sessionGoalNotFinished)
424
+ testUtils.addRunningRecord(sessionGoalNotFinished)
425
+
426
+ testUtils.addActivity(sessionGoalFinished, goalTime = TimeUnit .MINUTES .toSeconds(10 ))
427
+ testUtils.addRunningRecord(
428
+ typeName = sessionGoalFinished,
429
+ timeStarted = currentTime - TimeUnit .MINUTES .toMillis(10 ),
430
+ )
431
+
432
+ testUtils.addActivity(dailyGoalNotFinished, dailyGoalTime = TimeUnit .MINUTES .toSeconds(10 ))
433
+ testUtils.addRecord(
434
+ typeName = dailyGoalNotFinished,
435
+ timeStarted = currentTime - TimeUnit .MINUTES .toMillis(5 ),
436
+ timeEnded = currentTime,
437
+ )
438
+ testUtils.addRunningRecord(dailyGoalNotFinished)
439
+
440
+ testUtils.addActivity(dailyGoalFinished, dailyGoalTime = TimeUnit .MINUTES .toSeconds(10 ))
441
+ testUtils.addRecord(
442
+ typeName = dailyGoalFinished,
443
+ timeStarted = currentTime - TimeUnit .MINUTES .toMillis(10 ),
444
+ timeEnded = currentTime,
445
+ )
446
+ testUtils.addRunningRecord(dailyGoalFinished)
447
+
448
+ testUtils.addActivity(weeklyGoalNotFinished, weeklyGoalTime = TimeUnit .MINUTES .toSeconds(10 ))
449
+ testUtils.addRecord(
450
+ typeName = weeklyGoalNotFinished,
451
+ timeStarted = currentTime - TimeUnit .MINUTES .toMillis(5 ),
452
+ timeEnded = currentTime,
453
+ )
454
+ testUtils.addRunningRecord(weeklyGoalNotFinished)
455
+
456
+ testUtils.addActivity(weeklyGoalFinished, weeklyGoalTime = TimeUnit .MINUTES .toSeconds(10 ))
457
+ testUtils.addRecord(
458
+ typeName = weeklyGoalFinished,
459
+ timeStarted = currentTime - TimeUnit .MINUTES .toMillis(10 ),
460
+ timeEnded = currentTime,
461
+ )
462
+ testUtils.addRunningRecord(weeklyGoalFinished)
463
+
464
+ testUtils.addActivity(
465
+ name = allGoalsNotFinished,
466
+ goalTime = TimeUnit .MINUTES .toSeconds(10 ),
467
+ dailyGoalTime = TimeUnit .MINUTES .toSeconds(20 ),
468
+ weeklyGoalTime = TimeUnit .MINUTES .toSeconds(30 ),
469
+ )
470
+ testUtils.addRecord(
471
+ typeName = allGoalsNotFinished,
472
+ timeStarted = currentTime - TimeUnit .MINUTES .toMillis(5 ),
473
+ timeEnded = currentTime,
474
+ )
475
+ testUtils.addRunningRecord(allGoalsNotFinished)
476
+
477
+ testUtils.addActivity(
478
+ name = allGoalsFinished,
479
+ goalTime = TimeUnit .MINUTES .toSeconds(10 ),
480
+ dailyGoalTime = TimeUnit .MINUTES .toSeconds(10 ),
481
+ weeklyGoalTime = TimeUnit .MINUTES .toSeconds(10 ),
482
+ )
483
+ testUtils.addRecord(
484
+ typeName = allGoalsFinished,
485
+ timeStarted = currentTime - TimeUnit .MINUTES .toMillis(10 ),
486
+ timeEnded = currentTime,
487
+ )
488
+ testUtils.addRunningRecord(
489
+ typeName = allGoalsFinished,
490
+ timeStarted = currentTime - TimeUnit .MINUTES .toMillis(10 ),
491
+ )
492
+
493
+ testUtils.addActivity(
494
+ name = allGoalsSessionFinished,
495
+ goalTime = TimeUnit .MINUTES .toSeconds(10 ),
496
+ dailyGoalTime = TimeUnit .MINUTES .toSeconds(20 ),
497
+ weeklyGoalTime = TimeUnit .MINUTES .toSeconds(30 ),
498
+ )
499
+ testUtils.addRunningRecord(
500
+ typeName = allGoalsSessionFinished,
501
+ timeStarted = currentTime - TimeUnit .MINUTES .toMillis(10 ),
502
+ )
503
+
504
+ testUtils.addActivity(
505
+ name = allGoalsDailyFinished,
506
+ goalTime = TimeUnit .MINUTES .toSeconds(20 ),
507
+ dailyGoalTime = TimeUnit .MINUTES .toSeconds(10 ),
508
+ weeklyGoalTime = TimeUnit .MINUTES .toSeconds(30 ),
509
+ )
510
+ testUtils.addRunningRecord(
511
+ typeName = allGoalsDailyFinished,
512
+ timeStarted = currentTime - TimeUnit .MINUTES .toMillis(10 ),
513
+ )
514
+
515
+ testUtils.addActivity(
516
+ name = allGoalsWeeklyFinished,
517
+ goalTime = TimeUnit .MINUTES .toSeconds(20 ),
518
+ dailyGoalTime = TimeUnit .MINUTES .toSeconds(30 ),
519
+ weeklyGoalTime = TimeUnit .MINUTES .toSeconds(10 ),
520
+ )
521
+ testUtils.addRunningRecord(
522
+ typeName = allGoalsWeeklyFinished,
523
+ timeStarted = currentTime - TimeUnit .MINUTES .toMillis(10 ),
524
+ )
525
+
526
+ // No goals
527
+ Thread .sleep(1000 )
528
+ scrollTo(noGoals)
529
+ checkNoGoal(noGoals, R .id.tvRunningRecordItemGoalTime)
530
+ checkGoalMark(noGoals, R .id.ivRunningRecordItemGoalTimeCheck, isVisible = false )
531
+ checkNoGoal(noGoals, R .id.tvRunningRecordItemGoalTime2)
532
+ checkGoalMark(noGoals, R .id.ivRunningRecordItemGoalTimeCheck2, isVisible = false )
533
+ checkNoGoal(noGoals, R .id.tvRunningRecordItemGoalTime3)
534
+ checkGoalMark(noGoals, R .id.ivRunningRecordItemGoalTimeCheck3, isVisible = false )
535
+
536
+ // Session goal not finished
537
+ scrollTo(sessionGoalNotFinished)
538
+ checkGoal(sessionGoalNotFinished, R .id.tvRunningRecordItemGoalTime, " $sessionGoal 9$minuteString " )
539
+ checkGoalMark(sessionGoalNotFinished, R .id.ivRunningRecordItemGoalTimeCheck, isVisible = false )
540
+ checkNoGoal(sessionGoalNotFinished, R .id.tvRunningRecordItemGoalTime2)
541
+ checkGoalMark(sessionGoalNotFinished, R .id.ivRunningRecordItemGoalTimeCheck2, isVisible = false )
542
+ checkNoGoal(sessionGoalNotFinished, R .id.tvRunningRecordItemGoalTime3)
543
+ checkGoalMark(sessionGoalNotFinished, R .id.ivRunningRecordItemGoalTimeCheck3, isVisible = false )
544
+
545
+ // Session goal finished
546
+ scrollTo(sessionGoalFinished)
547
+ checkGoal(sessionGoalFinished, R .id.tvRunningRecordItemGoalTime, sessionGoal)
548
+ checkGoalMark(sessionGoalFinished, R .id.ivRunningRecordItemGoalTimeCheck, isVisible = true )
549
+ checkNoGoal(sessionGoalFinished, R .id.tvRunningRecordItemGoalTime2)
550
+ checkGoalMark(sessionGoalFinished, R .id.ivRunningRecordItemGoalTimeCheck2, isVisible = false )
551
+ checkNoGoal(sessionGoalFinished, R .id.tvRunningRecordItemGoalTime3)
552
+ checkGoalMark(sessionGoalFinished, R .id.ivRunningRecordItemGoalTimeCheck3, isVisible = false )
553
+
554
+ // Daily goal not finished
555
+ scrollTo(dailyGoalNotFinished)
556
+ checkNoGoal(dailyGoalNotFinished, R .id.tvRunningRecordItemGoalTime)
557
+ checkGoalMark(dailyGoalNotFinished, R .id.ivRunningRecordItemGoalTimeCheck, isVisible = false )
558
+ checkGoal(dailyGoalNotFinished, R .id.tvRunningRecordItemGoalTime2, " $dailyGoal 4$minuteString " )
559
+ checkGoalMark(dailyGoalNotFinished, R .id.ivRunningRecordItemGoalTimeCheck2, isVisible = false )
560
+ checkNoGoal(dailyGoalNotFinished, R .id.tvRunningRecordItemGoalTime3)
561
+ checkGoalMark(dailyGoalNotFinished, R .id.ivRunningRecordItemGoalTimeCheck3, isVisible = false )
562
+
563
+ // Daily goal finished
564
+ scrollTo(dailyGoalFinished)
565
+ checkNoGoal(dailyGoalFinished, R .id.tvRunningRecordItemGoalTime)
566
+ checkGoalMark(dailyGoalFinished, R .id.ivRunningRecordItemGoalTimeCheck, isVisible = false )
567
+ checkGoal(dailyGoalFinished, R .id.tvRunningRecordItemGoalTime2, dailyGoal)
568
+ checkGoalMark(dailyGoalFinished, R .id.ivRunningRecordItemGoalTimeCheck2, isVisible = true )
569
+ checkNoGoal(dailyGoalFinished, R .id.tvRunningRecordItemGoalTime3)
570
+ checkGoalMark(dailyGoalFinished, R .id.ivRunningRecordItemGoalTimeCheck3, isVisible = false )
571
+
572
+ // Weekly goal not finished
573
+ scrollTo(weeklyGoalNotFinished)
574
+ checkNoGoal(weeklyGoalNotFinished, R .id.tvRunningRecordItemGoalTime)
575
+ checkGoalMark(weeklyGoalNotFinished, R .id.ivRunningRecordItemGoalTimeCheck, isVisible = false )
576
+ checkNoGoal(weeklyGoalNotFinished, R .id.tvRunningRecordItemGoalTime2)
577
+ checkGoalMark(weeklyGoalNotFinished, R .id.ivRunningRecordItemGoalTimeCheck2, isVisible = false )
578
+ checkGoal(weeklyGoalNotFinished, R .id.tvRunningRecordItemGoalTime3, " $weeklyGoal 4$minuteString " )
579
+ checkGoalMark(weeklyGoalNotFinished, R .id.ivRunningRecordItemGoalTimeCheck3, isVisible = false )
580
+
581
+ // Weekly goal finished
582
+ scrollTo(weeklyGoalFinished)
583
+ checkNoGoal(weeklyGoalFinished, R .id.tvRunningRecordItemGoalTime)
584
+ checkGoalMark(weeklyGoalFinished, R .id.ivRunningRecordItemGoalTimeCheck, isVisible = false )
585
+ checkNoGoal(weeklyGoalFinished, R .id.tvRunningRecordItemGoalTime2)
586
+ checkGoalMark(weeklyGoalFinished, R .id.ivRunningRecordItemGoalTimeCheck2, isVisible = false )
587
+ checkGoal(weeklyGoalFinished, R .id.tvRunningRecordItemGoalTime3, weeklyGoal)
588
+ checkGoalMark(weeklyGoalFinished, R .id.ivRunningRecordItemGoalTimeCheck3, isVisible = true )
589
+
590
+ // All goals, all not finished
591
+ scrollTo(allGoalsNotFinished)
592
+ checkGoal(allGoalsNotFinished, R .id.tvRunningRecordItemGoalTime, " $sessionGoal 9$minuteString " )
593
+ checkGoalMark(allGoalsNotFinished, R .id.ivRunningRecordItemGoalTimeCheck, isVisible = false )
594
+ checkGoal(allGoalsNotFinished, R .id.tvRunningRecordItemGoalTime2, " $dailyGoal 14$minuteString " )
595
+ checkGoalMark(allGoalsNotFinished, R .id.ivRunningRecordItemGoalTimeCheck2, isVisible = false )
596
+ checkGoal(allGoalsNotFinished, R .id.tvRunningRecordItemGoalTime3, " $weeklyGoal 24$minuteString " )
597
+ checkGoalMark(allGoalsNotFinished, R .id.ivRunningRecordItemGoalTimeCheck3, isVisible = false )
598
+
599
+ // All goals, all finished
600
+ scrollTo(allGoalsFinished)
601
+ checkGoal(allGoalsFinished, R .id.tvRunningRecordItemGoalTime, sessionGoal)
602
+ checkGoalMark(allGoalsFinished, R .id.ivRunningRecordItemGoalTimeCheck, isVisible = true )
603
+ checkGoal(allGoalsFinished, R .id.tvRunningRecordItemGoalTime2, dailyGoal)
604
+ checkGoalMark(allGoalsFinished, R .id.ivRunningRecordItemGoalTimeCheck2, isVisible = true )
605
+ checkGoal(allGoalsFinished, R .id.tvRunningRecordItemGoalTime3, weeklyGoal)
606
+ checkGoalMark(allGoalsFinished, R .id.ivRunningRecordItemGoalTimeCheck3, isVisible = true )
607
+
608
+ // All goals, session finished
609
+ scrollTo(allGoalsSessionFinished)
610
+ checkGoal(allGoalsSessionFinished, R .id.tvRunningRecordItemGoalTime, sessionGoal)
611
+ checkGoalMark(allGoalsSessionFinished, R .id.ivRunningRecordItemGoalTimeCheck, isVisible = true )
612
+ checkGoal(allGoalsSessionFinished, R .id.tvRunningRecordItemGoalTime2, " $dailyGoal 9$minuteString " )
613
+ checkGoalMark(allGoalsSessionFinished, R .id.ivRunningRecordItemGoalTimeCheck2, isVisible = false )
614
+ checkGoal(allGoalsSessionFinished, R .id.tvRunningRecordItemGoalTime3, " $weeklyGoal 19$minuteString " )
615
+ checkGoalMark(allGoalsSessionFinished, R .id.ivRunningRecordItemGoalTimeCheck3, isVisible = false )
616
+
617
+ // All goals, daily finished
618
+ scrollTo(allGoalsDailyFinished)
619
+ checkGoal(allGoalsDailyFinished, R .id.tvRunningRecordItemGoalTime, " $sessionGoal 9$minuteString " )
620
+ checkGoalMark(allGoalsDailyFinished, R .id.ivRunningRecordItemGoalTimeCheck, isVisible = false )
621
+ checkGoal(allGoalsDailyFinished, R .id.tvRunningRecordItemGoalTime2, dailyGoal)
622
+ checkGoalMark(allGoalsDailyFinished, R .id.ivRunningRecordItemGoalTimeCheck2, isVisible = true )
623
+ checkGoal(allGoalsDailyFinished, R .id.tvRunningRecordItemGoalTime3, " $weeklyGoal 19$minuteString " )
624
+ checkGoalMark(allGoalsDailyFinished, R .id.ivRunningRecordItemGoalTimeCheck3, isVisible = false )
625
+
626
+ // All goals, weekly finished
627
+ scrollTo(allGoalsWeeklyFinished)
628
+ checkGoal(allGoalsWeeklyFinished, R .id.tvRunningRecordItemGoalTime, " $sessionGoal 9$minuteString " )
629
+ checkGoalMark(allGoalsWeeklyFinished, R .id.ivRunningRecordItemGoalTimeCheck, isVisible = false )
630
+ checkGoal(allGoalsWeeklyFinished, R .id.tvRunningRecordItemGoalTime2, " $dailyGoal 19$minuteString " )
631
+ checkGoalMark(allGoalsWeeklyFinished, R .id.ivRunningRecordItemGoalTimeCheck2, isVisible = false )
632
+ checkGoal(allGoalsWeeklyFinished, R .id.tvRunningRecordItemGoalTime3, weeklyGoal)
633
+ checkGoalMark(allGoalsWeeklyFinished, R .id.ivRunningRecordItemGoalTimeCheck3, isVisible = true )
634
+ }
635
+
360
636
private fun checkAfterTimeAdjustment (timeStarted : String ) {
361
637
checkPreviewUpdated(hasDescendant(allOf(withId(R .id.tvRunningRecordItemTimeStarted), withText(timeStarted))))
362
638
checkViewIsDisplayed(allOf(withId(R .id.tvChangeRecordTimeStarted), withSubstring(timeStarted)))
0 commit comments