summaryrefslogtreecommitdiff
path: root/src/test/kotlin/dev
diff options
context:
space:
mode:
authorPaul-Christian Volkmer2026-03-06 13:08:40 +0100
committerGitHub2026-03-06 12:08:40 +0000
commitbf6bfa904e127f51b79cfafb96e1280b50e9615a (patch)
tree67e4c3404a03e0b081515dd5993a11d2848f195d /src/test/kotlin/dev
parent6fee6f3cf9248ea8fb1ddc738d0f6261ae58bb4b (diff)
feat: save TAN for MTB requests (#253)
Diffstat (limited to 'src/test/kotlin/dev')
-rw-r--r--src/test/kotlin/dev/dnpm/etl/processor/services/RequestProcessorTest.kt81
-rw-r--r--src/test/kotlin/dev/dnpm/etl/processor/services/RequestServiceTest.kt10
-rw-r--r--src/test/kotlin/dev/dnpm/etl/processor/services/ResponseProcessorTest.kt1
3 files changed, 91 insertions, 1 deletions
diff --git a/src/test/kotlin/dev/dnpm/etl/processor/services/RequestProcessorTest.kt b/src/test/kotlin/dev/dnpm/etl/processor/services/RequestProcessorTest.kt
index edd9ffe..afa6872 100644
--- a/src/test/kotlin/dev/dnpm/etl/processor/services/RequestProcessorTest.kt
+++ b/src/test/kotlin/dev/dnpm/etl/processor/services/RequestProcessorTest.kt
@@ -23,7 +23,7 @@ import com.fasterxml.jackson.databind.ObjectMapper
import dev.dnpm.etl.processor.Fingerprint
import dev.dnpm.etl.processor.PatientId
import dev.dnpm.etl.processor.PatientPseudonym
-import dev.dnpm.etl.processor.RequestId
+import dev.dnpm.etl.processor.Tan
import dev.dnpm.etl.processor.config.AppConfigProperties
import dev.dnpm.etl.processor.consent.TtpConsentStatus
import dev.dnpm.etl.processor.monitoring.Request
@@ -109,6 +109,7 @@ class RequestProcessorTest {
RequestType.MTB_FILE,
SubmissionType.TEST,
RequestStatus.SUCCESS,
+ Tan.empty(),
Instant.parse("2023-08-08T02:00:00Z"),
)
}
@@ -165,6 +166,7 @@ class RequestProcessorTest {
RequestType.MTB_FILE,
SubmissionType.TEST,
RequestStatus.SUCCESS,
+ Tan.empty(),
Instant.parse("2023-08-08T02:00:00Z"),
)
}
@@ -221,6 +223,7 @@ class RequestProcessorTest {
RequestType.MTB_FILE,
SubmissionType.TEST,
RequestStatus.SUCCESS,
+ Tan.empty(),
Instant.parse("2023-08-08T02:00:00Z"),
)
}
@@ -281,6 +284,7 @@ class RequestProcessorTest {
RequestType.MTB_FILE,
SubmissionType.TEST,
RequestStatus.SUCCESS,
+ Tan.empty(),
Instant.parse("2023-08-08T02:00:00Z"),
)
}
@@ -299,6 +303,10 @@ class RequestProcessorTest {
.whenever(pseudonymizeService)
.patientPseudonym(anyValueClass())
+ doAnswer { "f2ca1bb6c7e907d06dafe4687e579fce76b37e4e93b7605022da52e6ccc26fd2" }
+ .whenever(pseudonymizeService)
+ .genomDeTan(anyValueClass())
+
doAnswer { it.arguments[0] }.whenever(transformationService).transform(any<Mtb>())
whenever(consentProcessor.consentGatedCheckAndTryEmbedding(any())).thenReturn(true)
@@ -360,6 +368,7 @@ class RequestProcessorTest {
RequestType.MTB_FILE,
SubmissionType.INITIAL,
RequestStatus.SUCCESS,
+ Tan.empty(),
Instant.parse("2026-01-05T09:00:00Z"),
submissionAccepted = true,
),
@@ -372,6 +381,7 @@ class RequestProcessorTest {
RequestType.MTB_FILE,
SubmissionType.INITIAL,
RequestStatus.BLOCKED_INITIAL,
+ Tan.empty(),
Instant.parse("2026-01-05T10:00:00Z"),
submissionAccepted = false,
),
@@ -393,6 +403,10 @@ class RequestProcessorTest {
.whenever(pseudonymizeService)
.patientPseudonym(anyValueClass())
+ doAnswer { "f2ca1bb6c7e907d06dafe4687e579fce76b37e4e93b7605022da52e6ccc26fd2" }
+ .whenever(pseudonymizeService)
+ .genomDeTan(anyValueClass())
+
doAnswer { it.arguments[0] }.whenever(transformationService).transform(any<Mtb>())
whenever(consentProcessor.consentGatedCheckAndTryEmbedding(any())).thenReturn(true)
@@ -434,6 +448,7 @@ class RequestProcessorTest {
verify(sender, times(1)).send(requestCaptor.capture())
assertThat(requestCaptor.firstValue).isNotNull
assertThat(requestCaptor.firstValue.content.metadata.type).isEqualTo(MvhSubmissionType.ADDITION)
+ assertThat(requestCaptor.firstValue.content.metadata.transferTan).isEqualTo("f2ca1bb6c7e907d06dafe4687e579fce76b37e4e93b7605022da52e6ccc26fd2")
val eventCaptor = argumentCaptor<ResponseEvent>()
verify(applicationEventPublisher, times(1)).publishEvent(eventCaptor.capture())
@@ -597,6 +612,68 @@ class RequestProcessorTest {
assertThat(eventCaptor.firstValue.status).isEqualTo(RequestStatus.SUCCESS)
}
+ @Test
+ fun testShouldSaveRequestWithGenomDeTan() {
+
+ doAnswer { false }
+ .whenever(requestService)
+ .isLastRequestWithKnownStatusDeletion(anyValueClass())
+
+ doAnswer { MtbFileSender.Response(status = RequestStatus.SUCCESS) }
+ .whenever(sender)
+ .send(any<DnpmV2MtbFileRequest>())
+
+ doAnswer { it.arguments[0] as String }
+ .whenever(pseudonymizeService)
+ .patientPseudonym(anyValueClass())
+
+ doAnswer { "f2ca1bb6c7e907d06dafe4687e579fce76b37e4e93b7605022da52e6ccc26fd2" }
+ .whenever(pseudonymizeService)
+ .genomDeTan(anyValueClass())
+
+ doAnswer { it.arguments[0] }.whenever(transformationService).transform(any<Mtb>())
+
+ whenever(consentProcessor.consentGatedCheckAndTryEmbedding(any())).thenReturn(true)
+
+ requestProcessor =
+ RequestProcessor(
+ pseudonymizeService,
+ transformationService,
+ sender,
+ requestService,
+ ObjectMapper(),
+ applicationEventPublisher,
+ AppConfigProperties(postInitialSubmissionBlock = true),
+ consentProcessor,
+ )
+
+ val mtbFile =
+ Mtb.builder()
+ .patient(Patient.builder().id("123").build())
+ .metadata(MvhMetadata())
+ .episodesOfCare(
+ listOf(
+ MtbEpisodeOfCare.builder()
+ .id("1")
+ .patient(Reference.builder().id("123").build())
+ .period(
+ PeriodDate.builder()
+ .start(Date.from(Instant.parse("2021-01-01T00:00:00.00Z")))
+ .build()
+ )
+ .build()
+ )
+ )
+ .build()
+
+ this.requestProcessor.processMtbFile(mtbFile)
+
+ val requestCaptor = argumentCaptor<Request>()
+ verify(requestService, times(1)).save(requestCaptor.capture())
+ assertThat(requestCaptor.firstValue).isNotNull
+ assertThat(requestCaptor.firstValue.tan).isEqualTo(Tan("f2ca1bb6c7e907d06dafe4687e579fce76b37e4e93b7605022da52e6ccc26fd2"))
+ }
+
@Nested
inner class WithInitialSubmissionBlock {
@@ -656,6 +733,7 @@ class RequestProcessorTest {
RequestType.MTB_FILE,
SubmissionType.INITIAL,
RequestStatus.ERROR,
+ Tan.empty(),
Instant.parse("2026-01-05T09:00:00Z"),
submissionAccepted = false,
),
@@ -668,6 +746,7 @@ class RequestProcessorTest {
RequestType.MTB_FILE,
SubmissionType.INITIAL,
RequestStatus.SUCCESS,
+ Tan.empty(),
Instant.parse("2026-01-05T10:00:00Z"),
submissionAccepted = false,
),
diff --git a/src/test/kotlin/dev/dnpm/etl/processor/services/RequestServiceTest.kt b/src/test/kotlin/dev/dnpm/etl/processor/services/RequestServiceTest.kt
index fdb7578..d02a5fe 100644
--- a/src/test/kotlin/dev/dnpm/etl/processor/services/RequestServiceTest.kt
+++ b/src/test/kotlin/dev/dnpm/etl/processor/services/RequestServiceTest.kt
@@ -54,6 +54,7 @@ class RequestServiceTest {
RequestType.MTB_FILE,
SubmissionType.TEST,
RequestStatus.SUCCESS,
+ Tan.empty(),
Instant.parse("2023-08-08T02:00:00Z"),
)
@@ -76,6 +77,7 @@ class RequestServiceTest {
RequestType.MTB_FILE,
SubmissionType.TEST,
RequestStatus.WARNING,
+ Tan.empty(),
Instant.parse("2023-07-07T00:00:00Z"),
),
Request(
@@ -87,6 +89,7 @@ class RequestServiceTest {
RequestType.DELETE,
SubmissionType.TEST,
RequestStatus.WARNING,
+ Tan.empty(),
Instant.parse("2023-07-07T02:00:00Z"),
),
Request(
@@ -98,6 +101,7 @@ class RequestServiceTest {
RequestType.MTB_FILE,
SubmissionType.TEST,
RequestStatus.UNKNOWN,
+ Tan.empty(),
Instant.parse("2023-08-11T00:00:00Z"),
),
)
@@ -120,6 +124,7 @@ class RequestServiceTest {
RequestType.MTB_FILE,
SubmissionType.TEST,
RequestStatus.WARNING,
+ Tan.empty(),
Instant.parse("2023-07-07T00:00:00Z"),
),
Request(
@@ -131,6 +136,7 @@ class RequestServiceTest {
RequestType.MTB_FILE,
SubmissionType.TEST,
RequestStatus.WARNING,
+ Tan.empty(),
Instant.parse("2023-07-07T02:00:00Z"),
),
Request(
@@ -142,6 +148,7 @@ class RequestServiceTest {
RequestType.MTB_FILE,
SubmissionType.TEST,
RequestStatus.UNKNOWN,
+ Tan.empty(),
Instant.parse("2023-08-11T00:00:00Z"),
),
)
@@ -164,6 +171,7 @@ class RequestServiceTest {
RequestType.DELETE,
SubmissionType.TEST,
RequestStatus.SUCCESS,
+ Tan.empty(),
Instant.parse("2023-07-07T02:00:00Z"),
),
Request(
@@ -175,6 +183,7 @@ class RequestServiceTest {
RequestType.MTB_FILE,
SubmissionType.TEST,
RequestStatus.WARNING,
+ Tan.empty(),
Instant.parse("2023-08-08T00:00:00Z"),
),
)
@@ -212,6 +221,7 @@ class RequestServiceTest {
RequestType.DELETE,
SubmissionType.TEST,
RequestStatus.SUCCESS,
+ Tan.empty(),
Instant.parse("2023-07-07T02:00:00Z"),
)
diff --git a/src/test/kotlin/dev/dnpm/etl/processor/services/ResponseProcessorTest.kt b/src/test/kotlin/dev/dnpm/etl/processor/services/ResponseProcessorTest.kt
index 804b91c..3b09cc7 100644
--- a/src/test/kotlin/dev/dnpm/etl/processor/services/ResponseProcessorTest.kt
+++ b/src/test/kotlin/dev/dnpm/etl/processor/services/ResponseProcessorTest.kt
@@ -55,6 +55,7 @@ class ResponseProcessorTest {
RequestType.MTB_FILE,
SubmissionType.TEST,
RequestStatus.UNKNOWN,
+ Tan.empty(),
)
@BeforeEach