Skip to content

Commit e647ef6

Browse files
committed
fix tests, add new tests
1 parent 030c49e commit e647ef6

File tree

22 files changed

+681
-212
lines changed

22 files changed

+681
-212
lines changed

app/src/androidTest/java/com/example/util/simpletimetracker/AddDefaultRecordTypeTest.kt

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,12 +83,19 @@ class AddDefaultRecordTypeTest : BaseUiTest() {
8383
checkOrder(name1, name1next, ::isCompletelyLeftOf, ::isTopAlignedWith)
8484
checkOrder(name2, name2next, ::isCompletelyAbove)
8585

86-
clickOnViewWithText(coreR.string.select_all)
86+
// Select all
87+
clickOnViewWithText(name1)
88+
clickOnViewWithText(name1next)
89+
clickOnViewWithText(name2next)
8790
checkViewIsDisplayed(withText(coreR.string.something_selected))
8891
checkOrder(name1, name1next, ::isCompletelyLeftOf, ::isTopAlignedWith)
8992
checkOrder(name2, name2next, ::isCompletelyLeftOf, ::isTopAlignedWith)
9093

91-
clickOnViewWithText(coreR.string.select_nothing)
94+
// Select nothing
95+
clickOnViewWithText(name1)
96+
clickOnViewWithText(name1next)
97+
clickOnViewWithText(name2)
98+
clickOnViewWithText(name2next)
9299
checkViewIsDisplayed(withText(coreR.string.nothing_selected))
93100
checkOrder(name1, name1next, ::isCompletelyLeftOf, ::isTopAlignedWith)
94101
checkOrder(name2, name2next, ::isCompletelyLeftOf, ::isTopAlignedWith)

app/src/androidTest/java/com/example/util/simpletimetracker/ChangeRecordTypeTest.kt

Lines changed: 0 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package com.example.util.simpletimetracker
22

33
import android.view.View
4-
import androidx.test.espresso.Espresso.closeSoftKeyboard
54
import androidx.test.espresso.Espresso.onView
65
import androidx.test.espresso.Espresso.pressBack
76
import androidx.test.espresso.matcher.ViewMatchers.hasDescendant
@@ -22,7 +21,6 @@ import com.example.util.simpletimetracker.utils.clickOnViewWithId
2221
import com.example.util.simpletimetracker.utils.clickOnViewWithText
2322
import com.example.util.simpletimetracker.utils.collapseToolbar
2423
import com.example.util.simpletimetracker.utils.longClickOnView
25-
import com.example.util.simpletimetracker.utils.nestedScrollTo
2624
import com.example.util.simpletimetracker.utils.scrollRecyclerToView
2725
import com.example.util.simpletimetracker.utils.tryAction
2826
import com.example.util.simpletimetracker.utils.typeTextIntoView
@@ -33,7 +31,6 @@ import org.hamcrest.CoreMatchers.allOf
3331
import org.hamcrest.Matcher
3432
import org.junit.Test
3533
import org.junit.runner.RunWith
36-
import java.util.concurrent.TimeUnit
3734
import com.example.util.simpletimetracker.core.R as coreR
3835
import com.example.util.simpletimetracker.feature_change_record_type.R as changeRecordTypeR
3936
import com.example.util.simpletimetracker.feature_dialogs.R as dialogsR
@@ -195,78 +192,6 @@ class ChangeRecordTypeTest : BaseUiTest() {
195192
checkViewIsDisplayed(withSubstring(getString(coreR.string.change_record_type_session_goal_time).lowercase()))
196193
}
197194

198-
@Test
199-
fun duplicate() {
200-
val type = "type"
201-
val category = "category"
202-
val note = "note"
203-
204-
// Add data
205-
testUtils.addCategory(category)
206-
testUtils.addActivity(
207-
name = type,
208-
color = firstColor,
209-
icon = firstIcon,
210-
goals = listOf(GoalsTestUtils.getDailyDurationGoal(TimeUnit.MINUTES.toSeconds(1))),
211-
note = note,
212-
categories = listOf(category),
213-
)
214-
215-
// Not visible on add
216-
clickOnViewWithText(coreR.string.running_records_add_type)
217-
closeSoftKeyboard()
218-
onView(withText(coreR.string.change_record_type_additional_hint)).perform(nestedScrollTo())
219-
clickOnViewWithText(coreR.string.change_record_type_additional_hint)
220-
checkViewIsNotDisplayed(withText(coreR.string.change_record_duplicate))
221-
pressBack()
222-
pressBack()
223-
224-
// Duplicate
225-
longClickOnView(withText(type))
226-
onView(withText(coreR.string.change_record_type_additional_hint)).perform(nestedScrollTo())
227-
clickOnViewWithText(coreR.string.change_record_type_additional_hint)
228-
clickOnViewWithText(coreR.string.change_record_duplicate)
229-
230-
// Check
231-
tryAction {
232-
checkViewIsDisplayed(
233-
allOf(
234-
withId(R.id.viewRecordTypeItem),
235-
hasDescendant(withText(type)),
236-
hasDescendant(withTag(firstIcon)),
237-
hasDescendant(withCardColor(firstColor)),
238-
),
239-
)
240-
}
241-
checkViewIsDisplayed(
242-
allOf(
243-
withId(R.id.viewRecordTypeItem),
244-
hasDescendant(withText("$type (2)")),
245-
hasDescendant(withTag(firstIcon)),
246-
hasDescendant(withCardColor(firstColor)),
247-
),
248-
)
249-
longClickOnView(withText("$type (2)"))
250-
checkViewIsDisplayed(
251-
allOf(
252-
withId(changeRecordTypeR.id.tvChangeRecordTypeCategoryPreview),
253-
withText("1"),
254-
),
255-
)
256-
checkViewIsDisplayed(
257-
allOf(
258-
withId(changeRecordTypeR.id.tvChangeRecordTypeGoalPreview),
259-
withText("1"),
260-
),
261-
)
262-
checkViewIsDisplayed(
263-
allOf(
264-
withId(changeRecordTypeR.id.etChangeRecordTypeNote),
265-
withText(note),
266-
),
267-
)
268-
}
269-
270195
private fun checkPreviewUpdated(matcher: Matcher<View>) =
271196
checkViewIsDisplayed(allOf(withId(changeRecordTypeR.id.previewChangeRecordType), matcher))
272197

app/src/androidTest/java/com/example/util/simpletimetracker/DataEditTest.kt

Lines changed: 107 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import com.example.util.simpletimetracker.core.extension.setWeekToFirstDay
2121
import com.example.util.simpletimetracker.feature_base_adapter.R
2222
import com.example.util.simpletimetracker.utils.BaseUiTest
2323
import com.example.util.simpletimetracker.utils.NavUtils
24+
import com.example.util.simpletimetracker.utils.checkViewDoesNotExist
2425
import com.example.util.simpletimetracker.utils.checkViewIsDisplayed
2526
import com.example.util.simpletimetracker.utils.clickOnView
2627
import com.example.util.simpletimetracker.utils.clickOnViewWithId
@@ -626,6 +627,68 @@ class DataEditTest : BaseUiTest() {
626627
)
627628
}
628629

