From f725830d928ce53ee5377006674f659aa0986b3b Mon Sep 17 00:00:00 2001 From: axelherbstreith <75120552+axelherbstreith@users.noreply.github.com> Date: Wed, 17 Mar 2021 10:03:58 +0100 Subject: [PATCH] Technical-Support-Function Screenshots (EXPOSUREAPP-5033) (#2612) * Added basic screenshots * added screenshots for active and inactive logging * refactoring * linting * removed empty lines Co-authored-by: Matthias Urhahn <matthias.urhahn@sap.com> Co-authored-by: Ralf Gehrer <ralfgehrer@users.noreply.github.com> --- .../bugreporting/DebugLogFragmentTest.kt | 130 ++++++++++++++++++ .../DebugLogUploadFragmentTest.kt | 79 +++++++++++ .../FragmentTestModuleRegistrar.kt | 7 +- 3 files changed, 215 insertions(+), 1 deletion(-) create mode 100644 Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/bugreporting/DebugLogFragmentTest.kt create mode 100644 Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/bugreporting/DebugLogUploadFragmentTest.kt diff --git a/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/bugreporting/DebugLogFragmentTest.kt b/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/bugreporting/DebugLogFragmentTest.kt new file mode 100644 index 000000000..00b450294 --- /dev/null +++ b/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/bugreporting/DebugLogFragmentTest.kt @@ -0,0 +1,130 @@ +package de.rki.coronawarnapp.bugreporting + +import android.content.ContentResolver +import androidx.lifecycle.MutableLiveData +import androidx.test.ext.junit.runners.AndroidJUnit4 +import dagger.Module +import dagger.android.ContributesAndroidInjector +import de.rki.coronawarnapp.bugreporting.debuglog.DebugLogger +import de.rki.coronawarnapp.bugreporting.debuglog.export.SAFLogExport +import de.rki.coronawarnapp.bugreporting.debuglog.internal.LogSnapshotter +import de.rki.coronawarnapp.bugreporting.debuglog.ui.DebugLogFragment +import de.rki.coronawarnapp.bugreporting.debuglog.ui.DebugLogViewModel +import de.rki.coronawarnapp.nearby.ENFClient +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.TestDispatcherProvider +import testhelpers.launchFragment2 +import testhelpers.launchFragmentInContainer2 +import testhelpers.takeScreenshot +import tools.fastlane.screengrab.locale.LocaleTestRule + +@RunWith(AndroidJUnit4::class) +class DebugLogFragmentTest : BaseUITest() { + + @MockK lateinit var debugLogger: DebugLogger + @MockK lateinit var enfClient: ENFClient + @MockK lateinit var bugReportingSettings: BugReportingSettings + @MockK lateinit var logSnapshotter: LogSnapshotter + @MockK lateinit var safLogExport: SAFLogExport + @MockK lateinit var contentResolver: ContentResolver + + private lateinit var inactiveViewModel: DebugLogViewModel + private lateinit var activeViewModel: DebugLogViewModel + + @Rule + @JvmField + val localeTestRule = LocaleTestRule() + + @get:Rule + val systemUIDemoModeRule = SystemUIDemoModeRule() + + @Before + fun setup() { + MockKAnnotations.init(this, relaxed = true) + inactiveViewModel = setupViewModels(false, 0) + activeViewModel = setupViewModels(true, 9410 ) + + setupMockViewModel( + object : DebugLogViewModel.Factory { + override fun create(): DebugLogViewModel = inactiveViewModel + } + ) + } + + @After + fun teardown() { + clearAllViewModels() + } + + @Test + fun launch_fragment() { + launchFragment2<DebugLogFragment>() + } + + @Screenshot + @Test + fun capture_inactive_screenshot() { + launchFragmentInContainer2<DebugLogFragment>() + takeScreenshot<DebugLogFragment>() + } + + @Screenshot + @Test + fun capture_active_screenshot() { + setupMockViewModel( + object : DebugLogViewModel.Factory { + override fun create(): DebugLogViewModel = activeViewModel + } + ) + launchFragmentInContainer2<DebugLogFragment>() + takeScreenshot<DebugLogFragment>() + } + + private fun setupViewModels( + isRecording: Boolean, + currentSize: Long, + isLowStorage: Boolean = false, + isActionInProgress: Boolean = false, + ): DebugLogViewModel { + val vm = spyk( + DebugLogViewModel( + debugLogger, + TestDispatcherProvider(), + enfClient, + bugReportingSettings, + logSnapshotter, + safLogExport, + contentResolver + ) + ) + with(vm) { + every { state } returns MutableLiveData( + DebugLogViewModel.State( + isRecording = isRecording, + currentSize = currentSize, + isLowStorage = isLowStorage, + isActionInProgress = isActionInProgress + ) + ) + } + return vm + } +} + +@Module +abstract class DebugLogTestModule { + @ContributesAndroidInjector + abstract fun debugLogFragment(): DebugLogFragment +} + diff --git a/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/bugreporting/DebugLogUploadFragmentTest.kt b/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/bugreporting/DebugLogUploadFragmentTest.kt new file mode 100644 index 000000000..a093866ea --- /dev/null +++ b/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/bugreporting/DebugLogUploadFragmentTest.kt @@ -0,0 +1,79 @@ +package de.rki.coronawarnapp.bugreporting + +import androidx.test.ext.junit.runners.AndroidJUnit4 +import dagger.Module +import dagger.android.ContributesAndroidInjector +import de.rki.coronawarnapp.bugreporting.debuglog.ui.upload.DebugLogUploadFragment +import de.rki.coronawarnapp.bugreporting.debuglog.ui.upload.DebugLogUploadViewModel +import de.rki.coronawarnapp.bugreporting.debuglog.upload.SnapshotUploader +import io.mockk.MockKAnnotations +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.TestDispatcherProvider +import testhelpers.launchFragment2 +import testhelpers.launchFragmentInContainer2 +import testhelpers.takeScreenshot +import tools.fastlane.screengrab.locale.LocaleTestRule + +@RunWith(AndroidJUnit4::class) +class DebugLogUploadFragmentTest : BaseUITest() { + + @MockK lateinit var snapShotUploader: SnapshotUploader + + @Rule + @JvmField + val localeTestRule = LocaleTestRule() + + @get:Rule + val systemUIDemoModeRule = SystemUIDemoModeRule() + + private lateinit var viewModel: DebugLogUploadViewModel + + @Before + fun setup() { + MockKAnnotations.init(this, relaxed = true) + viewModel = spyk( + DebugLogUploadViewModel( + TestDispatcherProvider(), + snapShotUploader + ) + ) + + setupMockViewModel( + object : DebugLogUploadViewModel.Factory { + override fun create(): DebugLogUploadViewModel = viewModel + } + ) + } + + @After + fun teardown() { + clearAllViewModels() + } + + @Test + fun launch_fragment() { + launchFragment2<DebugLogUploadFragment>() + } + + @Screenshot + @Test + fun capture_screenshot() { + launchFragmentInContainer2<DebugLogUploadFragment>() + takeScreenshot<DebugLogUploadFragment>() + } +} + +@Module +abstract class DebugLogUploadTestModule { + @ContributesAndroidInjector + abstract fun debugLogUploadFragment(): DebugLogUploadFragment +} diff --git a/Corona-Warn-App/src/androidTest/java/testhelpers/FragmentTestModuleRegistrar.kt b/Corona-Warn-App/src/androidTest/java/testhelpers/FragmentTestModuleRegistrar.kt index c740c6b53..46e4496f1 100644 --- a/Corona-Warn-App/src/androidTest/java/testhelpers/FragmentTestModuleRegistrar.kt +++ b/Corona-Warn-App/src/androidTest/java/testhelpers/FragmentTestModuleRegistrar.kt @@ -1,6 +1,8 @@ package testhelpers import dagger.Module +import de.rki.coronawarnapp.bugreporting.DebugLogTestModule +import de.rki.coronawarnapp.bugreporting.DebugLogUploadTestModule import de.rki.coronawarnapp.ui.contactdiary.ContactDiaryDayFragmentTestModule import de.rki.coronawarnapp.ui.contactdiary.ContactDiaryEditLocationsFragmentTestModule import de.rki.coronawarnapp.ui.contactdiary.ContactDiaryEditPersonsFragmentTestModule @@ -69,7 +71,10 @@ import de.rki.coronawarnapp.ui.tracing.TracingDetailsFragmentTestTestModule ContactDiaryEditLocationsFragmentTestModule::class, ContactDiaryEditPersonsFragmentTestModule::class, // Statistics - StatisticsExplanationFragmentTestModule::class + StatisticsExplanationFragmentTestModule::class, + //Bugreporting + DebugLogUploadTestModule::class, + DebugLogTestModule::class ] ) class FragmentTestModuleRegistrar -- GitLab