summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPaul-Christian Volkmer2024-05-06 10:43:03 +0200
committerPaul-Christian Volkmer2024-05-06 10:43:03 +0200
commit107429fda7a4814d5fee5f374240df2352ebaad1 (patch)
tree0871c6010815178bb56cc94ac4d2969b00c60d91 /src
parent26b2f65e671bcf3d01d13c3abb170fa073eb6caf (diff)
fix: handle null values in MtbFile
This should not occur but if, it should not result in NPE except for * Patient * Consent * Episode
Diffstat (limited to 'src')
-rw-r--r--src/main/kotlin/dev/dnpm/etl/processor/pseudonym/extensions.kt48
-rw-r--r--src/test/kotlin/dev/dnpm/etl/processor/pseudonym/ExtensionsTest.kt61
2 files changed, 85 insertions, 24 deletions
diff --git a/src/main/kotlin/dev/dnpm/etl/processor/pseudonym/extensions.kt b/src/main/kotlin/dev/dnpm/etl/processor/pseudonym/extensions.kt
index b0221bc..ef25787 100644
--- a/src/main/kotlin/dev/dnpm/etl/processor/pseudonym/extensions.kt
+++ b/src/main/kotlin/dev/dnpm/etl/processor/pseudonym/extensions.kt
@@ -1,7 +1,7 @@
/*
* This file is part of ETL-Processor
*
- * Copyright (c) 2023 Comprehensive Cancer Center Mainfranken, Datenintegrationszentrum Philipps-Universität Marburg and Contributors
+ * Copyright (c) 2024 Comprehensive Cancer Center Mainfranken, Datenintegrationszentrum Philipps-Universität Marburg and Contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published
@@ -31,31 +31,31 @@ import org.apache.commons.codec.digest.DigestUtils
infix fun MtbFile.pseudonymizeWith(pseudonymizeService: PseudonymizeService) {
val patientPseudonym = pseudonymizeService.patientPseudonym(this.patient.id)
- this.episode.patient = patientPseudonym
- this.carePlans.forEach { it.patient = patientPseudonym }
+ this.episode?.patient = patientPseudonym
+ this.carePlans?.forEach { it.patient = patientPseudonym }
this.patient.id = patientPseudonym
- this.claims.forEach { it.patient = patientPseudonym }
- this.consent.patient = patientPseudonym
- this.claimResponses.forEach { it.patient = patientPseudonym }
- this.diagnoses.forEach { it.patient = patientPseudonym }
- this.ecogStatus.forEach { it.patient = patientPseudonym }
- this.familyMemberDiagnoses.forEach { it.patient = patientPseudonym }
- this.geneticCounsellingRequests.forEach { it.patient = patientPseudonym }
- this.histologyReevaluationRequests.forEach { it.patient = patientPseudonym }
- this.histologyReports.forEach {
+ this.claims?.forEach { it.patient = patientPseudonym }
+ this.consent?.patient = patientPseudonym
+ this.claimResponses?.forEach { it.patient = patientPseudonym }
+ this.diagnoses?.forEach { it.patient = patientPseudonym }
+ this.ecogStatus?.forEach { it.patient = patientPseudonym }
+ this.familyMemberDiagnoses?.forEach { it.patient = patientPseudonym }
+ this.geneticCounsellingRequests?.forEach { it.patient = patientPseudonym }
+ this.histologyReevaluationRequests?.forEach { it.patient = patientPseudonym }
+ this.histologyReports?.forEach {
it.patient = patientPseudonym
- it.tumorMorphology.patient = patientPseudonym
- }
- this.lastGuidelineTherapies.forEach { it.patient = patientPseudonym }
- this.molecularPathologyFindings.forEach { it.patient = patientPseudonym }
- this.molecularTherapies.forEach { molecularTherapy -> molecularTherapy.history.forEach { it.patient = patientPseudonym } }
- this.ngsReports.forEach { it.patient = patientPseudonym }
- this.previousGuidelineTherapies.forEach { it.patient = patientPseudonym }
- this.rebiopsyRequests.forEach { it.patient = patientPseudonym }
- this.recommendations.forEach { it.patient = patientPseudonym }
- this.responses.forEach { it.patient = patientPseudonym }
- this.studyInclusionRequests.forEach { it.patient = patientPseudonym }
- this.specimens.forEach { it.patient = patientPseudonym }
+ it.tumorMorphology?.patient = patientPseudonym
+ }
+ this.lastGuidelineTherapies?.forEach { it.patient = patientPseudonym }
+ this.molecularPathologyFindings?.forEach { it.patient = patientPseudonym }
+ this.molecularTherapies?.forEach { molecularTherapy -> molecularTherapy.history.forEach { it.patient = patientPseudonym } }
+ this.ngsReports?.forEach { it.patient = patientPseudonym }
+ this.previousGuidelineTherapies?.forEach { it.patient = patientPseudonym }
+ this.rebiopsyRequests?.forEach { it.patient = patientPseudonym }
+ this.recommendations?.forEach { it.patient = patientPseudonym }
+ this.responses?.forEach { it.patient = patientPseudonym }
+ this.studyInclusionRequests?.forEach { it.patient = patientPseudonym }
+ this.specimens?.forEach { it.patient = patientPseudonym }
}
/**
diff --git a/src/test/kotlin/dev/dnpm/etl/processor/pseudonym/ExtensionsTest.kt b/src/test/kotlin/dev/dnpm/etl/processor/pseudonym/ExtensionsTest.kt
index c980635..d8c7813 100644
--- a/src/test/kotlin/dev/dnpm/etl/processor/pseudonym/ExtensionsTest.kt
+++ b/src/test/kotlin/dev/dnpm/etl/processor/pseudonym/ExtensionsTest.kt
@@ -134,4 +134,65 @@ class ExtensionsTest {
.isEqualTo("TESTDOMAIN44e20a53bbbf9f3ae39626d05df7014dcd77d6098")
}
+ @Test
+ fun shouldNotThrowExceptionOnNullValues(@Mock pseudonymizeService: PseudonymizeService) {
+ doAnswer {
+ it.arguments[0]
+ "PSEUDO-ID"
+ }.whenever(pseudonymizeService).patientPseudonym(ArgumentMatchers.anyString())
+
+ doAnswer {
+ "TESTDOMAIN"
+ }.whenever(pseudonymizeService).prefix()
+
+ val mtbFile = MtbFile.builder()
+ .withPatient(
+ Patient.builder()
+ .withId("1")
+ .withBirthDate("2000-08-08")
+ .withGender(Patient.Gender.MALE)
+ .build()
+ )
+ .withConsent(
+ Consent.builder()
+ .withId("1")
+ .withStatus(Consent.Status.ACTIVE)
+ .withPatient("123")
+ .build()
+ )
+ .withEpisode(
+ Episode.builder()
+ .withId("1")
+ .withPatient("1")
+ .withPeriod(PeriodStart("2023-08-08"))
+ .build()
+ )
+ .withClaims(null)
+ .withDiagnoses(null)
+ .withCarePlans(null)
+ .withClaimResponses(null)
+ .withEcogStatus(null)
+ .withFamilyMemberDiagnoses(null)
+ .withGeneticCounsellingRequests(null)
+ .withHistologyReevaluationRequests(null)
+ .withHistologyReports(null)
+ .withLastGuidelineTherapies(null)
+ .withMolecularPathologyFindings(null)
+ .withMolecularTherapies(null)
+ .withNgsReports(null)
+ .withPreviousGuidelineTherapies(null)
+ .withRebiopsyRequests(null)
+ .withRecommendations(null)
+ .withResponses(null)
+ .withStudyInclusionRequests(null)
+ .withSpecimens(null)
+ .build()
+
+ mtbFile.pseudonymizeWith(pseudonymizeService)
+ mtbFile.anonymizeContentWith(pseudonymizeService)
+
+
+ assertThat(mtbFile.episode.id).isNotNull()
+ }
+
} \ No newline at end of file