From e60e21c52ba901e44b2e5787e0be46d78833b9b0 Mon Sep 17 00:00:00 2001
From: Mohamed <mohamed.metwalli@sap.com>
Date: Tue, 2 Mar 2021 12:35:50 +0100
Subject: [PATCH] Pre-Authorise TEK history in QR - Code Scan [Only]
 (EXPOSUREAPP-5254) #2495

* Don't check for pre-auth

* Update DefaultTEKHistoryProviderTest.kt

* Checking for enfversion here is not needed
---
 .../tekhistory/DefaultTEKHistoryProvider.kt   | 27 +++++--------------
 .../DefaultTEKHistoryProviderTest.kt          | 19 ++++++++++---
 2 files changed, 22 insertions(+), 24 deletions(-)

diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/nearby/modules/tekhistory/DefaultTEKHistoryProvider.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/nearby/modules/tekhistory/DefaultTEKHistoryProvider.kt
index 2452ac44b..756128817 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/nearby/modules/tekhistory/DefaultTEKHistoryProvider.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/nearby/modules/tekhistory/DefaultTEKHistoryProvider.kt
@@ -130,29 +130,16 @@ class DefaultTEKHistoryProvider @Inject constructor(
     }
 
     private suspend fun getPreAuthTEKHistoryOnV18(): List<TemporaryExposureKey> {
-        val isPreAuthorized = try {
-            preAuthorizeExposureKeyHistory()
+        return try {
+            Timber.d("Pre-Auth retrieving TEK.")
+            getPreAuthorizedExposureKeys().also {
+                Timber.d("Pre-Auth TEK: %s", it.joinToString("\n"))
+            }
         } catch (exception: Exception) {
-            Timber.d(exception, "Requesting Pre-Auth history failed")
+            Timber.d(exception, "Pre-Auth retrieving TEK failed")
             if (exception.isResolvable) throw exception
-            false
-        }
-
-        return if (isPreAuthorized) {
-            try {
-                Timber.d("Pre-Auth retrieving TEK.")
-                getPreAuthorizedExposureKeys().also {
-                    Timber.d("Pre-Auth TEK: %s", it.joinToString("\n"))
-                }
-            } catch (exception: Exception) {
-                Timber.d(exception, "Pre-Auth retrieving TEK failed")
-                if (exception.isResolvable) throw exception
 
-                Timber.d("Fallback: Retrieving TEK on pre v1.8")
-                getTEKHistoryOnPreV18()
-            }
-        } else {
-            Timber.d("Retrieving TEK on pre v1.8")
+            Timber.d("Fallback: Retrieving TEK on pre v1.8")
             getTEKHistoryOnPreV18()
         }
     }
diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/nearby/modules/tekhistory/DefaultTEKHistoryProviderTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/nearby/modules/tekhistory/DefaultTEKHistoryProviderTest.kt
index 3202a9622..129e48800 100644
--- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/nearby/modules/tekhistory/DefaultTEKHistoryProviderTest.kt
+++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/nearby/modules/tekhistory/DefaultTEKHistoryProviderTest.kt
@@ -185,7 +185,7 @@ class DefaultTEKHistoryProviderTest : BaseTest() {
             every { status.hasResolution() } returns true
             every { printStackTrace(any<PrintWriter>()) } just Runs
         }
-        every { client.requestPreAuthorizedTemporaryExposureKeyHistory() } answers { MockGMSTask.forError(error) }
+        every { client.requestPreAuthorizedTemporaryExposureKeyRelease() } answers { MockGMSTask.forError(error) }
 
         shouldThrow<ApiException> {
             createInstance().getTEKHistory()
@@ -195,13 +195,25 @@ class DefaultTEKHistoryProviderTest : BaseTest() {
     @Test
     fun `ENFV1_8 getTEKHistory request keys from new Api fallback to old Api on error`() = runBlockingTest {
         coEvery { enfVersion.isAtLeast(ENFVersion.V1_8) } returns true
-        every { client.requestPreAuthorizedTemporaryExposureKeyHistory() } answers { MockGMSTask.forError(Exception()) }
+        every { client.requestPreAuthorizedTemporaryExposureKeyRelease() } answers { MockGMSTask.forError(Exception()) }
         val mockTEK = mockk<TemporaryExposureKey>()
         every { client.temporaryExposureKeyHistory } answers { MockGMSTask.forValue(listOf(mockTEK)) }
 
         createInstance().getTEKHistory() shouldBe listOf(mockTEK)
 
         verify(exactly = 1) { client.temporaryExposureKeyHistory }
+        verify { client.requestPreAuthorizedTemporaryExposureKeyHistory() wasNot Called }
+    }
+
+    @Test
+    fun `ENFV1_8 getTEKHistory request keys from new Api does not check for preAuth`() = runBlockingTest {
+        coEvery { enfVersion.isAtLeast(ENFVersion.V1_8) } returns true
+        every { client.requestPreAuthorizedTemporaryExposureKeyRelease() } answers { MockGMSTask.forValue(null) }
+
+        createInstance().getTEKHistory()
+
+        verify(exactly = 1) { client.requestPreAuthorizedTemporaryExposureKeyRelease() }
+        verify { client.requestPreAuthorizedTemporaryExposureKeyHistory() wasNot Called }
     }
 
     @Test
@@ -265,7 +277,7 @@ class DefaultTEKHistoryProviderTest : BaseTest() {
     @Test
     fun `ENFV1_8 getTEKHistoryOrRequestPermission - if not preauthorized and no resolution then use the old API`() {
         coEvery { enfVersion.isAtLeast(ENFVersion.V1_8) } returns true
-        every { client.requestPreAuthorizedTemporaryExposureKeyHistory() } returns MockGMSTask.forError(Exception())
+        every { client.requestPreAuthorizedTemporaryExposureKeyRelease() } returns MockGMSTask.forError(Exception())
 
         val onTEKHistoryAvailable = mockk<(List<TemporaryExposureKey>) -> Unit>(relaxed = true)
         val onPermissionRequired = mockk<(Status) -> Unit>(relaxed = true)
@@ -320,7 +332,6 @@ class DefaultTEKHistoryProviderTest : BaseTest() {
             onPermissionRequired wasNot Called
         }
         verifyOrder {
-            client.requestPreAuthorizedTemporaryExposureKeyHistory()
             client.requestPreAuthorizedTemporaryExposureKeyRelease()
             client.temporaryExposureKeyHistory
         }
-- 
GitLab