summaryrefslogtreecommitdiff
path: root/src/test/java
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/java')
-rw-r--r--src/test/java/dev/dnpm/etl/processor/consent/GicsConsentServiceTest.java177
1 files changed, 108 insertions, 69 deletions
diff --git a/src/test/java/dev/dnpm/etl/processor/consent/GicsConsentServiceTest.java b/src/test/java/dev/dnpm/etl/processor/consent/GicsConsentServiceTest.java
index 6fa8f08..02b4d37 100644
--- a/src/test/java/dev/dnpm/etl/processor/consent/GicsConsentServiceTest.java
+++ b/src/test/java/dev/dnpm/etl/processor/consent/GicsConsentServiceTest.java
@@ -1,9 +1,11 @@
package dev.dnpm.etl.processor.consent;
+import ca.uhn.fhir.context.FhirContext;
import com.fasterxml.jackson.databind.ObjectMapper;
import dev.dnpm.etl.processor.config.AppConfiguration;
import dev.dnpm.etl.processor.config.AppFhirConfig;
import dev.dnpm.etl.processor.config.GIcsConfigProperties;
+import org.apache.commons.io.IOUtils;
import org.hl7.fhir.r4.model.*;
import org.hl7.fhir.r4.model.OperationOutcome.IssueSeverity;
import org.hl7.fhir.r4.model.OperationOutcome.IssueType;
@@ -20,18 +22,21 @@ import org.springframework.test.context.TestPropertySource;
import org.springframework.test.web.client.MockRestServiceServer;
import org.springframework.web.client.RestTemplate;
+import java.nio.charset.StandardCharsets;
import java.time.Instant;
import java.util.Date;
+import java.util.Objects;
import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.fail;
import static org.springframework.test.web.client.match.MockRestRequestMatchers.requestTo;
import static org.springframework.test.web.client.response.MockRestResponseCreators.withServerError;
import static org.springframework.test.web.client.response.MockRestResponseCreators.withSuccess;
@ContextConfiguration(classes = {AppConfiguration.class, ObjectMapper.class})
@TestPropertySource(properties = {
- "app.consent.service=gics",
- "app.consent.gics.uri=http://localhost:8090/ttp-fhir/fhir/gics"
+ "app.consent.service=gics",
+ "app.consent.gics.uri=http://localhost:8090/ttp-fhir/fhir/gics"
})
@RestClientTest
class GicsConsentServiceTest {
@@ -46,8 +51,8 @@ class GicsConsentServiceTest {
@BeforeEach
void setUp(
- @Autowired AppFhirConfig appFhirConfig,
- @Autowired GIcsConfigProperties gIcsConfigProperties
+ @Autowired AppFhirConfig appFhirConfig,
+ @Autowired GIcsConfigProperties gIcsConfigProperties
) {
this.appFhirConfig = appFhirConfig;
this.gIcsConfigProperties = gIcsConfigProperties;
@@ -56,33 +61,33 @@ class GicsConsentServiceTest {
this.mockRestServiceServer = MockRestServiceServer.createServer(restTemplate);
this.gicsConsentService = new GicsConsentService(
- this.gIcsConfigProperties,
- RetryTemplate.builder().maxAttempts(1).build(),
- restTemplate,
- this.appFhirConfig
+ this.gIcsConfigProperties,
+ RetryTemplate.builder().maxAttempts(1).build(),
+ restTemplate,
+ this.appFhirConfig
);
}
@Test
void shouldReturnTtpBroadConsentStatus() {
final Parameters consentedResponse = new Parameters()
- .addParameter(
- new ParametersParameterComponent()
- .setName("consented")
- .setValue(new BooleanType().setValue(true))
- );
+ .addParameter(
+ new ParametersParameterComponent()
+ .setName("consented")
+ .setValue(new BooleanType().setValue(true))
+ );
mockRestServiceServer
- .expect(
- requestTo(
- "http://localhost:8090/ttp-fhir/fhir/gics" + GicsConsentService.IS_CONSENTED_ENDPOINT)
- )
- .andRespond(
- withSuccess(
- appFhirConfig.fhirContext().newJsonParser().encodeResourceToString(consentedResponse),
- MediaType.APPLICATION_JSON
+ .expect(
+ requestTo(
+ "http://localhost:8090/ttp-fhir/fhir/gics" + GicsConsentService.IS_CONSENTED_ENDPOINT)
)
- );
+ .andRespond(
+ withSuccess(
+ appFhirConfig.fhirContext().newJsonParser().encodeResourceToString(consentedResponse),
+ MediaType.APPLICATION_JSON
+ )
+ );
var consentStatus = gicsConsentService.getTtpBroadConsentStatus("123456");
assertThat(consentStatus).isEqualTo(TtpConsentStatus.BROAD_CONSENT_GIVEN);
@@ -91,22 +96,22 @@ class GicsConsentServiceTest {
@Test
void shouldReturnRevokedConsent() {
final Parameters revokedResponse = new Parameters()
- .addParameter(
- new ParametersParameterComponent()
- .setName("consented")
- .setValue(new BooleanType().setValue(false))
- );
+ .addParameter(
+ new ParametersParameterComponent()
+ .setName("consented")
+ .setValue(new BooleanType().setValue(false))
+ );
mockRestServiceServer
- .expect(
- requestTo(
- "http://localhost:8090/ttp-fhir/fhir/gics" + GicsConsentService.IS_CONSENTED_ENDPOINT)
- )
- .andRespond(
- withSuccess(
- appFhirConfig.fhirContext().newJsonParser().encodeResourceToString(revokedResponse),
- MediaType.APPLICATION_JSON)
- );
+ .expect(
+ requestTo(
+ "http://localhost:8090/ttp-fhir/fhir/gics" + GicsConsentService.IS_CONSENTED_ENDPOINT)
+ )
+ .andRespond(
+ withSuccess(
+ appFhirConfig.fhirContext().newJsonParser().encodeResourceToString(revokedResponse),
+ MediaType.APPLICATION_JSON)
+ );
var consentStatus = gicsConsentService.getTtpBroadConsentStatus("123456");
assertThat(consentStatus).isEqualTo(TtpConsentStatus.BROAD_CONSENT_MISSING_OR_REJECTED);
@@ -116,23 +121,23 @@ class GicsConsentServiceTest {
@Test
void shouldReturnInvalidParameterResponse() {
final OperationOutcome responseWithErrorOutcome = new OperationOutcome()
- .addIssue(
- new OperationOutcomeIssueComponent()
- .setSeverity(IssueSeverity.ERROR)
- .setCode(IssueType.PROCESSING)
- .setDiagnostics("Invalid policy parameter...")
- );
+ .addIssue(
+ new OperationOutcomeIssueComponent()
+ .setSeverity(IssueSeverity.ERROR)
+ .setCode(IssueType.PROCESSING)
+ .setDiagnostics("Invalid policy parameter...")
+ );
mockRestServiceServer
- .expect(
- requestTo(GICS_BASE_URI + GicsConsentService.IS_CONSENTED_ENDPOINT)
- )
- .andRespond(
- withSuccess(
- appFhirConfig.fhirContext().newJsonParser().encodeResourceToString(responseWithErrorOutcome),
- MediaType.APPLICATION_JSON
+ .expect(
+ requestTo(GICS_BASE_URI + GicsConsentService.IS_CONSENTED_ENDPOINT)
)
- );
+ .andRespond(
+ withSuccess(
+ appFhirConfig.fhirContext().newJsonParser().encodeResourceToString(responseWithErrorOutcome),
+ MediaType.APPLICATION_JSON
+ )
+ );
var consentStatus = gicsConsentService.getTtpBroadConsentStatus("123456");
assertThat(consentStatus).isEqualTo(TtpConsentStatus.FAILED_TO_ASK);
@@ -141,12 +146,12 @@ class GicsConsentServiceTest {
@Test
void shouldReturnRequestError() {
mockRestServiceServer
- .expect(
- requestTo(GICS_BASE_URI + GicsConsentService.IS_CONSENTED_ENDPOINT)
- )
- .andRespond(
- withServerError()
- );
+ .expect(
+ requestTo(GICS_BASE_URI + GicsConsentService.IS_CONSENTED_ENDPOINT)
+ )
+ .andRespond(
+ withServerError()
+ );
var consentStatus = gicsConsentService.getTtpBroadConsentStatus("123456");
assertThat(consentStatus).isEqualTo(TtpConsentStatus.FAILED_TO_ASK);
@@ -156,26 +161,60 @@ class GicsConsentServiceTest {
void buildRequestParameterCurrentPolicyStatesForPersonTest() {
String pid = "12345678";
var result = gicsConsentService
- .buildRequestParameterCurrentPolicyStatesForPerson(
- pid,
- Date.from(Instant.now()),
- ConsentDomain.MODELLVORHABEN_64E
- );
+ .buildRequestParameterCurrentPolicyStatesForPerson(
+ pid,
+ Date.from(Instant.now()),
+ ConsentDomain.MODELLVORHABEN_64E
+ );
assertThat(result.getParameter())
- .as("should contain 3 parameter resources")
- .hasSize(3);
+ .as("should contain 3 parameter resources")
+ .hasSize(3);
assertThat(((StringType) result.getParameter("domain").getValue()).getValue())
- .isEqualTo(
- gIcsConfigProperties.getGenomDeConsentDomainName()
- );
+ .isEqualTo(
+ gIcsConfigProperties.getGenomDeConsentDomainName()
+ );
assertThat(((Identifier) result.getParameter("personIdentifier").getValue()).getValue())
- .isEqualTo(
- pid
- );
+ .isEqualTo(
+ pid
+ );
+ }
+
+ @Test
+ void convertGicsResultToMiiBroadConsent() throws Exception {
+ var fhirJsonParser = FhirContext.forR4().newJsonParser();
+ fhirJsonParser.setPrettyPrint(true);
+
+ var gicsInputStream = Objects.requireNonNull(
+ this.getClass().getClassLoader().getResourceAsStream("fake_broadConsent_gics_response_permit.json")
+ );
+ var gicsConsentBundle = (Bundle) fhirJsonParser.parseResource(IOUtils.toString(gicsInputStream, StandardCharsets.UTF_8));
+
+ var miiInputStream = Objects.requireNonNull(
+ this.getClass().getClassLoader().getResourceAsStream("fake_broadConsent_mii_response_permit.json")
+ );
+ var miiConsent = IOUtils.toString(miiInputStream, StandardCharsets.UTF_8);
+
+ var actual = gicsConsentService.convertGicsResultToMiiBroadConsent(gicsConsentBundle);
+
+ assertThat(fhirJsonParser.encodeToString(actual)).isEqualTo(miiConsent);
}
+ @Test
+ void convertedMiiBroadConsentShouldNotContainPatientId() throws Exception {
+ var fhirJsonParser = FhirContext.forR4().newJsonParser();
+ fhirJsonParser.setPrettyPrint(true);
+
+ var miiInputStream = Objects.requireNonNull(
+ this.getClass().getClassLoader().getResourceAsStream("fake_broadConsent_mii_response_permit.json")
+ );
+ var miiConsentBundle = (Bundle) fhirJsonParser.parseResource(IOUtils.toString(miiInputStream, StandardCharsets.UTF_8));
+
+ var currentPatientId = miiConsentBundle.getEntry().getFirst().getResource().getIdPart();
+ var actual = gicsConsentService.anonymizeBroadConsent(miiConsentBundle);
+ assertThat(fhirJsonParser.encodeToString(actual)).doesNotContain(currentPatientId);
+ }
}