Skip to content
Snippets Groups Projects
Commit f1626713 authored by Mohamed Metwalli's avatar Mohamed Metwalli
Browse files

Merge branch 'release/1.11.x' into feature/4559-contact-journal-screenshot

# Conflicts:
#	Corona-Warn-App/src/androidTest/java/testhelpers/FragmentTestModuleRegistrar.kt
#	Corona-Warn-App/src/androidTest/java/testhelpers/TestExtensions.kt
parents 882a44d6 4c35ba2d
No related branches found
No related tags found
No related merge requests found
Showing
with 769 additions and 21 deletions
package de.rki.coronawarnapp.ui.submission
import androidx.test.ext.junit.runners.AndroidJUnit4
import dagger.Module
import dagger.android.ContributesAndroidInjector
import de.rki.coronawarnapp.storage.interoperability.InteroperabilityRepository
import de.rki.coronawarnapp.submission.SubmissionRepository
import de.rki.coronawarnapp.ui.submission.qrcode.consent.SubmissionConsentFragment
import de.rki.coronawarnapp.ui.submission.qrcode.consent.SubmissionConsentViewModel
import io.mockk.MockKAnnotations
import io.mockk.every
import io.mockk.impl.annotations.MockK
import kotlinx.coroutines.flow.flowOf
import org.junit.After
import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
import testhelpers.BaseUITest
import testhelpers.Screenshot
import testhelpers.SystemUIDemoModeRule
import testhelpers.TestDispatcherProvider
import testhelpers.captureScreenshot
import tools.fastlane.screengrab.locale.LocaleTestRule
@RunWith(AndroidJUnit4::class)
class SubmissionConsentFragmentTest : BaseUITest() {
@MockK lateinit var submissionRepository: SubmissionRepository
@MockK lateinit var interoperabilityRepository: InteroperabilityRepository
@Rule
@JvmField
val localeTestRule = LocaleTestRule()
@get:Rule
val systemUIDemoModeRule = SystemUIDemoModeRule()
private lateinit var viewModel: SubmissionConsentViewModel
@Before
fun setup() {
MockKAnnotations.init(this, relaxed = true)
every { interoperabilityRepository.countryList } returns flowOf()
viewModel = SubmissionConsentViewModel(submissionRepository, interoperabilityRepository, TestDispatcherProvider)
setupMockViewModel(object : SubmissionConsentViewModel.Factory {
override fun create(): SubmissionConsentViewModel = viewModel
})
}
@After
fun teardown() {
clearAllViewModels()
}
@Test
@Screenshot
fun capture_fragment_results() {
captureScreenshot<SubmissionConsentFragment>()
}
}
@Module
abstract class SubmissionConsentFragmentTestModule {
@ContributesAndroidInjector
abstract fun submissionConsentScreen(): SubmissionConsentFragment
}
......@@ -12,23 +12,34 @@ import de.rki.coronawarnapp.R
import de.rki.coronawarnapp.ui.submission.fragment.SubmissionContactFragment
import de.rki.coronawarnapp.ui.submission.viewmodel.SubmissionContactViewModel
import io.mockk.MockKAnnotations
import io.mockk.impl.annotations.MockK
import org.junit.After
import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
import testhelpers.BaseUITest
import testhelpers.Screenshot
import testhelpers.SystemUIDemoModeRule
import testhelpers.captureScreenshot
import tools.fastlane.screengrab.locale.LocaleTestRule
@RunWith(AndroidJUnit4::class)
class SubmissionContactFragmentTest : BaseUITest() {
@MockK lateinit var viewModel: SubmissionContactViewModel
@Rule
@JvmField
val localeTestRule = LocaleTestRule()
@get:Rule
val systemUIDemoModeRule = SystemUIDemoModeRule()
private fun createViewModel() = SubmissionContactViewModel()
@Before
fun setup() {
MockKAnnotations.init(this, relaxed = true)
setupMockViewModel(object : SubmissionContactViewModel.Factory {
override fun create(): SubmissionContactViewModel = viewModel
override fun create(): SubmissionContactViewModel = createViewModel()
})
}
......@@ -42,7 +53,8 @@ class SubmissionContactFragmentTest : BaseUITest() {
launchFragment<SubmissionContactFragment>()
}
@Test fun testContactCallClicked() {
@Test
fun testContactCallClicked() {
val scenario = launchFragmentInContainer<SubmissionContactFragment>()
onView(withId(R.id.submission_contact_button_call))
.perform(click())
......@@ -50,13 +62,20 @@ class SubmissionContactFragmentTest : BaseUITest() {
// TODO verify result
}
@Test fun testContactEnterTanClicked() {
@Test
fun testContactEnterTanClicked() {
val scenario = launchFragmentInContainer<SubmissionContactFragment>()
onView(withId(R.id.submission_contact_button_enter))
.perform(click())
// TODO verify result
}
@Test
@Screenshot
fun capture_fragment() {
captureScreenshot<SubmissionContactFragment>()
}
}
@Module
......
......@@ -13,23 +13,36 @@ import de.rki.coronawarnapp.R
import de.rki.coronawarnapp.ui.submission.fragment.SubmissionDispatcherFragment
import de.rki.coronawarnapp.ui.submission.viewmodel.SubmissionDispatcherViewModel
import io.mockk.MockKAnnotations
import io.mockk.impl.annotations.MockK
import org.junit.After
import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
import testhelpers.BaseUITest
import testhelpers.SCREENSHOT_DELAY_TIME
import testhelpers.Screenshot
import testhelpers.SystemUIDemoModeRule
import testhelpers.captureScreenshot
import tools.fastlane.screengrab.Screengrab
import tools.fastlane.screengrab.locale.LocaleTestRule
@RunWith(AndroidJUnit4::class)
class SubmissionDispatcherFragmentTest : BaseUITest() {
@MockK lateinit var viewModel: SubmissionDispatcherViewModel
@Rule
@JvmField
val localeTestRule = LocaleTestRule()
@get:Rule
val systemUIDemoModeRule = SystemUIDemoModeRule()
private fun createViewModel() = SubmissionDispatcherViewModel()
@Before
fun setup() {
MockKAnnotations.init(this, relaxed = true)
setupMockViewModel(object : SubmissionDispatcherViewModel.Factory {
override fun create(): SubmissionDispatcherViewModel = viewModel
override fun create(): SubmissionDispatcherViewModel = createViewModel()
})
}
......@@ -43,7 +56,8 @@ class SubmissionDispatcherFragmentTest : BaseUITest() {
launchFragment<SubmissionDispatcherFragment>()
}
@Test fun testEventQRClicked() {
@Test
fun testEventQRClicked() {
val scenario = launchFragmentInContainer<SubmissionDispatcherFragment>()
onView(withId(R.id.submission_dispatcher_qr))
.perform(scrollTo())
......@@ -52,7 +66,8 @@ class SubmissionDispatcherFragmentTest : BaseUITest() {
// TODO verify result
}
@Test fun testEventTeleClicked() {
@Test
fun testEventTeleClicked() {
val scenario = launchFragmentInContainer<SubmissionDispatcherFragment>()
onView(withId(R.id.submission_dispatcher_tan_tele))
.perform(scrollTo())
......@@ -61,7 +76,8 @@ class SubmissionDispatcherFragmentTest : BaseUITest() {
// TODO verify result
}
@Test fun testEventTanClicked() {
@Test
fun testEventTanClicked() {
val scenario = launchFragmentInContainer<SubmissionDispatcherFragment>()
onView(withId(R.id.submission_dispatcher_tan_code))
.perform(scrollTo())
......@@ -69,6 +85,16 @@ class SubmissionDispatcherFragmentTest : BaseUITest() {
// TODO verify result
}
@Test
@Screenshot
fun capture_fragment() {
captureScreenshot<SubmissionDispatcherFragment>()
onView(withId(R.id.submission_dispatcher_tan_tele))
.perform(scrollTo())
Thread.sleep(SCREENSHOT_DELAY_TIME)
Screengrab.screenshot(SubmissionDispatcherFragment::class.simpleName.plus("2"))
}
}
@Module
......
package de.rki.coronawarnapp.ui.submission
import androidx.lifecycle.MutableLiveData
import androidx.test.espresso.Espresso.onView
import androidx.test.espresso.action.ViewActions
import androidx.test.espresso.matcher.ViewMatchers
import androidx.test.ext.junit.runners.AndroidJUnit4
import dagger.Module
import dagger.android.ContributesAndroidInjector
import de.rki.coronawarnapp.R
import de.rki.coronawarnapp.submission.SubmissionRepository
import de.rki.coronawarnapp.submission.Symptoms
import de.rki.coronawarnapp.submission.auto.AutoSubmission
import de.rki.coronawarnapp.ui.submission.symptoms.calendar.SubmissionSymptomCalendarFragment
import de.rki.coronawarnapp.ui.submission.symptoms.calendar.SubmissionSymptomCalendarFragmentArgs
import de.rki.coronawarnapp.ui.submission.symptoms.calendar.SubmissionSymptomCalendarViewModel
import io.mockk.MockKAnnotations
import io.mockk.every
import io.mockk.impl.annotations.MockK
import io.mockk.spyk
import org.junit.After
import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
import testhelpers.BaseUITest
import testhelpers.SCREENSHOT_DELAY_TIME
import testhelpers.Screenshot
import testhelpers.SystemUIDemoModeRule
import testhelpers.TestDispatcherProvider
import testhelpers.captureScreenshot
import tools.fastlane.screengrab.Screengrab
import tools.fastlane.screengrab.locale.LocaleTestRule
@RunWith(AndroidJUnit4::class)
class SubmissionSymptomCalendarFragmentTest : BaseUITest() {
@MockK lateinit var submissionRepository: SubmissionRepository
@MockK lateinit var autoSubmission: AutoSubmission
@Rule
@JvmField
val localeTestRule = LocaleTestRule()
@get:Rule
val systemUIDemoModeRule = SystemUIDemoModeRule()
private lateinit var viewModel: SubmissionSymptomCalendarViewModel
@Before
fun setup() {
MockKAnnotations.init(this, relaxed = true)
viewModel = spyk(
SubmissionSymptomCalendarViewModel(
Symptoms.Indication.POSITIVE,
TestDispatcherProvider,
submissionRepository,
autoSubmission
)
)
with(viewModel) {
every { symptomStart } returns MutableLiveData(Symptoms.StartOf.LastSevenDays)
}
setupMockViewModel(object : SubmissionSymptomCalendarViewModel.Factory {
override fun create(symptomIndication: Symptoms.Indication): SubmissionSymptomCalendarViewModel = viewModel
})
}
@After
fun teardown() {
clearAllViewModels()
}
@Test
@Screenshot
fun capture_fragment() {
captureScreenshot<SubmissionSymptomCalendarFragment>(
fragmentArgs = SubmissionSymptomCalendarFragmentArgs(
Symptoms.Indication.POSITIVE
).toBundle()
)
onView(ViewMatchers.withId(R.id.symptom_button_next))
.perform(ViewActions.scrollTo())
Thread.sleep(SCREENSHOT_DELAY_TIME)
Screengrab.screenshot(SubmissionSymptomCalendarFragment::class.simpleName.plus("2"))
}
}
@Module
abstract class SubmissionSymptomCalendarFragmentTestModule {
@ContributesAndroidInjector
abstract fun submissionSymptomIntroScreen(): SubmissionSymptomCalendarFragment
}
......@@ -2,6 +2,7 @@ package de.rki.coronawarnapp.ui.submission
import androidx.fragment.app.testing.launchFragment
import androidx.fragment.app.testing.launchFragmentInContainer
import androidx.lifecycle.MutableLiveData
import androidx.test.espresso.Espresso.onView
import androidx.test.espresso.action.ViewActions.click
import androidx.test.espresso.action.ViewActions.scrollTo
......@@ -10,24 +11,52 @@ import androidx.test.ext.junit.runners.AndroidJUnit4
import dagger.Module
import dagger.android.ContributesAndroidInjector
import de.rki.coronawarnapp.R
import de.rki.coronawarnapp.submission.SubmissionRepository
import de.rki.coronawarnapp.submission.Symptoms
import de.rki.coronawarnapp.submission.auto.AutoSubmission
import de.rki.coronawarnapp.ui.submission.symptoms.introduction.SubmissionSymptomIntroductionFragment
import de.rki.coronawarnapp.ui.submission.symptoms.introduction.SubmissionSymptomIntroductionViewModel
import io.mockk.MockKAnnotations
import io.mockk.every
import io.mockk.impl.annotations.MockK
import io.mockk.spyk
import org.junit.After
import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
import testhelpers.BaseUITest
import testhelpers.SCREENSHOT_DELAY_TIME
import testhelpers.Screenshot
import testhelpers.SystemUIDemoModeRule
import testhelpers.TestDispatcherProvider
import testhelpers.captureScreenshot
import tools.fastlane.screengrab.Screengrab
import tools.fastlane.screengrab.locale.LocaleTestRule
@RunWith(AndroidJUnit4::class)
class SubmissionSymptomIntroFragmentTest : BaseUITest() {
@MockK lateinit var viewModel: SubmissionSymptomIntroductionViewModel
@MockK lateinit var submissionRepository: SubmissionRepository
@MockK lateinit var autoSubmission: AutoSubmission
@Rule
@JvmField
val localeTestRule = LocaleTestRule()
@get:Rule
val systemUIDemoModeRule = SystemUIDemoModeRule()
private lateinit var viewModel: SubmissionSymptomIntroductionViewModel
@Before
fun setup() {
MockKAnnotations.init(this, relaxed = true)
viewModel =
spyk(SubmissionSymptomIntroductionViewModel(TestDispatcherProvider, submissionRepository, autoSubmission))
with(viewModel) {
every { symptomIndication } returns MutableLiveData(Symptoms.Indication.POSITIVE)
}
setupMockViewModel(object : SubmissionSymptomIntroductionViewModel.Factory {
override fun create(): SubmissionSymptomIntroductionViewModel = viewModel
})
......@@ -43,7 +72,8 @@ class SubmissionSymptomIntroFragmentTest : BaseUITest() {
launchFragment<SubmissionSymptomIntroductionFragment>()
}
@Test fun testSymptomNextClicked() {
@Test
fun testSymptomNextClicked() {
val scenario = launchFragmentInContainer<SubmissionSymptomIntroductionFragment>()
onView(withId(R.id.symptom_button_next))
.perform(scrollTo())
......@@ -51,6 +81,16 @@ class SubmissionSymptomIntroFragmentTest : BaseUITest() {
// TODO verify result
}
@Test
@Screenshot
fun capture_fragment() {
captureScreenshot<SubmissionSymptomIntroductionFragment>()
onView(withId(R.id.symptom_button_next))
.perform(scrollTo())
Thread.sleep(SCREENSHOT_DELAY_TIME)
Screengrab.screenshot(SubmissionSymptomIntroductionFragment::class.simpleName.plus("2"))
}
}
@Module
......
......@@ -5,33 +5,56 @@ import androidx.fragment.app.testing.launchFragmentInContainer
import androidx.test.espresso.Espresso.onView
import androidx.test.espresso.action.ViewActions
import androidx.test.espresso.action.ViewActions.click
import androidx.test.espresso.action.ViewActions.closeSoftKeyboard
import androidx.test.espresso.action.ViewActions.scrollTo
import androidx.test.espresso.action.ViewActions.typeText
import androidx.test.espresso.matcher.ViewMatchers.withId
import androidx.test.ext.junit.runners.AndroidJUnit4
import dagger.Module
import dagger.android.ContributesAndroidInjector
import de.rki.coronawarnapp.R
import de.rki.coronawarnapp.submission.SubmissionRepository
import de.rki.coronawarnapp.ui.submission.tan.SubmissionTanFragment
import de.rki.coronawarnapp.ui.submission.tan.SubmissionTanViewModel
import io.mockk.MockKAnnotations
import io.mockk.impl.annotations.MockK
import org.junit.After
import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
import testhelpers.BaseUITest
import testhelpers.SCREENSHOT_DELAY_TIME
import testhelpers.Screenshot
import testhelpers.SystemUIDemoModeRule
import testhelpers.TestDispatcherProvider
import testhelpers.launchFragmentInContainer2
import tools.fastlane.screengrab.Screengrab
import tools.fastlane.screengrab.locale.LocaleTestRule
@RunWith(AndroidJUnit4::class)
class SubmissionTanFragmentTest : BaseUITest() {
@MockK lateinit var viewModel: SubmissionTanViewModel
@MockK lateinit var submissionRepository: SubmissionRepository
private fun createViewModel() = SubmissionTanViewModel(
dispatcherProvider = TestDispatcherProvider,
submissionRepository = submissionRepository
)
@Rule
@JvmField
val localeTestRule = LocaleTestRule()
@get:Rule
val systemUIDemoModeRule = SystemUIDemoModeRule()
@Before
fun setup() {
MockKAnnotations.init(this, relaxed = true)
setupMockViewModel(object : SubmissionTanViewModel.Factory {
override fun create(): SubmissionTanViewModel = viewModel
override fun create(): SubmissionTanViewModel = createViewModel()
})
}
......@@ -45,7 +68,8 @@ class SubmissionTanFragmentTest : BaseUITest() {
launchFragment<SubmissionTanFragment>()
}
@Test fun testEventTanNextClicked() {
@Test
fun testEventTanNextClicked() {
val scenario = launchFragmentInContainer<SubmissionTanFragment>()
ViewActions.closeSoftKeyboard()
onView(withId(R.id.submission_tan_button_enter))
......@@ -54,6 +78,39 @@ class SubmissionTanFragmentTest : BaseUITest() {
// TODO verify result
}
@Test
@Screenshot
fun capture_fragment_empty() {
launchFragmentInContainer2<SubmissionTanFragment>()
onView(withId(R.id.tan_input_edittext))
.perform(click())
.perform(closeSoftKeyboard())
Thread.sleep(SCREENSHOT_DELAY_TIME)
Screengrab.screenshot(SubmissionTanFragment::class.simpleName)
}
@Test
@Screenshot
fun capture_fragment_done() {
launchFragmentInContainer2<SubmissionTanFragment>()
onView(withId(R.id.tan_input_edittext))
.perform(click())
.perform(typeText("AC9UHD65AF"), closeSoftKeyboard())
Thread.sleep(SCREENSHOT_DELAY_TIME)
Screengrab.screenshot(SubmissionTanFragment::class.simpleName.plus("_done"))
}
@Test
@Screenshot
fun capture_fragment_invalid() {
launchFragmentInContainer2<SubmissionTanFragment>()
onView(withId(R.id.tan_input_edittext))
.perform(click())
.perform(typeText("AC9U0"), closeSoftKeyboard())
Thread.sleep(SCREENSHOT_DELAY_TIME)
Screengrab.screenshot(SubmissionTanFragment::class.simpleName.plus("_invalid"))
}
}
@Module
......
package de.rki.coronawarnapp.ui.submission
import androidx.lifecycle.MutableLiveData
import androidx.test.ext.junit.runners.AndroidJUnit4
import dagger.Module
import dagger.android.ContributesAndroidInjector
import de.rki.coronawarnapp.submission.SubmissionRepository
import de.rki.coronawarnapp.submission.auto.AutoSubmission
import de.rki.coronawarnapp.submission.data.tekhistory.TEKHistoryUpdater_AssistedFactory
import de.rki.coronawarnapp.ui.submission.resultavailable.SubmissionTestResultAvailableFragment
import de.rki.coronawarnapp.ui.submission.resultavailable.SubmissionTestResultAvailableViewModel
import io.mockk.MockKAnnotations
import io.mockk.every
import io.mockk.impl.annotations.MockK
import io.mockk.spyk
import kotlinx.coroutines.flow.flowOf
import org.junit.After
import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
import testhelpers.BaseUITest
import testhelpers.Screenshot
import testhelpers.SystemUIDemoModeRule
import testhelpers.TestDispatcherProvider
import testhelpers.captureScreenshot
import tools.fastlane.screengrab.locale.LocaleTestRule
@RunWith(AndroidJUnit4::class)
class SubmissionTestResultAvailableFragmentTest : BaseUITest() {
lateinit var viewModel: SubmissionTestResultAvailableViewModel
@MockK lateinit var submissionRepository: SubmissionRepository
@MockK lateinit var tekHistoryUpdaterFactory: TEKHistoryUpdater_AssistedFactory
@MockK lateinit var autoSubmission: AutoSubmission
@Rule
@JvmField
val localeTestRule = LocaleTestRule()
@get:Rule
val systemUIDemoModeRule = SystemUIDemoModeRule()
@Before
fun setup() {
MockKAnnotations.init(this, relaxed = true)
every { submissionRepository.deviceUIStateFlow } returns flowOf()
every { submissionRepository.testResultReceivedDateFlow } returns flowOf()
viewModel = spyk(
SubmissionTestResultAvailableViewModel(
TestDispatcherProvider,
tekHistoryUpdaterFactory,
submissionRepository,
autoSubmission
)
)
setupMockViewModel(object : SubmissionTestResultAvailableViewModel.Factory {
override fun create(): SubmissionTestResultAvailableViewModel = viewModel
})
}
@After
fun teardown() {
clearAllViewModels()
}
@Test
@Screenshot
fun capture_fragment_with_consent() {
every { viewModel.consent } returns MutableLiveData(true)
captureScreenshot<SubmissionTestResultAvailableFragment>("_consent")
}
@Test
@Screenshot
fun capture_fragment_without_consent() {
every { viewModel.consent } returns MutableLiveData(false)
captureScreenshot<SubmissionTestResultAvailableFragment>("_no_consent")
}
}
@Module
abstract class SubmissionTestResultTestAvailableModule {
@ContributesAndroidInjector
abstract fun submissionTestResultScreen(): SubmissionTestResultAvailableFragment
}
......@@ -2,6 +2,7 @@ package de.rki.coronawarnapp.ui.submission
import androidx.fragment.app.testing.launchFragment
import androidx.fragment.app.testing.launchFragmentInContainer
import androidx.lifecycle.MutableLiveData
import androidx.navigation.NavController
import androidx.navigation.Navigation
import androidx.test.espresso.Espresso.onView
......@@ -11,26 +12,58 @@ import androidx.test.ext.junit.runners.AndroidJUnit4
import dagger.Module
import dagger.android.ContributesAndroidInjector
import de.rki.coronawarnapp.R
import de.rki.coronawarnapp.submission.SubmissionRepository
import de.rki.coronawarnapp.submission.auto.AutoSubmission
import de.rki.coronawarnapp.ui.submission.testresult.TestResultUIState
import de.rki.coronawarnapp.ui.submission.testresult.positive.SubmissionTestResultConsentGivenFragment
import de.rki.coronawarnapp.ui.submission.testresult.positive.SubmissionTestResultConsentGivenViewModel
import de.rki.coronawarnapp.util.DeviceUIState
import de.rki.coronawarnapp.util.NetworkRequestWrapper
import io.mockk.MockKAnnotations
import io.mockk.every
import io.mockk.impl.annotations.MockK
import io.mockk.mockk
import io.mockk.spyk
import io.mockk.verify
import org.junit.After
import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
import testhelpers.BaseUITest
import testhelpers.Screenshot
import testhelpers.SystemUIDemoModeRule
import testhelpers.TestDispatcherProvider
import testhelpers.captureScreenshot
import tools.fastlane.screengrab.locale.LocaleTestRule
import java.util.Date
@RunWith(AndroidJUnit4::class)
class SubmissionTestResultConsentGivenFragmentTest : BaseUITest() {
@MockK lateinit var viewModel: SubmissionTestResultConsentGivenViewModel
@MockK lateinit var submissionRepository: SubmissionRepository
@MockK lateinit var autoSubmission: AutoSubmission
@Rule
@JvmField
val localeTestRule = LocaleTestRule()
@get:Rule
val systemUIDemoModeRule = SystemUIDemoModeRule()
private lateinit var viewModel: SubmissionTestResultConsentGivenViewModel
@Before
fun setup() {
MockKAnnotations.init(this, relaxed = true)
viewModel =
spyk(
SubmissionTestResultConsentGivenViewModel(
submissionRepository,
autoSubmission,
TestDispatcherProvider
)
)
setupMockViewModel(object : SubmissionTestResultConsentGivenViewModel.Factory {
override fun create(): SubmissionTestResultConsentGivenViewModel = viewModel
})
......@@ -61,6 +94,20 @@ class SubmissionTestResultConsentGivenFragmentTest : BaseUITest() {
mockNavController.navigate(R.id.action_submissionTestResultConsentGivenFragment_to_submissionSymptomIntroductionFragment)
}
}
@Test
@Screenshot
fun capture_fragment() {
every { viewModel.uiState } returns MutableLiveData(
TestResultUIState(
NetworkRequestWrapper.RequestSuccessful(
DeviceUIState.PAIRED_POSITIVE
), Date()
)
)
captureScreenshot<SubmissionTestResultConsentGivenFragment>()
}
}
@Module
......
......@@ -10,32 +10,68 @@ import androidx.test.ext.junit.runners.AndroidJUnit4
import dagger.Module
import dagger.android.ContributesAndroidInjector
import de.rki.coronawarnapp.R
import de.rki.coronawarnapp.notification.TestResultNotificationService
import de.rki.coronawarnapp.submission.SubmissionRepository
import de.rki.coronawarnapp.ui.submission.testresult.TestResultUIState
import de.rki.coronawarnapp.ui.submission.testresult.pending.SubmissionTestResultPendingFragment
import de.rki.coronawarnapp.ui.submission.testresult.pending.SubmissionTestResultPendingViewModel
import de.rki.coronawarnapp.util.DeviceUIState
import de.rki.coronawarnapp.util.NetworkRequestWrapper
import io.mockk.MockKAnnotations
import io.mockk.Runs
import io.mockk.every
import io.mockk.impl.annotations.MockK
import io.mockk.just
import io.mockk.spyk
import kotlinx.coroutines.flow.flowOf
import org.junit.After
import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
import testhelpers.BaseUITest
import testhelpers.Screenshot
import testhelpers.SystemUIDemoModeRule
import testhelpers.TestDispatcherProvider
import testhelpers.captureScreenshot
import tools.fastlane.screengrab.locale.LocaleTestRule
import java.util.Date
@RunWith(AndroidJUnit4::class)
class SubmissionTestResultFragmentTest : BaseUITest() {
@MockK lateinit var pendingViewModel: SubmissionTestResultPendingViewModel
@MockK lateinit var uiState: TestResultUIState
lateinit var viewModel: SubmissionTestResultPendingViewModel
@MockK lateinit var submissionRepository: SubmissionRepository
@MockK lateinit var testResultNotificationService: TestResultNotificationService
@Rule
@JvmField
val localeTestRule = LocaleTestRule()
@get:Rule
val systemUIDemoModeRule = SystemUIDemoModeRule()
@Before
fun setup() {
MockKAnnotations.init(this, relaxed = true)
every { pendingViewModel.testState } returns MutableLiveData()
every { submissionRepository.deviceUIStateFlow } returns flowOf()
every { submissionRepository.testResultReceivedDateFlow } returns flowOf()
viewModel = spyk(
SubmissionTestResultPendingViewModel(
TestDispatcherProvider,
testResultNotificationService,
submissionRepository
)
)
with(viewModel) {
every { observeTestResultToSchedulePositiveTestResultReminder() } just Runs
}
setupMockViewModel(object : SubmissionTestResultPendingViewModel.Factory {
override fun create(): SubmissionTestResultPendingViewModel = pendingViewModel
override fun create(): SubmissionTestResultPendingViewModel = viewModel
})
}
......@@ -88,6 +124,19 @@ class SubmissionTestResultFragmentTest : BaseUITest() {
// TODO verify result
}
@Test
@Screenshot
fun capture_fragment() {
every { viewModel.testState } returns MutableLiveData(
TestResultUIState(
NetworkRequestWrapper.RequestSuccessful(
DeviceUIState.PAIRED_NO_RESULT
), Date()
)
)
captureScreenshot<SubmissionTestResultPendingFragment>()
}
}
@Module
......
package de.rki.coronawarnapp.ui.submission
import androidx.lifecycle.MutableLiveData
import androidx.test.ext.junit.runners.AndroidJUnit4
import dagger.Module
import dagger.android.ContributesAndroidInjector
import de.rki.coronawarnapp.submission.SubmissionRepository
import de.rki.coronawarnapp.ui.submission.testresult.TestResultUIState
import de.rki.coronawarnapp.ui.submission.testresult.negative.SubmissionTestResultNegativeFragment
import de.rki.coronawarnapp.ui.submission.testresult.negative.SubmissionTestResultNegativeViewModel
import de.rki.coronawarnapp.util.DeviceUIState
import de.rki.coronawarnapp.util.NetworkRequestWrapper
import io.mockk.MockKAnnotations
import io.mockk.every
import io.mockk.impl.annotations.MockK
import io.mockk.spyk
import kotlinx.coroutines.flow.flowOf
import org.junit.After
import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
import testhelpers.BaseUITest
import testhelpers.Screenshot
import testhelpers.SystemUIDemoModeRule
import testhelpers.TestDispatcherProvider
import testhelpers.captureScreenshot
import tools.fastlane.screengrab.locale.LocaleTestRule
import java.util.Date
@RunWith(AndroidJUnit4::class)
class SubmissionTestResultNegativeFragmentTest : BaseUITest() {
lateinit var viewModel: SubmissionTestResultNegativeViewModel
@MockK lateinit var submissionRepository: SubmissionRepository
@Rule
@JvmField
val localeTestRule = LocaleTestRule()
@get:Rule
val systemUIDemoModeRule = SystemUIDemoModeRule()
@Before
fun setup() {
MockKAnnotations.init(this, relaxed = true)
every { submissionRepository.deviceUIStateFlow } returns flowOf()
every { submissionRepository.testResultReceivedDateFlow } returns flowOf()
viewModel = spyk(
SubmissionTestResultNegativeViewModel(
TestDispatcherProvider,
submissionRepository
)
)
setupMockViewModel(object : SubmissionTestResultNegativeViewModel.Factory {
override fun create(): SubmissionTestResultNegativeViewModel = viewModel
})
}
@After
fun teardown() {
clearAllViewModels()
}
@Test
@Screenshot
fun capture_fragment() {
every { viewModel.testResult } returns MutableLiveData(
TestResultUIState(
NetworkRequestWrapper.RequestSuccessful(
DeviceUIState.PAIRED_NEGATIVE
), Date()
)
)
captureScreenshot<SubmissionTestResultNegativeFragment>()
}
}
@Module
abstract class SubmissionTestResultTestNegativeModule {
@ContributesAndroidInjector
abstract fun submissionTestResultScreen(): SubmissionTestResultNegativeFragment
}
package de.rki.coronawarnapp.ui.submission
import androidx.lifecycle.MutableLiveData
import androidx.test.ext.junit.runners.AndroidJUnit4
import dagger.Module
import dagger.android.ContributesAndroidInjector
import de.rki.coronawarnapp.submission.SubmissionRepository
import de.rki.coronawarnapp.ui.submission.testresult.TestResultUIState
import de.rki.coronawarnapp.ui.submission.testresult.positive.SubmissionTestResultNoConsentFragment
import de.rki.coronawarnapp.ui.submission.testresult.positive.SubmissionTestResultNoConsentViewModel
import de.rki.coronawarnapp.util.DeviceUIState
import de.rki.coronawarnapp.util.NetworkRequestWrapper
import io.mockk.MockKAnnotations
import io.mockk.every
import io.mockk.impl.annotations.MockK
import io.mockk.spyk
import org.junit.After
import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
import testhelpers.BaseUITest
import testhelpers.Screenshot
import testhelpers.SystemUIDemoModeRule
import testhelpers.captureScreenshot
import tools.fastlane.screengrab.locale.LocaleTestRule
import java.util.Date
@RunWith(AndroidJUnit4::class)
class SubmissionTestResultNoConsentGivenFragmentTest : BaseUITest() {
@MockK lateinit var submissionRepository: SubmissionRepository
@Rule
@JvmField
val localeTestRule = LocaleTestRule()
@get:Rule
val systemUIDemoModeRule = SystemUIDemoModeRule()
private lateinit var viewModel: SubmissionTestResultNoConsentViewModel
@Before
fun setup() {
MockKAnnotations.init(this, relaxed = true)
viewModel =
spyk(SubmissionTestResultNoConsentViewModel(submissionRepository))
setupMockViewModel(object : SubmissionTestResultNoConsentViewModel.Factory {
override fun create(): SubmissionTestResultNoConsentViewModel = viewModel
})
}
@After
fun teardown() {
clearAllViewModels()
}
@Test
@Screenshot
fun capture_fragment() {
every { viewModel.uiState } returns MutableLiveData(
TestResultUIState(
NetworkRequestWrapper.RequestSuccessful(
DeviceUIState.PAIRED_POSITIVE
), Date()
)
)
captureScreenshot<SubmissionTestResultNoConsentFragment>()
}
}
@Module
abstract class SubmissionTestResultNoConsentModel {
@ContributesAndroidInjector
abstract fun submissionTestResultScreen(): SubmissionTestResultNoConsentFragment
}
package de.rki.coronawarnapp.ui.submission
import androidx.test.ext.junit.runners.AndroidJUnit4
import dagger.Module
import dagger.android.ContributesAndroidInjector
import de.rki.coronawarnapp.storage.interoperability.InteroperabilityRepository
import de.rki.coronawarnapp.submission.SubmissionRepository
import de.rki.coronawarnapp.ui.submission.yourconsent.SubmissionYourConsentFragment
import de.rki.coronawarnapp.ui.submission.yourconsent.SubmissionYourConsentFragmentArgs
import de.rki.coronawarnapp.ui.submission.yourconsent.SubmissionYourConsentViewModel
import io.mockk.MockKAnnotations
import io.mockk.every
import io.mockk.impl.annotations.MockK
import kotlinx.coroutines.flow.flowOf
import org.junit.After
import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
import testhelpers.BaseUITest
import testhelpers.Screenshot
import testhelpers.SystemUIDemoModeRule
import testhelpers.TestDispatcherProvider
import testhelpers.captureScreenshot
import tools.fastlane.screengrab.locale.LocaleTestRule
@RunWith(AndroidJUnit4::class)
class SubmissionYourConsentFragmentTest : BaseUITest() {
@MockK lateinit var submissionRepository: SubmissionRepository
@MockK lateinit var interoperabilityRepository: InteroperabilityRepository
@Rule
@JvmField
val localeTestRule = LocaleTestRule()
@get:Rule
val systemUIDemoModeRule = SystemUIDemoModeRule()
private lateinit var viewModel: SubmissionYourConsentViewModel
@Before
fun setup() {
MockKAnnotations.init(this, relaxed = true)
every { submissionRepository.hasGivenConsentToSubmission } returns flowOf()
viewModel =
SubmissionYourConsentViewModel(TestDispatcherProvider, interoperabilityRepository, submissionRepository)
setupMockViewModel(object : SubmissionYourConsentViewModel.Factory {
override fun create(): SubmissionYourConsentViewModel = viewModel
})
}
@After
fun teardown() {
clearAllViewModels()
}
@Test
@Screenshot
fun capture_fragment_results() {
captureScreenshot<SubmissionYourConsentFragment>(
fragmentArgs = SubmissionYourConsentFragmentArgs(true).toBundle()
)
}
}
@Module
abstract class SubmissionYourConsentFragmentTestModule {
@ContributesAndroidInjector
abstract fun submissionYourConsentScreen(): SubmissionYourConsentFragment
}
......@@ -15,13 +15,19 @@ import de.rki.coronawarnapp.ui.onboarding.OnboardingNotificationsTestModule
import de.rki.coronawarnapp.ui.onboarding.OnboardingPrivacyTestModule
import de.rki.coronawarnapp.ui.onboarding.OnboardingTestFragmentModule
import de.rki.coronawarnapp.ui.onboarding.OnboardingTracingFragmentTestModule
import de.rki.coronawarnapp.ui.submission.SubmissionConsentFragmentTestModule
import de.rki.coronawarnapp.ui.submission.SubmissionContactTestModule
import de.rki.coronawarnapp.ui.submission.SubmissionDispatcherTestModule
import de.rki.coronawarnapp.ui.submission.SubmissionQRScanFragmentModule
import de.rki.coronawarnapp.ui.submission.SubmissionSymptomCalendarFragmentTestModule
import de.rki.coronawarnapp.ui.submission.SubmissionSymptomIntroFragmentTestModule
import de.rki.coronawarnapp.ui.submission.SubmissionTanTestModule
import de.rki.coronawarnapp.ui.submission.SubmissionTestResultConsentGivenTestModule
import de.rki.coronawarnapp.ui.submission.SubmissionTestResultNoConsentModel
import de.rki.coronawarnapp.ui.submission.SubmissionTestResultTestAvailableModule
import de.rki.coronawarnapp.ui.submission.SubmissionTestResultTestModule
import de.rki.coronawarnapp.ui.submission.SubmissionTestResultTestNegativeModule
import de.rki.coronawarnapp.ui.submission.SubmissionYourConsentFragmentTestModule
import de.rki.coronawarnapp.ui.tracing.TracingDetailsFragmentTestTestModule
@Module(
......@@ -38,10 +44,16 @@ import de.rki.coronawarnapp.ui.tracing.TracingDetailsFragmentTestTestModule
SubmissionDispatcherTestModule::class,
SubmissionTanTestModule::class,
SubmissionTestResultTestModule::class,
SubmissionTestResultTestNegativeModule::class,
SubmissionTestResultTestAvailableModule::class,
SubmissionTestResultNoConsentModel::class,
SubmissionTestResultConsentGivenTestModule::class,
SubmissionSymptomIntroFragmentTestModule::class,
SubmissionContactTestModule::class,
SubmissionQRScanFragmentModule::class,
SubmissionConsentFragmentTestModule::class,
SubmissionYourConsentFragmentTestModule::class,
SubmissionSymptomCalendarFragmentTestModule::class,
SubmissionQRScanFragmentModule::class,
// Tracing
TracingDetailsFragmentTestTestModule::class,
......
......@@ -6,6 +6,7 @@ import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentFactory
import androidx.fragment.app.testing.FragmentScenario
import de.rki.coronawarnapp.R
import tools.fastlane.screengrab.Screengrab
/** Delay time before taking screenshot
*/
......@@ -27,6 +28,18 @@ inline fun <reified F : Fragment> launchFragmentInContainer2(
factory: FragmentFactory? = null
) = FragmentScenario.launchInContainer(F::class.java, fragmentArgs, themeResId, factory)
inline fun <reified F : Fragment> captureScreenshot(
suffix: String = "",
fragmentArgs: Bundle? = null,
@StyleRes themeResId: Int = R.style.AppTheme,
factory: FragmentFactory? = null
) {
val name = F::class.simpleName.plus(suffix)
launchFragmentInContainer2<F>(fragmentArgs, themeResId, factory)
Thread.sleep(SCREENSHOT_DELAY_TIME)
Screengrab.screenshot(name)
}
/**
* Launches Fragment in Activity.
* Same as [androidx.fragment.app.testing.launchFragment] except that it defaults
......
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