Skip to content
Snippets Groups Projects
Unverified Commit 3a5c16a9 authored by Matthias Urhahn's avatar Matthias Urhahn Committed by GitHub
Browse files

Add automated screenshots for Vaccination: None/INCOMPLETE/COMPLETE/IMMUNITY. (#3215)

parent 54f65931
No related branches found
No related tags found
No related merge requests found
...@@ -29,6 +29,12 @@ import de.rki.coronawarnapp.tracing.ui.homecards.TracingDisabledCard ...@@ -29,6 +29,12 @@ import de.rki.coronawarnapp.tracing.ui.homecards.TracingDisabledCard
import de.rki.coronawarnapp.tracing.ui.homecards.TracingFailedCard import de.rki.coronawarnapp.tracing.ui.homecards.TracingFailedCard
import de.rki.coronawarnapp.tracing.ui.homecards.TracingProgressCard import de.rki.coronawarnapp.tracing.ui.homecards.TracingProgressCard
import de.rki.coronawarnapp.util.TimeAndDateExtensions.toLocalDateUtc import de.rki.coronawarnapp.util.TimeAndDateExtensions.toLocalDateUtc
import de.rki.coronawarnapp.vaccination.core.VaccinatedPerson
import de.rki.coronawarnapp.vaccination.ui.homecard.ImmuneVaccinationHomeCard
import de.rki.coronawarnapp.vaccination.ui.homecard.VaccinationHomeCard
import io.mockk.every
import io.mockk.mockk
import org.joda.time.Duration
import org.joda.time.Instant import org.joda.time.Instant
object HomeData { object HomeData {
...@@ -169,4 +175,34 @@ object HomeData { ...@@ -169,4 +175,34 @@ object HomeData {
onClickAction = {} onClickAction = {}
) )
} }
object Vaccination {
val INCOMPLETE = VaccinationHomeCard.Item(
vaccinatedPerson = mockk<VaccinatedPerson>().apply {
every { fullName } returns "Andrea Schneider"
every { identifier } returns mockk()
every { getVaccinationStatus(any()) } returns VaccinatedPerson.Status.INCOMPLETE
every { getTimeUntilImmunity(any()) } returns Duration.standardDays(14)
},
onClickAction = {}
)
val COMPLETE = VaccinationHomeCard.Item(
vaccinatedPerson = mockk<VaccinatedPerson>().apply {
every { fullName } returns "Andrea Schneider"
every { identifier } returns mockk()
every { getVaccinationStatus(any()) } returns VaccinatedPerson.Status.COMPLETE
every { getTimeUntilImmunity(any()) } returns Duration.standardDays(14)
},
onClickAction = {}
)
val IMMUNITY = ImmuneVaccinationHomeCard.Item(
vaccinatedPerson = mockk<VaccinatedPerson>().apply {
every { fullName } returns "Andrea Schneider"
every { identifier } returns mockk()
every { getVaccinationStatus(any()) } returns VaccinatedPerson.Status.IMMUNITY
every { getTimeUntilImmunity(any()) } returns Duration.standardDays(14)
},
onClickAction = {}
)
}
} }
...@@ -35,6 +35,7 @@ import de.rki.coronawarnapp.util.ui.SingleLiveEvent ...@@ -35,6 +35,7 @@ import de.rki.coronawarnapp.util.ui.SingleLiveEvent
import de.rki.coronawarnapp.vaccination.core.VaccinationSettings import de.rki.coronawarnapp.vaccination.core.VaccinationSettings
import de.rki.coronawarnapp.vaccination.core.repository.VaccinationRepository import de.rki.coronawarnapp.vaccination.core.repository.VaccinationRepository
import de.rki.coronawarnapp.vaccination.ui.homecard.CreateVaccinationHomeCard import de.rki.coronawarnapp.vaccination.ui.homecard.CreateVaccinationHomeCard
import de.rki.coronawarnapp.vaccination.ui.homecard.VaccinationStatusItem
import io.mockk.MockKAnnotations import io.mockk.MockKAnnotations
import io.mockk.Runs import io.mockk.Runs
import io.mockk.every import io.mockk.every
...@@ -90,7 +91,7 @@ class HomeFragmentTest : BaseUITest() { ...@@ -90,7 +91,7 @@ class HomeFragmentTest : BaseUITest() {
every { refreshRequiredData() } just Runs every { refreshRequiredData() } just Runs
every { tracingHeaderState } returns MutableLiveData(TracingHeaderState.TracingActive) every { tracingHeaderState } returns MutableLiveData(TracingHeaderState.TracingActive)
every { showLoweredRiskLevelDialog } returns MutableLiveData() every { showLoweredRiskLevelDialog } returns MutableLiveData()
every { homeItems } returns MutableLiveData(emptyList()) every { homeItems } returns homeFragmentItemsLiveData()
every { popupEvents } returns SingleLiveEvent() every { popupEvents } returns SingleLiveEvent()
every { showPopUps() } just Runs every { showPopUps() } just Runs
every { restoreAppShortcuts() } just Runs every { restoreAppShortcuts() } just Runs
...@@ -273,6 +274,51 @@ class HomeFragmentTest : BaseUITest() { ...@@ -273,6 +274,51 @@ class HomeFragmentTest : BaseUITest() {
captureHomeFragment("compatibility_ble_scan_not_supported") captureHomeFragment("compatibility_ble_scan_not_supported")
} }
@Screenshot
@Test
fun captureVaccinationNoCertificate() {
launchInMainActivity<HomeFragment>()
onView(withId(R.id.recycler_view)).perform(recyclerScrollTo(2, additionalY = 450))
takeScreenshot<HomeFragment>("vaccination_none")
}
@Screenshot
@Test
fun captureVaccinationIncomplete() {
every { homeFragmentViewModel.homeItems } returns homeFragmentItemsLiveData(
vaccinationStatus = HomeData.Vaccination.INCOMPLETE
)
launchInMainActivity<HomeFragment>()
onView(withId(R.id.recycler_view)).perform(recyclerScrollTo(2))
takeScreenshot<HomeFragment>("vaccination_incomplete")
}
@Screenshot
@Test
fun captureVaccinationComplete() {
every { homeFragmentViewModel.homeItems } returns homeFragmentItemsLiveData(
vaccinationStatus = HomeData.Vaccination.COMPLETE
)
launchInMainActivity<HomeFragment>()
onView(withId(R.id.recycler_view)).perform(recyclerScrollTo(2))
takeScreenshot<HomeFragment>("vaccination_complete")
}
@Screenshot
@Test
fun captureVaccinationImmunity() {
every { homeFragmentViewModel.homeItems } returns homeFragmentItemsLiveData(
vaccinationStatus = HomeData.Vaccination.IMMUNITY
)
launchInMainActivity<HomeFragment>()
onView(withId(R.id.recycler_view)).perform(recyclerScrollTo(2))
takeScreenshot<HomeFragment>("vaccination_immunity")
}
@After @After
fun teardown() { fun teardown() {
clearAllViewModels() clearAllViewModels()
...@@ -314,7 +360,8 @@ class HomeFragmentTest : BaseUITest() { ...@@ -314,7 +360,8 @@ class HomeFragmentTest : BaseUITest() {
// LiveData item for fragments // LiveData item for fragments
private fun homeFragmentItemsLiveData( private fun homeFragmentItemsLiveData(
tracingStateItem: TracingStateItem = HomeData.Tracing.LOW_RISK_ITEM_WITH_ENCOUNTERS, tracingStateItem: TracingStateItem = HomeData.Tracing.LOW_RISK_ITEM_WITH_ENCOUNTERS,
submissionTestResultItem: TestResultItem = HomeData.Submission.TEST_UNREGISTERED_ITEM submissionTestResultItem: TestResultItem = HomeData.Submission.TEST_UNREGISTERED_ITEM,
vaccinationStatus: VaccinationStatusItem? = null,
): LiveData<List<HomeItem>> = ): LiveData<List<HomeItem>> =
MutableLiveData( MutableLiveData(
mutableListOf<HomeItem>().apply { mutableListOf<HomeItem>().apply {
...@@ -325,8 +372,15 @@ class HomeFragmentTest : BaseUITest() { ...@@ -325,8 +372,15 @@ class HomeFragmentTest : BaseUITest() {
} }
else -> add(tracingStateItem) else -> add(tracingStateItem)
} }
vaccinationStatus?.let {
add(it)
}
add(submissionTestResultItem) add(submissionTestResultItem)
add(CreateVaccinationHomeCard.Item {}) add(CreateVaccinationHomeCard.Item {})
Statistics.statisticsData?.let { Statistics.statisticsData?.let {
add(StatisticsHomeCard.Item(data = it, onHelpAction = { })) add(StatisticsHomeCard.Item(data = it, onHelpAction = { }))
} }
......
...@@ -13,9 +13,21 @@ import com.google.android.material.tabs.TabLayout ...@@ -13,9 +13,21 @@ import com.google.android.material.tabs.TabLayout
import org.hamcrest.CoreMatchers.allOf import org.hamcrest.CoreMatchers.allOf
import org.hamcrest.Matcher import org.hamcrest.Matcher
fun recyclerScrollTo(position: Int? = null): ViewAction = RecyclerViewScrollAction(position) fun recyclerScrollTo(
position: Int? = null,
additionalX: Int = 0,
additionalY: Int = 0,
): ViewAction = RecyclerViewScrollAction(
position = position,
additionalX = additionalX,
additionalY = additionalY
)
private class RecyclerViewScrollAction(private val position: Int? = null) : ViewAction { private class RecyclerViewScrollAction(
private val position: Int? = null,
private val additionalX: Int = 0,
private val additionalY: Int = 0,
) : ViewAction {
override fun getDescription(): String { override fun getDescription(): String {
return "scroll RecyclerView to bottom" return "scroll RecyclerView to bottom"
} }
...@@ -30,6 +42,8 @@ private class RecyclerViewScrollAction(private val position: Int? = null) : View ...@@ -30,6 +42,8 @@ private class RecyclerViewScrollAction(private val position: Int? = null) : View
val itemPosition = position ?: itemCount?.minus(1) ?: 0 val itemPosition = position ?: itemCount?.minus(1) ?: 0
recyclerView.scrollToPosition(itemPosition) recyclerView.scrollToPosition(itemPosition)
uiController.loopMainThreadUntilIdle() uiController.loopMainThreadUntilIdle()
recyclerView.scrollBy(additionalX, additionalY)
uiController.loopMainThreadUntilIdle()
} }
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment