From 5f5230ce5a7099d5efec7ca819fe68f06d2d60b6 Mon Sep 17 00:00:00 2001
From: Jan-Niclas Struewer <j.n.struewer@gmail.com>
Date: Mon, 29 Jul 2024 11:35:01 +0200
Subject: [PATCH] refactor: - applied new package structure to kpiCalculator
 adapter (inserted kpiCalculator module) - removed hardcoded dispatcher in
 ToolRunService.kt

---
 .../iem/app/toolRun/service/ToolRunService.kt |  7 +--
 .../{ => kpiCalculator}/adapter/KpiAdapter.kt |  2 +-
 .../adapter/cve/CveAdapter.kt                 |  6 +--
 .../adapter/cve/CveAdapterTest.kt             | 49 +++++++++++++++++++
 4 files changed, 57 insertions(+), 7 deletions(-)
 rename kpi-calculator/adapter/src/main/kotlin/de/fraunhofer/iem/{ => kpiCalculator}/adapter/KpiAdapter.kt (88%)
 rename kpi-calculator/adapter/src/main/kotlin/de/fraunhofer/iem/{ => kpiCalculator}/adapter/cve/CveAdapter.kt (84%)
 create mode 100644 kpi-calculator/adapter/src/test/kotlin/de/fraunhofer/iem/kpiCalculator/adapter/cve/CveAdapterTest.kt

diff --git a/app/backend/src/main/kotlin/de/fraunhofer/iem/app/toolRun/service/ToolRunService.kt b/app/backend/src/main/kotlin/de/fraunhofer/iem/app/toolRun/service/ToolRunService.kt
index 56ae463f..2cc1888f 100644
--- a/app/backend/src/main/kotlin/de/fraunhofer/iem/app/toolRun/service/ToolRunService.kt
+++ b/app/backend/src/main/kotlin/de/fraunhofer/iem/app/toolRun/service/ToolRunService.kt
@@ -1,6 +1,5 @@
 package de.fraunhofer.iem.app.toolRun.service
 
-import de.fraunhofer.iem.adapter.cve.CveAdapter
 import de.fraunhofer.iem.app.kpi.service.KPIService
 import de.fraunhofer.iem.app.logger.getLogger
 import de.fraunhofer.iem.app.repository.service.RepositoryService
@@ -9,6 +8,7 @@ import de.fraunhofer.iem.app.toolRun.dto.ToolRunDto
 import de.fraunhofer.iem.app.tools.gitlab.service.RepositoryDetailsService
 import de.fraunhofer.iem.app.tools.occmd.service.OccmdService
 import de.fraunhofer.iem.app.tools.ort.service.OrtService
+import de.fraunhofer.iem.kpiCalculator.adapter.cve.CveAdapter
 import kotlinx.coroutines.*
 import org.springframework.stereotype.Service
 
