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