From da7b95bbb3e46214ab1912b3823a0dbcce17af2d Mon Sep 17 00:00:00 2001
From: Philipp Woessner <64482866+pwoessner@users.noreply.github.com>
Date: Fri, 12 Jun 2020 17:05:07 +0200
Subject: [PATCH] fixed a bug where the wieghts where capped to 30 and not the
 attenuationMinutes (#426)

---
 .../rki/coronawarnapp/risk/RiskLevelCalculation.kt | 14 +++++++-------
 .../de/rki/coronawarnapp/risk/TimeVariables.kt     |  2 +-
 .../coronawarnapp/risk/RiskLevelCalculationTest.kt | 11 +++++++++++
 3 files changed, 19 insertions(+), 8 deletions(-)

diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/risk/RiskLevelCalculation.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/risk/RiskLevelCalculation.kt
index b2e731505..10547f52a 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/risk/RiskLevelCalculation.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/risk/RiskLevelCalculation.kt
@@ -17,14 +17,14 @@ object RiskLevelCalculation {
 
         /** all attenuation values are capped to [TimeVariables.MAX_ATTENUATION_DURATION] */
         val weightedAttenuationLow =
-            attenuationParameters.weights.low.capped()
-                .times(exposureSummary.attenuationDurationsInMinutes[0])
+            attenuationParameters.weights.low
+                .times(exposureSummary.attenuationDurationsInMinutes[0].capped())
         val weightedAttenuationMid =
-            attenuationParameters.weights.mid.capped()
-                .times(exposureSummary.attenuationDurationsInMinutes[1])
+            attenuationParameters.weights.mid
+                .times(exposureSummary.attenuationDurationsInMinutes[1].capped())
         val weightedAttenuationHigh =
-            attenuationParameters.weights.high.capped()
-                .times(exposureSummary.attenuationDurationsInMinutes[2])
+            attenuationParameters.weights.high
+                .times(exposureSummary.attenuationDurationsInMinutes[2].capped())
 
         val maximumRiskScore = exposureSummary.maximumRiskScore.toDouble()
 
@@ -49,7 +49,7 @@ object RiskLevelCalculation {
         return round(riskScore.times(DECIMAL_MULTIPLIER)).div(DECIMAL_MULTIPLIER)
     }
 
-    private fun Double.capped(): Double {
+    private fun Int.capped(): Int {
         return if (this > TimeVariables.getMaxAttenuationDuration()) {
             TimeVariables.getMaxAttenuationDuration()
         } else {
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/risk/TimeVariables.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/risk/TimeVariables.kt
index ad8103a7e..1dc1d93d7 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/risk/TimeVariables.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/risk/TimeVariables.kt
@@ -118,7 +118,7 @@ object TimeVariables {
      * This is the maximum attenuation duration value for the risk level calculation
      * in minutes
      */
-    private const val MAX_ATTENUATION_DURATION = 30.0
+    private const val MAX_ATTENUATION_DURATION = 30
 
     /**
      * Getter function for [MAX_ATTENUATION_DURATION]
diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/risk/RiskLevelCalculationTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/risk/RiskLevelCalculationTest.kt
index 3a17562f0..237f7274f 100644
--- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/risk/RiskLevelCalculationTest.kt
+++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/risk/RiskLevelCalculationTest.kt
@@ -62,6 +62,17 @@ class RiskLevelCalculationTest {
         assertEquals(9830.4, riskScore)
     }
 
+    @Test
+    fun calculateRiskScoreCapped() {
+        val riskScore =
+            RiskLevelCalculation.calculateRiskScore(
+                buildAttenuationDuration(0.5, 0.5, 1.0),
+                buildSummary(4096, 45, 45, 45)
+            )
+
+        assertEquals(9830.4, riskScore)
+    }
+
     private fun buildAttenuationDuration(
         high: Double,
         mid: Double,
-- 
GitLab