@@ -120,10 +120,11 @@ class ToolRunService(
      */
     suspend fun getToolRunForRepository(
         projectId: Long,
-        includeFindings: Boolean = false
+        includeFindings: Boolean = false,
+        dispatcher: CoroutineDispatcher = Dispatchers.IO
     ): ToolRunDto? {
 
-        val toolRun = withContext(Dispatchers.IO) {
+        val toolRun = withContext(dispatcher) {
             repositoryService.getToolRunByProjectId(projectId = projectId)
         }
 
diff --git a/kpi-calculator/adapter/src/main/kotlin/de/fraunhofer/iem/adapter/KpiAdapter.kt b/kpi-calculator/adapter/src/main/kotlin/de/fraunhofer/iem/kpiCalculator/adapter/KpiAdapter.kt
similarity index 88%
rename from kpi-calculator/adapter/src/main/kotlin/de/fraunhofer/iem/adapter/KpiAdapter.kt
rename to kpi-calculator/adapter/src/main/kotlin/de/fraunhofer/iem/kpiCalculator/adapter/KpiAdapter.kt
index 262400c5..316c11b7 100644
--- a/kpi-calculator/adapter/src/main/kotlin/de/fraunhofer/iem/adapter/KpiAdapter.kt
+++ b/kpi-calculator/adapter/src/main/kotlin/de/fraunhofer/iem/kpiCalculator/adapter/KpiAdapter.kt
@@ -1,4 +1,4 @@
-package de.fraunhofer.iem.adapter
+package de.fraunhofer.iem.kpiCalculator.adapter
 
 import de.fraunhofer.iem.kpiCalculator.model.kpi.KpiKind
 import de.fraunhofer.iem.kpiCalculator.model.kpi.RawValueKpiCreateDto
diff --git a/kpi-calculator/adapter/src/main/kotlin/de/fraunhofer/iem/adapter/cve/CveAdapter.kt b/kpi-calculator/adapter/src/main/kotlin/de/fraunhofer/iem/kpiCalculator/adapter/cve/CveAdapter.kt
similarity index 84%
rename from kpi-calculator/adapter/src/main/kotlin/de/fraunhofer/iem/adapter/cve/CveAdapter.kt
rename to kpi-calculator/adapter/src/main/kotlin/de/fraunhofer/iem/kpiCalculator/adapter/cve/CveAdapter.kt
index e2519b47..469d3490 100644
--- a/kpi-calculator/adapter/src/main/kotlin/de/fraunhofer/iem/adapter/cve/CveAdapter.kt
+++ b/kpi-calculator/adapter/src/main/kotlin/de/fraunhofer/iem/kpiCalculator/adapter/cve/CveAdapter.kt
@@ -1,6 +1,6 @@
-package de.fraunhofer.iem.adapter.cve
+package de.fraunhofer.iem.kpiCalculator.adapter.cve
 
-import de.fraunhofer.iem.adapter.KpiAdapter
+import de.fraunhofer.iem.kpiCalculator.adapter.KpiAdapter
 import de.fraunhofer.iem.kpiCalculator.model.adapter.VulnerabilityDto
 import de.fraunhofer.iem.kpiCalculator.model.kpi.KpiKind
 import de.fraunhofer.iem.kpiCalculator.model.kpi.RawValueKpiCreateDto
@@ -11,7 +11,7 @@ object CveAdapter : KpiAdapter<VulnerabilityDto> {
 
     override fun transformDataToKpi(data: List<VulnerabilityDto>): List<RawValueKpiCreateDto> {
         return data
-            .filter(::filterData)
+            .filter(CveAdapter::filterData)
             .map {
                 RawValueKpiCreateDto(
                     kind = kpiKind,
diff --git a/kpi-calculator/adapter/src/test/kotlin/de/fraunhofer/iem/kpiCalculator/adapter/cve/CveAdapterTest.kt b/kpi-calculator/adapter/src/test/kotlin/de/fraunhofer/iem/kpiCalculator/adapter/cve/CveAdapterTest.kt
new file mode 100644
index 00000000..578e221b
--- /dev/null
+++ b/kpi-calculator/adapter/src/test/kotlin/de/fraunhofer/iem/kpiCalculator/adapter/cve/CveAdapterTest.kt
@@ -0,0 +1,49 @@
+package de.fraunhofer.iem.kpiCalculator.adapter.cve
+
+import de.fraunhofer.iem.kpiCalculator.model.adapter.VulnerabilityDto
+import org.junit.jupiter.api.Test
+
+class CveAdapterTest {
+
+    @Test
+    fun transformSingleVulnerabilityToKpi() {
+        val adapter = CveAdapter
+        // valid input
+        val validKpi = adapter.transformDataToKpi(
+            VulnerabilityDto(
+                cveIdentifier = "not blank",
+                packageName = "not blank",
+                severity = 0.1
+            )
+        )
+        assert(validKpi.isNotEmpty())
+        assert(validKpi.first().score in (0..100))
+
+        // invalid input
+        val invalidKpis = CveAdapter.transformDataToKpi(
+            listOf(
+                VulnerabilityDto(
+                    cveIdentifier = "not blank",
+                    packageName = "",
+                    severity = 0.1
+                ),
+                VulnerabilityDto(
+                    cveIdentifier = "",
+                    packageName = "not blank",
+                    severity = 0.1
+                ),
+                VulnerabilityDto(
+                    cveIdentifier = "not blank",
+                    packageName = "not blank",
+                    severity = -0.1
+                ),
+                VulnerabilityDto(
+                    cveIdentifier = "not blank",
+                    packageName = "not blank",
+                    severity = 10.1
+                )
+            )
+        )
+        assert(invalidKpis.isEmpty())
+    }
+}
-- 
GitLab