Skip to content
This repository has been archived by the owner on Jun 20, 2023. It is now read-only.

Commit

Permalink
Merge tag 'v3.2.0'
Browse files Browse the repository at this point in the history
  • Loading branch information
SamuraiKek committed Apr 19, 2023
2 parents 622e880 + cff6d87 commit 6e5b5ce
Show file tree
Hide file tree
Showing 493 changed files with 17,765 additions and 18,941 deletions.
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
1 change: 0 additions & 1 deletion Corona-Warn-App/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -165,7 +165,6 @@ android {
}

buildFeatures {
dataBinding true
viewBinding true
}

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_text)).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 @@ -95,11 +95,11 @@ class DccTicketingConsentTwoFragmentTest : BaseUITest() {
takeScreenshot<DccTicketingConsentTwoFragment>()

// Take legal part screenshot
onView(withId(R.id.legal_second_bulletpoint_text)).perform(scrollTo())
onView(withId(R.id.legal_second_bulletpoint_two)).perform(scrollTo())
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)
}
}

@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
),
onCardClicked = { _, _ -> },
onRemoveItem = {},
onCheckout = {},
onSwipeItem = { _, _ -> },
)

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

@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)).perform(scrollTo())
onView(withId(R.id.srs_bulletpoint_one)).perform(scrollTo())
takeScreenshot<SrsSubmissionConsentFragment>("2")

onView(withId(R.id.third_bulletpoint)).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

0 comments on commit 6e5b5ce

Please sign in to comment.