8000 Update screenshot tests (EXPOSUREAPP-6946) by schauersbergern · Pull Request #5827 · corona-warn-app/cwa-app-android · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content
This repository was archived by the owner on Jun 20, 2023. It is now read-only.

Update screenshot tests (EXPOSUREAPP-6946) #5827

Merged
merged 21 commits into from
Feb 14, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/workflows/build_and_test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -326,7 +326,7 @@ jobs:
--environment-variables clearPackageData=true \
--test-targets "notAnnotation testhelpers.Screenshot" \
--timeout 20m \
--device-ids blueline \
--device-ids dreamlte \
--os-version-ids 28 \
--locales de_DE \
--orientations portrait \
Expand All @@ -341,7 +341,7 @@ jobs:
if: always()
run: |
sudo pip install -U crcmod
sudo gsutil -m cp -R -U gs://${GOOGLE_PROJECT_ID}-circleci-android/${{ env.BUCKETDIR }}/blueline* firebase-results
sudo gsutil -m cp -R -U gs://${GOOGLE_PROJECT_ID}-circleci-android/${{ env.BUCKETDIR }}/dreamlte* firebase-results

- name: Archive Test Result
uses: actions/upload-artifact@v3
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -84,11 +84,11 @@ class DccTicketingConsentOneFragmentTest : BaseUITest() {
takeScreenshot<DccTicketingConsentOneFragment>("1")

// Take legal part screenshot
onView(ViewMatchers.withId(R.id.legal_second_bulletpoint_one)).perform(betterScrollTo())
onView(ViewMatchers.withId(R.id.dcc_ticketing_bulletpoint_one)).perform(betterScrollTo())
takeScreenshot<DccTicketingConsentOneFragment>("2")

// Take description bullet point screenshot
onView(ViewMatchers.withId(R.id.third_bulletpoint_text)).perform(betterScrollTo())
onView(ViewMatchers.withId(R.id.dcc_ticketing_bulletpoint_three)).perform(betterScrollTo())
takeScreenshot<DccTicketingConsentOneFragment>("3")

// Take privacy information button screenshot
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ class DccTicketingConsentTwoFragmentTest : BaseUITest() {
takeScreenshot<DccTicketingConsentTwoFragment>("2")

// Take description bullet point screenshot
onView(withId(R.id.third_bulletpoint_text)).perform(scrollTo())
onView(withId(R.id.ticketing_third_bulletpoint)).perform(scrollTo())
takeScreenshot<DccTicketingConsentTwoFragment>("3")

// Take privacy information button screenshot
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,182 @@
package de.rki.coronawarnapp.presencetracing.attendee.checkins

import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.SavedStateHandle
import androidx.lifecycle.ViewModelStore
import androidx.navigation.testing.TestNavHostController
import androidx.test.core.app.ApplicationProvider
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.internal.runner.junit4.statement.UiThreadStatement
import dagger.Module
import dagger.android.ContributesAndroidInjector
import de.rki.coronawarnapp.R
import de.rki.coronawarnapp.presencetracing.checkins.CheckIn
import de.rki.coronawarnapp.ui.presencetracing.attendee.checkins.CheckInsFragment
import de.rki.coronawarnapp.ui.presencetracing.attendee.checkins.CheckInsFragmentArgs
import de.rki.coronawarnapp.ui.presencetracing.attendee.checkins.CheckInsViewModel
import de.rki.coronawarnapp.ui.presencetracing.attendee.checkins.items.ActiveCheckInVH
import de.rki.coronawarnapp.ui.presencetracing.attendee.checkins.items.PastCheckInVH
import io.mockk.MockKAnnotations
import io.mockk.every
import io.mockk.impl.annotations.MockK
import io.mockk.mockk
import org.junit.After
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import testhelpers.BaseUITest
import testhelpers.Screenshot
import testhelpers.launchFragmentInContainer2
import testhelpers.takeScreenshot
import java.time.Instant

@RunWith(AndroidJUnit4::class)
class CheckInsFragmentTest : BaseUITest() {

@MockK private lateinit var viewModel: CheckInsViewModel
private val fragmentArgs = CheckInsFragmentArgs().toBundle()

private val navController = TestNavHostController(
ApplicationProvider.getApplicationContext()
).apply {
UiThreadStatement.runOnUiThread {
setViewModelStore(ViewModelStore())
setGraph(R.navigation.nav_graph)
setCurrentDestination(R.id.checkInsFragment)
}
2E18 }

@Before
fun setup() {
MockKAnnotations.init(this, relaxed = true)

setupMockViewModel(
object : CheckInsViewModel.Factory {
override fun create(
savedState: SavedStateHandle,
deepLink: String?,
cleanHistory: Boolean
): CheckInsViewModel = viewModel
}
)
}

@After
fun teardown() {
clearAllViewModels()
}

@Test
@Screenshot
fun capture_active_checkins() {

val checkIns = listOf(
activeCheckInItem(
checkInId = 1,
checkInDescription = "Rock Konzert",
checkInAddress = "Sponholzstraße 15, 12159 Berlin"
),
activeCheckInItem(
checkInId = 2,
checkInDescription = "Kunstausstellung",
checkInAddress = "Albersweilerweg 18, 12349 Berlin"
)
)

every { viewModel.checkins } returns MutableLiveData(checkIns)

launchFragmentInContainer2<CheckInsFragment>(
fragmentArgs = fragmentArgs,
testNavHostController = navController
)
takeScreenshot<CheckInsFragment>("active")
}

@Test
@Screenshot
fun capture_past_checkins() {

val checkIns = listOf(
pastCheckInItem(
checkInId = 1,
checkInDescription = "Rock Konzert",
checkInAddress = "Sponholzstraße 15, 12159 Berlin"
),
pastCheckInItem(
checkInId = 2,
checkInDescription = "Kunstausstellung",
checkInAddress = "Albersweilerweg 18, 12349 Berlin"
)
)

every { viewModel.checkins } returns MutableLiveData(checkIns)

launchFragmentInContainer2<CheckInsFragment>(
fragmentArgs = fragmentArgs,
testNavHostController = navController
)
takeScreenshot<CheckInsFragment>("past")
}

@Test
@Screenshot
fun capture_empty_fragment() {

every { viewModel.checkins } returns MutableLiveData(listOf())

launchFragmentInContainer2<CheckInsFragment>(
fragmentArgs = fragmentArgs,
testNavHostController = navController
)
takeScreenshot<CheckInsFragment>("empty")
}

private fun mockCheckIn(
checkInId: Long,
checkInDescription: String,
checkInAddress: String
) = mockk<CheckIn>().apply {
every { id } returns checkInId
every { description } returns checkInDescription
every { address } returns checkInAddress
every { checkInStart } returns Instant.parse("2021-01-01T12:30:00.000Z")
every { checkInEnd } returns Instant.parse("2021-01-01T14:00:00.000Z")
}

private fun activeCheckInItem(
checkInId: Long,
checkInDescription: String,
checkInAddress: String
) = ActiveCheckInVH.Item(
checkin = mockCheckIn(
checkInId = checkInId,
checkInDescription = checkInDescription,
checkInAddress = checkInAddress
),
_, _ -> },
>
>
_, _ -> },
)

private fun pastCheckInItem(
checkInId: Long,
checkInDescription: String,
checkInAddress: String
) = PastCheckInVH.Item(
checkin = mockCheckIn(
checkInId = checkInId,
checkInDescription = checkInDescription,
checkInAddress = checkInAddress
),
_, _ -> },
>
_, _ -> },
)
}

