mirror of
https://github.com/pcvolkmer/mv64e-etl-processor
synced 2025-09-13 17:02:52 +00:00
Compare commits
4 Commits
master
...
gics-provi
Author | SHA1 | Date | |
---|---|---|---|
|
4bd6117ba8 | ||
|
ace5637ed8 | ||
|
88857cf201 | ||
|
db89d84353 |
@@ -39,12 +39,14 @@ public class GicsConsentService implements IConsentService {
|
|||||||
private final RestTemplate restTemplate;
|
private final RestTemplate restTemplate;
|
||||||
private final FhirContext fhirContext;
|
private final FhirContext fhirContext;
|
||||||
private final GIcsConfigProperties gIcsConfigProperties;
|
private final GIcsConfigProperties gIcsConfigProperties;
|
||||||
|
private final String BROAD_CONSENT_PROFILE_URI = "https://www.medizininformatik-initiative.de/fhir/modul-consent/StructureDefinition/mii-pr-consent-einwilligung";
|
||||||
|
private final String BROAD_CONSENT_POLICY = "urn:oid:2.16.840.1.113883.3.1937.777.24.2.1791";
|
||||||
|
|
||||||
public GicsConsentService(
|
public GicsConsentService(
|
||||||
GIcsConfigProperties gIcsConfigProperties,
|
GIcsConfigProperties gIcsConfigProperties,
|
||||||
RetryTemplate retryTemplate,
|
RetryTemplate retryTemplate,
|
||||||
RestTemplate restTemplate,
|
RestTemplate restTemplate,
|
||||||
AppFhirConfig appFhirConfig
|
AppFhirConfig appFhirConfig
|
||||||
) {
|
) {
|
||||||
this.retryTemplate = retryTemplate;
|
this.retryTemplate = retryTemplate;
|
||||||
this.restTemplate = restTemplate;
|
this.restTemplate = restTemplate;
|
||||||
@@ -54,34 +56,34 @@ public class GicsConsentService implements IConsentService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected Parameters getFhirRequestParameters(
|
protected Parameters getFhirRequestParameters(
|
||||||
String personIdentifierValue
|
String personIdentifierValue
|
||||||
) {
|
) {
|
||||||
var result = new Parameters();
|
var result = new Parameters();
|
||||||
result.addParameter(
|
result.addParameter(
|
||||||
new ParametersParameterComponent()
|
new ParametersParameterComponent()
|
||||||
.setName("personIdentifier")
|
.setName("personIdentifier")
|
||||||
.setValue(
|
.setValue(
|
||||||
new Identifier()
|
new Identifier()
|
||||||
.setValue(personIdentifierValue)
|
.setValue(personIdentifierValue)
|
||||||
.setSystem(this.gIcsConfigProperties.getPersonIdentifierSystem())
|
.setSystem(this.gIcsConfigProperties.getPersonIdentifierSystem())
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
result.addParameter(
|
result.addParameter(
|
||||||
new ParametersParameterComponent()
|
new ParametersParameterComponent()
|
||||||
.setName("domain")
|
.setName("domain")
|
||||||
.setValue(
|
.setValue(
|
||||||
new StringType()
|
new StringType()
|
||||||
.setValue(this.gIcsConfigProperties.getBroadConsentDomainName())
|
.setValue(this.gIcsConfigProperties.getBroadConsentDomainName())
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
result.addParameter(
|
result.addParameter(
|
||||||
new ParametersParameterComponent()
|
new ParametersParameterComponent()
|
||||||
.setName("policy")
|
.setName("policy")
|
||||||
.setValue(
|
.setValue(
|
||||||
new Coding()
|
new Coding()
|
||||||
.setCode(this.gIcsConfigProperties.getBroadConsentPolicyCode())
|
.setCode(this.gIcsConfigProperties.getBroadConsentPolicyCode())
|
||||||
.setSystem(this.gIcsConfigProperties.getBroadConsentPolicySystem())
|
.setSystem(this.gIcsConfigProperties.getBroadConsentPolicySystem())
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -89,10 +91,10 @@ public class GicsConsentService implements IConsentService {
|
|||||||
* 'ignoreVersionNumber'.
|
* 'ignoreVersionNumber'.
|
||||||
*/
|
*/
|
||||||
result.addParameter(
|
result.addParameter(
|
||||||
new ParametersParameterComponent()
|
new ParametersParameterComponent()
|
||||||
.setName("version")
|
.setName("version")
|
||||||
.setValue(new StringType().setValue("1.1")
|
.setValue(new StringType().setValue("1.1")
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
/* add config parameter with:
|
/* add config parameter with:
|
||||||
@@ -101,17 +103,17 @@ public class GicsConsentService implements IConsentService {
|
|||||||
* unknownStateIsConsideredAsDecline -> true
|
* unknownStateIsConsideredAsDecline -> true
|
||||||
*/
|
*/
|
||||||
var config = new ParametersParameterComponent()
|
var config = new ParametersParameterComponent()
|
||||||
.setName("config")
|
.setName("config")
|
||||||
.addPart(
|
.addPart(
|
||||||
new ParametersParameterComponent()
|
new ParametersParameterComponent()
|
||||||
.setName("ignoreVersionNumber")
|
.setName("ignoreVersionNumber")
|
||||||
.setValue(new BooleanType().setValue(true))
|
.setValue(new BooleanType().setValue(true))
|
||||||
)
|
)
|
||||||
.addPart(
|
.addPart(
|
||||||
new ParametersParameterComponent()
|
new ParametersParameterComponent()
|
||||||
.setName("unknownStateIsConsideredAsDecline")
|
.setName("unknownStateIsConsideredAsDecline")
|
||||||
.setValue(new BooleanType().setValue(false))
|
.setValue(new BooleanType().setValue(false))
|
||||||
);
|
);
|
||||||
|
|
||||||
result.addParameter(config);
|
result.addParameter(config);
|
||||||
|
|
||||||
@@ -130,8 +132,8 @@ public class GicsConsentService implements IConsentService {
|
|||||||
headers.setContentType(MediaType.APPLICATION_XML);
|
headers.setContentType(MediaType.APPLICATION_XML);
|
||||||
|
|
||||||
if (
|
if (
|
||||||
StringUtils.isBlank(this.gIcsConfigProperties.getUsername())
|
StringUtils.isBlank(this.gIcsConfigProperties.getUsername())
|
||||||
|| StringUtils.isBlank(this.gIcsConfigProperties.getPassword())
|
|| StringUtils.isBlank(this.gIcsConfigProperties.getPassword())
|
||||||
) {
|
) {
|
||||||
return headers;
|
return headers;
|
||||||
}
|
}
|
||||||
@@ -145,28 +147,28 @@ public class GicsConsentService implements IConsentService {
|
|||||||
HttpEntity<String> requestEntity = new HttpEntity<>(parameterAsXml, this.headersWithHttpBasicAuth());
|
HttpEntity<String> requestEntity = new HttpEntity<>(parameterAsXml, this.headersWithHttpBasicAuth());
|
||||||
try {
|
try {
|
||||||
var responseEntity = retryTemplate.execute(
|
var responseEntity = retryTemplate.execute(
|
||||||
ctx -> restTemplate.exchange(endpointUri(endpoint), HttpMethod.POST, requestEntity, String.class)
|
ctx -> restTemplate.exchange(endpointUri(endpoint), HttpMethod.POST, requestEntity, String.class)
|
||||||
);
|
);
|
||||||
|
|
||||||
if (responseEntity.getStatusCode().is2xxSuccessful()) {
|
if (responseEntity.getStatusCode().is2xxSuccessful()) {
|
||||||
return responseEntity.getBody();
|
return responseEntity.getBody();
|
||||||
} else {
|
} else {
|
||||||
var msg = String.format(
|
var msg = String.format(
|
||||||
"Trusted party system reached but request failed! code: '%s' response: '%s'",
|
"Trusted party system reached but request failed! code: '%s' response: '%s'",
|
||||||
responseEntity.getStatusCode(), responseEntity.getBody());
|
responseEntity.getStatusCode(), responseEntity.getBody());
|
||||||
log.error(msg);
|
log.error(msg);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
} catch (RestClientException e) {
|
} catch (RestClientException e) {
|
||||||
var msg = String.format("Get consents status request failed reason: '%s",
|
var msg = String.format("Get consents status request failed reason: '%s",
|
||||||
e.getMessage());
|
e.getMessage());
|
||||||
log.error(msg);
|
log.error(msg);
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
} catch (TerminatedRetryException terminatedRetryException) {
|
} catch (TerminatedRetryException terminatedRetryException) {
|
||||||
var msg = String.format(
|
var msg = String.format(
|
||||||
"Get consents status process has been terminated. termination reason: '%s",
|
"Get consents status process has been terminated. termination reason: '%s",
|
||||||
terminatedRetryException.getMessage());
|
terminatedRetryException.getMessage());
|
||||||
log.error(msg);
|
log.error(msg);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@@ -175,45 +177,45 @@ public class GicsConsentService implements IConsentService {
|
|||||||
@Override
|
@Override
|
||||||
public TtpConsentStatus getTtpBroadConsentStatus(String personIdentifierValue) {
|
public TtpConsentStatus getTtpBroadConsentStatus(String personIdentifierValue) {
|
||||||
var consentStatusResponse = callGicsApi(
|
var consentStatusResponse = callGicsApi(
|
||||||
getFhirRequestParameters(personIdentifierValue),
|
getFhirRequestParameters(personIdentifierValue),
|
||||||
GicsConsentService.IS_CONSENTED_ENDPOINT
|
GicsConsentService.IS_CONSENTED_ENDPOINT
|
||||||
);
|
);
|
||||||
return evaluateConsentResponse(consentStatusResponse);
|
return evaluateConsentResponse(consentStatusResponse);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected Bundle currentConsentForPersonAndTemplate(
|
protected Bundle currentConsentForPersonAndTemplate(
|
||||||
String personIdentifierValue,
|
String personIdentifierValue,
|
||||||
ConsentDomain consentDomain,
|
ConsentDomain consentDomain,
|
||||||
Date requestDate
|
Date requestDate
|
||||||
) {
|
) {
|
||||||
|
|
||||||
var requestParameter = buildRequestParameterCurrentPolicyStatesForPerson(
|
var requestParameter = buildRequestParameterCurrentPolicyStatesForPerson(
|
||||||
personIdentifierValue,
|
personIdentifierValue,
|
||||||
requestDate,
|
requestDate,
|
||||||
consentDomain
|
consentDomain
|
||||||
);
|
);
|
||||||
|
|
||||||
var consentDataSerialized = callGicsApi(requestParameter,
|
var consentDataSerialized = callGicsApi(requestParameter,
|
||||||
GicsConsentService.IS_POLICY_STATES_FOR_PERSON_ENDPOINT);
|
GicsConsentService.IS_POLICY_STATES_FOR_PERSON_ENDPOINT);
|
||||||
|
|
||||||
if (consentDataSerialized == null) {
|
if (consentDataSerialized == null) {
|
||||||
// error occurred - should not process further!
|
// error occurred - should not process further!
|
||||||
throw new IllegalStateException(
|
throw new IllegalStateException(
|
||||||
"consent data request failed - stopping processing! - try again or fix other problems first.");
|
"consent data request failed - stopping processing! - try again or fix other problems first.");
|
||||||
}
|
}
|
||||||
var iBaseResource = fhirContext.newJsonParser()
|
var iBaseResource = fhirContext.newJsonParser()
|
||||||
.parseResource(consentDataSerialized);
|
.parseResource(consentDataSerialized);
|
||||||
if (iBaseResource instanceof OperationOutcome) {
|
if (iBaseResource instanceof OperationOutcome) {
|
||||||
// log error - very likely a configuration error
|
// log error - very likely a configuration error
|
||||||
String errorMessage =
|
String errorMessage =
|
||||||
"Consent request failed! Check outcome:\n " + consentDataSerialized;
|
"Consent request failed! Check outcome:\n " + consentDataSerialized;
|
||||||
log.error(errorMessage);
|
log.error(errorMessage);
|
||||||
throw new IllegalStateException(errorMessage);
|
throw new IllegalStateException(errorMessage);
|
||||||
} else if (iBaseResource instanceof Bundle bundle) {
|
} else if (iBaseResource instanceof Bundle bundle) {
|
||||||
return bundle;
|
return bundle;
|
||||||
} else {
|
} else {
|
||||||
String errorMessage = "Consent request failed! Unexpected response received! -> "
|
String errorMessage = "Consent request failed! Unexpected response received! -> "
|
||||||
+ consentDataSerialized;
|
+ consentDataSerialized;
|
||||||
log.error(errorMessage);
|
log.error(errorMessage);
|
||||||
throw new IllegalStateException(errorMessage);
|
throw new IllegalStateException(errorMessage);
|
||||||
}
|
}
|
||||||
@@ -228,43 +230,43 @@ public class GicsConsentService implements IConsentService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected Parameters buildRequestParameterCurrentPolicyStatesForPerson(
|
protected Parameters buildRequestParameterCurrentPolicyStatesForPerson(
|
||||||
String personIdentifierValue,
|
String personIdentifierValue,
|
||||||
Date requestDate,
|
Date requestDate,
|
||||||
ConsentDomain consentDomain
|
ConsentDomain consentDomain
|
||||||
) {
|
) {
|
||||||
var requestParameter = new Parameters();
|
var requestParameter = new Parameters();
|
||||||
requestParameter.addParameter(
|
requestParameter.addParameter(
|
||||||
new ParametersParameterComponent()
|
new ParametersParameterComponent()
|
||||||
.setName("personIdentifier")
|
.setName("personIdentifier")
|
||||||
.setValue(
|
.setValue(
|
||||||
new Identifier()
|
new Identifier()
|
||||||
.setValue(personIdentifierValue)
|
.setValue(personIdentifierValue)
|
||||||
.setSystem(this.gIcsConfigProperties.getPersonIdentifierSystem())
|
.setSystem(this.gIcsConfigProperties.getPersonIdentifierSystem())
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
requestParameter.addParameter(
|
requestParameter.addParameter(
|
||||||
new ParametersParameterComponent()
|
new ParametersParameterComponent()
|
||||||
.setName("domain")
|
.setName("domain")
|
||||||
.setValue(new StringType().setValue(getConsentDomainName(consentDomain)))
|
.setValue(new StringType().setValue(getConsentDomainName(consentDomain)))
|
||||||
);
|
);
|
||||||
|
|
||||||
Parameters nestedConfigParameters = new Parameters();
|
Parameters nestedConfigParameters = new Parameters();
|
||||||
nestedConfigParameters
|
nestedConfigParameters
|
||||||
.addParameter(
|
.addParameter(
|
||||||
new ParametersParameterComponent()
|
new ParametersParameterComponent()
|
||||||
.setName("idMatchingType")
|
.setName("idMatchingType")
|
||||||
.setValue(new Coding()
|
.setValue(new Coding()
|
||||||
.setSystem("https://ths-greifswald.de/fhir/CodeSystem/gics/IdMatchingType")
|
.setSystem("https://ths-greifswald.de/fhir/CodeSystem/gics/IdMatchingType")
|
||||||
.setCode("AT_LEAST_ONE")
|
.setCode("AT_LEAST_ONE")
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
.addParameter("ignoreVersionNumber", false)
|
.addParameter("ignoreVersionNumber", false)
|
||||||
.addParameter("unknownStateIsConsideredAsDecline", false)
|
.addParameter("unknownStateIsConsideredAsDecline", false)
|
||||||
.addParameter("requestDate", new DateType().setValue(requestDate));
|
.addParameter("requestDate", new DateType().setValue(requestDate));
|
||||||
|
|
||||||
requestParameter.addParameter(
|
requestParameter.addParameter(
|
||||||
new ParametersParameterComponent().setName("config").addPart().setResource(nestedConfigParameters)
|
new ParametersParameterComponent().setName("config").addPart().setResource(nestedConfigParameters)
|
||||||
);
|
);
|
||||||
|
|
||||||
return requestParameter;
|
return requestParameter;
|
||||||
@@ -291,7 +293,7 @@ public class GicsConsentService implements IConsentService {
|
|||||||
}
|
}
|
||||||
} else if (response instanceof OperationOutcome outcome) {
|
} else if (response instanceof OperationOutcome outcome) {
|
||||||
log.error("failed to get consent status from ttp. probably configuration error. "
|
log.error("failed to get consent status from ttp. probably configuration error. "
|
||||||
+ "outcome: '{}'", fhirContext.newJsonParser().encodeToString(outcome));
|
+ "outcome: '{}'", fhirContext.newJsonParser().encodeToString(outcome));
|
||||||
|
|
||||||
}
|
}
|
||||||
} catch (DataFormatException dfe) {
|
} catch (DataFormatException dfe) {
|
||||||
@@ -302,6 +304,36 @@ public class GicsConsentService implements IConsentService {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Bundle getConsent(String patientId, Date requestDate, ConsentDomain consentDomain) {
|
public Bundle getConsent(String patientId, Date requestDate, ConsentDomain consentDomain) {
|
||||||
return currentConsentForPersonAndTemplate(patientId, consentDomain, requestDate);
|
Bundle gIcsResultBundle = currentConsentForPersonAndTemplate(patientId, consentDomain, requestDate);
|
||||||
|
if (ConsentDomain.BROAD_CONSENT == consentDomain) {
|
||||||
|
return convertGicsResultToMiiBroadConsent(gIcsResultBundle);
|
||||||
|
}
|
||||||
|
return gIcsResultBundle;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected Bundle convertGicsResultToMiiBroadConsent(Bundle gIcsResultBundle) {
|
||||||
|
if (gIcsResultBundle == null
|
||||||
|
|| gIcsResultBundle.getEntry().isEmpty()
|
||||||
|
|| !(gIcsResultBundle.getEntry().getFirst().getResource() instanceof Consent))
|
||||||
|
return gIcsResultBundle;
|
||||||
|
|
||||||
|
Bundle.BundleEntryComponent bundleEntryComponent = gIcsResultBundle.getEntry().getFirst();
|
||||||
|
|
||||||
|
var consentAsOne = (Consent) bundleEntryComponent.getResource();
|
||||||
|
if (consentAsOne.getPolicy().stream().noneMatch(p -> p.getUri().equals(BROAD_CONSENT_POLICY))) {
|
||||||
|
consentAsOne.addPolicy(new Consent.ConsentPolicyComponent().setUri(BROAD_CONSENT_POLICY));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (consentAsOne.getMeta().getProfile().stream().noneMatch(p -> p.getValue().equals(BROAD_CONSENT_PROFILE_URI))) {
|
||||||
|
consentAsOne.getMeta().addProfile(BROAD_CONSENT_PROFILE_URI);
|
||||||
|
}
|
||||||
|
|
||||||
|
consentAsOne.setPolicyRule(null);
|
||||||
|
|
||||||
|
gIcsResultBundle.getEntry().stream().skip(1).forEach(c -> consentAsOne.getProvision().addProvision(((Consent) c.getResource()).getProvision().getProvisionFirstRep()));
|
||||||
|
|
||||||
|
gIcsResultBundle.getEntry().clear();
|
||||||
|
gIcsResultBundle.addEntry(bundleEntryComponent);
|
||||||
|
return gIcsResultBundle;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -24,14 +24,15 @@ import java.time.Instant;
|
|||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
|
||||||
import static org.assertj.core.api.Assertions.assertThat;
|
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.match.MockRestRequestMatchers.requestTo;
|
||||||
import static org.springframework.test.web.client.response.MockRestResponseCreators.withServerError;
|
import static org.springframework.test.web.client.response.MockRestResponseCreators.withServerError;
|
||||||
import static org.springframework.test.web.client.response.MockRestResponseCreators.withSuccess;
|
import static org.springframework.test.web.client.response.MockRestResponseCreators.withSuccess;
|
||||||
|
|
||||||
@ContextConfiguration(classes = {AppConfiguration.class, ObjectMapper.class})
|
@ContextConfiguration(classes = {AppConfiguration.class, ObjectMapper.class})
|
||||||
@TestPropertySource(properties = {
|
@TestPropertySource(properties = {
|
||||||
"app.consent.service=gics",
|
"app.consent.service=gics",
|
||||||
"app.consent.gics.uri=http://localhost:8090/ttp-fhir/fhir/gics"
|
"app.consent.gics.uri=http://localhost:8090/ttp-fhir/fhir/gics"
|
||||||
})
|
})
|
||||||
@RestClientTest
|
@RestClientTest
|
||||||
class GicsConsentServiceTest {
|
class GicsConsentServiceTest {
|
||||||
@@ -46,8 +47,8 @@ class GicsConsentServiceTest {
|
|||||||
|
|
||||||
@BeforeEach
|
@BeforeEach
|
||||||
void setUp(
|
void setUp(
|
||||||
@Autowired AppFhirConfig appFhirConfig,
|
@Autowired AppFhirConfig appFhirConfig,
|
||||||
@Autowired GIcsConfigProperties gIcsConfigProperties
|
@Autowired GIcsConfigProperties gIcsConfigProperties
|
||||||
) {
|
) {
|
||||||
this.appFhirConfig = appFhirConfig;
|
this.appFhirConfig = appFhirConfig;
|
||||||
this.gIcsConfigProperties = gIcsConfigProperties;
|
this.gIcsConfigProperties = gIcsConfigProperties;
|
||||||
@@ -56,33 +57,33 @@ class GicsConsentServiceTest {
|
|||||||
|
|
||||||
this.mockRestServiceServer = MockRestServiceServer.createServer(restTemplate);
|
this.mockRestServiceServer = MockRestServiceServer.createServer(restTemplate);
|
||||||
this.gicsConsentService = new GicsConsentService(
|
this.gicsConsentService = new GicsConsentService(
|
||||||
this.gIcsConfigProperties,
|
this.gIcsConfigProperties,
|
||||||
RetryTemplate.builder().maxAttempts(1).build(),
|
RetryTemplate.builder().maxAttempts(1).build(),
|
||||||
restTemplate,
|
restTemplate,
|
||||||
this.appFhirConfig
|
this.appFhirConfig
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void shouldReturnTtpBroadConsentStatus() {
|
void shouldReturnTtpBroadConsentStatus() {
|
||||||
final Parameters consentedResponse = new Parameters()
|
final Parameters consentedResponse = new Parameters()
|
||||||
.addParameter(
|
.addParameter(
|
||||||
new ParametersParameterComponent()
|
new ParametersParameterComponent()
|
||||||
.setName("consented")
|
.setName("consented")
|
||||||
.setValue(new BooleanType().setValue(true))
|
.setValue(new BooleanType().setValue(true))
|
||||||
);
|
);
|
||||||
|
|
||||||
mockRestServiceServer
|
mockRestServiceServer
|
||||||
.expect(
|
.expect(
|
||||||
requestTo(
|
requestTo(
|
||||||
"http://localhost:8090/ttp-fhir/fhir/gics" + GicsConsentService.IS_CONSENTED_ENDPOINT)
|
"http://localhost:8090/ttp-fhir/fhir/gics" + GicsConsentService.IS_CONSENTED_ENDPOINT)
|
||||||
)
|
|
||||||
.andRespond(
|
|
||||||
withSuccess(
|
|
||||||
appFhirConfig.fhirContext().newJsonParser().encodeResourceToString(consentedResponse),
|
|
||||||
MediaType.APPLICATION_JSON
|
|
||||||
)
|
)
|
||||||
);
|
.andRespond(
|
||||||
|
withSuccess(
|
||||||
|
appFhirConfig.fhirContext().newJsonParser().encodeResourceToString(consentedResponse),
|
||||||
|
MediaType.APPLICATION_JSON
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
var consentStatus = gicsConsentService.getTtpBroadConsentStatus("123456");
|
var consentStatus = gicsConsentService.getTtpBroadConsentStatus("123456");
|
||||||
assertThat(consentStatus).isEqualTo(TtpConsentStatus.BROAD_CONSENT_GIVEN);
|
assertThat(consentStatus).isEqualTo(TtpConsentStatus.BROAD_CONSENT_GIVEN);
|
||||||
@@ -91,22 +92,22 @@ class GicsConsentServiceTest {
|
|||||||
@Test
|
@Test
|
||||||
void shouldReturnRevokedConsent() {
|
void shouldReturnRevokedConsent() {
|
||||||
final Parameters revokedResponse = new Parameters()
|
final Parameters revokedResponse = new Parameters()
|
||||||
.addParameter(
|
.addParameter(
|
||||||
new ParametersParameterComponent()
|
new ParametersParameterComponent()
|
||||||
.setName("consented")
|
.setName("consented")
|
||||||
.setValue(new BooleanType().setValue(false))
|
.setValue(new BooleanType().setValue(false))
|
||||||
);
|
);
|
||||||
|
|
||||||
mockRestServiceServer
|
mockRestServiceServer
|
||||||
.expect(
|
.expect(
|
||||||
requestTo(
|
requestTo(
|
||||||
"http://localhost:8090/ttp-fhir/fhir/gics" + GicsConsentService.IS_CONSENTED_ENDPOINT)
|
"http://localhost:8090/ttp-fhir/fhir/gics" + GicsConsentService.IS_CONSENTED_ENDPOINT)
|
||||||
)
|
)
|
||||||
.andRespond(
|
.andRespond(
|
||||||
withSuccess(
|
withSuccess(
|
||||||
appFhirConfig.fhirContext().newJsonParser().encodeResourceToString(revokedResponse),
|
appFhirConfig.fhirContext().newJsonParser().encodeResourceToString(revokedResponse),
|
||||||
MediaType.APPLICATION_JSON)
|
MediaType.APPLICATION_JSON)
|
||||||
);
|
);
|
||||||
|
|
||||||
var consentStatus = gicsConsentService.getTtpBroadConsentStatus("123456");
|
var consentStatus = gicsConsentService.getTtpBroadConsentStatus("123456");
|
||||||
assertThat(consentStatus).isEqualTo(TtpConsentStatus.BROAD_CONSENT_MISSING_OR_REJECTED);
|
assertThat(consentStatus).isEqualTo(TtpConsentStatus.BROAD_CONSENT_MISSING_OR_REJECTED);
|
||||||
@@ -116,23 +117,23 @@ class GicsConsentServiceTest {
|
|||||||
@Test
|
@Test
|
||||||
void shouldReturnInvalidParameterResponse() {
|
void shouldReturnInvalidParameterResponse() {
|
||||||
final OperationOutcome responseWithErrorOutcome = new OperationOutcome()
|
final OperationOutcome responseWithErrorOutcome = new OperationOutcome()
|
||||||
.addIssue(
|
.addIssue(
|
||||||
new OperationOutcomeIssueComponent()
|
new OperationOutcomeIssueComponent()
|
||||||
.setSeverity(IssueSeverity.ERROR)
|
.setSeverity(IssueSeverity.ERROR)
|
||||||
.setCode(IssueType.PROCESSING)
|
.setCode(IssueType.PROCESSING)
|
||||||
.setDiagnostics("Invalid policy parameter...")
|
.setDiagnostics("Invalid policy parameter...")
|
||||||
);
|
);
|
||||||
|
|
||||||
mockRestServiceServer
|
mockRestServiceServer
|
||||||
.expect(
|
.expect(
|
||||||
requestTo(GICS_BASE_URI + GicsConsentService.IS_CONSENTED_ENDPOINT)
|
requestTo(GICS_BASE_URI + GicsConsentService.IS_CONSENTED_ENDPOINT)
|
||||||
)
|
|
||||||
.andRespond(
|
|
||||||
withSuccess(
|
|
||||||
appFhirConfig.fhirContext().newJsonParser().encodeResourceToString(responseWithErrorOutcome),
|
|
||||||
MediaType.APPLICATION_JSON
|
|
||||||
)
|
)
|
||||||
);
|
.andRespond(
|
||||||
|
withSuccess(
|
||||||
|
appFhirConfig.fhirContext().newJsonParser().encodeResourceToString(responseWithErrorOutcome),
|
||||||
|
MediaType.APPLICATION_JSON
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
var consentStatus = gicsConsentService.getTtpBroadConsentStatus("123456");
|
var consentStatus = gicsConsentService.getTtpBroadConsentStatus("123456");
|
||||||
assertThat(consentStatus).isEqualTo(TtpConsentStatus.FAILED_TO_ASK);
|
assertThat(consentStatus).isEqualTo(TtpConsentStatus.FAILED_TO_ASK);
|
||||||
@@ -141,12 +142,12 @@ class GicsConsentServiceTest {
|
|||||||
@Test
|
@Test
|
||||||
void shouldReturnRequestError() {
|
void shouldReturnRequestError() {
|
||||||
mockRestServiceServer
|
mockRestServiceServer
|
||||||
.expect(
|
.expect(
|
||||||
requestTo(GICS_BASE_URI + GicsConsentService.IS_CONSENTED_ENDPOINT)
|
requestTo(GICS_BASE_URI + GicsConsentService.IS_CONSENTED_ENDPOINT)
|
||||||
)
|
)
|
||||||
.andRespond(
|
.andRespond(
|
||||||
withServerError()
|
withServerError()
|
||||||
);
|
);
|
||||||
|
|
||||||
var consentStatus = gicsConsentService.getTtpBroadConsentStatus("123456");
|
var consentStatus = gicsConsentService.getTtpBroadConsentStatus("123456");
|
||||||
assertThat(consentStatus).isEqualTo(TtpConsentStatus.FAILED_TO_ASK);
|
assertThat(consentStatus).isEqualTo(TtpConsentStatus.FAILED_TO_ASK);
|
||||||
@@ -156,26 +157,29 @@ class GicsConsentServiceTest {
|
|||||||
void buildRequestParameterCurrentPolicyStatesForPersonTest() {
|
void buildRequestParameterCurrentPolicyStatesForPersonTest() {
|
||||||
String pid = "12345678";
|
String pid = "12345678";
|
||||||
var result = gicsConsentService
|
var result = gicsConsentService
|
||||||
.buildRequestParameterCurrentPolicyStatesForPerson(
|
.buildRequestParameterCurrentPolicyStatesForPerson(
|
||||||
pid,
|
pid,
|
||||||
Date.from(Instant.now()),
|
Date.from(Instant.now()),
|
||||||
ConsentDomain.MODELLVORHABEN_64E
|
ConsentDomain.MODELLVORHABEN_64E
|
||||||
);
|
);
|
||||||
|
|
||||||
assertThat(result.getParameter())
|
assertThat(result.getParameter())
|
||||||
.as("should contain 3 parameter resources")
|
.as("should contain 3 parameter resources")
|
||||||
.hasSize(3);
|
.hasSize(3);
|
||||||
|
|
||||||
assertThat(((StringType) result.getParameter("domain").getValue()).getValue())
|
assertThat(((StringType) result.getParameter("domain").getValue()).getValue())
|
||||||
.isEqualTo(
|
.isEqualTo(
|
||||||
gIcsConfigProperties.getGenomDeConsentDomainName()
|
gIcsConfigProperties.getGenomDeConsentDomainName()
|
||||||
);
|
);
|
||||||
|
|
||||||
assertThat(((Identifier) result.getParameter("personIdentifier").getValue()).getValue())
|
assertThat(((Identifier) result.getParameter("personIdentifier").getValue()).getValue())
|
||||||
.isEqualTo(
|
.isEqualTo(
|
||||||
pid
|
pid
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void convertGicsResultToMiiBroadConsent() {
|
||||||
|
fail("todo: implement Test gicsConsentService.convertGicsResultToMiiBroadConsent");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -80,7 +80,7 @@ class ConsentProcessorTest {
|
|||||||
val checkResult = consentProcessor.consentGatedCheckAndTryEmbedding(inputMtb)
|
val checkResult = consentProcessor.consentGatedCheckAndTryEmbedding(inputMtb)
|
||||||
|
|
||||||
assertThat(checkResult).isTrue
|
assertThat(checkResult).isTrue
|
||||||
assertThat(inputMtb.metadata.researchConsents).hasSize(26)
|
assertThat(inputMtb.metadata.researchConsents).isNotEmpty
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
|
Reference in New Issue
Block a user