From f67b79d04549552dbcbd21806003e896ffe657a4 Mon Sep 17 00:00:00 2001
From: Kolya Opahle <k.opahle@sap.com>
Date: Thu, 11 Jun 2020 17:26:27 +0200
Subject: [PATCH] Tests for submission service (#393)

* Moved devicePairingSuccessfulTimestamp to new edit call

Signed-off-by: Kolya Opahle <k.opahle@sap.com>

* Added some new Tests to VerificationServiceTest

Signed-off-by: Kolya Opahle <k.opahle@sap.com>

* Renamed VerificationServiceTest to SubmissionServiceTest

Signed-off-by: Kolya Opahle <k.opahle@sap.com>
---
 .../de/rki/coronawarnapp/storage/LocalData.kt |   2 +-
 .../submission/SubmissionServiceTest.kt       | 162 ++++++++++++++++++
 .../submission/VerificationServiceTest.kt     |  33 ----
 3 files changed, 163 insertions(+), 34 deletions(-)
 create mode 100644 Corona-Warn-App/src/test/java/de/rki/coronawarnapp/service/submission/SubmissionServiceTest.kt
 delete mode 100644 Corona-Warn-App/src/test/java/de/rki/coronawarnapp/service/submission/VerificationServiceTest.kt

diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/storage/LocalData.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/storage/LocalData.kt
index 3ce3ac2ef..6be362884 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/storage/LocalData.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/storage/LocalData.kt
@@ -542,7 +542,7 @@ object LocalData {
     }
 
     fun devicePairingSuccessfulTimestamp(value: Long) =
-        with(getSharedPreferenceInstance().edit()) {
+        getSharedPreferenceInstance().edit(true) {
             putLong(
                 CoronaWarnApplication.getAppContext()
                     .getString(R.string.preference_device_pairing_successful_time),
diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/service/submission/SubmissionServiceTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/service/submission/SubmissionServiceTest.kt
new file mode 100644
index 000000000..f086a73f7
--- /dev/null
+++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/service/submission/SubmissionServiceTest.kt
@@ -0,0 +1,162 @@
+package de.rki.coronawarnapp.service.submission
+
+import de.rki.coronawarnapp.exception.NoGUIDOrTANSetException
+import de.rki.coronawarnapp.exception.NoRegistrationTokenSetException
+import de.rki.coronawarnapp.http.WebRequestBuilder
+import de.rki.coronawarnapp.storage.LocalData
+import de.rki.coronawarnapp.transaction.SubmitDiagnosisKeysTransaction
+import de.rki.coronawarnapp.util.formatter.TestResult
+import io.mockk.Runs
+import io.mockk.coEvery
+import io.mockk.every
+import io.mockk.just
+import io.mockk.mockkObject
+import io.mockk.verify
+import kotlinx.coroutines.runBlocking
+import org.hamcrest.CoreMatchers.equalTo
+import org.hamcrest.MatcherAssert.assertThat
+import org.junit.Before
+import org.junit.Test
+
+class SubmissionServiceTest {
+    private val guid = "123456-12345678-1234-4DA7-B166-B86D85475064"
+    private val registrationToken = "asdjnskjfdniuewbheboqudnsojdff"
+
+    @Before
+    fun setUp() {
+        mockkObject(LocalData)
+        mockkObject(WebRequestBuilder)
+        mockkObject(SubmitDiagnosisKeysTransaction)
+
+        every { LocalData.teletan() } returns null
+        every { LocalData.testGUID() } returns null
+        every { LocalData.registrationToken() } returns null
+    }
+
+    @Test(expected = NoGUIDOrTANSetException::class)
+    fun registerDeviceWithoutTANOrGUIDFails() {
+        runBlocking {
+            SubmissionService.asyncRegisterDevice()
+        }
+    }
+
+    @Test
+    fun registrationWithGUIDSucceeds() {
+        every { LocalData.testGUID() } returns guid
+
+        every { LocalData.testGUID(any()) } just Runs
+        every { LocalData.registrationToken(any()) } just Runs
+        every { LocalData.devicePairingSuccessfulTimestamp(any()) } just Runs
+
+        coEvery {
+            WebRequestBuilder.getInstance()
+                .asyncGetRegistrationToken(any(), SubmissionConstants.QR_CODE_KEY_TYPE)
+        } returns registrationToken
+
+        runBlocking {
+            SubmissionService.asyncRegisterDevice()
+        }
+
+        verify(exactly = 1) {
+            LocalData.registrationToken(registrationToken)
+            LocalData.devicePairingSuccessfulTimestamp(any())
+            LocalData.testGUID(null)
+        }
+    }
+
+    @Test
+    fun registrationWithTeleTANSucceeds() {
+        every { LocalData.teletan() } returns guid
+
+        every { LocalData.teletan(any()) } just Runs
+        every { LocalData.registrationToken(any()) } just Runs
+        every { LocalData.devicePairingSuccessfulTimestamp(any()) } just Runs
+
+        coEvery {
+            WebRequestBuilder.getInstance()
+                .asyncGetRegistrationToken(any(), SubmissionConstants.TELE_TAN_KEY_TYPE)
+        } returns registrationToken
+
+        runBlocking {
+            SubmissionService.asyncRegisterDevice()
+        }
+
+        verify(exactly = 1) {
+            LocalData.registrationToken(registrationToken)
+            LocalData.devicePairingSuccessfulTimestamp(any())
+            LocalData.teletan(null)
+        }
+    }
+
+    @Test(expected = NoRegistrationTokenSetException::class)
+    fun requestTestResultWithoutRegistrationTokenFails() {
+        runBlocking {
+            SubmissionService.asyncRequestTestResult()
+        }
+    }
+
+    @Test
+    fun requestTestResultSucceeds() {
+        every { LocalData.registrationToken() } returns registrationToken
+        coEvery {
+            WebRequestBuilder.getInstance().asyncGetTestResult(registrationToken)
+        } returns TestResult.NEGATIVE.value
+
+        runBlocking {
+            assertThat(SubmissionService.asyncRequestTestResult(), equalTo(TestResult.NEGATIVE))
+        }
+    }
+
+    @Test(expected = NoRegistrationTokenSetException::class)
+    fun submitExposureKeysWithoutRegistrationTokenFails() {
+        runBlocking {
+            SubmissionService.asyncSubmitExposureKeys(listOf())
+        }
+    }
+
+    @Test
+    fun submitExposureKeysSucceeds() {
+        every { LocalData.registrationToken() } returns registrationToken
+        coEvery { SubmitDiagnosisKeysTransaction.start(registrationToken, any()) } just Runs
+
+        runBlocking {
+            SubmissionService.asyncSubmitExposureKeys(listOf())
+        }
+    }
+
+    @Test
+    fun deleteRegistrationTokenSucceeds() {
+        every { LocalData.registrationToken(null) } just Runs
+        every { LocalData.devicePairingSuccessfulTimestamp(0L) } just Runs
+
+        SubmissionService.deleteRegistrationToken()
+
+        verify(exactly = 1) {
+            LocalData.registrationToken(null)
+            LocalData.devicePairingSuccessfulTimestamp(0L)
+        }
+    }
+
+    @Test
+    fun containsValidGUID() {
+        // valid
+        assertThat(
+            SubmissionService.containsValidGUID("https://bs-sd.de/covid-19/?$guid"),
+            equalTo(true)
+        )
+
+        // invalid
+        assertThat(
+            SubmissionService.containsValidGUID("https://no-guid-here"),
+            equalTo(false)
+        )
+    }
+
+    @Test
+    fun extractGUID() {
+        assertThat(
+            SubmissionService.extractGUID("https://bs-sd.de/covid-19/?$guid"),
+            equalTo(guid)
+        )
+    }
+}
diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/service/submission/VerificationServiceTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/service/submission/VerificationServiceTest.kt
deleted file mode 100644
index 16f069c15..000000000
--- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/service/submission/VerificationServiceTest.kt
+++ /dev/null
@@ -1,33 +0,0 @@
-package de.rki.coronawarnapp.service.submission
-
-import org.hamcrest.CoreMatchers.equalTo
-import org.hamcrest.MatcherAssert.assertThat
-import org.junit.Test
-
-class VerificationServiceTest {
-
-    @Test
-    fun containsValidGUID() {
-        // valid
-        val guid = "123456-12345678-1234-4DA7-B166-B86D85475064"
-        assertThat(
-            SubmissionService.containsValidGUID("https://bs-sd.de/covid-19/?$guid"),
-            equalTo(true)
-        )
-
-        // invalid
-        assertThat(
-            SubmissionService.containsValidGUID("https://no-guid-here"),
-            equalTo(false)
-        )
-    }
-
-    @Test
-    fun extractGUID() {
-        val guid = "123456-12345678-1234-4DA7-B166-B86D85475064"
-        assertThat(
-            SubmissionService.extractGUID("https://bs-sd.de/covid-19/?$guid"),
-            equalTo(guid)
-        )
-    }
-}
-- 
GitLab