Skip to content

Commit 057d8cb

Browse files
committed
Increase Redaction Code Coverage
1 parent dd9e932 commit 057d8cb

File tree

4 files changed

+252
-0
lines changed

4 files changed

+252
-0
lines changed

src/test/java/de/medizininformatikinitiative/torch/RedactionTest.java

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323

2424
import static de.medizininformatikinitiative.torch.util.FhirUtil.createAbsentReasonExtension;
2525
import static org.assertj.core.api.Assertions.assertThat;
26+
import static org.assertj.core.api.Assertions.assertThatThrownBy;
2627

2728
public class RedactionTest {
2829

@@ -82,6 +83,38 @@ void testReferenceComplexType(String resource) throws IOException {
8283
assertThat(fhirContext.newJsonParser().setPrettyPrint(true).encodeResourceToString(tgt)).isEqualTo(fhirContext.newJsonParser().setPrettyPrint(true).encodeResourceToString(expected));
8384
}
8485

86+
@Test
87+
public void mismatchProfileWithAssignedProfile() {
88+
org.hl7.fhir.r4.model.Condition src = new org.hl7.fhir.r4.model.Condition();
89+
Meta meta = new Meta();
90+
meta.setProfile(List.of(new CanonicalType(MEDICATION)));
91+
src.setMeta(meta);
92+
ExtractionRedactionWrapper wrapper = new ExtractionRedactionWrapper(src, Set.of(DIAGNOSIS), Map.of(), Set.of());
93+
94+
assertThatThrownBy(() -> integrationTestSetup.redaction().redact(wrapper)).isInstanceOf(RuntimeException.class)
95+
.hasMessage("Resource is missing required profiles: []");
96+
}
97+
98+
@Test
99+
public void unknownProfile() {
100+
org.hl7.fhir.r4.model.Condition src = new org.hl7.fhir.r4.model.Condition();
101+
Meta meta = new Meta();
102+
meta.setProfile(List.of(new CanonicalType("UnknownProfile")));
103+
src.setMeta(meta);
104+
ExtractionRedactionWrapper wrapper = new ExtractionRedactionWrapper(src, Set.of("UnknownProfile"), Map.of(), Set.of());
105+
106+
assertThatThrownBy(() -> integrationTestSetup.redaction().redact(wrapper)).isInstanceOf(RuntimeException.class)
107+
.hasMessage("Trying to handle unknown profiles: [UnknownProfile]");
108+
}
109+
110+
@Test
111+
public void metaMissing() {
112+
org.hl7.fhir.r4.model.Condition src = new org.hl7.fhir.r4.model.Condition();
113+
114+
ExtractionRedactionWrapper wrapper = new ExtractionRedactionWrapper(src, Set.of(DIAGNOSIS), Map.of(), Set.of());
115+
assertThatThrownBy(() -> integrationTestSetup.redaction().redact(wrapper)).isInstanceOf(RuntimeException.class);
116+
}
117+
85118
@Test
86119
public void unknownSlice() throws IOException {
87120
DomainResource expected = integrationTestSetup.readResource(EXPECTED_OUTPUT_DIR + "unknownSlice.json");
@@ -100,6 +133,35 @@ public void unknownSlice() throws IOException {
100133
assertThat(fhirContext.newJsonParser().setPrettyPrint(true).encodeResourceToString(tgt)).isEqualTo(fhirContext.newJsonParser().setPrettyPrint(true).encodeResourceToString(expected));
101134
}
102135

136+
@ParameterizedTest
137+
@ValueSource(strings = {"DiagnosisWithExtensionAtCodeWithUnknownField.json"})
138+
void notHandlingUnknownElementID(String resource) throws IOException {
139+
140+
DomainResource src = integrationTestSetup.readResource(INPUT_CONDITION_DIR + resource);
141+
DomainResource expected = integrationTestSetup.readResource(EXPECTED_OUTPUT_DIR + resource);
142+
143+
ExtractionRedactionWrapper wrapper = new ExtractionRedactionWrapper(src, Set.of(DIAGNOSIS), Map.of("Condition.subject", Set.of("Patient/12345", "Patient/123"), "Condition.encounter", Set.of("Encounter/12345")), Set.of());
144+
DomainResource tgt = (DomainResource) integrationTestSetup.redaction().redact(wrapper);
145+
146+
assertThat(fhirContext.newJsonParser().setPrettyPrint(true).encodeResourceToString(tgt)).isEqualTo(fhirContext.newJsonParser().setPrettyPrint(true).encodeResourceToString(expected));
147+
148+
149+
}
150+
151+
@Test
152+
public void emptyValues() throws IOException {
153+
DomainResource expected = integrationTestSetup.readResource(EXPECTED_OUTPUT_DIR + "EmptyValues.json");
154+
org.hl7.fhir.r4.model.Condition src = new org.hl7.fhir.r4.model.Condition();
155+
Meta meta = new Meta();
156+
meta.setProfile(List.of(new CanonicalType(DIAGNOSIS)));
157+
src.setMeta(meta);
158+
159+
ExtractionRedactionWrapper wrapper = new ExtractionRedactionWrapper(src, Set.of(DIAGNOSIS), Map.of(), Set.of());
160+
DomainResource tgt = (DomainResource) integrationTestSetup.redaction().redact(wrapper);
161+
162+
assertThat(fhirContext.newJsonParser().setPrettyPrint(true).encodeResourceToString(tgt)).isEqualTo(fhirContext.newJsonParser().setPrettyPrint(true).encodeResourceToString(expected));
163+
}
164+
103165
@ParameterizedTest
104166
@ValueSource(strings = {"DiagnosisUnknownPrimitiveExtension.json", "DiagnosisWithExtensionAtCode.json", "DiagnosisUnknownComplexExtension.json"})
105167
void removeUnknownPrimitiveAndComplexExtension(String resource) throws IOException {
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
{
2+
"resourceType": "Condition",
3+
"id": "mii-exa-diagnose-mehrfachkodierung-primaercode",
4+
"meta": {
5+
"profile": [
6+
"https://www.medizininformatik-initiative.de/fhir/core/modul-diagnose/StructureDefinition/Diagnose"
7+
]
8+
},
9+
"code": {
10+
"coding": [
11+
{
12+
"system": "http://fhir.de/CodeSystem/bfarm/icd-10-gm",
13+
"extension": [
14+
{
15+
"url": "http://fhir.de/StructureDefinition/seitenlokalisation",
16+
"valueCoding": {
17+
"code": "L",
18+
"system": "https://fhir.kbv.de/CodeSystem/KBV_CS_SFHIR_ICD_SEITENLOKALISATION",
19+
"display": "links"
20+
}
21+
},
22+
{
23+
"url": "http://fhir.de/StructureDefinition/icd-10-gm-mehrfachcodierungs-kennzeichen",
24+
"valueCoding": {
25+
"code": "",
26+
"system": "http://fhir.de/CodeSystem/icd-10-gm-mehrfachcodierungs-kennzeichen"
27+
}
28+
}
29+
],
30+
"code": "A54.4",
31+
"version": "2020",
32+
"display": "Gonokokkeninfektion des Muskel-Skelett-Systems"
33+
},
34+
{
35+
"system": "http://fhir.de/CodeSystem/bfarm/alpha-id",
36+
"code": "I97525",
37+
"version": "2020",
38+
"display": "Bursitis gonorrhoica"
39+
}
40+
]
41+
},
42+
"clinicalStatus": {
43+
"coding": [
44+
{
45+
"code": "active",
46+
"system": "http://terminology.hl7.org/CodeSystem/condition-clinical",
47+
"extension": [
48+
{
49+
"url": "http://fhir.de/StructureDefinition/seitenlokalisation",
50+
"valueCoding": {
51+
"code": "L",
52+
"system": "https://fhir.kbv.de/CodeSystem/KBV_CS_SFHIR_ICD_SEITENLOKALISATION",
53+
"display": "links"
54+
}
55+
}
56+
]
57+
}
58+
]
59+
},
60+
"verificationStatus": {
61+
"coding": [
62+
{
63+
"code": "confirmed",
64+
"system": "http://terminology.hl7.org/CodeSystem/condition-ver-status"
65+
}
66+
]
67+
},
68+
"subject": {
69+
"reference": "Patient/12345"
70+
},
71+
"encounter": {
72+
"reference": "Encounter/12345"
73+
},
74+
"onsetPeriod": {
75+
"start": "2019-09-26T12:45:00+01:00",
76+
"end": "2020-03-25T13:00:00+01:00"
77+
},
78+
"recordedDate": "2020-01-05T12:53:00+01:00"
79+
}
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
{
2+
"resourceType": "Condition",
3+
"id": "mii-exa-diagnose-mehrfachkodierung-primaercode",
4+
"meta": {
5+
"profile": [
6+
"https://www.medizininformatik-initiative.de/fhir/core/modul-diagnose/StructureDefinition/Diagnose"
7+
]
8+
},
9+
"code": {
10+
"coding": [
11+
{
12+
"system": "http://fhir.de/CodeSystem/bfarm/icd-10-gm",
13+
"extension": [
14+
{
15+
"url": "http://fhir.de/StructureDefinition/seitenlokalisation",
16+
"valueCoding": {
17+
"code": "L",
18+
"system": "https://fhir.kbv.de/CodeSystem/KBV_CS_SFHIR_ICD_SEITENLOKALISATION",
19+
"display": "links"
20+
}
21+
},
22+
{
23+
"url": "http://fhir.de/StructureDefinition/icd-10-gm-mehrfachcodierungs-kennzeichen",
24+
"valueCoding": {
25+
"code": "",
26+
"system": "http://fhir.de/CodeSystem/icd-10-gm-mehrfachcodierungs-kennzeichen"
27+
}
28+
}
29+
],
30+
"code": "A54.4",
31+
"version": "2020",
32+
"display": "Gonokokkeninfektion des Muskel-Skelett-Systems"
33+
},
34+
{
35+
"system": "http://fhir.de/CodeSystem/bfarm/alpha-id",
36+
"code": "I97525",
37+
"version": "2020",
38+
"display": "Bursitis gonorrhoica"
39+
}
40+
]
41+
},
42+
"clinicalStatus": {
43+
"coding": [
44+
{
45+
"code": "active",
46+
"system": "http://terminology.hl7.org/CodeSystem/condition-clinical",
47+
"extension": [
48+
{
49+
"url": "http://fhir.de/StructureDefinition/seitenlokalisation",
50+
"valueCoding": {
51+
"code": "L",
52+
"system": "https://fhir.kbv.de/CodeSystem/KBV_CS_SFHIR_ICD_SEITENLOKALISATION",
53+
"display": "links"
54+
}
55+
}
56+
]
57+
}
58+
]
59+
},
60+
"verificationStatus": {
61+
"coding": [
62+
{
63+
"code": "confirmed",
64+
"system": "http://terminology.hl7.org/CodeSystem/condition-ver-status"
65+
}
66+
]
67+
},
68+
"subject": {
69+
"reference": "Patient/12345"
70+
},
71+
"encounter": {
72+
"reference": "Encounter/12345"
73+
},
74+
"onsetPeriod": {
75+
"start": "2019-09-26T12:45:00+01:00",
76+
"end": "2020-03-25T13:00:00+01:00"
77+
},
78+
"recordedDate": "2020-01-05T12:53:00+01:00"
79+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
{
2+
"resourceType": "Condition",
3+
"meta": {
4+
"profile": [
5+
"https://www.medizininformatik-initiative.de/fhir/core/modul-diagnose/StructureDefinition/Diagnose"
6+
]
7+
},
8+
"code": {
9+
"extension": [
10+
{
11+
"url": "http://hl7.org/fhir/StructureDefinition/data-absent-reason",
12+
"valueCode": "masked"
13+
}
14+
]
15+
},
16+
"subject": {
17+
"extension": [
18+
{
19+
"url": "http://hl7.org/fhir/StructureDefinition/data-absent-reason",
20+
"valueCode": "masked"
21+
}
22+
]
23+
},
24+
"_recordedDate": {
25+
"extension": [
26+
{
27+
"url": "http://hl7.org/fhir/StructureDefinition/data-absent-reason",
28+
"valueCode": "masked"
29+
}
30+
]
31+
}
32+
}

0 commit comments

Comments
 (0)