Skip to content

Commit

Permalink
fix ui tests, add more
Browse files Browse the repository at this point in the history
  • Loading branch information
Razeeman committed Jul 6, 2024
1 parent 17ecc13 commit 76ba03f
Show file tree
Hide file tree
Showing 19 changed files with 831 additions and 127 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@ import com.example.util.simpletimetracker.utils.clickOnRecyclerItem
import com.example.util.simpletimetracker.utils.clickOnView
import com.example.util.simpletimetracker.utils.clickOnViewWithId
import com.example.util.simpletimetracker.utils.clickOnViewWithText
import com.example.util.simpletimetracker.utils.getMillis
import com.example.util.simpletimetracker.utils.scrollRecyclerToView
import com.example.util.simpletimetracker.utils.tryAction
import com.example.util.simpletimetracker.utils.typeTextIntoView
import com.example.util.simpletimetracker.utils.withCardColor
Expand All @@ -31,8 +33,10 @@ import java.util.Calendar
import org.hamcrest.CoreMatchers.allOf
import org.hamcrest.CoreMatchers.equalTo
import org.hamcrest.Matcher
import org.hamcrest.Matchers
import org.junit.Test
import org.junit.runner.RunWith
import java.util.concurrent.TimeUnit
import com.example.util.simpletimetracker.core.R as coreR
import com.example.util.simpletimetracker.feature_change_record.R as changeRecordR
import com.example.util.simpletimetracker.feature_dialogs.R as dialogsR
Expand Down Expand Up @@ -521,6 +525,125 @@ class AddRecordTest : BaseUiTest() {
)
}

@Test
fun addRecordPrevNext() {
// Add data
val type1 = "type1"
val type2 = "type2"
val calendar = Calendar.getInstance()

testUtils.addActivity(type1)
testUtils.addActivity(type2)

testUtils.addRecord(
typeName = type1,
timeStarted = calendar.getMillis(hour = 10),
timeEnded = calendar.getMillis(hour = 11),
)
testUtils.addRecord(
typeName = type1,
timeStarted = calendar.getMillis(hour = 12),
timeEnded = calendar.getMillis(hour = 13),
)
testUtils.addRecord(
typeName = type2,
timeStarted = calendar.getMillis(hour = 14),
timeEnded = calendar.getMillis(hour = 15),
)
testUtils.addRecord(
typeName = type1,
timeStarted = calendar.getMillis(hour = 16),
timeEnded = calendar.getMillis(hour = 17),
)
testUtils.addRecord(
typeName = type1,
timeStarted = calendar.getMillis(hour = 18),
timeEnded = calendar.getMillis(hour = 19),
)

NavUtils.openRecordsScreen()
clickOnView(allOf(withText(type2), isCompletelyDisplayed()))

// Check visibility
checkViewIsDisplayed(withId(changeRecordR.id.btnChangeRecordTimeStartedPrev))
checkViewIsDisplayed(withId(changeRecordR.id.btnChangeRecordTimeStartedNext))
checkViewIsDisplayed(withId(changeRecordR.id.btnChangeRecordTimeEndedPrev))
checkViewIsDisplayed(withId(changeRecordR.id.btnChangeRecordTimeEndedNext))

fun checkTimes(started: Int, ended: Int) {
checkAfterTimeAdjustment(
calendar.getMillis(started).formatTime(),
calendar.getMillis(ended).formatTime(),
TimeUnit.HOURS.toMillis(ended.toLong() - started).formatInterval(),
)
}

// Check times
checkTimes(14, 15)

clickOnViewWithId(changeRecordR.id.btnChangeRecordTimeStartedPrev)
checkTimes(13, 15)
clickOnViewWithId(changeRecordR.id.btnChangeRecordTimeStartedPrev)
checkTimes(11, 15)
clickOnViewWithId(changeRecordR.id.btnChangeRecordTimeStartedPrev)
checkViewIsDisplayed(
Matchers.allOf(
withText(coreR.string.change_record_previous_not_found),
withId(com.google.android.material.R.id.snackbar_text),
),
)

clickOnViewWithId(changeRecordR.id.btnChangeRecordTimeStartedNext)
checkTimes(13, 15)
clickOnViewWithId(changeRecordR.id.btnChangeRecordTimeStartedNext)
checkTimes(15, 15)
clickOnViewWithId(changeRecordR.id.btnChangeRecordTimeStartedNext)
checkTimes(17, 17)
clickOnViewWithId(changeRecordR.id.btnChangeRecordTimeStartedNext)
checkTimes(19, 19)
clickOnViewWithId(changeRecordR.id.btnChangeRecordTimeStartedNext)
checkViewIsDisplayed(
Matchers.allOf(
withText(coreR.string.change_record_next_not_found),
withId(com.google.android.material.R.id.snackbar_text),
),
)

clickOnViewWithId(changeRecordR.id.btnChangeRecordTimeEndedPrev)
checkTimes(18, 18)
clickOnViewWithId(changeRecordR.id.btnChangeRecordTimeEndedPrev)
checkTimes(16, 16)
clickOnViewWithId(changeRecordR.id.btnChangeRecordTimeEndedPrev)
checkTimes(14, 14)
clickOnViewWithId(changeRecordR.id.btnChangeRecordTimeEndedPrev)
checkTimes(12, 12)
clickOnViewWithId(changeRecordR.id.btnChangeRecordTimeEndedPrev)
checkTimes(10, 10)
clickOnViewWithId(changeRecordR.id.btnChangeRecordTimeEndedPrev)
checkViewIsDisplayed(
Matchers.allOf(
withText(coreR.string.change_record_previous_not_found),
withId(com.google.android.material.R.id.snackbar_text),
),
)

clickOnViewWithId(changeRecordR.id.btnChangeRecordTimeEndedNext)
checkTimes(10, 12)
clickOnViewWithId(changeRecordR.id.btnChangeRecordTimeEndedNext)
checkTimes(10, 14)
clickOnViewWithId(changeRecordR.id.btnChangeRecordTimeEndedNext)
checkTimes(10, 16)
clickOnViewWithId(changeRecordR.id.btnChangeRecordTimeEndedNext)
checkTimes(10, 18)
clickOnViewWithId(changeRecordR.id.btnChangeRecordTimeEndedNext)
checkViewIsDisplayed(
Matchers.allOf(
withText(coreR.string.change_record_next_not_found),
withId(com.google.android.material.R.id.snackbar_text),
),
)
}