630+
@Test
631+
fun deleteAllToday() {
632+
val name1 = "TypeName1"
633+
val name2 = "TypeName2"
634+
val name3 = "TypeName3"
635+
636+
// Add data
637+
testUtils.addActivity(name1)
638+
testUtils.addActivity(name2)
639+
testUtils.addActivity(name3)
640+
val timeToday = calendar.apply { set(Calendar.HOUR_OF_DAY, 15) }.timeInMillis
641+
testUtils.addRecord(typeName = name1, timeStarted = timeToday, timeEnded = timeToday)
642+
testUtils.addRecord(typeName = name2, timeStarted = timeToday, timeEnded = timeToday)
643+
testUtils.addRecord(
644+
typeName = name3,
645+
timeStarted = timeToday - TimeUnit.DAYS.toMillis(1),
646+
timeEnded = timeToday - TimeUnit.DAYS.toMillis(1),
647+
)
648+
649+
NavUtils.openRecordsScreen()
650+
checkViewIsDisplayed(allOf(withId(baseR.id.viewRecordItem), hasDescendant(withText(name1))))
651+
checkViewIsDisplayed(allOf(withId(baseR.id.viewRecordItem), hasDescendant(withText(name2))))
652+
clickOnViewWithId(recordsR.id.btnRecordsContainerPrevious)
653+
checkViewIsDisplayed(allOf(withId(baseR.id.viewRecordItem), hasDescendant(withText(name3))))
654+
clickOnViewWithId(recordsR.id.btnRecordsContainerNext)
655+
656+
// Select
657+
NavUtils.openSettingsScreen()
658+
NavUtils.openDataEditScreen()
659+
onView(
660+
allOf(
661+
withSubstring(getString(R.string.archive_dialog_delete)),
662+
withSubstring(getString(R.string.title_today)),
663+
withSubstring("2"),
664+
withSubstring(getQuantityString(R.plurals.statistics_detail_times_tracked, 2)),
665+
),
666+
).perform(nestedScrollTo())
667+
onView(withId(dataEditR.id.nsvDataEdit)).perform(swipeUp())
668+
669+
// Check filter
670+
clickOnViewWithId(dataEditR.id.btnDataEditDeleteTodayRecordsView)
671+
checkViewIsDisplayed(allOf(withId(recordsFilterR.id.tvRecordsFilterTitle), withSubstring("2")))
672+
pressBack()
673+
674+
// Delete
675+
clickOnViewWithId(dataEditR.id.btnDataEditDeleteTodayRecords)
676+
clickOnViewWithText(coreR.string.ok)
677+
clickOnView(
678+
allOf(
679+
withText(coreR.string.data_edit_success_message),
680+
withId(com.google.android.material.R.id.snackbar_text),
681+
),
682+
)
683+
684+
// Check
685+
NavUtils.openRecordsScreen()
686+
checkViewDoesNotExist(allOf(withId(baseR.id.viewRecordItem), hasDescendant(withText(name1))))
687+
checkViewDoesNotExist(allOf(withId(baseR.id.viewRecordItem), hasDescendant(withText(name2))))
688+
clickOnViewWithId(recordsR.id.btnRecordsContainerPrevious)
689+
checkViewIsDisplayed(allOf(withId(baseR.id.viewRecordItem), hasDescendant(withText(name3))))
690+
}
691+
629692
@Test
630693
fun deleteAllRecords() {
631694
val name1 = "TypeName1"
@@ -648,8 +711,9 @@ class DataEditTest : BaseUiTest() {
648711
// Select
649712
NavUtils.openSettingsScreen()
650713
NavUtils.openDataEditScreen()
651-
onView(withText(R.string.data_edit_button_delete_records))
652-
.perform(nestedScrollTo(), click())
714+
onView(withText(R.string.data_edit_button_delete_records)).perform(nestedScrollTo())
715+
onView(withId(dataEditR.id.nsvDataEdit)).perform(swipeUp())
716+
onView(withText(R.string.data_edit_button_delete_records)).perform(click())
653717
clickOnViewWithText(coreR.string.ok)
654718

655719
// Check
@@ -789,6 +853,47 @@ class DataEditTest : BaseUiTest() {
789853
checkViewIsDisplayed(allOf(withId(recordsFilterR.id.tvRecordsFilterRangeTimeEnded), withText(timeEnded)))
790854
}
791855

856+
@Test
857+
fun duplicate() {
858+
val type = "type"
859+
860+
// Add data
861+
testUtils.addActivity(
862+
name = type,
863+
color = firstColor,
864+
icon = firstIcon,
865+
goals = listOf(GoalsTestUtils.getDailyDurationGoal(TimeUnit.MINUTES.toSeconds(1))),
866+
)
867+
868+
// Duplicate
869+
NavUtils.openSettingsScreen()
870+
NavUtils.openDataEditScreen()
871+
onView(withText(coreR.string.change_record_duplicate)).perform(nestedScrollTo())
872+
clickOnViewWithText(coreR.string.change_record_duplicate)
873+
clickOnViewWithText(type)
874+
clickOnViewWithText(R.string.ok)
875+
876+
// Check
877+
tryAction {
878+
checkViewIsDisplayed(
879+
allOf(
880+
withId(coreR.id.viewRecordTypeItem),
881+
hasDescendant(withText(type)),
882+
hasDescendant(withTag(firstIcon)),
883+
hasDescendant(withCardColor(firstColor)),
884+
),
885+
)
886+
}
887+
checkViewIsDisplayed(
888+
allOf(
889+
withId(coreR.id.viewRecordTypeItem),
890+
hasDescendant(withText("$type (2)")),
891+
hasDescendant(withTag(firstIcon)),
892+
hasDescendant(withCardColor(firstColor)),
893+
),
894+
)
895+
}
896+
792897
private fun checkRecord(
793898
indexes: List<Int>,
794899
name: String,

app/src/androidTest/java/com/example/util/simpletimetracker/GoalsTabTest.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import androidx.test.espresso.matcher.ViewMatchers.hasDescendant
66
import androidx.test.espresso.matcher.ViewMatchers.isCompletelyDisplayed
77
import androidx.test.espresso.matcher.ViewMatchers.isDescendantOfA
88
import androidx.test.espresso.matcher.ViewMatchers.withId
9+
import androidx.test.espresso.matcher.ViewMatchers.withSubstring
910
import androidx.test.espresso.matcher.ViewMatchers.withText
1011
import androidx.test.ext.junit.runners.AndroidJUnit4
1112
import com.example.util.simpletimetracker.GoalsTestUtils.addRecords
@@ -140,7 +141,7 @@ class GoalsTabTest : BaseUiTest() {
140141
NavUtils.openGoalsScreen()
141142

142143
// No goals
143-
checkViewIsDisplayed(allOf(withText(R.string.no_data), isCompletelyDisplayed()))
144+
checkViewIsDisplayed(allOf(withSubstring(getString(R.string.no_goals_exist)), isCompletelyDisplayed()))
144145
}
145146

146147
@Test

app/src/androidTest/java/com/example/util/simpletimetracker/PomodoroTest.kt

Lines changed: 74 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -211,19 +211,65 @@ class PomodoroTest : BaseUiTest() {
211211
checkViewIsDisplayed(withId(pomodoroR.id.btnPomodoroStart))
212212
checkViewIsNotDisplayed(withId(pomodoroR.id.btnPomodoroRestart))
213213
checkViewIsNotDisplayed(withId(pomodoroR.id.btnPomodoroNext))
214+
checkViewIsNotDisplayed(withId(pomodoroR.id.btnPomodoroPrev))
215+
checkViewIsNotDisplayed(withId(pomodoroR.id.btnPomodoroPause))
214216

215217
clickOnViewWithId(pomodoroR.id.btnPomodoroStart)
216218
checkViewIsDisplayed(withId(pomodoroR.id.btnPomodoroRestart))
217219
checkViewIsDisplayed(withId(pomodoroR.id.btnPomodoroNext))
220+
checkViewIsNotDisplayed(withId(pomodoroR.id.btnPomodoroPrev))
221+
checkViewIsNotDisplayed(withId(pomodoroR.id.btnPomodoroPause))
218222

219223
clickOnViewWithId(pomodoroR.id.btnPomodoroStart)
220224
checkViewIsNotDisplayed(withId(pomodoroR.id.btnPomodoroRestart))
221225
checkViewIsNotDisplayed(withId(pomodoroR.id.btnPomodoroNext))
226+
checkViewIsNotDisplayed(withId(pomodoroR.id.btnPomodoroPrev))
227+
checkViewIsNotDisplayed(withId(pomodoroR.id.btnPomodoroPause))
228+
229+
// More controls
230+
NavUtils.openPomodoroSettings()
231+
clickOnSettingsCheckboxBesideText(R.string.pomodoro_settings_show_more_controls)
232+
pressBack()
233+
234+
// Check visibility
235+
checkViewIsDisplayed(withId(pomodoroR.id.btnPomodoroStart))
236+
checkViewIsNotDisplayed(withId(pomodoroR.id.btnPomodoroRestart))
237+
checkViewIsNotDisplayed(withId(pomodoroR.id.btnPomodoroNext))
238+
checkViewIsNotDisplayed(withId(pomodoroR.id.btnPomodoroPrev))
239+
checkViewIsNotDisplayed(withId(pomodoroR.id.btnPomodoroPause))
240+
241+
clickOnViewWithId(pomodoroR.id.btnPomodoroStart)
242+
checkViewIsDisplayed(withId(pomodoroR.id.btnPomodoroRestart))
243+
checkViewIsDisplayed(withId(pomodoroR.id.btnPomodoroNext))
244+
checkViewIsDisplayed(withId(pomodoroR.id.btnPomodoroPrev))
245+
checkViewIsDisplayed(withId(pomodoroR.id.btnPomodoroPause))
246+
247+
clickOnViewWithId(pomodoroR.id.btnPomodoroStart)
248+
checkViewIsNotDisplayed(withId(pomodoroR.id.btnPomodoroRestart))
249+
checkViewIsNotDisplayed(withId(pomodoroR.id.btnPomodoroNext))
250+
checkViewIsNotDisplayed(withId(pomodoroR.id.btnPomodoroPrev))
251+
checkViewIsNotDisplayed(withId(pomodoroR.id.btnPomodoroPause))
252+
253+
// Pause
254+
clickOnViewWithId(pomodoroR.id.btnPomodoroStart)
255+
clickOnViewWithId(pomodoroR.id.btnPomodoroPause)
256+
checkViewIsNotDisplayed(withId(pomodoroR.id.btnPomodoroRestart))
257+
checkViewIsNotDisplayed(withId(pomodoroR.id.btnPomodoroNext))
258+
checkViewIsNotDisplayed(withId(pomodoroR.id.btnPomodoroPrev))
259+
checkViewIsNotDisplayed(withId(pomodoroR.id.btnPomodoroPause))
260+
clickOnViewWithId(pomodoroR.id.btnPomodoroStart)
261+
checkViewIsDisplayed(withId(pomodoroR.id.btnPomodoroRestart))
262+
checkViewIsDisplayed(withId(pomodoroR.id.btnPomodoroNext))
263+
checkViewIsDisplayed(withId(pomodoroR.id.btnPomodoroPrev))
264+
checkViewIsDisplayed(withId(pomodoroR.id.btnPomodoroPause))
222265
}
223266

224267
@Test
225268
fun pomodoroButtons() {
226-
runBlocking { prefsInteractor.setPomodoroPeriodsUntilLongBreak(3) }
269+
runBlocking {
270+
prefsInteractor.setPomodoroPeriodsUntilLongBreak(3)
271+
prefsInteractor.setPomodoroShowMoreControls(true)
272+
}
227273
NavUtils.openPomodoro()
228274

229275
checkStates(
@@ -236,6 +282,7 @@ class PomodoroTest : BaseUiTest() {
236282
startBefore = true,
237283
stopAfter = false,
238284
)
285+
239286
clickOnViewWithId(pomodoroR.id.btnPomodoroRestart)
240287
clickOnViewWithId(pomodoroR.id.btnPomodoroRestart)
241288
checkStates(
@@ -248,6 +295,32 @@ class PomodoroTest : BaseUiTest() {
248295
startBefore = false,
249296
stopAfter = false,
250297
)
298+
299+
clickOnViewWithId(pomodoroR.id.btnPomodoroNext)
300+
checkStates(
301+
"04" to breakState,
302+
"24" to focusState,
303+
"04" to breakState,
304+
"24" to focusState,
305+
"14" to longBreakState,
306+
"24" to focusState,
307+
startBefore = false,
308+
stopAfter = false,
309+
)
310+
311+
clickOnViewWithId(pomodoroR.id.btnPomodoroPrev)
312+
clickOnViewWithId(pomodoroR.id.btnPomodoroPrev)
313+
clickOnViewWithId(pomodoroR.id.btnPomodoroPrev)
314+
checkStates(
315+
"24" to focusState,
316+
"14" to longBreakState,
317+
"24" to focusState,
318+
"04" to breakState,
319+
"24" to focusState,
320+
"04" to breakState,
321+
startBefore = false,
322+
stopAfter = false,
323+
)
251324
}
252325

253326
private fun checkStates(

0 commit comments

Comments
 (0)