-
Notifications
You must be signed in to change notification settings - Fork 4
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
#374 - Extend API to save and load cohort and dataselection
- remove unused methods
- Loading branch information
1 parent
b4b7961
commit f3d8e98
Showing
4 changed files
with
76 additions
and
244 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
206 changes: 51 additions & 155 deletions
206
src/test/java/de/numcodex/feasibility_gui_backend/query/QueryHandlerServiceTest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,178 +1,74 @@ | ||
package de.numcodex.feasibility_gui_backend.query; | ||
|
||
import de.numcodex.feasibility_gui_backend.query.dataquery.DataqueryHandler; | ||
import de.numcodex.feasibility_gui_backend.query.dispatch.QueryDispatchException; | ||
import com.fasterxml.jackson.core.JsonProcessingException; | ||
import com.fasterxml.jackson.databind.ObjectMapper; | ||
import de.numcodex.feasibility_gui_backend.common.api.Criterion; | ||
import de.numcodex.feasibility_gui_backend.common.api.TermCode; | ||
import de.numcodex.feasibility_gui_backend.query.api.QueryListEntry; | ||
import de.numcodex.feasibility_gui_backend.query.api.StructuredQuery; | ||
import de.numcodex.feasibility_gui_backend.query.dispatch.QueryDispatchException; | ||
import de.numcodex.feasibility_gui_backend.query.dispatch.QueryDispatcher; | ||
import de.numcodex.feasibility_gui_backend.query.persistence.*; | ||
import de.numcodex.feasibility_gui_backend.query.persistence.QueryContentRepository; | ||
import de.numcodex.feasibility_gui_backend.query.persistence.QueryRepository; | ||
import de.numcodex.feasibility_gui_backend.query.result.ResultService; | ||
import de.numcodex.feasibility_gui_backend.terminology.validation.StructuredQueryValidation; | ||
import org.junit.jupiter.api.BeforeEach; | ||
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.CsvSource; | ||
import org.mockito.Mock; | ||
import org.mockito.Mockito; | ||
import org.mockito.Spy; | ||
import org.mockito.junit.jupiter.MockitoExtension; | ||
import reactor.test.StepVerifier; | ||
|
||
import static org.mockito.ArgumentMatchers.any; | ||
import static org.mockito.Mockito.doReturn; | ||
import static org.mockito.Mockito.doThrow; | ||
|
||
import java.net.URI; | ||
import java.sql.Timestamp; | ||
import java.util.List; | ||
import java.util.Random; | ||
|
||
import static org.assertj.core.api.Assertions.assertThat; | ||
import static org.mockito.ArgumentMatchers.any; | ||
import static org.mockito.Mockito.doThrow; | ||
|
||
@ExtendWith(MockitoExtension.class) | ||
class QueryHandlerServiceTest { | ||
|
||
private static final long QUERY_ID = 1L; | ||
private static final long RESULT_SIZE = 150L; | ||
private static final String CREATOR = "author-123"; | ||
private static final String QUERY_CONTENT_HASH = "c85f4c5c8e22275b6efcf41f4f3b6d4b"; | ||
private static final String LABEL = "label"; | ||
private static final String COMMENT = "comment"; | ||
public static final String LAST_MODIFIED_STRING = "1969-07-20 20:17:40.0"; | ||
private static final Timestamp LAST_MODIFIED = Timestamp.valueOf(LAST_MODIFIED_STRING); | ||
|
||
@Spy | ||
private ObjectMapper jsonUtil = new ObjectMapper(); | ||
|
||
@Mock | ||
private QueryDispatcher queryDispatcher; | ||
|
||
@Mock | ||
private DataqueryHandler dataqueryHandler; | ||
|
||
@Mock | ||
private QueryRepository queryRepository; | ||
|
||
@Mock | ||
private QueryContentRepository queryContentRepository; | ||
|
||
@Mock | ||
private ResultService resultService; | ||
|
||
@Mock | ||
private StructuredQueryValidation structuredQueryValidation; | ||
|
||
private QueryHandlerService queryHandlerService; | ||
|
||
private QueryHandlerService createQueryHandlerService() { | ||
return new QueryHandlerService(queryDispatcher, dataqueryHandler, queryRepository, queryContentRepository, | ||
resultService, structuredQueryValidation, jsonUtil); | ||
} | ||
|
||
@BeforeEach | ||
void setUp() { | ||
Mockito.reset(queryDispatcher, dataqueryHandler, queryRepository, queryContentRepository, | ||
resultService, jsonUtil); | ||
queryHandlerService = createQueryHandlerService(); | ||
} | ||
|
||
@Test | ||
public void testRunQuery_failsWithMonoErrorOnQueryDispatchException() throws QueryDispatchException { | ||
var testStructuredQuery = StructuredQuery.builder() | ||
.inclusionCriteria(List.of(List.of())) | ||
.exclusionCriteria(List.of(List.of())) | ||
.build(); | ||
var queryHandlerService = createQueryHandlerService(); | ||
doThrow(QueryDispatchException.class).when(queryDispatcher).enqueueNewQuery(any(StructuredQuery.class), any(String.class)); | ||
|
||
StepVerifier.create(queryHandlerService.runQuery(testStructuredQuery, "uerid")) | ||
.expectError(QueryDispatchException.class) | ||
.verify(); | ||
} | ||
|
||
@ParameterizedTest | ||
@CsvSource({"false,true", "false,false"}) | ||
void convertQueriesToQueryListEntries(String skipValidation) throws JsonProcessingException { | ||
var queryList = List.of(createQuery()); | ||
if (!Boolean.parseBoolean(skipValidation)) { | ||
doReturn( | ||
new Random().nextBoolean() | ||
).when(structuredQueryValidation).isValid(any(StructuredQuery.class)); | ||
} | ||
|
||
List<QueryListEntry> queryListEntries = queryHandlerService.convertQueriesToQueryListEntries(queryList, Boolean.parseBoolean(skipValidation)); | ||
|
||
assertThat(queryListEntries.size()).isEqualTo(1); | ||
assertThat(queryListEntries.get(0).id()).isEqualTo(QUERY_ID); | ||
assertThat(queryListEntries.get(0).createdAt()).isEqualTo(LAST_MODIFIED); | ||
if (Boolean.parseBoolean(skipValidation)) { | ||
assertThat(queryListEntries.get(0).isValid()).isNull(); | ||
} else { | ||
assertThat(queryListEntries.get(0).isValid()).isNotNull(); | ||
} | ||
} | ||
|
||
@Test | ||
void convertQueriesToQueryListEntries_JsonProcessingExceptionCausesInvalidQuery() throws JsonProcessingException { | ||
var queryList = List.of(createQuery()); | ||
doThrow(JsonProcessingException.class).when(jsonUtil).readValue(any(String.class), any(Class.class)); | ||
|
||
List<QueryListEntry> queryListEntries = queryHandlerService.convertQueriesToQueryListEntries(queryList, false); | ||
|
||
assertThat(queryListEntries.size()).isEqualTo(1); | ||
assertThat(queryListEntries.get(0).id()).isEqualTo(QUERY_ID); | ||
assertThat(queryListEntries.get(0).createdAt()).isEqualTo(LAST_MODIFIED); | ||
assertThat(queryListEntries.get(0).isValid()).isFalse(); | ||
} | ||
|
||
private Query createQuery() throws JsonProcessingException { | ||
var query = new Query(); | ||
query.setId(QUERY_ID); | ||
query.setCreatedAt(LAST_MODIFIED); | ||
query.setCreatedBy(CREATOR); | ||
query.setQueryContent(createQueryContent()); | ||
return query; | ||
} | ||
|
||
private QueryContent createQueryContent() throws JsonProcessingException { | ||
var queryContentString = jsonUtil.writeValueAsString(createValidStructuredQuery()); | ||
var queryContent = new QueryContent(queryContentString); | ||
queryContent.setHash(QUERY_CONTENT_HASH); | ||
return queryContent; | ||
} | ||
|
||
private StructuredQuery createValidStructuredQuery() { | ||
var termCode = TermCode.builder() | ||
.code("LL2191-6") | ||
.system("http://loinc.org") | ||
.display("Geschlecht") | ||
.build(); | ||
var inclusionCriterion = Criterion.builder() | ||
.termCodes(List.of(termCode)) | ||
.attributeFilters(List.of()) | ||
.build(); | ||
return StructuredQuery.builder() | ||
.version(URI.create("http://to_be_decided.com/draft-2/schema#")) | ||
.inclusionCriteria(List.of(List.of(inclusionCriterion))) | ||
.exclusionCriteria(List.of()) | ||
.display("foo") | ||
.build(); | ||
} | ||
|
||
private Criterion createInvalidCriterion() { | ||
var termCode = TermCode.builder() | ||
.code("LL2191-6") | ||
.system("http://loinc.org") | ||
.display("Geschlecht") | ||
.build(); | ||
return Criterion.builder() | ||
.context(null) | ||
.termCodes(List.of(termCode)) | ||
.build(); | ||
} | ||
|
||
@Spy | ||
private ObjectMapper jsonUtil = new ObjectMapper(); | ||
|
||
@Mock | ||
private QueryDispatcher queryDispatcher; | ||
|
||
@Mock | ||
private QueryRepository queryRepository; | ||
|
||
@Mock | ||
private QueryContentRepository queryContentRepository; | ||
|
||
@Mock | ||
private ResultService resultService; | ||
|
||
@Mock | ||
private StructuredQueryValidation structuredQueryValidation; | ||
|
||
private QueryHandlerService queryHandlerService; | ||
|
||
private QueryHandlerService createQueryHandlerService() { | ||
return new QueryHandlerService(queryDispatcher, queryRepository, queryContentRepository, | ||
resultService, structuredQueryValidation, jsonUtil); | ||
} | ||
|
||
@BeforeEach | ||
void setUp() { | ||
Mockito.reset(queryDispatcher, queryRepository, queryContentRepository, | ||
resultService, jsonUtil); | ||
queryHandlerService = createQueryHandlerService(); | ||
} | ||
|
||
@Test | ||
public void testRunQuery_failsWithMonoErrorOnQueryDispatchException() throws QueryDispatchException { | ||
var testStructuredQuery = StructuredQuery.builder() | ||
.inclusionCriteria(List.of(List.of())) | ||
.exclusionCriteria(List.of(List.of())) | ||
.build(); | ||
var queryHandlerService = createQueryHandlerService(); | ||
doThrow(QueryDispatchException.class).when(queryDispatcher).enqueueNewQuery(any(StructuredQuery.class), any(String.class)); | ||
|
||
StepVerifier.create(queryHandlerService.runQuery(testStructuredQuery, "uerid")) | ||
.expectError(QueryDispatchException.class) | ||
.verify(); | ||
} | ||
} |
Oops, something went wrong.