diff options
| author | Paul-Christian Volkmer | 2026-10-05 09:32:16 +0200 |
|---|---|---|
| committer | GitHub | 2026-10-05 07:32:16 +0000 |
| commit | 3e49d70ff69b5382e0ad62d8f321aa0c15b1f85b (patch) | |
| tree | 812359ba361f290a5980eb8de9d3239587b16edc /src/test/kotlin/dev/dnpm | |
| parent | d9961a9baccaff511662b1aa1de18bdd02f94f5e (diff) | |
feat: add SHA256-HMAC for use in build-in pseudonym generator (#324)
Diffstat (limited to 'src/test/kotlin/dev/dnpm')
| -rw-r--r-- | src/test/kotlin/dev/dnpm/etl/processor/pseudonym/PseudonymizeServiceTest.kt | 123 |
1 files changed, 77 insertions, 46 deletions
diff --git a/src/test/kotlin/dev/dnpm/etl/processor/pseudonym/PseudonymizeServiceTest.kt b/src/test/kotlin/dev/dnpm/etl/processor/pseudonym/PseudonymizeServiceTest.kt index 00487d0..3ac4df6 100644 --- a/src/test/kotlin/dev/dnpm/etl/processor/pseudonym/PseudonymizeServiceTest.kt +++ b/src/test/kotlin/dev/dnpm/etl/processor/pseudonym/PseudonymizeServiceTest.kt @@ -20,6 +20,7 @@ package dev.dnpm.etl.processor.pseudonym +import dev.dnpm.etl.processor.config.PseudonymGenerator import dev.dnpm.etl.processor.config.PseudonymizeConfigProperties import dev.pcvolkmer.mv64e.model.MtbEpisodeOfCare import dev.pcvolkmer.mv64e.model.Patient @@ -31,72 +32,102 @@ import java.util.* import org.assertj.core.api.Assertions.assertThat import org.junit.jupiter.api.Test import org.junit.jupiter.api.extension.ExtendWith +import org.junit.jupiter.params.ParameterizedTest +import org.junit.jupiter.params.provider.Arguments +import org.junit.jupiter.params.provider.MethodSource import org.mockito.ArgumentMatchers.anyString import org.mockito.Mock import org.mockito.junit.jupiter.MockitoExtension import org.mockito.kotlin.doAnswer import org.mockito.kotlin.whenever +import java.util.stream.Stream @ExtendWith(MockitoExtension::class) class PseudonymizeServiceTest { - private val mtbFile = - PatientRecord.builder() - .patient(Patient.builder().id("123").build()) - .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() - - @Test - fun shouldNotUsePseudonymPrefixForGpas(@Mock generator: GpasPseudonymGenerator) { - doAnswer { it.arguments[0] }.whenever(generator).generate(anyString()) + private val mtbFile = + PatientRecord.builder() + .patient(Patient.builder().id("123").build()) + .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() + + @Test + fun shouldNotUsePseudonymPrefixForGpas(@Mock generator: GpasPseudonymGenerator) { + doAnswer { it.arguments[0] }.whenever(generator).generate(anyString()) + + val pseudonymizeService = PseudonymizeService(generator, PseudonymizeConfigProperties()) + + mtbFile.pseudonymizeWith(pseudonymizeService) + + assertThat(mtbFile.patient?.id).isEqualTo("123") + } - val pseudonymizeService = PseudonymizeService(generator, PseudonymizeConfigProperties()) + @Test + fun sanitizeFileName() { + val result = GpasPseudonymGenerator.sanitizeValue("l://a\\bs;1*2?3>") - mtbFile.pseudonymizeWith(pseudonymizeService) + assertThat(result).isEqualTo("l___a_bs_1_2_3_") + } - assertThat(mtbFile.patient?.id).isEqualTo("123") - } + @Test + fun shouldUsePseudonymPrefixForBuiltin(@Mock generator: AnonymizingGenerator) { + doAnswer { it.arguments[0] }.whenever(generator).generate(anyString()) - @Test - fun sanitizeFileName() { - val result = GpasPseudonymGenerator.sanitizeValue("l://a\\bs;1*2?3>") + val pseudonymizeService = PseudonymizeService(generator, PseudonymizeConfigProperties()) - assertThat(result).isEqualTo("l___a_bs_1_2_3_") - } + mtbFile.pseudonymizeWith(pseudonymizeService) - @Test - fun shouldUsePseudonymPrefixForBuiltin(@Mock generator: AnonymizingGenerator) { - doAnswer { it.arguments[0] }.whenever(generator).generate(anyString()) + assertThat(mtbFile.patient?.id).isEqualTo("UNKNOWN_123") + } - val pseudonymizeService = PseudonymizeService(generator, PseudonymizeConfigProperties()) + @Test + fun shouldReturnDifferentValues() { + val ag = AnonymizingGenerator() - mtbFile.pseudonymizeWith(pseudonymizeService) + val tans = HashSet<String>() - assertThat(mtbFile.patient?.id).isEqualTo("UNKNOWN_123") - } + (1..1000).forEach { i -> + val tan = ag.generateGenomDeTan("12345") + assertThat(tan).hasSize(64) + assertThat(tans.add(tan)).`as`("never the same result!").isTrue + } + } - @Test - fun shouldReturnDifferentValues() { - val ag = AnonymizingGenerator() + @ParameterizedTest + @MethodSource("providePseudonymizeServiceTestProvider") + fun shouldGenerateExpectedPseudonym(generator: Generator, expected: String) { + val pseudonymizeService = PseudonymizeService(generator, PseudonymizeConfigProperties()) + mtbFile.pseudonymizeWith(pseudonymizeService) + assertThat(mtbFile.patient?.id).isEqualTo(expected) + } - val tans = HashSet<String>() + companion object { + + @JvmStatic + fun providePseudonymizeServiceTestProvider(): Stream<Arguments> { + return Stream.of( + Arguments.of(AnonymizingGenerator(), "UNKNOWN_uzs2iwjaiixz2ql6jbt67xcpxcqeuhz774p2a7uzr2"), + Arguments.of( + AnonymizingHmacGenerator( + PseudonymizeConfigProperties( + hmacKey = "TEST" + ) + ), "UNKNOWN_3u2nc3hzwbe2kylbmcrhoahgkisxl5jfbcwr3wonr3" + ) + ) + } - (1..1000).forEach { i -> - val tan = ag.generateGenomDeTan("12345") - assertThat(tan).hasSize(64) - assertThat(tans.add(tan)).`as`("never the same result!").isTrue } - } } |
