diff --git a/src/main/java/org/broadinstitute/consent/http/models/DataUse.java b/src/main/java/org/broadinstitute/consent/http/models/DataUse.java index 1005613785..c9f0604ccf 100644 --- a/src/main/java/org/broadinstitute/consent/http/models/DataUse.java +++ b/src/main/java/org/broadinstitute/consent/http/models/DataUse.java @@ -22,25 +22,39 @@ public class DataUse { private Boolean hmbResearch; private List diseaseRestrictions; private Boolean populationOriginsAncestry; + @Deprecated private Boolean populationStructure; private Boolean commercialUse; + private Boolean nonProfitUse; private Boolean methodsResearch; + @Deprecated private String aggregateResearch; + @Deprecated private String controlSetOption; - private boolean controls; + private Boolean controls; private String gender; private Boolean pediatric; - private boolean population; + private Boolean population; + @Deprecated private List populationRestrictions; + @Deprecated private Boolean otherRestrictions; private String dateRestriction; + @Deprecated private Boolean recontactingDataSubjects; + @Deprecated private String recontactMay; + @Deprecated private String recontactMust; + @Deprecated private String genomicPhenotypicData; + @Deprecated private String cloudStorage; + // Also known as "irb" private Boolean ethicsApprovalRequired; + @Deprecated private Boolean collaboratorRequired; + @Deprecated private String geographicalRestrictions; private String other; private String secondaryOther; @@ -51,12 +65,17 @@ public class DataUse { private Boolean vulnerablePopulations; private Boolean psychologicalTraits; private Boolean notHealth; + @Deprecated private Boolean nonBiomedical; + @Deprecated private Boolean manualReview; private Boolean geneticStudiesOnly; private Boolean publicationResults; + @Deprecated private Boolean genomicResults; + @Deprecated private String genomicSummaryResults; + @Deprecated private Boolean collaborationInvestigators; private String publicationMoratorium; @@ -108,6 +127,14 @@ public void setCommercialUse(Boolean commercialUse) { this.commercialUse = commercialUse; } + public Boolean getNonProfitUse() { + return nonProfitUse; + } + + public void setNonProfitUse(Boolean nonProfitUse) { + this.nonProfitUse = nonProfitUse; + } + public Boolean getMethodsResearch() { return methodsResearch; } @@ -364,19 +391,19 @@ public void setPublicationMoratorium(String publicationMoratorium) { this.publicationMoratorium = publicationMoratorium; } - public boolean getControls() { + public Boolean getControls() { return controls; } - public void setControls(boolean controls) { + public void setControls(Boolean controls) { this.controls = controls; } - public boolean getPopulation() { + public Boolean getPopulation() { return population; } - public void setPopulation(boolean population) { + public void setPopulation(Boolean population) { this.population = population; } @@ -423,6 +450,7 @@ public boolean equals(Object o) { && Objects.equal(getPopulationOriginsAncestry(), dataUse.getPopulationOriginsAncestry()) && Objects.equal(getPopulationStructure(), dataUse.getPopulationStructure()) && Objects.equal(getCommercialUse(), dataUse.getCommercialUse()) + && Objects.equal(getNonProfitUse(), dataUse.getNonProfitUse()) && Objects.equal(getMethodsResearch(), dataUse.getMethodsResearch()) && Objects.equal(getAggregateResearch(), dataUse.getAggregateResearch()) && Objects.equal(getControlSetOption(), dataUse.getControlSetOption()) diff --git a/src/main/java/org/broadinstitute/consent/http/service/UseRestrictionConverter.java b/src/main/java/org/broadinstitute/consent/http/service/UseRestrictionConverter.java index bbfb12fef6..a6a040aded 100644 --- a/src/main/java/org/broadinstitute/consent/http/service/UseRestrictionConverter.java +++ b/src/main/java/org/broadinstitute/consent/http/service/UseRestrictionConverter.java @@ -1,33 +1,23 @@ package org.broadinstitute.consent.http.service; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.ObjectReader; +import jakarta.ws.rs.InternalServerErrorException; import jakarta.ws.rs.client.Client; import jakarta.ws.rs.client.Entity; import jakarta.ws.rs.client.WebTarget; import jakarta.ws.rs.core.MediaType; import jakarta.ws.rs.core.Response; -import java.io.IOException; -import java.util.ArrayList; -import java.util.HashMap; import java.util.List; -import java.util.Map; import java.util.Objects; -import java.util.stream.Collectors; import org.apache.commons.collections4.CollectionUtils; import org.broadinstitute.consent.http.configurations.ServicesConfiguration; import org.broadinstitute.consent.http.enumeration.DataUseTranslationType; import org.broadinstitute.consent.http.models.DataAccessRequest; import org.broadinstitute.consent.http.models.DataUse; import org.broadinstitute.consent.http.models.OntologyEntry; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.broadinstitute.consent.http.util.ConsentLogger; -@SuppressWarnings("WeakerAccess") -public class UseRestrictionConverter { +public class UseRestrictionConverter implements ConsentLogger { - private static final Logger LOGGER = LoggerFactory.getLogger("UseRestrictionConverter"); - private static final ObjectMapper mapper = new ObjectMapper(); private final ServicesConfiguration servicesConfiguration; private final Client client; @@ -36,82 +26,6 @@ public UseRestrictionConverter(Client client, ServicesConfiguration config) { this.servicesConfiguration = config; } - /** - * This method, and its counterpart that processes a DataAccessRequest, translates DAR questions - * to a DataUse - * - * @param json String in json form - * @return DataUse - */ - @SuppressWarnings("unchecked") - public DataUse parseDataUsePurpose(String json) { - Map form = parseAsMap(json); - DataUse dataUse = new DataUse(); - - // - // Research related entries - // - if (Boolean.parseBoolean(form.getOrDefault("methods", false).toString())) { - dataUse.setMethodsResearch(true); - } - if (Boolean.parseBoolean(form.getOrDefault("population", false).toString())) { - dataUse.setPopulationStructure(true); - } - if (Boolean.parseBoolean(form.getOrDefault("controls", false).toString())) { - dataUse.setControlSetOption("Yes"); - } - - // - // Diseases related entries - // - ArrayList> ontologies = (ArrayList>) form.get( - "ontologies"); - if (CollectionUtils.isNotEmpty(ontologies)) { - List restrictions = ontologies - .stream() - .filter(Objects::nonNull) - .filter(hashMap -> hashMap.containsKey("id")) - .map(hashMap -> hashMap.get("id")) - .collect(Collectors.toList()); - if (!restrictions.isEmpty()) { - dataUse.setDiseaseRestrictions(restrictions); - } - } - - // - // gender, age and commercial status entries - // - boolean forProfitOnly = Boolean.parseBoolean(form.getOrDefault("forProfit", false).toString()); - dataUse.setCommercialUse(forProfitOnly); - - // limited to one gender + children analysis - boolean oneGenderOnly = Boolean.parseBoolean(form.getOrDefault("onegender", false).toString()); - String selectedGender = (String) form.getOrDefault("gender", "X"); - boolean pediatricsOnly = Boolean.parseBoolean(form.getOrDefault("pediatric", false).toString()); - - if (oneGenderOnly) { - if (selectedGender.equalsIgnoreCase("M")) { - dataUse.setGender("Male"); - } else if (selectedGender.equalsIgnoreCase("F")) { - dataUse.setGender("Female"); - } - } - - if (pediatricsOnly) { - dataUse.setPediatric(true); - } - - if (Boolean.parseBoolean(form.getOrDefault("poa", false).toString())) { - dataUse.setPopulationOriginsAncestry(true); - } - - if (Boolean.parseBoolean(form.getOrDefault("hmb", false).toString())) { - dataUse.setHmbResearch(true); - } - - return dataUse; - } - /** * This method, and its counterpart that processes a map, translates DAR questions to a DataUse * @@ -124,15 +38,13 @@ public DataUse parseDataUsePurpose(DataAccessRequest dar) { // // Research related entries // - if (Objects.nonNull(dar.getData().getMethods())) { + if (Objects.nonNull(dar.getData().getMethods()) && Boolean.TRUE.equals(dar.getData().getMethods())) { dataUse.setMethodsResearch(dar.getData().getMethods()); } - if (Objects.nonNull(dar.getData().getPopulation())) { - dataUse.setPopulationStructure(dar.getData().getPopulation()); + if (Objects.nonNull(dar.getData().getPopulation()) && Boolean.TRUE.equals(dar.getData().getPopulation())) { dataUse.setPopulation(dar.getData().getPopulation()); } - if (Objects.nonNull(dar.getData().getControls())) { - dataUse.setControlSetOption("Yes"); + if (Objects.nonNull(dar.getData().getControls()) && Boolean.TRUE.equals(dar.getData().getControls())) { dataUse.setControls(dar.getData().getControls()); } @@ -140,61 +52,77 @@ public DataUse parseDataUsePurpose(DataAccessRequest dar) { // Diseases related entries // - List ontologies = dar.getData().getOntologies() - .stream().map(OntologyEntry::getId).collect(Collectors.toList()); + List ontologies = dar.getData() + .getOntologies() + .stream() + .map(OntologyEntry::getId) + .toList(); if (CollectionUtils.isNotEmpty(ontologies)) { dataUse.setDiseaseRestrictions(ontologies); } - // - // gender, age and commercial status entries - // + // commercial status if (Objects.nonNull(dar.getData().getForProfit())) { - dataUse.setCommercialUse(dar.getData().getForProfit()); + Boolean isForProfit = Boolean.TRUE.equals(dar.getData().getForProfit()); + dataUse.setCommercialUse(isForProfit); + dataUse.setNonProfitUse(!isForProfit); } - // limited to one gender + children analysis - if (Objects.nonNull(dar.getData().getOneGender()) && Objects.nonNull( - dar.getData().getGender())) { - boolean oneGenderOnly = dar.getData().getOneGender(); + // gender + if (Objects.nonNull(dar.getData().getGender())) { String selectedGender = dar.getData().getGender(); - if (oneGenderOnly) { - if (selectedGender.equalsIgnoreCase("M")) { - dataUse.setGender("Male"); - } else if (selectedGender.equalsIgnoreCase("F")) { - dataUse.setGender("Female"); - } + if (selectedGender.equalsIgnoreCase("M")) { + dataUse.setGender("Male"); + } else if (selectedGender.equalsIgnoreCase("F")) { + dataUse.setGender("Female"); } } - if (Objects.nonNull(dar.getData().getPediatric())) { - if (dar.getData().getPediatric()) { + // pediatric + if (Objects.nonNull(dar.getData().getPediatric()) && (Boolean.TRUE.equals(dar.getData().getPediatric()))) { dataUse.setPediatric(true); - } - } - if (Objects.nonNull(dar.getData().getPoa())) { - if (dar.getData().getPoa()) { - dataUse.setPopulationOriginsAncestry(true); - } } - if (Objects.nonNull(dar.getData().getHmb())) { - if (dar.getData().getHmb()) { + if (Objects.nonNull(dar.getData().getHmb()) && (Boolean.TRUE.equals(dar.getData().getHmb()))) { dataUse.setHmbResearch(true); - } + } // Other Conditions - if (Objects.nonNull(dar.getData().getOther())) { - dataUse.setOtherRestrictions(dar.getData().getOther()); - } - if (Objects.nonNull(dar.getData().getOtherText())) { + if (Objects.nonNull(dar.getData().getOther()) + && Boolean.TRUE.equals(dar.getData().getOther()) + && Objects.nonNull(dar.getData().getOtherText())) { + dataUse.setOtherRestrictions(true); dataUse.setOther(dar.getData().getOtherText()); } - if (Objects.nonNull(dar.getData().getNotHealth())) { + if ((Objects.nonNull(dar.getData().getIllegalBehavior())) && Boolean.TRUE.equals(dar.getData() + .getIllegalBehavior())) { + dataUse.setIllegalBehavior(dar.getData().getIllegalBehavior()); + } + + if ((Objects.nonNull(dar.getData().getSexualDiseases())) && Boolean.TRUE.equals(dar.getData() + .getSexualDiseases())) { + dataUse.setSexualDiseases(dar.getData().getSexualDiseases()); + } + + if ((Objects.nonNull(dar.getData().getStigmatizedDiseases())) && Boolean.TRUE.equals(dar.getData() + .getStigmatizedDiseases())) { + dataUse.setStigmatizeDiseases(dar.getData().getStigmatizedDiseases()); + } + + if ((Objects.nonNull(dar.getData().getVulnerablePopulation())) && Boolean.TRUE.equals(dar.getData() + .getVulnerablePopulation())) { + dataUse.setVulnerablePopulations(dar.getData().getVulnerablePopulation()); + } + + if ((Objects.nonNull(dar.getData().getPsychiatricTraits())) && Boolean.TRUE.equals(dar.getData() + .getPsychiatricTraits())) { + dataUse.setPsychologicalTraits(dar.getData().getPsychiatricTraits()); + } + + if ((Objects.nonNull(dar.getData().getNotHealth())) && Boolean.TRUE.equals(dar.getData().getNotHealth())) { dataUse.setNotHealth(dar.getData().getNotHealth()); - dataUse.setNonBiomedical(dar.getData().getNotHealth()); } } @@ -210,20 +138,11 @@ public String translateDataUse(DataUse dataUse, DataUseTranslationType type) { try { return response.readEntity(String.class); } catch (Exception e) { - LOGGER.error("Error parsing response from Ontology service: " + e); + logException("Error parsing response from Ontology service", e); } } - LOGGER.error("Error response from Ontology service: " + response.readEntity(String.class)); + logException("Error response from Ontology service: " + response.readEntity(String.class), new InternalServerErrorException()); return null; } - public Map parseAsMap(String str) { - ObjectReader reader = mapper.readerFor(Map.class); - try { - return reader.readValue(str); - } catch (IOException e) { - LOGGER.debug("While parsing as a Map ...", e); - } - return null; - } } diff --git a/src/test/java/org/broadinstitute/consent/http/service/UseRestrictionConverterTest.java b/src/test/java/org/broadinstitute/consent/http/service/UseRestrictionConverterTest.java index 0377c4e3e4..cd9de8450e 100644 --- a/src/test/java/org/broadinstitute/consent/http/service/UseRestrictionConverterTest.java +++ b/src/test/java/org/broadinstitute/consent/http/service/UseRestrictionConverterTest.java @@ -1,6 +1,6 @@ package org.broadinstitute.consent.http.service; -import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertTrue; @@ -28,7 +28,7 @@ import org.mockserver.model.Header; import org.testcontainers.containers.MockServerContainer; -public class UseRestrictionConverterTest implements WithMockServer { +class UseRestrictionConverterTest implements WithMockServer { private MockServerClient client; @@ -58,11 +58,12 @@ private void mockDataUseTranslateSuccess() { .withStatusCode(200) .withHeaders(new Header("Content-Type", MediaType.APPLICATION_JSON)) .withBody( - "Samples are restricted for use under the following conditions:\n" - + "Data is limited for health/medical/biomedical research. [HMB]\n" - + "Commercial use is not prohibited.\n" - + "Data use for methods development research irrespective of the specified data use limitations is not prohibited.\n" - + "Restrictions for use as a control set for diseases other than those defined were not specified.")); + """ + Samples are restricted for use under the following conditions: + Data is limited for health/medical/biomedical research. [HMB] + Commercial use is not prohibited. + Data use for methods development research irrespective of the specified data use limitations is not prohibited. + Restrictions for use as a control set for diseases other than those defined were not specified.""")); } private void mockDataUseTranslateFailure() { @@ -87,7 +88,7 @@ public ServicesConfiguration config() { * Test that the UseRestrictionConverter makes a call to the ontology service and gets back a valid translation */ @Test - public void testTranslateDataUsePurpose() { + void testTranslateDataUsePurpose() { mockDataUseTranslateSuccess(); Client client = ClientBuilder.newClient(); UseRestrictionConverter converter = new UseRestrictionConverter(client, config()); @@ -100,7 +101,7 @@ public void testTranslateDataUsePurpose() { * Test that the UseRestrictionConverter makes a call to the ontology service and gets back a valid translation */ @Test - public void testTranslateDataUseDataset() { + void testTranslateDataUseDataset() { mockDataUseTranslateSuccess(); Client client = ClientBuilder.newClient(); UseRestrictionConverter converter = new UseRestrictionConverter(client, config()); @@ -113,7 +114,7 @@ public void testTranslateDataUseDataset() { * Test that when the UseRestrictionConverter makes a failed call to the ontology service, a null is returned. */ @Test - public void testFailedDataUseTranslateConverterConnection() { + void testFailedDataUseTranslateConverterConnection() { mockDataUseTranslateFailure(); Client client = ClientBuilder.newClient(); @@ -123,145 +124,92 @@ public void testFailedDataUseTranslateConverterConnection() { assertNull(translation); } - /* - * Testing a fleshed out DataUse. - */ @Test - public void testParseDataUse() { - String json = "{ " + - "\"methods\":true, " + - "\"population\":true, " + - "\"controls\":true, " + - "\"ontologies\":[ " + - " { " + - " \"id\":\"http://purl.obolibrary.org/obo/DOID_4023\"," + - " \"label\":\"linitis-plastica\"," + - " \"definition\":null," + - " \"synonyms\":[ " + - " \"Linitis plastica (morphologic abnormality)\"," + - " \"Leather-bottle stomach\"" + - " ]" + - " }" + - "]," + - "\"forProfit\":true," + - "\"onegender\":true," + - "\"pediatric\":true," + - "\"gender\":\"F\"" + - "}"; - - Client client = ClientBuilder.newClient(); - UseRestrictionConverter converter = new UseRestrictionConverter(client, config()); - DataUse dataUse = converter.parseDataUsePurpose(json); - assertNotNull(dataUse); - assertTrue(dataUse.getMethodsResearch()); - assertTrue(dataUse.getPopulationStructure()); - assertTrue(dataUse.getControlSetOption().equalsIgnoreCase("Yes")); - assertTrue( - dataUse.getDiseaseRestrictions().contains("http://purl.obolibrary.org/obo/DOID_4023")); - assertTrue(dataUse.getCommercialUse()); - assertTrue(dataUse.getPediatric()); - assertTrue(dataUse.getGender().equalsIgnoreCase("Female")); - } - - /* - * Testing a DataUse with invalid ontologies. - */ - @Test - public void testParseDataUseInvalidOntologiesCase1() { - String json = "{ " + - "\"hmb\":true, " + - "\"ontologies\":[{},{},{}]" + - "}"; - - Client client = ClientBuilder.newClient(); - UseRestrictionConverter converter = new UseRestrictionConverter(client, config()); - DataUse dataUse = converter.parseDataUsePurpose(json); - assertNotNull(dataUse); - assertNull(dataUse.getDiseaseRestrictions()); - } - - /* - * Testing a DataUse with invalid ontologies. - */ - @Test - public void testParseDataUseInvalidOntologiesCase2() { - String json = "{ " + - "\"ontologies\":[null]" + - "}"; - + void testParseDataUsePurposeEmpty() { Client client = ClientBuilder.newClient(); UseRestrictionConverter converter = new UseRestrictionConverter(client, config()); - DataUse dataUse = converter.parseDataUsePurpose(json); - assertNotNull(dataUse); + DataAccessRequest dar = createDataAccessRequest(); + DataUse dataUse = converter.parseDataUsePurpose(dar); + assertNull(dataUse.getGeneralUse()); assertNull(dataUse.getDiseaseRestrictions()); - } - - /* - * Test that the DataUse parser does not set false values incorrectly - */ - @Test - public void testTranslateFalseValues() { - Client client = ClientBuilder.newClient(); - UseRestrictionConverter converter = new UseRestrictionConverter(client, config()); - String json = "{ " + - "\"methods\":false, " + - "\"population\":false, " + - "\"controls\":false, " + - "\"poa\":false, " + - "\"hmb\":false " + - "}"; - DataUse dataUse = converter.parseDataUsePurpose(json); - assertNull(dataUse.getMethodsResearch()); - assertNull(dataUse.getPopulationStructure()); - assertNull(dataUse.getControlSetOption()); - assertNull(dataUse.getPopulationOriginsAncestry()); assertNull(dataUse.getHmbResearch()); - } - - /* - * Test that the DataUse parser sets true values correctly - */ - @Test - public void testTranslateTrueValues() { - Client client = ClientBuilder.newClient(); - UseRestrictionConverter converter = new UseRestrictionConverter(client, config()); - String json = "{ " + - "\"methods\":true, " + - "\"population\":true, " + - "\"controls\":true, " + - "\"poa\":true, " + - "\"hmb\":true " + - "}"; - DataUse dataUse = converter.parseDataUsePurpose(json); - assertTrue(dataUse.getMethodsResearch()); - assertTrue(dataUse.getPopulationStructure()); - assertTrue(dataUse.getControlSetOption().equalsIgnoreCase("Yes")); - assertTrue(dataUse.getPopulationOriginsAncestry()); - assertTrue(dataUse.getHmbResearch()); + assertNull(dataUse.getPopulationOriginsAncestry()); + assertNull(dataUse.getMethodsResearch()); + assertNull(dataUse.getCommercialUse()); + assertNull(dataUse.getNonProfitUse()); + assertNull(dataUse.getOther()); + assertNull(dataUse.getSecondaryOther()); + assertNull(dataUse.getEthicsApprovalRequired()); + assertNull(dataUse.getCollaboratorRequired()); + assertNull(dataUse.getGeographicalRestrictions()); + assertNull(dataUse.getGeneticStudiesOnly()); + assertNull(dataUse.getPublicationResults()); + assertNull(dataUse.getPublicationMoratorium()); + assertNull(dataUse.getControls()); + assertNull(dataUse.getGender()); + assertNull(dataUse.getPediatric()); + assertNull(dataUse.getPopulation()); + assertNull(dataUse.getIllegalBehavior()); + assertNull(dataUse.getSexualDiseases()); + assertNull(dataUse.getStigmatizeDiseases()); + assertNull(dataUse.getVulnerablePopulations()); + assertNull(dataUse.getPsychologicalTraits()); + assertNull(dataUse.getNotHealth()); } @Test - public void testParseDataUsePurposeEmpty() { + void testParseDataUsePurposeFalseAsNull() { Client client = ClientBuilder.newClient(); UseRestrictionConverter converter = new UseRestrictionConverter(client, config()); DataAccessRequest dar = createDataAccessRequest(); + DataAccessRequestData data = new DataAccessRequestData(); + + data.setMethods(false); + data.setPopulation(false); + data.setControls(false); + data.setOntologies(List.of()); + data.setForProfit(false); + data.setGender(""); + data.setPediatric(false); + data.setIllegalBehavior(false); + data.setSexualDiseases(false); + data.setStigmatizedDiseases(false); + data.setVulnerablePopulation(false); + data.setPsychiatricTraits(false); + data.setNotHealth(false); + + dar.setData(data); DataUse dataUse = converter.parseDataUsePurpose(dar); assertNull(dataUse.getGeneralUse()); - assertNull(dataUse.getMethodsResearch()); - assertNull(dataUse.getControlSetOption()); assertNull(dataUse.getDiseaseRestrictions()); - assertNull(dataUse.getCommercialUse()); - assertNull(dataUse.getGender()); - assertNull(dataUse.getPediatric()); - assertNull(dataUse.getPopulationOriginsAncestry()); assertNull(dataUse.getHmbResearch()); + assertNull(dataUse.getPopulationOriginsAncestry()); + assertNull(dataUse.getMethodsResearch()); + // These cases are slightly different as forProfit false means commercialUse is false and nonProfitUse is true + assertNotNull(dataUse.getCommercialUse()); + assertNotNull(dataUse.getNonProfitUse()); assertNull(dataUse.getOther()); - assertNull(dataUse.getOtherRestrictions()); assertNull(dataUse.getSecondaryOther()); + assertNull(dataUse.getEthicsApprovalRequired()); + assertNull(dataUse.getCollaboratorRequired()); + assertNull(dataUse.getGeographicalRestrictions()); + assertNull(dataUse.getGeneticStudiesOnly()); + assertNull(dataUse.getPublicationResults()); + assertNull(dataUse.getPublicationMoratorium()); + assertNull(dataUse.getControls()); + assertNull(dataUse.getGender()); + assertNull(dataUse.getPediatric()); + assertNull(dataUse.getPopulation()); + assertNull(dataUse.getIllegalBehavior()); + assertNull(dataUse.getSexualDiseases()); + assertNull(dataUse.getStigmatizeDiseases()); + assertNull(dataUse.getVulnerablePopulations()); + assertNull(dataUse.getPsychologicalTraits()); + assertNull(dataUse.getNotHealth()); } @Test - public void testParseDataUsePurposeMethods() { + void testParseDataUsePurposeMethods() { Client client = ClientBuilder.newClient(); UseRestrictionConverter converter = new UseRestrictionConverter(client, config()); DataAccessRequest dar = createDataAccessRequest(); @@ -271,27 +219,17 @@ public void testParseDataUsePurposeMethods() { } @Test - public void testParseDataUsePurposePopulation() { - Client client = ClientBuilder.newClient(); - UseRestrictionConverter converter = new UseRestrictionConverter(client, config()); - DataAccessRequest dar = createDataAccessRequest(); - dar.getData().setPopulation(true); - DataUse dataUse = converter.parseDataUsePurpose(dar); - assertTrue(dataUse.getPopulationStructure()); - } - - @Test - public void testParseDataUsePurposeControls() { + void testParseDataUsePurposeControls() { Client client = ClientBuilder.newClient(); UseRestrictionConverter converter = new UseRestrictionConverter(client, config()); DataAccessRequest dar = createDataAccessRequest(); dar.getData().setControls(true); DataUse dataUse = converter.parseDataUsePurpose(dar); - assertNotNull(dataUse.getControlSetOption()); + assertTrue(dataUse.getControls()); } @Test - public void testParseDataUsePurposeDisease() { + void testParseDataUsePurposeDisease() { Client client = ClientBuilder.newClient(); UseRestrictionConverter converter = new UseRestrictionConverter(client, config()); DataAccessRequest dar = createDataAccessRequest(); @@ -302,10 +240,11 @@ public void testParseDataUsePurposeDisease() { dar.getData().setOntologies(List.of(entry)); DataUse dataUse = converter.parseDataUsePurpose(dar); assertNotNull(dataUse.getDiseaseRestrictions()); + assertFalse(dataUse.getDiseaseRestrictions().isEmpty()); } @Test - public void testParseDataUsePurposeCommercial() { + void testParseDataUsePurposeCommercial() { Client client = ClientBuilder.newClient(); UseRestrictionConverter converter = new UseRestrictionConverter(client, config()); DataAccessRequest dar = createDataAccessRequest(); @@ -315,7 +254,7 @@ public void testParseDataUsePurposeCommercial() { } @Test - public void testParseDataUsePurposeGender() { + void testParseDataUsePurposeGender() { Client client = ClientBuilder.newClient(); UseRestrictionConverter converter = new UseRestrictionConverter(client, config()); DataAccessRequest dar = createDataAccessRequest(); @@ -326,7 +265,7 @@ public void testParseDataUsePurposeGender() { } @Test - public void testParseDataUsePurposePediatric() { + void testParseDataUsePurposePediatric() { Client client = ClientBuilder.newClient(); UseRestrictionConverter converter = new UseRestrictionConverter(client, config()); DataAccessRequest dar = createDataAccessRequest(); @@ -336,76 +275,84 @@ public void testParseDataUsePurposePediatric() { } @Test - public void testParseDataUsePurposePOA() { + void testParseDataUsePurposeHMB() { Client client = ClientBuilder.newClient(); UseRestrictionConverter converter = new UseRestrictionConverter(client, config()); DataAccessRequest dar = createDataAccessRequest(); - dar.getData().setPoa(true); + dar.getData().setHmb(true); DataUse dataUse = converter.parseDataUsePurpose(dar); - assertTrue(dataUse.getPopulationOriginsAncestry()); + assertTrue(dataUse.getHmbResearch()); } @Test - public void testParseDataUsePurposeHMB() { + void testParseDataUsePurposeOther() { Client client = ClientBuilder.newClient(); UseRestrictionConverter converter = new UseRestrictionConverter(client, config()); DataAccessRequest dar = createDataAccessRequest(); - dar.getData().setHmb(true); + dar.getData().setOther(true); + dar.getData().setOtherText("Other Text"); DataUse dataUse = converter.parseDataUsePurpose(dar); - assertTrue(dataUse.getHmbResearch()); + assertTrue(dataUse.getOtherRestrictions()); } @Test - public void testParseDataUsePurposeOther1() { + void testParseDataUseIllegalBehavior() { Client client = ClientBuilder.newClient(); UseRestrictionConverter converter = new UseRestrictionConverter(client, config()); DataAccessRequest dar = createDataAccessRequest(); - dar.getData().setOther(true); + dar.getData().setIllegalBehavior(true); DataUse dataUse = converter.parseDataUsePurpose(dar); - assertTrue(dataUse.getOtherRestrictions()); + assertTrue(dataUse.getIllegalBehavior()); } @Test - public void testParseDataUsePurposeOther2() { + void testParseDataUseSexualDiseases() { Client client = ClientBuilder.newClient(); UseRestrictionConverter converter = new UseRestrictionConverter(client, config()); DataAccessRequest dar = createDataAccessRequest(); - dar.getData().setOtherText("other"); + dar.getData().setSexualDiseases(true); DataUse dataUse = converter.parseDataUsePurpose(dar); - assertNotNull(dataUse.getOther()); + assertTrue(dataUse.getSexualDiseases()); } @Test - public void testParseDataUseControl() { + void testParseDataUseStigmatizeDiseases() { Client client = ClientBuilder.newClient(); UseRestrictionConverter converter = new UseRestrictionConverter(client, config()); DataAccessRequest dar = createDataAccessRequest(); - dar.getData().setControls(true); + dar.getData().setStigmatizedDiseases(true); DataUse dataUse = converter.parseDataUsePurpose(dar); - assertTrue(dataUse.getControls()); - assertEquals("Yes", dataUse.getControlSetOption()); + assertTrue(dataUse.getStigmatizeDiseases()); + } + + @Test + void testParseDataUseVulnerablePopulations() { + Client client = ClientBuilder.newClient(); + UseRestrictionConverter converter = new UseRestrictionConverter(client, config()); + DataAccessRequest dar = createDataAccessRequest(); + dar.getData().setVulnerablePopulation(true); + DataUse dataUse = converter.parseDataUsePurpose(dar); + assertTrue(dataUse.getVulnerablePopulations()); } @Test - public void testParseDataUsePopulation() { + void testParseDataUsePsychologicalTraits() { Client client = ClientBuilder.newClient(); UseRestrictionConverter converter = new UseRestrictionConverter(client, config()); DataAccessRequest dar = createDataAccessRequest(); - dar.getData().setPopulation(true); + dar.getData().setPsychiatricTraits(true); DataUse dataUse = converter.parseDataUsePurpose(dar); - assertTrue(dataUse.getPopulationStructure()); - assertTrue(dataUse.getPopulation()); + assertTrue(dataUse.getPsychologicalTraits()); } @Test - public void testParseDataUseNotHealth() { + void testParseDataUseNotHealth() { Client client = ClientBuilder.newClient(); UseRestrictionConverter converter = new UseRestrictionConverter(client, config()); DataAccessRequest dar = createDataAccessRequest(); dar.getData().setNotHealth(true); DataUse dataUse = converter.parseDataUsePurpose(dar); assertTrue(dataUse.getNotHealth()); - assertTrue(dataUse.getNonBiomedical()); } private DataAccessRequest createDataAccessRequest() {