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

Add screenshot test in home screen

parent b1bb6341
No related branches found
No related tags found
No related merge requests found
......@@ -6,42 +6,81 @@ import androidx.test.ext.junit.runners.AndroidJUnit4
import dagger.Module
import dagger.android.ContributesAndroidInjector
import de.rki.coronawarnapp.R
import de.rki.coronawarnapp.appconfig.AppConfigProvider
import de.rki.coronawarnapp.main.CWASettings
import de.rki.coronawarnapp.notification.TestResultNotificationService
import de.rki.coronawarnapp.risk.RiskState
import de.rki.coronawarnapp.storage.SubmissionRepository
import de.rki.coronawarnapp.storage.TracingRepository
import de.rki.coronawarnapp.submission.ui.homecards.NoTest
import de.rki.coronawarnapp.submission.ui.homecards.SubmissionStateProvider
import de.rki.coronawarnapp.submission.ui.homecards.TestUnregisteredCard
import de.rki.coronawarnapp.tracing.GeneralTracingStatus
import de.rki.coronawarnapp.tracing.states.LowRisk
import de.rki.coronawarnapp.tracing.states.TracingStateProvider
import de.rki.coronawarnapp.tracing.ui.homecards.LowRiskCard
import de.rki.coronawarnapp.tracing.ui.statusbar.TracingHeaderState
import de.rki.coronawarnapp.ui.main.home.items.DiaryCard
import de.rki.coronawarnapp.ui.main.home.items.FAQCard
import de.rki.coronawarnapp.ui.main.home.items.HomeItem
import de.rki.coronawarnapp.util.security.EncryptionErrorResetTool
import de.rki.coronawarnapp.util.ui.SingleLiveEvent
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.mockk
import io.mockk.spyk
import io.mockk.verify
import org.joda.time.Instant
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.launchFragmentInContainer2
import tools.fastlane.screengrab.Screengrab
import tools.fastlane.screengrab.locale.LocaleTestRule
@RunWith(AndroidJUnit4::class)
class HomeFragmentTest : BaseUITest() {
@MockK lateinit var viewModel: HomeFragmentViewModel
@MockK lateinit var errorResetTool: EncryptionErrorResetTool
@MockK lateinit var tracingStatus: GeneralTracingStatus
@MockK lateinit var tracingStateProviderFactory: TracingStateProvider.Factory
@MockK lateinit var submissionStateProvider: SubmissionStateProvider
@MockK lateinit var tracingRepository: TracingRepository
@MockK lateinit var testResultNotificationService: TestResultNotificationService
@MockK lateinit var submissionRepository: SubmissionRepository
@MockK lateinit var cwaSettings: CWASettings
@MockK lateinit var appConfigProvider: AppConfigProvider
private lateinit var viewModel: HomeFragmentViewModel
@Rule
@JvmField
val localeTestRule = LocaleTestRule()
@get:Rule
val systemUIDemoModeRule = SystemUIDemoModeRule()
@Before
fun setup() {
MockKAnnotations.init(this, relaxed = true)
every { viewModel.tracingHeaderState } returns MutableLiveData()
every { viewModel.homeItems } returns MutableLiveData(emptyList())
every { viewModel.refreshRequiredData() } just Runs
viewModel = homeFragmentViewModelSpy()
with(viewModel) {
every { tracingHeaderState } returns MutableLiveData()
every { homeItems } returns MutableLiveData(emptyList())
every { refreshRequiredData() } just Runs
every { popupEvents } returns SingleLiveEvent()
every { showLoweredRiskLevelDialog } returns MutableLiveData()
every { observeTestResultToSchedulePositiveTestResultReminder() } just Runs
}
setupMockViewModel(object : HomeFragmentViewModel.Factory {
override fun create(): HomeFragmentViewModel = viewModel
......@@ -80,6 +119,7 @@ class HomeFragmentTest : BaseUITest() {
val homeItems = MutableLiveData(
listOf(
lowRiskItem,
TestUnregisteredCard.Item(NoTest, onClickAction = {}),
DiaryCard.Item(onClickAction = { }),
FAQCard.Item(onClickAction = { })
)
......@@ -88,9 +128,24 @@ class HomeFragmentTest : BaseUITest() {
every { viewModel.tracingHeaderState } returns headerState
every { viewModel.homeItems } returns homeItems
launchFragmentInContainer2<HomeFragment>()
Thread.sleep(5000)
Thread.sleep(1000)
Screengrab.screenshot(HomeFragment::class.simpleName)
}
private fun homeFragmentViewModelSpy() = spyk(
HomeFragmentViewModel(
dispatcherProvider = TestDispatcherProvider,
errorResetTool = errorResetTool,
tracingRepository = tracingRepository,
tracingStateProviderFactory = tracingStateProviderFactory,
testResultNotificationService = testResultNotificationService,
appConfigProvider = appConfigProvider,
tracingStatus = tracingStatus,
submissionRepository = submissionRepository,
submissionStateProvider = submissionStateProvider,
cwaSettings = cwaSettings
)
)
}
@Module
......
......@@ -9,14 +9,18 @@ import androidx.test.ext.junit.runners.AndroidJUnit4
import dagger.Module
import dagger.android.ContributesAndroidInjector
import de.rki.coronawarnapp.R
import de.rki.coronawarnapp.appconfig.AppConfigProvider
import de.rki.coronawarnapp.nearby.TracingPermissionHelper
import de.rki.coronawarnapp.storage.interoperability.InteroperabilityRepository
import io.mockk.MockKAnnotations
import io.mockk.Runs
import io.mockk.coEvery
import io.mockk.every
import io.mockk.impl.annotations.MockK
import io.mockk.just
import io.mockk.mockk
import io.mockk.spyk
import kotlinx.coroutines.flow.flowOf
import org.junit.After
import org.junit.Before
import org.junit.Rule
......@@ -56,6 +60,7 @@ class OnboardingTracingFragmentTest : BaseUITest() {
)
every { viewModelSpy.resetTracing() } just Runs
every { interopRepo.countryList } returns flowOf()
setupMockViewModel(object : OnboardingTracingFragmentViewModel.Factory {
override fun create(): OnboardingTracingFragmentViewModel = viewModelSpy
......
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