private fun checkAfterTimeAdjustment(
timeStarted: String,
timeEnded: String,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,15 +24,19 @@ import com.example.util.simpletimetracker.utils.checkViewIsNotDisplayed
import com.example.util.simpletimetracker.utils.clickOnRecyclerItem
import com.example.util.simpletimetracker.utils.clickOnViewWithId
import com.example.util.simpletimetracker.utils.clickOnViewWithText
import com.example.util.simpletimetracker.utils.getMillis
import com.example.util.simpletimetracker.utils.longClickOnView
import com.example.util.simpletimetracker.utils.tryAction
import com.example.util.simpletimetracker.utils.typeTextIntoView
import com.example.util.simpletimetracker.utils.withCardColor
import com.example.util.simpletimetracker.utils.withTag
import com.google.android.material.R
import dagger.hilt.android.testing.HiltAndroidTest
import org.hamcrest.CoreMatchers.allOf
import org.hamcrest.CoreMatchers.equalTo
import org.hamcrest.Matcher
import org.hamcrest.Matchers
import org.hamcrest.Matchers.allOf
import org.junit.Test
import org.junit.runner.RunWith
import java.util.Calendar
Expand Down Expand Up @@ -102,7 +106,11 @@ class ChangeRunningRecordTest : BaseUiTest() {
checkViewIsNotDisplayed(withId(changeRecordR.id.rvChangeRecordType))
checkViewIsNotDisplayed(withId(changeRecordR.id.rvChangeRecordCategories))
checkViewIsDisplayed(withId(changeRecordR.id.containerChangeRecordTimeStartedAdjust))
checkViewIsDisplayed(withId(changeRecordR.id.btnChangeRecordTimeStartedPrev))
checkViewIsDisplayed(withId(changeRecordR.id.btnChangeRecordTimeStartedNext))
checkViewIsNotDisplayed(withId(changeRecordR.id.containerChangeRecordTimeEndedAdjust))
checkViewIsNotDisplayed(withId(changeRecordR.id.btnChangeRecordTimeEndedPrev))
checkViewIsNotDisplayed(withId(changeRecordR.id.btnChangeRecordTimeEndedNext))
checkViewIsNotDisplayed(allOf(withId(changeRecordR.id.etChangeRecordComment), withText("")))
checkViewIsDisplayed(allOf(withId(changeRecordR.id.tvChangeRecordTimeStartedDate), withText(timeStarted.date)))
checkViewIsDisplayed(allOf(withId(changeRecordR.id.tvChangeRecordTimeStartedTime), withText(timeStarted.time)))
Expand Down Expand Up @@ -308,6 +316,75 @@ class ChangeRunningRecordTest : BaseUiTest() {
)
}

@Test
fun changeRunningRecordPrevNext() {
// Add data
val type1 = "type1"
val type2 = "type2"
val calendar = Calendar.getInstance()
.apply { add(Calendar.DATE, -1) }

testUtils.addActivity(type1)
testUtils.addActivity(type2)

testUtils.addRecord(
typeName = type1,
timeStarted = calendar.getMillis(hour = 10),
timeEnded = calendar.getMillis(hour = 11),
)
testUtils.addRecord(
typeName = type1,
timeStarted = calendar.getMillis(hour = 12),
timeEnded = calendar.getMillis(hour = 13),
)
testUtils.addRecord(
typeName = type1,
timeStarted = calendar.getMillis(hour = 14),
timeEnded = calendar.getMillis(hour = 15),
)

Thread.sleep(1000)
tryAction { clickOnViewWithText(type2) }
longClickOnView(allOf(isDescendantOfA(withId(changeRecordR.id.viewRunningRecordItem)), withText(type2)))

// Check visibility
checkViewIsDisplayed(withId(changeRecordR.id.btnChangeRecordTimeStartedPrev))
checkViewIsDisplayed(withId(changeRecordR.id.btnChangeRecordTimeStartedNext))
checkViewIsNotDisplayed(withId(changeRecordR.id.btnChangeRecordTimeEndedPrev))
checkViewIsNotDisplayed(withId(changeRecordR.id.btnChangeRecordTimeEndedNext))

fun checkTimes(started: Int) {
checkAfterTimeAdjustment(calendar.getMillis(started).formatTime())
}

// Check times
clickOnViewWithId(changeRecordR.id.btnChangeRecordTimeStartedPrev)
checkTimes(15)
clickOnViewWithId(changeRecordR.id.btnChangeRecordTimeStartedPrev)
checkTimes(13)
clickOnViewWithId(changeRecordR.id.btnChangeRecordTimeStartedPrev)
checkTimes(11)
clickOnViewWithId(changeRecordR.id.btnChangeRecordTimeStartedPrev)
checkViewIsDisplayed(
allOf(
withText(coreR.string.change_record_previous_not_found),
withId(R.id.snackbar_text),
),
)

clickOnViewWithId(changeRecordR.id.btnChangeRecordTimeStartedNext)
checkTimes(13)
clickOnViewWithId(changeRecordR.id.btnChangeRecordTimeStartedNext)
checkTimes(15)
clickOnViewWithId(changeRecordR.id.btnChangeRecordTimeStartedNext)
checkViewIsDisplayed(
allOf(
withText(coreR.string.change_record_next_not_found),
withId(R.id.snackbar_text),
),
)
}

@Test
fun lastComments() {
val nameNoComments = "Name1"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -138,6 +138,19 @@ class CustomColorTest : BaseUiTest() {
colorValue = 65,
)

typeTextIntoView(dialogsR.id.etColorSelectionRed, "999")
typeTextIntoView(dialogsR.id.etColorSelectionGreen, "999")
typeTextIntoView(dialogsR.id.etColorSelectionBlue, "999")
checkColorState(
finalColorInt = 0xffffffff.toInt(),
colorRed = 255,
colorGreen = 255,
colorBlue = 255,
colorHue = 0,
colorSaturation = 0,
colorValue = 100,
)

// Change HSV
typeTextIntoView(dialogsR.id.etColorSelectionHue, "0")
typeTextIntoView(dialogsR.id.etColorSelectionSaturation, "100")
Expand Down Expand Up @@ -174,6 +187,19 @@ class CustomColorTest : BaseUiTest() {
colorValue = 65,
)

typeTextIntoView(dialogsR.id.etColorSelectionHue, "999")
typeTextIntoView(dialogsR.id.etColorSelectionSaturation, "999")
typeTextIntoView(dialogsR.id.etColorSelectionValue, "999")
checkColorState(
finalColorInt = 0xffff0000.toInt(),
colorRed = 255,
colorGreen = 0,
colorBlue = 0,
colorHue = 360,
colorSaturation = 100,
colorValue = 100,
)

// Check random
clickOnViewWithId(dialogsR.id.btnColorSelectionRandom)
clickOnViewWithId(dialogsR.id.btnColorSelectionRandom)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,11 @@ object GoalsTestUtils {
}.timeInMillis
val thisWeek = Calendar.getInstance().apply {
set(Calendar.HOUR_OF_DAY, 15)
val dateShift = if (get(Calendar.DAY_OF_WEEK) == firstDayOfWeek) +1 else -1
val dateShift = when {
get(Calendar.DAY_OF_WEEK) == firstDayOfWeek -> +1
get(Calendar.DAY_OF_MONTH) == 1 -> +1
else -> -1
}
add(Calendar.DATE, dateShift)
}.timeInMillis
val thisMonth = Calendar.getInstance().apply {
Expand Down Expand Up @@ -176,7 +180,7 @@ object GoalsTestUtils {
isDescendantOfA(withId(R.id.viewRunningRecordItem)),
hasSibling(withText(typeName)),
withId(R.id.tvRunningRecordItemGoalTime),
ViewMatchers.withSubstring(goal),
withSubstring(goal),
).let(::checkViewIsDisplayed)
}

Expand Down
Loading

0 comments on commit 76ba03f

Please sign in to comment.