@Module
abstract class CheckInsFragmentTestModule {
@ContributesAndroidInjector
abstract fun checkInsFragmentTest(): CheckInsFragment
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
package de.rki.coronawarnapp.presencetracing.attendee.confirm

import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModelStore
import androidx.navigation.testing.TestNavHostController
import androidx.test.core.app.ApplicationProvider
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.internal.runner.junit4.statement.UiThreadStatement
import dagger.Module
import dagger.android.ContributesAndroidInjector
import de.rki.coronawarnapp.R
import de.rki.coronawarnapp.presencetracing.checkins.qrcode.TraceLocation
import de.rki.coronawarnapp.qrcode.ui.QrcodeSharedViewModel
import de.rki.coronawarnapp.server.protocols.internal.pt.TraceLocationOuterClass
import de.rki.coronawarnapp.ui.presencetracing.attendee.confirm.ConfirmCheckInFragment
import de.rki.coronawarnapp.ui.presencetracing.attendee.confirm.ConfirmCheckInFragmentArgs
import de.rki.coronawarnapp.ui.presencetracing.attendee.confirm.ConfirmCheckInViewModel
import io.mockk.MockKAnnotations
import io.mockk.every
import io.mockk.impl.annotations.MockK
import okio.ByteString.Companion.decodeBase64
import org.junit.After
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import testhelpers.BaseUITest
import testhelpers.Screenshot
import testhelpers.launchFragmentInContainer2
import testhelpers.takeScreenshot
import java.time.Duration
import java.time.Instant

@RunWith(AndroidJUnit4::class)
class ConfirmCheckInFragmentTest : BaseUITest() {

@MockK private lateinit var viewModel: ConfirmCheckInViewModel

private val locationId = "2c69dbc182f836431f010020414be8460ce5ba890d63c770c81ca8a63fa0a462"
private val traceLocation = TraceLocation(
id = 1,
type = TraceLocationOuterClass.TraceLocationType.LOCATION_TYPE_TEMPORARY_OTHER,
description = "My Birthday Party",
address = "at my place",
startDate = Instant.ofEpochSecond(2687955L),
endDate = Instant.ofEpochSecond(2687991L),
defaultCheckInLengthInMinutes = null,
cryptographicSeed = "CRYPTOGRAPHIC_SEED".decodeBase64()!!,
cnPublicKey = "PUB_KEY",
version = TraceLocation.VERSION
)

private val fragmentArgs = ConfirmCheckInFragmentArgs(
locationId = locationId
).toBundle()

private val navController = TestNavHostController(
ApplicationProvider.getApplicationContext()
).apply {
UiThreadStatement.runOnUiThread {
setViewModelStore(ViewModelStore())
setGraph(R.navigation.nav_graph)
setCurrentDestination(R.id.confirmCheckInFragment)
}
}

@Before
fun setup() {
MockKAnnotations.init(this, relaxed = true)

every { viewModel.uiState } returns MutableLiveData(
ConfirmCheckInViewModel.UiState(
traceLocation = traceLocation,
checkInEndOffset = Duration.ofDays(2L),
createJournalEntry = false,
eventInPastVisible = true,
eventInFutureVisible = true,
confirmButtonEnabled = true
)
)

setupMockViewModel(
object : ConfirmCheckInViewModel.Factory {
override fun create(
verifiedTraceLocationId: String,
qrcodeSharedViewModel: QrcodeSharedViewModel
): ConfirmCheckInViewModel = viewModel
}
)
}

@After
fun teardown() {
clearAllViewModels()
}

@Test
@Screenshot
fun capture_fragment() {

launchFragmentInContainer2<ConfirmCheckInFragment>(
fragmentArgs = fragmentArgs,
testNavHostController = navController
)
takeScreenshot<ConfirmCheckInFragment>()
}
}

@Module
abstract class ConfirmCheckInFragmentModule {
@ContributesAndroidInjector
abstract fun confirmCheckInFragmentTest(): ConfirmCheckInFragment
}
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,6 @@ class ProfileListFragmentTest : BaseUITest() {
fun setup() {
MockKAnnotations.init(this, relaxed = true)

every { viewModel.profiles } returns profileCards()

setupMockViewModel(
object : ProfileListViewModel.Factory {
override fun create(): ProfileListViewModel = viewModel
Expand All @@ -46,9 +44,17 @@ class ProfileListFragmentTest : BaseUITest() {

@Test
@Screenshot
fun capture_fragment() {
fun capture_profile_cards() {
every { viewModel.profiles } returns profileCards()
launchFragmentInContainer2<ProfileListFragment>()
takeScreenshot<ProfileListFragment>("profile_cards")
}

@Test
@Screenshot
fun capture_empty_fragment() {
launchFragmentInContainer2<ProfileListFragment>()
takeScreenshot<ProfileListFragment>("1")
takeScreenshot<ProfileListFragment>("empty")
}

private fun profileCards(): LiveData<List<ProfileListItem>> =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -77,10 +77,10 @@ class SrsSubmissionConsentFragmentTest : BaseUITest() {
)
takeScreenshot<SrsSubmissionConsentFragment>("1")

onView(withId(R.id.first_bulletpoint_text)).perform(scrollTo())
onView(withId(R.id.srs_bulletpoint_one)).perform(scrollTo())
takeScreenshot<SrsSubmissionConsentFragment>("2")

onView(withId(R.id.third_bulletpoint_text)).perform(scrollTo())
onView(withId(R.id.srs_bulletpoint_three)).perform(scrollTo())
takeScreenshot<SrsSubmissionConsentFragment>("3")

onView(withId(R.id.srs_submission_consent_more_info)).perform(scrollTo())
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package de.rki.coronawarnapp.srs.ui.done

import androidx.test.espresso.Espresso.onView
import androidx.test.espresso.action.ViewActions.scrollTo
import androidx.test.espresso.action.ViewActions.swipeDown
import androidx.test.espresso.matcher.ViewMatchers.withId
import androidx.test.ext.junit.runners.AndroidJUnit4
import dagger.Module
Expand All @@ -23,7 +23,7 @@ class SrsSubmissionDoneFragmentTest : BaseUITest() {
launchFragmentInContainer2<SrsSubmissionDoneFragment>()
takeScreenshot<SrsSubmissionDoneFragment>()

onView(withId(R.id.further_info_title)).perform(scrollTo())
onView(withId(R.id.scrollview)).perform(swipeDown())
takeScreenshot<SrsSubmissionDoneFragment>("1")
}
}
Expand Down
Loading
0