diff --git a/Dockerfile b/Dockerfile index 8ccf4592..995b9df5 100644 --- a/Dockerfile +++ b/Dockerfile @@ -8,10 +8,10 @@ ENV JAVA_TOOL_OPTIONS_DEFAULT \ -XX:MaxRAMPercentage=75 # Setup a non-root user context (security) -RUN addgroup -g 1000 tomcatgroup -RUN adduser -D -s / -u 1000 tomcatuser -G tomcatgroup -RUN mkdir /opt/app/temp-files -RUN chown -R 1000:1000 /opt/app +RUN addgroup -g 1000 tomcatgroup \ +&& adduser -D -s / -u 1000 tomcatuser -G tomcatgroup \ +&& mkdir /opt/app/temp-files \ +&& chown -R 1000:1000 /opt/app USER 1000 diff --git a/src/main/java/fr/insee/genesis/controller/rest/CommonApiResponse.java b/src/main/java/fr/insee/genesis/controller/rest/CommonApiResponse.java index 27d053a0..4d893aea 100644 --- a/src/main/java/fr/insee/genesis/controller/rest/CommonApiResponse.java +++ b/src/main/java/fr/insee/genesis/controller/rest/CommonApiResponse.java @@ -1,14 +1,11 @@ package fr.insee.genesis.controller.rest; import io.swagger.v3.oas.annotations.responses.ApiResponse; -import io.swagger.v3.oas.annotations.responses.ApiResponses; -@ApiResponses({ - @ApiResponse(responseCode = "400", description = "Invalid request parameters"), - @ApiResponse(responseCode = "401", description = "Unauthorized"), - @ApiResponse(responseCode = "403", description = "Forbidden"), - @ApiResponse(responseCode = "404", description = "Requested resource not found"), - @ApiResponse(responseCode = "500", description = "Internal server error") -}) +@ApiResponse(responseCode = "400", description = "Invalid request parameters") +@ApiResponse(responseCode = "401", description = "Unauthorized") +@ApiResponse(responseCode = "403", description = "Forbidden") +@ApiResponse(responseCode = "404", description = "Requested resource not found") +@ApiResponse(responseCode = "500", description = "Internal server error") public interface CommonApiResponse { } diff --git a/src/main/java/fr/insee/genesis/domain/service/metadata/QuestionnaireMetadataService.java b/src/main/java/fr/insee/genesis/domain/service/metadata/QuestionnaireMetadataService.java index 92c035fe..cc172e0a 100644 --- a/src/main/java/fr/insee/genesis/domain/service/metadata/QuestionnaireMetadataService.java +++ b/src/main/java/fr/insee/genesis/domain/service/metadata/QuestionnaireMetadataService.java @@ -102,11 +102,6 @@ private MetadataModel readMetadatas(String campaignName, String modeName, FileUt } } -/* // Adding Eno variables if necessary - // For review : not sure if this the best way to do it - for (String enoVar : Arrays.stream(Constants.getEnoVariables()).toList()){ - variablesMap.putVariable(new Variable(enoVar, )); - }*/ if(!errors.isEmpty()){ throw new GenesisException(404, errors.getLast().getMessage()); } diff --git a/src/main/java/fr/insee/genesis/domain/service/rawdata/LunaticJsonRawDataService.java b/src/main/java/fr/insee/genesis/domain/service/rawdata/LunaticJsonRawDataService.java index 2d73a633..07aa8b67 100644 --- a/src/main/java/fr/insee/genesis/domain/service/rawdata/LunaticJsonRawDataService.java +++ b/src/main/java/fr/insee/genesis/domain/service/rawdata/LunaticJsonRawDataService.java @@ -139,25 +139,14 @@ public DataProcessResult processRawData(String campaignName, List interr //Increment data count dataCount += surveyUnitModels.size(); - formattedDataCount += surveyUnitModels.stream().filter( - surveyUnitModel -> surveyUnitModel.getState().equals(DataState.FORMATTED) - ).toList().size(); + formattedDataCount += surveyUnitModels.stream() + .filter(surveyUnitModel -> surveyUnitModel.getState().equals(DataState.FORMATTED)) + .toList() + .size(); //Send processed ids grouped by questionnaire (if review activated) if(dataProcessingContext != null && dataProcessingContext.isWithReview()) { - try { - ResponseEntity response = - surveyUnitQualityToolPort.sendProcessedIds(getProcessedIdsMap(surveyUnitModels)); - - if (response.getStatusCode().is2xxSuccessful()) { - log.info("Successfully sent {} ids to quality tool", getProcessedIdsMap(surveyUnitModels).keySet().size()); - }else{ - log.warn("Survey unit quality tool responded non-2xx code {} and body {}", - response.getStatusCode(), response.getBody()); - } - }catch (IOException e){ - log.error("Error during Perret call request building : {}", e.toString()); - } + sendProcessedIdsToQualityTool(surveyUnitModels); } //Remove processed ids from list @@ -169,6 +158,22 @@ public DataProcessResult processRawData(String campaignName, List interr return new DataProcessResult(dataCount, formattedDataCount); } + private void sendProcessedIdsToQualityTool(List surveyUnitModels) { + try { + ResponseEntity response = + surveyUnitQualityToolPort.sendProcessedIds(getProcessedIdsMap(surveyUnitModels)); + + if (response.getStatusCode().is2xxSuccessful()) { + log.info("Successfully sent {} ids to quality tool", getProcessedIdsMap(surveyUnitModels).size()); + }else{ + log.warn("Survey unit quality tool responded non-2xx code {} and body {}", + response.getStatusCode(), response.getBody()); + } + }catch (IOException e){ + log.error("Error during Perret call request building : {}", e.toString()); + } + } + private Map> getProcessedIdsMap(List surveyUnitModels) { Map> processedInterrogationIdsPerQuestionnaire = new HashMap<>(); surveyUnitModels.forEach(model -> @@ -186,24 +191,12 @@ public List convertRawData(List rawDat //For each possible data state (we receive COLLECTED or EDITED) for(DataState dataState : List.of(DataState.COLLECTED,DataState.EDITED)){ for (LunaticJsonRawDataModel rawData : rawDataList) { - RawDataModelType rawDataModelType = - rawData.data().containsKey("data") ? - RawDataModelType.FILIERE : - RawDataModelType.DEFAULT; + RawDataModelType rawDataModelType = getRawDataModelType(rawData); //Get optional fields - String contextualId = null; - Boolean isCapturedIndirectly = null; - LocalDateTime validationDate = null; - try{ - contextualId = rawData.data().get("contextualId") == null ? null : rawData.data().get("contextualId").toString(); - isCapturedIndirectly = rawData.data().get("isCapturedIndirectly") == null ? null : - Boolean.parseBoolean(rawData.data().get("isCapturedIndirectly").toString()); - validationDate = rawData.data().get("validationDate") == null ? null : - LocalDateTime.parse(rawData.data().get("validationDate").toString()); - }catch(Exception e){ - log.warn("Exception during optional fields parsing : %s".formatted(e.toString())); - } + String contextualId = getContextualId(rawData); + Boolean isCapturedIndirectly = getIsCapturedIndirectly(rawData); + LocalDateTime validationDate = getValidationDate(rawData); SurveyUnitModel surveyUnitModel = SurveyUnitModel.builder() .campaignId(rawData.campaignId()) @@ -225,17 +218,18 @@ public List convertRawData(List rawDat convertRawDataCollectedVariables(rawData, surveyUnitModel, dataState, rawDataModelType, variablesMap); //External variables conversion into COLLECTED document - if(dataState.equals(DataState.COLLECTED)){ + if(dataState == DataState.COLLECTED){ convertRawDataExternalVariables(rawData, surveyUnitModel, rawDataModelType, variablesMap); } - if(surveyUnitModel.getCollectedVariables().isEmpty() - && surveyUnitModel.getExternalVariables().isEmpty() - ){ + boolean hasNoVariable = surveyUnitModel.getCollectedVariables().isEmpty() + && surveyUnitModel.getExternalVariables().isEmpty(); + + if(hasNoVariable){ if(surveyUnitModel.getState() == DataState.COLLECTED){ log.warn("No collected or external variable for interrogation {}, raw data is ignored.", rawData.interrogationId()); } - continue; + continue;// don't add suModel } surveyUnitModels.add(surveyUnitModel); } @@ -244,6 +238,42 @@ public List convertRawData(List rawDat return surveyUnitModels; } + private static RawDataModelType getRawDataModelType(LunaticJsonRawDataModel rawData) { + return rawData.data().containsKey("data") ? + RawDataModelType.FILIERE : + RawDataModelType.DEFAULT; + } + + private static LocalDateTime getValidationDate(LunaticJsonRawDataModel rawData) { + try{ + return rawData.data().get("validationDate") == null ? null : + LocalDateTime.parse(rawData.data().get("validationDate").toString()); + }catch(Exception e){ + log.warn("Exception when parsing validation date : {}}",e.toString()); + return null; + } + } + + private static Boolean getIsCapturedIndirectly(LunaticJsonRawDataModel rawData) { + try{ + return rawData.data().get("isCapturedIndirectly") == null ? null : + Boolean.parseBoolean(rawData.data().get("isCapturedIndirectly").toString()); + }catch(Exception e){ + log.warn("Exception when parsing isCapturedIndirectly : {}}",e.toString()); + return Boolean.FALSE; + } + + } + + private static String getContextualId(LunaticJsonRawDataModel rawData) { + try{ + return rawData.data().get("contextualId") == null ? null : rawData.data().get("contextualId").toString(); + }catch(Exception e){ + log.warn("Exception when parsing contextual id : {}}",e.toString()); + return null; + } + } + @Override public List getUnprocessedDataIds() { List dtos = new ArrayList<>(); @@ -333,22 +363,34 @@ private void convertRawDataCollectedVariables( } - private static void convertToCollectedVar(SurveyUnitModel dstSurveyUnitModel, DataState dataState, VariablesMap variablesMap, Map collectedMap) { - for(Map.Entry collectedVariable : collectedMap.entrySet()) { + private static void convertToCollectedVar( + SurveyUnitModel dstSurveyUnitModel, + DataState dataState, + VariablesMap variablesMap, + Map collectedMap + ) { + final String stateKey = dataState.toString(); + final var dest = dstSurveyUnitModel.getCollectedVariables(); - //Skip if collected variable does not have state - if(!JsonUtils.asMap(collectedVariable.getValue()).containsKey(dataState.toString())){ - continue; - } + for (Map.Entry collectedVariable : collectedMap.entrySet()) { + // Map for this variable (COLLECTED/EDITED -> value) + Map states = JsonUtils.asMap(collectedVariable.getValue()); - //Value - Object valuesForState = JsonUtils.asMap(collectedVariable.getValue()).get(dataState.toString()); - if (valuesForState != null) { - if (valuesForState instanceof List) { - convertListVar(valuesForState, collectedVariable, variablesMap, dstSurveyUnitModel.getCollectedVariables()); - continue; + // nothing if no state + if (states.containsKey(stateKey)) { + Object value = states.get(stateKey); + + // liste ? + if (value instanceof List) { + // on garde exactement ta signature existante + convertListVar(value, collectedVariable, variablesMap, dest); + } + + // scalaire non null ? + if (value != null && !(value instanceof List)) { + // idem: on garde convertOneVar(entry, String, ...) + convertOneVar(collectedVariable, String.valueOf(value), variablesMap, 1, dest); } - convertOneVar(collectedVariable, valuesForState.toString(), variablesMap, 1, dstSurveyUnitModel.getCollectedVariables()); } } } diff --git a/src/main/java/fr/insee/genesis/domain/service/surveyunit/SurveyUnitService.java b/src/main/java/fr/insee/genesis/domain/service/surveyunit/SurveyUnitService.java index e76e17ec..dceced3f 100644 --- a/src/main/java/fr/insee/genesis/domain/service/surveyunit/SurveyUnitService.java +++ b/src/main/java/fr/insee/genesis/domain/service/surveyunit/SurveyUnitService.java @@ -289,7 +289,7 @@ public List findDistinctInterrogationIdsByQuestionnaireIdAndDat /** * @author Adrien Marchal - * Calculations made to establish the data a worker will be responsible of, among the whole data to be processed. + * Calculations made to establish the data a worker will be responsible for, among the whole data to be processed. * (needed for distributed process / horizontal scaling) */ @Override @@ -544,18 +544,16 @@ private void extractVariables(SurveyUnitModel surveyUnitModel, for (VariableModel collectedVariable : surveyUnitModel.getCollectedVariables()) { VarIdScopeTuple loopIdTuple = new VarIdScopeTuple(collectedVariable.varId(), collectedVariable.scope(), collectedVariable.iteration()); - VariableDto variableDto = collectedVariableMap.get(loopIdTuple); - - //Create variable into map if not exists - if (variableDto == null) { - variableDto = VariableDto.builder() - .variableName(collectedVariable.varId()) - .scope(collectedVariable.scope()) - .iteration(collectedVariable.iteration()) - .variableStateDtoList(new ArrayList<>()) - .build(); - collectedVariableMap.put(loopIdTuple, variableDto); - } + + VariableDto variableDto = collectedVariableMap.computeIfAbsent(loopIdTuple, k -> + VariableDto.builder() + .variableName(collectedVariable.varId()) + .scope(collectedVariable.scope()) + .iteration(collectedVariable.iteration()) + .variableStateDtoList(new ArrayList<>()) + .build() + ); + //Extract variable state if (isMostRecentForSameState(surveyUnitModel, variableDto)) { variableDto.getVariableStateDtoList().add( @@ -577,18 +575,17 @@ private void extractVariables(SurveyUnitModel surveyUnitModel, } for(VariableModel externalVariable : surveyUnitModel.getExternalVariables()){ VarIdScopeTuple loopIdTuple = new VarIdScopeTuple(externalVariable.varId(), externalVariable.scope(), externalVariable.iteration()); - VariableDto variableDto = externalVariableMap.get(loopIdTuple); - - //Create variable into map if not exists - if(variableDto == null){ - variableDto = VariableDto.builder() - .variableName(externalVariable.varId()) - .scope(externalVariable.scope()) - .iteration(externalVariable.iteration()) - .variableStateDtoList(new ArrayList<>()) - .build(); - externalVariableMap.put(loopIdTuple, variableDto); - } + + VariableDto variableDto = externalVariableMap.computeIfAbsent(loopIdTuple, k -> + VariableDto.builder() + .variableName(externalVariable.varId()) + .scope(externalVariable.scope()) + .iteration(externalVariable.iteration()) + .variableStateDtoList(new ArrayList<>()) + .build() + ); + + //Extract variable state if(isMostRecentForSameState(surveyUnitModel, variableDto)){ variableDto.getVariableStateDtoList().add( diff --git a/src/main/java/fr/insee/genesis/infrastructure/adapter/SurveyQualityToolPerretAdapter.java b/src/main/java/fr/insee/genesis/infrastructure/adapter/SurveyQualityToolPerretAdapter.java index 38ea3d58..b1fabf54 100644 --- a/src/main/java/fr/insee/genesis/infrastructure/adapter/SurveyQualityToolPerretAdapter.java +++ b/src/main/java/fr/insee/genesis/infrastructure/adapter/SurveyQualityToolPerretAdapter.java @@ -2,8 +2,8 @@ import fr.insee.genesis.configuration.Config; import fr.insee.genesis.domain.ports.spi.SurveyUnitQualityToolPort; -import fr.insee.genesis.infrastructure.utils.http.OidcService; import fr.insee.genesis.infrastructure.utils.http.HttpUtils; +import fr.insee.genesis.infrastructure.utils.http.OidcService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; @@ -20,11 +20,14 @@ @Slf4j public class SurveyQualityToolPerretAdapter implements SurveyUnitQualityToolPort { - @Autowired - Config config; + private final Config config; + private final OidcService oidcService; @Autowired - OidcService oidcService; + public SurveyQualityToolPerretAdapter( Config config,OidcService oidcService) { + this.config = config; + this.oidcService = oidcService; + } @Override diff --git a/src/main/java/fr/insee/genesis/infrastructure/adapter/SurveyUnitMongoAdapter.java b/src/main/java/fr/insee/genesis/infrastructure/adapter/SurveyUnitMongoAdapter.java index f4115f47..3bbbe509 100644 --- a/src/main/java/fr/insee/genesis/infrastructure/adapter/SurveyUnitMongoAdapter.java +++ b/src/main/java/fr/insee/genesis/infrastructure/adapter/SurveyUnitMongoAdapter.java @@ -9,6 +9,7 @@ import fr.insee.genesis.infrastructure.document.surveyunit.SurveyUnitDocument; import fr.insee.genesis.infrastructure.mappers.SurveyUnitDocumentMapper; import fr.insee.genesis.infrastructure.repository.SurveyUnitMongoDBRepository; +import jakarta.validation.constraints.NotNull; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; @@ -28,7 +29,8 @@ @Qualifier("surveyUnitMongoAdapter") public class SurveyUnitMongoAdapter implements SurveyUnitPersistencePort { - private final SurveyUnitMongoDBRepository mongoRepository; + public static final String QUESTIONNAIRE_ID = "questionnaireId"; + private final SurveyUnitMongoDBRepository mongoRepository; private final MongoTemplate mongoTemplate; @Autowired @@ -100,18 +102,7 @@ public Set findQuestionnaireIdsByCampaignId(String campaignId){ mongoRepository.findQuestionnaireIdsByCampaignId(campaignId); //Extract questionnaireIds from JSON response - Set questionnaireIds = new HashSet<>(); - for(String line : mongoResponse){ - ObjectMapper objectMapper = new ObjectMapper().findAndRegisterModules(); - try{ - JsonNode jsonNode = objectMapper.readTree(line); - questionnaireIds.add(jsonNode.get("questionnaireId").asText()); - }catch (JsonProcessingException e){ - log.error(e.getMessage()); - } - } - - return questionnaireIds; + return extractQuestionnaireIdsFromJson(mongoResponse); } //========= OPTIMISATIONS PERFS (START) ========== @@ -124,20 +115,23 @@ public Set findQuestionnaireIdsByCampaignIdV2(String campaignId){ mongoRepository.findQuestionnaireIdsByCampaignIdV2(campaignId); //Extract questionnaireIds from JSON response - Set questionnaireIds = new HashSet<>(); - for(String line : mongoResponse){ - ObjectMapper objectMapper = new ObjectMapper().findAndRegisterModules(); - try{ - JsonNode jsonNode = objectMapper.readTree(line); - questionnaireIds.add(jsonNode.get("questionnaireId").asText()); - }catch (JsonProcessingException e){ - log.error(e.getMessage()); - } - } - - return questionnaireIds; + return extractQuestionnaireIdsFromJson(mongoResponse); } - //========= OPTIMISATIONS PERFS (END) ========== + + private static @NotNull Set extractQuestionnaireIdsFromJson(Set mongoResponse) { + Set questionnaireIds = new HashSet<>(); + for(String line : mongoResponse){ + ObjectMapper objectMapper = new ObjectMapper().findAndRegisterModules(); + try{ + JsonNode jsonNode = objectMapper.readTree(line); + questionnaireIds.add(jsonNode.get(QUESTIONNAIRE_ID).asText()); + }catch (JsonProcessingException e){ + log.error(e.getMessage()); + } + } + return questionnaireIds; + } + //========= OPTIMISATIONS PERFS (END) ========== @Override public Set findDistinctCampaignIds() { @@ -202,7 +196,7 @@ public long countByCampaignId(String campaignId){ public Set findDistinctQuestionnaireIds() { Set questionnaireIds = new HashSet<>(); for(String questionnaireId : mongoTemplate.getCollection(Constants.MONGODB_RESPONSE_COLLECTION_NAME).distinct( - "questionnaireId", + QUESTIONNAIRE_ID, String.class)){ questionnaireIds.add(questionnaireId); } @@ -214,7 +208,7 @@ public Set findCampaignIdsByQuestionnaireId(String questionnaireId) { List mongoResponse = mongoRepository.findCampaignIdsByQuestionnaireId(questionnaireId).stream().distinct().toList(); - //Extract idCampagigns from JSON response + //Extract idCampaigns from JSON response Set campaignIds = new HashSet<>(); for(String line : mongoResponse){ ObjectMapper objectMapper = new ObjectMapper().findAndRegisterModules(); diff --git a/src/main/java/fr/insee/genesis/infrastructure/utils/http/PerretAuthWebClientFilter.java b/src/main/java/fr/insee/genesis/infrastructure/utils/http/PerretAuthWebClientFilter.java index c9842068..7fa420d0 100644 --- a/src/main/java/fr/insee/genesis/infrastructure/utils/http/PerretAuthWebClientFilter.java +++ b/src/main/java/fr/insee/genesis/infrastructure/utils/http/PerretAuthWebClientFilter.java @@ -1,5 +1,6 @@ package fr.insee.genesis.infrastructure.utils.http; +import lombok.experimental.UtilityClass; import lombok.extern.slf4j.Slf4j; import org.springframework.web.reactive.function.client.ClientRequest; import org.springframework.web.reactive.function.client.ExchangeFilterFunction; @@ -8,6 +9,7 @@ import java.io.IOException; @Slf4j +@UtilityClass public class PerretAuthWebClientFilter { public static ExchangeFilterFunction perretAuthFilter(OidcService oidcService) { return ExchangeFilterFunction.ofRequestProcessor(request -> { diff --git a/src/test/java/cucumber/TestConstants.java b/src/test/java/cucumber/TestConstants.java index 7b49456a..f0f89cd2 100644 --- a/src/test/java/cucumber/TestConstants.java +++ b/src/test/java/cucumber/TestConstants.java @@ -5,13 +5,5 @@ */ public class TestConstants { - public static final String TEST_RESOURCES_DIRECTORY = "src/test/resources"; - //Functional tests - public static final String FUNCTIONAL_TESTS_INPUT_DIRECTORY = TEST_RESOURCES_DIRECTORY + "/IN"; - public static final String FUNCTIONAL_TESTS_WEB_DIRECTORY = FUNCTIONAL_TESTS_INPUT_DIRECTORY + "/WEB"; - public static final String FUNCTIONAL_TESTS_DDI_DIRECTORY = TEST_RESOURCES_DIRECTORY + "/specs"; - public static final String FUNCTIONAL_TESTS_TEMP_DIRECTORY = TEST_RESOURCES_DIRECTORY + "/functional_tests/temp"; - public static final String FUNCTIONAL_TESTS_OUTPUT_DIRECTORY = TEST_RESOURCES_DIRECTORY + "/functional_tests/out"; - public static final String FUNCTIONAL_TESTS_API_URL = "http://localhost:8080"; } diff --git a/src/test/java/cucumber/functional_tests/MainDefinitions.java b/src/test/java/cucumber/functional_tests/MainDefinitions.java index bcba36fb..f0dbb2dc 100644 --- a/src/test/java/cucumber/functional_tests/MainDefinitions.java +++ b/src/test/java/cucumber/functional_tests/MainDefinitions.java @@ -1,9 +1,9 @@ package cucumber.functional_tests; -import cucumber.TestConstants; import fr.insee.bpm.exceptions.MetadataParserException; import fr.insee.bpm.metadata.model.MetadataModel; import fr.insee.bpm.metadata.reader.ddi.DDIReader; +import fr.insee.genesis.TestConstants; import fr.insee.genesis.configuration.Config; import fr.insee.genesis.controller.adapter.LunaticXmlAdapter; import fr.insee.genesis.controller.dto.SurveyUnitQualityToolDto; diff --git a/src/test/java/fr/insee/genesis/RunCucumberTest.java b/src/test/java/fr/insee/genesis/RunCucumberTest.java deleted file mode 100644 index 559d71cc..00000000 --- a/src/test/java/fr/insee/genesis/RunCucumberTest.java +++ /dev/null @@ -1,16 +0,0 @@ -package fr.insee.genesis; - -import io.cucumber.junit.Cucumber; -import io.cucumber.junit.CucumberOptions; -import org.junit.runner.RunWith; -import org.springframework.boot.test.context.SpringBootTest; - -@RunWith(Cucumber.class) -@SpringBootTest(classes = GenesisApi.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) -@CucumberOptions( - features = "src/test/resources/fr/insee/genesis/features", - glue = {"cucumber.functional_tests", "cucumber.config"}, - plugin = {"pretty"} -) -public class RunCucumberTest { -} \ No newline at end of file diff --git a/src/test/java/fr/insee/genesis/TestConstants.java b/src/test/java/fr/insee/genesis/TestConstants.java index 4faa5407..007ce24b 100644 --- a/src/test/java/fr/insee/genesis/TestConstants.java +++ b/src/test/java/fr/insee/genesis/TestConstants.java @@ -10,4 +10,12 @@ public class TestConstants { public static final String DEFAULT_INTERROGATION_ID = "TESTINTERROGATIONID"; public static final String DEFAULT_QUESTIONNAIRE_ID = "TESTQUESTIONNAIREID"; + + //Functional tests + public static final String FUNCTIONAL_TESTS_INPUT_DIRECTORY = TEST_RESOURCES_DIRECTORY + "/IN"; + public static final String FUNCTIONAL_TESTS_WEB_DIRECTORY = FUNCTIONAL_TESTS_INPUT_DIRECTORY + "/WEB"; + public static final String FUNCTIONAL_TESTS_DDI_DIRECTORY = TEST_RESOURCES_DIRECTORY + "/specs"; + public static final String FUNCTIONAL_TESTS_TEMP_DIRECTORY = TEST_RESOURCES_DIRECTORY + "/functional_tests/temp"; + public static final String FUNCTIONAL_TESTS_OUTPUT_DIRECTORY = TEST_RESOURCES_DIRECTORY + "/functional_tests/out"; + public static final String FUNCTIONAL_TESTS_API_URL = "http://localhost:8080"; } diff --git a/src/test/java/fr/insee/genesis/controller/rest/DataProcessingContextControllerTest.java b/src/test/java/fr/insee/genesis/controller/rest/DataProcessingContextControllerTest.java index 606538ef..7a0c9e19 100644 --- a/src/test/java/fr/insee/genesis/controller/rest/DataProcessingContextControllerTest.java +++ b/src/test/java/fr/insee/genesis/controller/rest/DataProcessingContextControllerTest.java @@ -1,8 +1,7 @@ package fr.insee.genesis.controller.rest; - -import cucumber.TestConstants; import fr.insee.genesis.Constants; +import fr.insee.genesis.TestConstants; import fr.insee.genesis.domain.model.context.DataProcessingContextModel; import fr.insee.genesis.domain.model.context.schedule.KraftwerkExecutionSchedule; import fr.insee.genesis.domain.model.context.schedule.ServiceToCall; diff --git a/src/test/java/fr/insee/genesis/controller/rest/UtilsControllerTest.java b/src/test/java/fr/insee/genesis/controller/rest/UtilsControllerTest.java index 7e2b2a30..aad43cb1 100644 --- a/src/test/java/fr/insee/genesis/controller/rest/UtilsControllerTest.java +++ b/src/test/java/fr/insee/genesis/controller/rest/UtilsControllerTest.java @@ -1,7 +1,8 @@ package fr.insee.genesis.controller.rest; -import cucumber.TestConstants; + import fr.insee.genesis.Constants; +import fr.insee.genesis.TestConstants; import fr.insee.genesis.controller.utils.ControllerUtils; import fr.insee.genesis.domain.model.surveyunit.DataState; import fr.insee.genesis.domain.model.surveyunit.InterrogationId; diff --git a/src/test/java/fr/insee/genesis/controller/rest/responses/ContextualVariableControllerTest.java b/src/test/java/fr/insee/genesis/controller/rest/responses/ContextualVariableControllerTest.java index bd89d9b9..b1c8490b 100644 --- a/src/test/java/fr/insee/genesis/controller/rest/responses/ContextualVariableControllerTest.java +++ b/src/test/java/fr/insee/genesis/controller/rest/responses/ContextualVariableControllerTest.java @@ -17,11 +17,13 @@ import fr.insee.genesis.stubs.ContextualPreviousVariablePersistancePortStub; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; -import org.assertj.core.api.Assertions; +import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; import org.junit.jupiter.params.provider.ValueSource; import org.springframework.http.ResponseEntity; import org.springframework.util.FileSystemUtils; @@ -35,6 +37,8 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.function.Consumer; +import java.util.stream.Stream; @Slf4j class ContextualVariableControllerTest { @@ -97,8 +101,8 @@ void getContextualVariables_test() { if(!response.getStatusCode().is2xxSuccessful()){ log.error((String)response.getBody()); } - Assertions.assertThat(response.getStatusCode().is2xxSuccessful()).isTrue(); - Assertions.assertThat(response.getBody()).isInstanceOf(ContextualVariableModel.class); + Assertions.assertTrue(response.getStatusCode().is2xxSuccessful()); + Assertions.assertInstanceOf(ContextualVariableModel.class,response.getBody()); ContextualPreviousVariableDocument contextualPreviousVariableDocument = previousStub.getMongoStub().get(Constants.MONGODB_CONTEXTUAL_PREVIOUS_COLLECTION_NAME).stream().filter( contextualPreviousVariableDocument1 -> @@ -112,7 +116,8 @@ void getContextualVariables_test() { && contextualExternalVariableDocument1.getInterrogationId().equals(INTERROGATION_ID_1) ).toList().getFirst(); ContextualVariableModel contextualVariableModel = (ContextualVariableModel) response.getBody(); - Assertions.assertThat(contextualVariableModel.interrogationId()).isEqualTo(INTERROGATION_ID_1); + Assertions.assertNotNull(contextualVariableModel); + Assertions.assertEquals(INTERROGATION_ID_1,contextualVariableModel.interrogationId()); assertDocumentEqualToDto(contextualPreviousVariableDocument, contextualVariableModel); assertDocumentEqualToDto(contextualExternalVariableDocument, contextualVariableModel); } @@ -134,8 +139,8 @@ void getContextualVariables_test_no_external() { if(!response.getStatusCode().is2xxSuccessful()){ log.error((String)response.getBody()); } - Assertions.assertThat(response.getStatusCode().is2xxSuccessful()).isTrue(); - Assertions.assertThat(response.getBody()).isInstanceOf(ContextualVariableModel.class); + Assertions.assertTrue(response.getStatusCode().is2xxSuccessful()); + Assertions.assertInstanceOf(ContextualVariableModel.class,response.getBody()); ContextualPreviousVariableDocument contextualPreviousVariableDocument = previousStub.getMongoStub().get(Constants.MONGODB_CONTEXTUAL_PREVIOUS_COLLECTION_NAME).stream().filter( contextualPreviousVariableDocument1 -> @@ -144,9 +149,10 @@ void getContextualVariables_test_no_external() { ).toList().getFirst(); ContextualVariableModel contextualVariableModel = (ContextualVariableModel) response.getBody(); - Assertions.assertThat(contextualVariableModel.interrogationId()).isEqualTo(INTERROGATION_ID_2); + Assertions.assertEquals(INTERROGATION_ID_2,contextualVariableModel.interrogationId()); assertDocumentEqualToDto(contextualPreviousVariableDocument, contextualVariableModel); - Assertions.assertThat(contextualVariableModel.contextualExternal()).isNotNull().isEmpty(); + Assertions.assertNotNull(contextualVariableModel.contextualExternal()); + Assertions.assertTrue(contextualVariableModel.contextualExternal().isEmpty()); } @Test @@ -159,22 +165,32 @@ void getContextualVariables_test_not_found(){ INTERROGATION_ID_1); //THEN - Assertions.assertThat(response.getStatusCode().is2xxSuccessful()).isTrue(); - Assertions.assertThat(response.getBody()).isInstanceOf(ContextualVariableModel.class); + Assertions.assertTrue(response.getStatusCode().is2xxSuccessful()); + Assertions.assertInstanceOf(ContextualVariableModel.class,response.getBody()); ContextualVariableModel contextualVariableModel = (ContextualVariableModel) response.getBody(); - Assertions.assertThat(contextualVariableModel.interrogationId()).isEqualTo(INTERROGATION_ID_1); - Assertions.assertThat(contextualVariableModel.contextualPrevious()).isNotNull().isEmpty(); - Assertions.assertThat(contextualVariableModel.contextualExternal()).isNotNull().isEmpty(); + Assertions.assertEquals(INTERROGATION_ID_1,contextualVariableModel.interrogationId()); + Assertions.assertNotNull(contextualVariableModel.contextualPrevious()); + Assertions.assertTrue(contextualVariableModel.contextualPrevious().isEmpty()); + Assertions.assertNotNull(contextualVariableModel.contextualExternal()); + Assertions.assertTrue(contextualVariableModel.contextualExternal().isEmpty()); } //POST ALL FILES OF QUESTIONNAIRE - @Test @SneakyThrows - void saveContextualVariables_previous_test() { + @ParameterizedTest(name = "[{index}] saveContextualVariables - previous {0}") + @MethodSource("casesPrevious") + void saveContextualVariables_previous_test( + String interrogationId, + int expectedCollectionSize, + int expectedVarCount, + Consumer assertionsForDoc + ) { //GIVEN Files.createDirectories(SOURCE_PATH_PREVIOUS); Files.copy( - Path.of(TestConstants.TEST_RESOURCES_DIRECTORY).resolve("contextual_previous").resolve("ok.json"), + Path.of(TestConstants.TEST_RESOURCES_DIRECTORY) + .resolve("contextual_previous") + .resolve("ok.json"), SOURCE_PATH_PREVIOUS.resolve("ok.json"), StandardCopyOption.REPLACE_EXISTING ); @@ -183,70 +199,95 @@ void saveContextualVariables_previous_test() { ResponseEntity response = contextualVariableController.saveContextualVariables(QUESTIONNAIRE_ID_PREVIOUS); //THEN - Assertions.assertThat(response.getStatusCode().is2xxSuccessful()).isTrue(); - Assertions.assertThat(previousStub.getMongoStub().get(Constants.MONGODB_CONTEXTUAL_PREVIOUS_COLLECTION_NAME)).hasSize(2); + Assertions.assertTrue(response.getStatusCode().is2xxSuccessful()); + List previousVarDocumentList = previousStub.getMongoStub().get(Constants.MONGODB_CONTEXTUAL_PREVIOUS_COLLECTION_NAME); + Assertions.assertEquals(expectedCollectionSize,previousVarDocumentList.size()); - List filter = previousStub.getMongoStub().get(Constants.MONGODB_CONTEXTUAL_PREVIOUS_COLLECTION_NAME) - .stream().filter(doc -> doc.getInterrogationId().equals("AUTO104")).toList(); - Assertions.assertThat(filter).hasSize(1); - Assertions.assertThat(filter.getFirst().getSourceState()).isNull(); - Assertions.assertThat(filter.getFirst().getQuestionnaireId()).isEqualTo(QUESTIONNAIRE_ID_PREVIOUS); + List filter = + previousVarDocumentList + .stream() + .filter(doc -> doc.getInterrogationId().equals(interrogationId)).toList(); + Assertions.assertEquals(1,filter.size()); - Assertions.assertThat(filter.getFirst().getVariables()).hasSize(15); - assertVariable(filter.getFirst(), "TEXTECOURT", ""); - assertVariable(filter.getFirst(), "TEXTELONG", "test d'une donnée antérieure sur un texte long pour voir comment ça marche"); - assertVariable(filter.getFirst(), "FLOAT", 50.25d); - assertVariableNull(filter.getFirst(), "INTEGER"); - assertVariable(filter.getFirst(), "BOOLEEN", true); - assertVariable(filter.getFirst(), "DROPDOWN", "03"); - assertVariable(filter.getFirst(), "QCM_B1", true); - assertVariable(filter.getFirst(), "QCM_B2", false); - assertVariable(filter.getFirst(), "QCM_B4", true); - assertVariable(filter.getFirst(), "TABLEAU2A11", 200); - assertVariable(filter.getFirst(), "TABLEAU2A12", 150); - assertVariable(filter.getFirst(), "TABLEAU2A23", 1000); - assertVariableNull(filter.getFirst(), "TABLEAU2A24"); - assertVariable(filter.getFirst(), "TABOFATS1",0, "AA"); - assertVariable(filter.getFirst(), "TABOFATS1",1, ""); - assertVariable(filter.getFirst(), "TABOFATS1",2, "BB"); - assertVariable(filter.getFirst(), "TABOFATS1",3, "CC"); - assertVariable(filter.getFirst(), "TABOFATS3",0, 5); - assertVariableNull(filter.getFirst(), "TABOFATS3",1); - assertVariable(filter.getFirst(), "TABOFATS3",2, 3); + ContextualPreviousVariableDocument firstDocument = filter.getFirst(); + Assertions.assertNull(firstDocument.getSourceState()); + Assertions.assertEquals(QUESTIONNAIRE_ID_PREVIOUS,firstDocument.getQuestionnaireId()); - filter = previousStub.getMongoStub().get(Constants.MONGODB_CONTEXTUAL_PREVIOUS_COLLECTION_NAME) - .stream().filter(doc -> doc.getInterrogationId().equals("AUTO108")).toList(); - Assertions.assertThat(filter).hasSize(1); - Assertions.assertThat(filter.getFirst().getSourceState()).isNull(); - Assertions.assertThat(filter.getFirst().getQuestionnaireId()).isEqualTo(QUESTIONNAIRE_ID_PREVIOUS); + Assertions.assertEquals(expectedVarCount,firstDocument.getVariables().size()); - Assertions.assertThat(filter.getFirst().getVariables()).hasSize(14); - assertVariable(filter.getFirst(), "TEXTECOURT", "test previous"); - assertVariable(filter.getFirst(), "TEXTELONG", ""); - assertVariable(filter.getFirst(), "FLOAT", 12.2d); - assertVariable(filter.getFirst(), "BOOLEEN", false); - assertVariable(filter.getFirst(), "DROPDOWN", ""); - assertVariable(filter.getFirst(), "QCM_B1", false); - assertVariable(filter.getFirst(), "QCM_B2", false); - assertVariable(filter.getFirst(), "QCM_B5", true); - assertVariable(filter.getFirst(), "TABLEAU2A11", 1); - assertVariable(filter.getFirst(), "TABLEAU2A12", 2); - assertVariable(filter.getFirst(), "TABLEAU2A23", 3); - assertVariable(filter.getFirst(), "TABLEAU2A24",4); - assertVariable(filter.getFirst(), "TABOFATS1",0, "BB"); - assertVariable(filter.getFirst(), "TABOFATS1",1, "BB"); - assertVariable(filter.getFirst(), "TABOFATS3",0, 10); - assertVariable(filter.getFirst(), "TABOFATS3",1, 4); - assertVariable(filter.getFirst(), "TABOFATS3",2, 0); + // Assertions spécifiques au cas + assertionsForDoc.accept(firstDocument); + } + static Stream casesPrevious() { + return Stream.of( + Arguments.of( + "AUTO104", + /* expectedCollectionSize */ 2, + /* expectedVarCount */ 15, + (Consumer) doc -> { + assertVariable(doc, "TEXTECOURT", ""); + assertVariable(doc, "TEXTELONG", + "test d'une donnée antérieure sur un texte long pour voir comment ça marche"); + assertVariable(doc, "FLOAT", 50.25d); + assertVariableNull(doc, "INTEGER"); + assertVariable(doc, "BOOLEEN", true); + assertVariable(doc, "DROPDOWN", "03"); + assertVariable(doc, "QCM_B1", true); + assertVariable(doc, "QCM_B2", false); + assertVariable(doc, "QCM_B4", true); + assertVariable(doc, "TABLEAU2A11", 200); + assertVariable(doc, "TABLEAU2A12", 150); + assertVariable(doc, "TABLEAU2A23", 1000); + assertVariableNull(doc, "TABLEAU2A24"); + assertVariable(doc, "TABOFATS1", 0, "AA"); + assertVariable(doc, "TABOFATS1", 1, ""); + assertVariable(doc, "TABOFATS1", 2, "BB"); + assertVariable(doc, "TABOFATS1", 3, "CC"); + assertVariable(doc, "TABOFATS3", 0, 5); + assertVariableNull(doc, "TABOFATS3", 1); + assertVariable(doc, "TABOFATS3", 2, 3); + } + ), + Arguments.of( + "AUTO108", + /* expectedCollectionSize */ 2, + /* expectedVarCount */ 14, + (Consumer) doc -> { + assertVariable(doc, "TEXTECOURT", "test previous"); + assertVariable(doc, "TEXTELONG", ""); + assertVariable(doc, "FLOAT", 12.2d); + assertVariable(doc, "BOOLEEN", false); + assertVariable(doc, "DROPDOWN", ""); + assertVariable(doc, "QCM_B1", false); + assertVariable(doc, "QCM_B2", false); + assertVariable(doc, "QCM_B5", true); + assertVariable(doc, "TABLEAU2A11", 1); + assertVariable(doc, "TABLEAU2A12", 2); + assertVariable(doc, "TABLEAU2A23", 3); + assertVariable(doc, "TABLEAU2A24", 4); + assertVariable(doc, "TABOFATS1", 0, "BB"); + assertVariable(doc, "TABOFATS1", 1, "BB"); + assertVariable(doc, "TABOFATS3", 0, 10); + assertVariable(doc, "TABOFATS3", 1, 4); + assertVariable(doc, "TABOFATS3", 2, 0); + } + ) + ); } - @Test @SneakyThrows - void saveContextualVariables_external_test() { + @ParameterizedTest(name = "[{index}] saveContextualVariables_external - cas {0}") + @MethodSource("casesExternal") + void saveContextualVariables_external_test( String interrogationId, + int expectedCollectionSize, + int expectedVarCount, + Consumer assertionsForDoc) { //GIVEN Files.createDirectories(SOURCE_PATH_EXTERNAL); Files.copy( - Path.of(TestConstants.TEST_RESOURCES_DIRECTORY).resolve("contextual_external").resolve("ok.json"), + Path.of(TestConstants.TEST_RESOURCES_DIRECTORY) + .resolve("contextual_external") + .resolve("ok.json"), SOURCE_PATH_EXTERNAL.resolve("ok.json"), StandardCopyOption.REPLACE_EXISTING ); @@ -255,53 +296,71 @@ void saveContextualVariables_external_test() { ResponseEntity response = contextualVariableController.saveContextualVariables(QUESTIONNAIRE_ID_EXTERNAL); //THEN - Assertions.assertThat(response.getStatusCode().is2xxSuccessful()).isTrue(); - Assertions.assertThat(externalStub.getMongoStub().get(Constants.MONGODB_CONTEXTUAL_EXTERNAL_COLLECTION_NAME)).hasSize(2); + Assertions.assertTrue(response.getStatusCode().is2xxSuccessful()); + Assertions.assertEquals(expectedCollectionSize,externalStub.getMongoStub().get(Constants.MONGODB_CONTEXTUAL_EXTERNAL_COLLECTION_NAME).size()); List filter = externalStub.getMongoStub().get(Constants.MONGODB_CONTEXTUAL_EXTERNAL_COLLECTION_NAME) - .stream().filter(doc -> doc.getInterrogationId().equals("AUTO204")).toList(); - Assertions.assertThat(filter).hasSize(1); - - Assertions.assertThat(filter.getFirst().getQuestionnaireId()).isEqualTo(QUESTIONNAIRE_ID_EXTERNAL); - - Assertions.assertThat(filter.getFirst().getVariables()).hasSize(12); - assertVariable(filter.getFirst(), "TVA", 302.34d); - assertVariable(filter.getFirst(), "CA", 22.45d); - assertVariable(filter.getFirst(), "COM_AUTRE", "blablablabla"); - assertVariable(filter.getFirst(), "INTERRO_N_1", true); - assertVariable(filter.getFirst(), "INTERRO_N_2", false); - assertVariable(filter.getFirst(), "NAF25", "9560Y"); - assertVariable(filter.getFirst(), "POIDS", 1.25); - assertVariable(filter.getFirst(), "MILLESIME", "2024"); - assertVariable(filter.getFirst(), "NSUBST", true); - assertVariable(filter.getFirst(), "TAB_EXTNUM",0, 50); - assertVariable(filter.getFirst(), "TAB_EXTNUM",1, 23); - assertVariable(filter.getFirst(), "TAB_EXTNUM",2, 10); - assertVariableNull(filter.getFirst(), "TAB_EXTNUM",3); - assertVariable(filter.getFirst(), "TAB_EXTCAR",0, "A"); - assertVariable(filter.getFirst(), "TAB_EXTCAR",1, ""); - assertVariable(filter.getFirst(), "TAB_EXTCAR",2, "B"); - - filter = externalStub.getMongoStub().get(Constants.MONGODB_CONTEXTUAL_EXTERNAL_COLLECTION_NAME) - .stream().filter(doc -> doc.getInterrogationId().equals("AUTO208")).toList(); - Assertions.assertThat(filter).hasSize(1); - Assertions.assertThat(filter.getFirst().getQuestionnaireId()).isEqualTo(QUESTIONNAIRE_ID_EXTERNAL); - - Assertions.assertThat(filter.getFirst().getVariables()).hasSize(11); - assertVariable(filter.getFirst(), "TVA", ""); - assertVariable(filter.getFirst(), "COM_AUTRE", ""); - assertVariable(filter.getFirst(), "SECTEUR", "123456789"); - assertVariable(filter.getFirst(), "INTERRO_N_1", false); - assertVariable(filter.getFirst(), "INTERRO_N_2", false); - assertVariable(filter.getFirst(), "NAF25", "1014Z"); - assertVariable(filter.getFirst(), "POIDS", 12); - assertVariable(filter.getFirst(), "MILLESIME", "2024"); - assertVariable(filter.getFirst(), "NSUBST", false); - assertVariable(filter.getFirst(), "TAB_EXTNUM",0, 10); - assertVariable(filter.getFirst(), "TAB_EXTCAR",0, "C"); - assertVariable(filter.getFirst(), "TAB_EXTCAR",1, "C"); + .stream().filter(doc -> doc.getInterrogationId().equals(interrogationId)).toList(); + Assertions.assertEquals(1,filter.size()); + + ContextualExternalVariableDocument firstDoc = filter.getFirst(); + Assertions.assertEquals(QUESTIONNAIRE_ID_EXTERNAL, firstDoc.getQuestionnaireId()); + Assertions.assertEquals(expectedVarCount, firstDoc.getVariables().size()); + assertionsForDoc.accept(firstDoc); + } + static Stream casesExternal() { + return Stream.of( + Arguments.of( + "AUTO204", + /* expectedCollectionSize */ 2, + /* expectedVarCount */ 12, + (Consumer) doc -> { + assertVariable(doc, "TVA", 302.34d); + assertVariable(doc, "CA", 22.45d); + assertVariable(doc, "COM_AUTRE", "blablablabla"); + assertVariable(doc, "INTERRO_N_1", true); + assertVariable(doc, "INTERRO_N_2", false); + assertVariable(doc, "NAF25", "9560Y"); + assertVariable(doc, "POIDS", 1.25); + assertVariable(doc, "MILLESIME", "2024"); + assertVariable(doc, "NSUBST", true); + + assertVariable(doc, "TAB_EXTNUM", 0, 50); + assertVariable(doc, "TAB_EXTNUM", 1, 23); + assertVariable(doc, "TAB_EXTNUM", 2, 10); + assertVariableNull(doc, "TAB_EXTNUM", 3); + + assertVariable(doc, "TAB_EXTCAR", 0, "A"); + assertVariable(doc, "TAB_EXTCAR", 1, ""); + assertVariable(doc, "TAB_EXTCAR", 2, "B"); + } + ), + Arguments.of( + "AUTO208", + /* expectedCollectionSize */ 2, + /* expectedVarCount */ 11, + (Consumer) doc -> { + assertVariable(doc, "TVA", ""); + assertVariable(doc, "COM_AUTRE", ""); + assertVariable(doc, "SECTEUR", "123456789"); + assertVariable(doc, "INTERRO_N_1", false); + assertVariable(doc, "INTERRO_N_2", false); + assertVariable(doc, "NAF25", "1014Z"); + assertVariable(doc, "POIDS", 12); + assertVariable(doc, "MILLESIME", "2024"); + assertVariable(doc, "NSUBST", false); + + assertVariable(doc, "TAB_EXTNUM", 0, 10); + assertVariable(doc, "TAB_EXTCAR", 0, "C"); + assertVariable(doc, "TAB_EXTCAR", 1, "C"); + } + ) + ); + } + + @Test @SneakyThrows void saveContextualVariables_random_json_test() { @@ -317,9 +376,13 @@ void saveContextualVariables_random_json_test() { ResponseEntity response = contextualVariableController.saveContextualVariables(QUESTIONNAIRE_ID_EXTERNAL); //THEN - Assertions.assertThat(response.getStatusCode().is2xxSuccessful()).isTrue(); - Assertions.assertThat(externalStub.getMongoStub().get(Constants.MONGODB_CONTEXTUAL_EXTERNAL_COLLECTION_NAME)).isEmpty(); - } + Assertions.assertTrue(response.getStatusCode().is2xxSuccessful()); + Assertions.assertTrue( + externalStub.getMongoStub() + .get(Constants.MONGODB_CONTEXTUAL_EXTERNAL_COLLECTION_NAME) + .isEmpty(), + "MONGODB_CONTEXTUAL_EXTERNAL_COLLECTION_NAME should be empty" + ); } //PREVIOUS @Test @@ -348,19 +411,20 @@ private void testOKCase(String sourceState) throws IOException { contextualVariableController.readContextualPreviousJson(QUESTIONNAIRE_ID_PREVIOUS, Mode.WEB, sourceState, "ok.json"); //THEN - Assertions.assertThat(previousStub.getMongoStub().get(Constants.MONGODB_CONTEXTUAL_PREVIOUS_COLLECTION_NAME)).hasSize(2); + Assertions.assertEquals(2,previousStub.getMongoStub().get(Constants.MONGODB_CONTEXTUAL_PREVIOUS_COLLECTION_NAME).size()); List filter = previousStub.getMongoStub().get(Constants.MONGODB_CONTEXTUAL_PREVIOUS_COLLECTION_NAME) .stream().filter(doc -> doc.getInterrogationId().equals("AUTO104")).toList(); - Assertions.assertThat(filter).hasSize(1); + Assertions.assertEquals(1,filter.size()); if(sourceState == null){ - Assertions.assertThat(filter.getFirst().getSourceState()).isNull(); + Assertions.assertNull(filter.getFirst().getSourceState()); }else{ - Assertions.assertThat(filter.getFirst().getSourceState()).isNotNull().isEqualTo(sourceState); + Assertions.assertNotNull(filter.getFirst().getSourceState()); + Assertions.assertEquals(sourceState, filter.getFirst().getSourceState()); } - Assertions.assertThat(filter.getFirst().getQuestionnaireId()).isEqualTo(QUESTIONNAIRE_ID_PREVIOUS); + Assertions.assertEquals(QUESTIONNAIRE_ID_PREVIOUS,filter.getFirst().getQuestionnaireId()); - Assertions.assertThat(filter.getFirst().getVariables()).hasSize(15); + Assertions.assertEquals(15,filter.getFirst().getVariables().size()); assertVariable(filter.getFirst(), "TEXTECOURT", ""); assertVariable(filter.getFirst(), "TEXTELONG", "test d'une donnée antérieure sur un texte long pour voir comment ça marche"); assertVariable(filter.getFirst(), "FLOAT", 50.25d); @@ -384,15 +448,16 @@ private void testOKCase(String sourceState) throws IOException { filter = previousStub.getMongoStub().get(Constants.MONGODB_CONTEXTUAL_PREVIOUS_COLLECTION_NAME) .stream().filter(doc -> doc.getInterrogationId().equals("AUTO108")).toList(); - Assertions.assertThat(filter).hasSize(1); + Assertions.assertEquals(1,filter.size()); if(sourceState == null){ - Assertions.assertThat(filter.getFirst().getSourceState()).isNull(); + Assertions.assertNull(filter.getFirst().getSourceState()); }else{ - Assertions.assertThat(filter.getFirst().getSourceState()).isNotNull().isEqualTo(sourceState); + Assertions.assertNotNull(filter.getFirst().getSourceState()); + Assertions.assertEquals(sourceState, filter.getFirst().getSourceState()); } - Assertions.assertThat(filter.getFirst().getQuestionnaireId()).isEqualTo(QUESTIONNAIRE_ID_PREVIOUS); + Assertions.assertEquals(QUESTIONNAIRE_ID_PREVIOUS,filter.getFirst().getQuestionnaireId()); - Assertions.assertThat(filter.getFirst().getVariables()).hasSize(14); + Assertions.assertEquals(14,filter.getFirst().getVariables().size()); assertVariable(filter.getFirst(), "TEXTECOURT", "test previous"); assertVariable(filter.getFirst(), "TEXTELONG", ""); assertVariable(filter.getFirst(), "FLOAT", 12.2d); @@ -412,20 +477,25 @@ private void testOKCase(String sourceState) throws IOException { assertVariable(filter.getFirst(), "TABOFATS3",2, 0); } - @Test + @ParameterizedTest(name = "[{index}] readPreviousJson_override_interrogation_id — {0}") + @MethodSource("overridePreviousCases") @SneakyThrows - void readPreviousJson_override_interrogation_id(){ + void readPreviousJson_override_interrogation_id( String interrogationId, + int expectedVarCount, + Consumer assertionsForDoc){ //GIVEN Files.createDirectories(SOURCE_PATH_PREVIOUS); + Path path = Path.of(TestConstants.TEST_RESOURCES_DIRECTORY); Files.copy( - Path.of(TestConstants.TEST_RESOURCES_DIRECTORY).resolve("contextual_previous").resolve("ok.json"), + + path.resolve("contextual_previous").resolve("ok.json"), SOURCE_PATH_PREVIOUS.resolve("ok.json"), StandardCopyOption.REPLACE_EXISTING ); contextualVariableController.readContextualPreviousJson(QUESTIONNAIRE_ID_PREVIOUS, Mode.WEB, null, "ok.json"); Files.createDirectories(SOURCE_PATH_PREVIOUS); Files.copy( - Path.of(TestConstants.TEST_RESOURCES_DIRECTORY).resolve("contextual_previous").resolve("ok2.json"), + path.resolve("contextual_previous").resolve("ok2.json"), SOURCE_PATH_PREVIOUS.resolve("ok2.json"), StandardCopyOption.REPLACE_EXISTING ); @@ -434,63 +504,81 @@ void readPreviousJson_override_interrogation_id(){ contextualVariableController.readContextualPreviousJson(QUESTIONNAIRE_ID_PREVIOUS, Mode.WEB, null, "ok2.json"); //THEN - Assertions.assertThat(previousStub.getMongoStub().get(Constants.MONGODB_CONTEXTUAL_PREVIOUS_COLLECTION_NAME)).hasSize(2); + Assertions.assertEquals(2,previousStub.getMongoStub().get(Constants.MONGODB_CONTEXTUAL_PREVIOUS_COLLECTION_NAME).size()); List filter = previousStub.getMongoStub().get(Constants.MONGODB_CONTEXTUAL_PREVIOUS_COLLECTION_NAME) - .stream().filter(doc -> doc.getInterrogationId().equals("AUTO104")).toList(); - Assertions.assertThat(filter).hasSize(1); - Assertions.assertThat(filter.getFirst().getQuestionnaireId()).isEqualTo(QUESTIONNAIRE_ID_PREVIOUS); - - Assertions.assertThat(filter.getFirst().getVariables()).hasSize(15); - assertVariable(filter.getFirst(), "TEXTECOURT", ""); - assertVariable(filter.getFirst(), "TEXTELONG", "test d'une donnée antérieure sur un texte long pour voir comment ça marche"); - assertVariable(filter.getFirst(), "FLOAT", 50.25d); - assertVariableNull(filter.getFirst(), "INTEGER"); - assertVariable(filter.getFirst(), "BOOLEEN", true); - assertVariable(filter.getFirst(), "DROPDOWN", "03"); - assertVariable(filter.getFirst(), "QCM_B1", true); - assertVariable(filter.getFirst(), "QCM_B2", false); - assertVariable(filter.getFirst(), "QCM_B4", true); - assertVariable(filter.getFirst(), "TABLEAU2A11", 200); - assertVariable(filter.getFirst(), "TABLEAU2A12", 150); - assertVariable(filter.getFirst(), "TABLEAU2A23", 1000); - assertVariableNull(filter.getFirst(), "TABLEAU2A24"); - assertVariable(filter.getFirst(), "TABOFATS1",0, "AA"); - assertVariable(filter.getFirst(), "TABOFATS1",1, ""); - assertVariable(filter.getFirst(), "TABOFATS1",2, "BB"); - assertVariable(filter.getFirst(), "TABOFATS1",3, "CC"); - assertVariable(filter.getFirst(), "TABOFATS3",0, 5); - assertVariableNull(filter.getFirst(), "TABOFATS3",1); - assertVariable(filter.getFirst(), "TABOFATS3",2, 3); + .stream().filter(doc -> doc.getInterrogationId().equals(interrogationId)).toList(); + Assertions.assertEquals(1, filter.size()); + ContextualPreviousVariableDocument firstDoc = filter.getFirst(); + Assertions.assertEquals(QUESTIONNAIRE_ID_PREVIOUS, firstDoc.getQuestionnaireId()); + + Assertions.assertAll(interrogationId + " metadata", + () -> Assertions.assertEquals(QUESTIONNAIRE_ID_PREVIOUS, firstDoc.getQuestionnaireId()), + () -> Assertions.assertEquals(expectedVarCount, firstDoc.getVariables().size()) + ); - filter = previousStub.getMongoStub().get(Constants.MONGODB_CONTEXTUAL_PREVIOUS_COLLECTION_NAME) - .stream().filter(doc -> doc.getInterrogationId().equals("AUTO200")).toList(); - Assertions.assertThat(filter).hasSize(1); - Assertions.assertThat(filter.getFirst().getQuestionnaireId()).isEqualTo(QUESTIONNAIRE_ID_PREVIOUS); + assertionsForDoc.accept(firstDoc); + Assertions.assertTrue( + previousStub.getMongoStub().get(Constants.MONGODB_CONTEXTUAL_PREVIOUS_COLLECTION_NAME).stream() + .noneMatch(d -> "AUTO108".equals(d.getInterrogationId())), + "AUTO108 ne devrait plus être présent après override" + ); + } - Assertions.assertThat(filter.getFirst().getVariables()).hasSize(14); - assertVariable(filter.getFirst(), "TEXTECOURT", "test previous"); - assertVariable(filter.getFirst(), "TEXTELONG", ""); - assertVariable(filter.getFirst(), "FLOAT", 12.2d); - assertVariable(filter.getFirst(), "BOOLEEN", false); - assertVariable(filter.getFirst(), "DROPDOWN", ""); - assertVariable(filter.getFirst(), "QCM_B1", false); - assertVariable(filter.getFirst(), "QCM_B2", false); - assertVariable(filter.getFirst(), "QCM_B5", true); - assertVariable(filter.getFirst(), "TABLEAU2A11", 1); - assertVariable(filter.getFirst(), "TABLEAU2A12", 2); - assertVariable(filter.getFirst(), "TABLEAU2A23", 3); - assertVariable(filter.getFirst(), "TABLEAU2A24",4); - assertVariable(filter.getFirst(), "TABOFATS1",0, "BB"); - assertVariable(filter.getFirst(), "TABOFATS1",1, "BB"); - assertVariable(filter.getFirst(), "TABOFATS3",0, 10); - assertVariable(filter.getFirst(), "TABOFATS3",1, 4); - assertVariable(filter.getFirst(), "TABOFATS3",2, 0); - filter = previousStub.getMongoStub().get(Constants.MONGODB_CONTEXTUAL_PREVIOUS_COLLECTION_NAME) - .stream().filter(doc -> doc.getInterrogationId().equals("AUTO108")).toList(); - Assertions.assertThat(filter).isEmpty(); + static Stream overridePreviousCases() { + return Stream.of( + Arguments.of( + "AUTO104", + /* expectedVarCount */ 15, + (Consumer) doc -> { + assertVariable(doc, "TEXTECOURT", ""); + assertVariable(doc, "TEXTELONG", "test d'une donnée antérieure sur un texte long pour voir comment ça marche"); + assertVariable(doc, "FLOAT", 50.25d); + assertVariableNull(doc, "INTEGER"); + assertVariable(doc, "BOOLEEN", true); + assertVariable(doc, "DROPDOWN", "03"); + assertVariable(doc, "QCM_B1", true); + assertVariable(doc, "QCM_B2", false); + assertVariable(doc, "QCM_B4", true); + assertVariable(doc, "TABLEAU2A11", 200); + assertVariable(doc, "TABLEAU2A12", 150); + assertVariable(doc, "TABLEAU2A23", 1000); + assertVariableNull(doc, "TABLEAU2A24"); + assertVariable(doc, "TABOFATS1", 0, "AA"); + assertVariable(doc, "TABOFATS1", 1, ""); + assertVariable(doc, "TABOFATS1", 2, "BB"); + assertVariable(doc, "TABOFATS1", 3, "CC"); + assertVariable(doc, "TABOFATS3", 0, 5); + assertVariableNull(doc, "TABOFATS3", 1); + assertVariable(doc, "TABOFATS3", 2, 3); + } + ), + Arguments.of( + "AUTO200", + /* expectedVarCount */ 14, + (Consumer) doc -> { + assertVariable(doc, "TEXTECOURT", "test previous"); + assertVariable(doc, "TEXTELONG", ""); + assertVariable(doc, "FLOAT", 12.2d); + assertVariable(doc, "BOOLEEN", false); + assertVariable(doc, "DROPDOWN", ""); + assertVariable(doc, "QCM_B1", false); + assertVariable(doc, "QCM_B2", false); + assertVariable(doc, "QCM_B5", true); + assertVariable(doc, "TABLEAU2A11", 1); + assertVariable(doc, "TABLEAU2A12", 2); + assertVariable(doc, "TABLEAU2A23", 3); + assertVariable(doc, "TABLEAU2A24", 4); + assertVariable(doc, "TABOFATS1", 0, "BB"); + assertVariable(doc, "TABOFATS1", 1, "BB"); + assertVariable(doc, "TABOFATS3", 0, 10); + assertVariable(doc, "TABOFATS3", 1, 4); + assertVariable(doc, "TABOFATS3", 2, 0); + } + ) + ); } @ParameterizedTest @@ -509,7 +597,7 @@ void readPreviousJson_sourceState_too_long(String sourceState){ //WHEN + THEN ResponseEntity response = contextualVariableController.readContextualPreviousJson(QUESTIONNAIRE_ID_PREVIOUS, Mode.WEB, sourceState, fileName); - Assertions.assertThat(response.getStatusCode().value()).isEqualTo(400); + Assertions.assertEquals(400,response.getStatusCode().value()); } @Test @@ -527,7 +615,7 @@ void readPreviousJson_invalid_syntax(){ //WHEN + THEN ResponseEntity response = contextualVariableController.readContextualPreviousJson(QUESTIONNAIRE_ID_PREVIOUS, Mode.WEB, null, syntaxErrorFileName); - Assertions.assertThat(response.getStatusCode().value()).isEqualTo(400); + Assertions.assertEquals(400,response.getStatusCode().value()); } @Test @SneakyThrows @@ -544,7 +632,7 @@ void readPreviousJson_not_a_json(){ //WHEN + THEN ResponseEntity response = contextualVariableController.readContextualPreviousJson(QUESTIONNAIRE_ID_PREVIOUS, Mode.WEB, null, syntaxErrorFileName); - Assertions.assertThat(response.getStatusCode().value()).isEqualTo(400); + Assertions.assertEquals(400,response.getStatusCode().value()); } @@ -563,14 +651,16 @@ void readPreviousJson_no_interrogation_id(String fileName){ //WHEN + THEN ResponseEntity response = contextualVariableController.readContextualPreviousJson(QUESTIONNAIRE_ID_PREVIOUS, Mode.WEB, null, fileName); - Assertions.assertThat(response.getStatusCode().value()).isEqualTo(400); + Assertions.assertEquals(400,response.getStatusCode().value()); } //EXTERNAL - @Test - @SneakyThrows - void readExternalJson_test(){ + @ParameterizedTest(name = "[{index}] readExternalJson — {0}") + @MethodSource("readExternalCases") @SneakyThrows + void readExternalJson_test( String interrogationId, + int expectedVarCount, + Consumer assertionsForDoc){ //GIVEN Files.createDirectories(SOURCE_PATH_EXTERNAL); Files.copy( @@ -583,66 +673,86 @@ void readExternalJson_test(){ contextualVariableController.readContextualExternalJson(QUESTIONNAIRE_ID_EXTERNAL, Mode.WEB, "ok.json"); //THEN - Assertions.assertThat(externalStub.getMongoStub().get(Constants.MONGODB_CONTEXTUAL_EXTERNAL_COLLECTION_NAME)).hasSize(2); + Assertions.assertEquals(2,externalStub.getMongoStub().get(Constants.MONGODB_CONTEXTUAL_EXTERNAL_COLLECTION_NAME).size()); List filter = externalStub.getMongoStub().get(Constants.MONGODB_CONTEXTUAL_EXTERNAL_COLLECTION_NAME) - .stream().filter(doc -> doc.getInterrogationId().equals("AUTO204")).toList(); - Assertions.assertThat(filter).hasSize(1); - - Assertions.assertThat(filter.getFirst().getQuestionnaireId()).isEqualTo(QUESTIONNAIRE_ID_EXTERNAL); - - Assertions.assertThat(filter.getFirst().getVariables()).hasSize(12); - assertVariable(filter.getFirst(), "TVA", 302.34d); - assertVariable(filter.getFirst(), "CA", 22.45d); - assertVariable(filter.getFirst(), "COM_AUTRE", "blablablabla"); - assertVariable(filter.getFirst(), "INTERRO_N_1", true); - assertVariable(filter.getFirst(), "INTERRO_N_2", false); - assertVariable(filter.getFirst(), "NAF25", "9560Y"); - assertVariable(filter.getFirst(), "POIDS", 1.25); - assertVariable(filter.getFirst(), "MILLESIME", "2024"); - assertVariable(filter.getFirst(), "NSUBST", true); - assertVariable(filter.getFirst(), "TAB_EXTNUM",0, 50); - assertVariable(filter.getFirst(), "TAB_EXTNUM",1, 23); - assertVariable(filter.getFirst(), "TAB_EXTNUM",2, 10); - assertVariableNull(filter.getFirst(), "TAB_EXTNUM",3); - assertVariable(filter.getFirst(), "TAB_EXTCAR",0, "A"); - assertVariable(filter.getFirst(), "TAB_EXTCAR",1, ""); - assertVariable(filter.getFirst(), "TAB_EXTCAR",2, "B"); - - filter = externalStub.getMongoStub().get(Constants.MONGODB_CONTEXTUAL_EXTERNAL_COLLECTION_NAME) - .stream().filter(doc -> doc.getInterrogationId().equals("AUTO208")).toList(); - Assertions.assertThat(filter).hasSize(1); - Assertions.assertThat(filter.getFirst().getQuestionnaireId()).isEqualTo(QUESTIONNAIRE_ID_EXTERNAL); - - Assertions.assertThat(filter.getFirst().getVariables()).hasSize(11); - assertVariable(filter.getFirst(), "TVA", ""); - assertVariable(filter.getFirst(), "COM_AUTRE", ""); - assertVariable(filter.getFirst(), "SECTEUR", "123456789"); - assertVariable(filter.getFirst(), "INTERRO_N_1", false); - assertVariable(filter.getFirst(), "INTERRO_N_2", false); - assertVariable(filter.getFirst(), "NAF25", "1014Z"); - assertVariable(filter.getFirst(), "POIDS", 12); - assertVariable(filter.getFirst(), "MILLESIME", "2024"); - assertVariable(filter.getFirst(), "NSUBST", false); - assertVariable(filter.getFirst(), "TAB_EXTNUM",0, 10); - assertVariable(filter.getFirst(), "TAB_EXTCAR",0, "C"); - assertVariable(filter.getFirst(), "TAB_EXTCAR",1, "C"); + .stream().filter(doc -> doc.getInterrogationId().equals(interrogationId)).toList(); + Assertions.assertEquals(1,filter.size()); + + ContextualExternalVariableDocument firstDoc = filter.getFirst(); + Assertions.assertEquals(QUESTIONNAIRE_ID_EXTERNAL, firstDoc.getQuestionnaireId()); + Assertions.assertEquals(expectedVarCount, firstDoc.getVariables().size()); + assertionsForDoc.accept(firstDoc); } - @Test + + static Stream readExternalCases() { + return Stream.of( + Arguments.of( + "AUTO204", + /* expectedVarCount */ 12, + (Consumer) doc -> { + assertVariable(doc, "TVA", 302.34d); + assertVariable(doc, "CA", 22.45d); + assertVariable(doc, "COM_AUTRE", "blablablabla"); + assertVariable(doc, "INTERRO_N_1", true); + assertVariable(doc, "INTERRO_N_2", false); + assertVariable(doc, "NAF25", "9560Y"); + assertVariable(doc, "POIDS", 1.25); + assertVariable(doc, "MILLESIME", "2024"); + assertVariable(doc, "NSUBST", true); + + assertVariable(doc, "TAB_EXTNUM", 0, 50); + assertVariable(doc, "TAB_EXTNUM", 1, 23); + assertVariable(doc, "TAB_EXTNUM", 2, 10); + assertVariableNull(doc, "TAB_EXTNUM", 3); + + assertVariable(doc, "TAB_EXTCAR", 0, "A"); + assertVariable(doc, "TAB_EXTCAR", 1, ""); + assertVariable(doc, "TAB_EXTCAR", 2, "B"); + } + ), + Arguments.of( + "AUTO208", + /* expectedVarCount */ 11, + (Consumer) doc -> { + assertVariable(doc, "TVA", ""); + assertVariable(doc, "COM_AUTRE", ""); + assertVariable(doc, "SECTEUR", "123456789"); + assertVariable(doc, "INTERRO_N_1", false); + assertVariable(doc, "INTERRO_N_2", false); + assertVariable(doc, "NAF25", "1014Z"); + assertVariable(doc, "POIDS", 12); + assertVariable(doc, "MILLESIME", "2024"); + assertVariable(doc, "NSUBST", false); + + assertVariable(doc, "TAB_EXTNUM", 0, 10); + assertVariable(doc, "TAB_EXTCAR", 0, "C"); + assertVariable(doc, "TAB_EXTCAR", 1, "C"); + } + ) + ); + } + + @ParameterizedTest(name = "[{index}] readExternalJson_override_interrogation_id — {0}") + @MethodSource("overrideExternalCases") @SneakyThrows - void readExternalJson_override_interrogation_id(){ + void readExternalJson_override_interrogation_id( String interrogationId, + int expectedVarCount, + Consumer assertionsForDoc + ){ //GIVEN Files.createDirectories(SOURCE_PATH_EXTERNAL); + Path path = Path.of(TestConstants.TEST_RESOURCES_DIRECTORY); Files.copy( - Path.of(TestConstants.TEST_RESOURCES_DIRECTORY).resolve("contextual_external").resolve("ok.json"), + path.resolve("contextual_external").resolve("ok.json"), SOURCE_PATH_EXTERNAL.resolve("ok.json"), StandardCopyOption.REPLACE_EXISTING ); contextualVariableController.readContextualExternalJson(QUESTIONNAIRE_ID_EXTERNAL, Mode.WEB, "ok.json"); Files.createDirectories(SOURCE_PATH_EXTERNAL); Files.copy( - Path.of(TestConstants.TEST_RESOURCES_DIRECTORY).resolve("contextual_external").resolve("ok2.json"), + path.resolve("contextual_external").resolve("ok2.json"), SOURCE_PATH_EXTERNAL.resolve("ok2.json"), StandardCopyOption.REPLACE_EXISTING ); @@ -651,50 +761,72 @@ void readExternalJson_override_interrogation_id(){ contextualVariableController.readContextualExternalJson(QUESTIONNAIRE_ID_EXTERNAL, Mode.WEB, "ok2.json"); //THEN - Assertions.assertThat(externalStub.getMongoStub().get(Constants.MONGODB_CONTEXTUAL_EXTERNAL_COLLECTION_NAME)).hasSize(2); + Assertions.assertEquals(2,externalStub.getMongoStub().get(Constants.MONGODB_CONTEXTUAL_EXTERNAL_COLLECTION_NAME).size()); List filter = externalStub.getMongoStub().get(Constants.MONGODB_CONTEXTUAL_EXTERNAL_COLLECTION_NAME) - .stream().filter(doc -> doc.getInterrogationId().equals("AUTO204")).toList(); - Assertions.assertThat(filter).hasSize(1); - Assertions.assertThat(filter.getFirst().getQuestionnaireId()).isEqualTo(QUESTIONNAIRE_ID_EXTERNAL); - - Assertions.assertThat(filter.getFirst().getVariables()).hasSize(12); - assertVariable(filter.getFirst(), "TVA", 302.34d); - assertVariable(filter.getFirst(), "CA", 22.45d); - assertVariable(filter.getFirst(), "COM_AUTRE", "blablablabla"); - assertVariable(filter.getFirst(), "INTERRO_N_1", true); - assertVariable(filter.getFirst(), "INTERRO_N_2", false); - assertVariable(filter.getFirst(), "NAF25", "9560Y"); - assertVariable(filter.getFirst(), "POIDS", 1.25); - assertVariable(filter.getFirst(), "MILLESIME", "2024"); - assertVariable(filter.getFirst(), "NSUBST", true); - assertVariable(filter.getFirst(), "TAB_EXTNUM",0, 50); - assertVariable(filter.getFirst(), "TAB_EXTNUM",1, 23); - assertVariable(filter.getFirst(), "TAB_EXTNUM",2, 10); - assertVariableNull(filter.getFirst(), "TAB_EXTNUM",3); - assertVariable(filter.getFirst(), "TAB_EXTCAR",0, "A"); - assertVariable(filter.getFirst(), "TAB_EXTCAR",1, ""); - assertVariable(filter.getFirst(), "TAB_EXTCAR",2, "B"); - - filter = externalStub.getMongoStub().get(Constants.MONGODB_CONTEXTUAL_EXTERNAL_COLLECTION_NAME) - .stream().filter(doc -> doc.getInterrogationId().equals("AUTO200")).toList(); - Assertions.assertThat(filter).hasSize(1); - Assertions.assertThat(filter.getFirst().getQuestionnaireId()).isEqualTo(QUESTIONNAIRE_ID_EXTERNAL); - - Assertions.assertThat(filter.getFirst().getVariables()).hasSize(11); - assertVariable(filter.getFirst(), "TVA", ""); - assertVariable(filter.getFirst(), "COM_AUTRE", ""); - assertVariable(filter.getFirst(), "SECTEUR", "123456789"); - assertVariable(filter.getFirst(), "INTERRO_N_1", false); - assertVariable(filter.getFirst(), "INTERRO_N_2", false); - assertVariable(filter.getFirst(), "NAF25", "1014Z"); - assertVariable(filter.getFirst(), "POIDS", 12); - assertVariable(filter.getFirst(), "MILLESIME", "2024"); - assertVariable(filter.getFirst(), "NSUBST", false); - assertVariable(filter.getFirst(), "TAB_EXTNUM",0, 10); - assertVariable(filter.getFirst(), "TAB_EXTCAR",0, "C"); - assertVariable(filter.getFirst(), "TAB_EXTCAR",1, "C"); + .stream().filter(doc -> doc.getInterrogationId().equals(interrogationId)).toList(); + Assertions.assertEquals(1,filter.size()); + Assertions.assertEquals(QUESTIONNAIRE_ID_EXTERNAL,filter.getFirst().getQuestionnaireId()); + Assertions.assertEquals(expectedVarCount,filter.getFirst().getVariables().size()); + + assertionsForDoc.accept(filter.getFirst()); + + // L'ancien AUTO208 ne doit plus être présent + Assertions.assertTrue( + externalStub.getMongoStub().get(Constants.MONGODB_CONTEXTUAL_EXTERNAL_COLLECTION_NAME) + .stream().noneMatch(d -> "AUTO208".equals(d.getInterrogationId())), + "AUTO208 ne devrait plus être présent après override" + ); + } + + + static Stream overrideExternalCases() { + return Stream.of( + Arguments.of( + "AUTO204", + /* expectedVarCount */ 12, + (Consumer) doc -> { + assertVariable(doc, "TVA", 302.34d); + assertVariable(doc, "CA", 22.45d); + assertVariable(doc, "COM_AUTRE", "blablablabla"); + assertVariable(doc, "INTERRO_N_1", true); + assertVariable(doc, "INTERRO_N_2", false); + assertVariable(doc, "NAF25", "9560Y"); + assertVariable(doc, "POIDS", 1.25); + assertVariable(doc, "MILLESIME", "2024"); + assertVariable(doc, "NSUBST", true); + + assertVariable(doc, "TAB_EXTNUM", 0, 50); + assertVariable(doc, "TAB_EXTNUM", 1, 23); + assertVariable(doc, "TAB_EXTNUM", 2, 10); + assertVariableNull(doc, "TAB_EXTNUM", 3); + + assertVariable(doc, "TAB_EXTCAR", 0, "A"); + assertVariable(doc, "TAB_EXTCAR", 1, ""); + assertVariable(doc, "TAB_EXTCAR", 2, "B"); + } + ), + Arguments.of( + "AUTO200", + /* expectedVarCount */ 11, + (Consumer) doc -> { + assertVariable(doc, "TVA", ""); + assertVariable(doc, "COM_AUTRE", ""); + assertVariable(doc, "SECTEUR", "123456789"); + assertVariable(doc, "INTERRO_N_1", false); + assertVariable(doc, "INTERRO_N_2", false); + assertVariable(doc, "NAF25", "1014Z"); + assertVariable(doc, "POIDS", 12); + assertVariable(doc, "MILLESIME", "2024"); + assertVariable(doc, "NSUBST", false); + + assertVariable(doc, "TAB_EXTNUM", 0, 10); + assertVariable(doc, "TAB_EXTCAR", 0, "C"); + assertVariable(doc, "TAB_EXTCAR", 1, "C"); + } + ) + ); } @ParameterizedTest @@ -716,7 +848,7 @@ void readExternalJson_error_400(String fileName){ //WHEN + THEN ResponseEntity response = contextualVariableController.readContextualExternalJson(QUESTIONNAIRE_ID_EXTERNAL, Mode.WEB, fileName); - Assertions.assertThat(response.getStatusCode().value()).isEqualTo(400); + Assertions.assertEquals(400,response.getStatusCode().value()); } //UTILS @@ -725,45 +857,48 @@ private static void assertVariable(ContextualPreviousVariableDocument document, String variableName, String expectedValue ) { - Assertions.assertThat(document.getVariables().get(variableName)).isNotNull().isEqualTo(expectedValue); + Assertions.assertNotNull(document.getVariables().get(variableName)); + Assertions.assertEquals(expectedValue,document.getVariables().get(variableName)); } private static void assertVariable(ContextualPreviousVariableDocument document, String variableName, double expectedValue ) { - Assertions.assertThat(document.getVariables().get(variableName)).isNotNull().isInstanceOf(Double.class).isEqualTo(expectedValue); + Assertions.assertNotNull(document.getVariables().get(variableName)); + Assertions.assertInstanceOf(Double.class,document.getVariables().get(variableName)); + Assertions.assertEquals(expectedValue,document.getVariables().get(variableName)); } private static void assertVariable(ContextualPreviousVariableDocument document, String variableName, boolean expectedValue ) { - Assertions.assertThat(document.getVariables().get(variableName)).isNotNull().isInstanceOf(Boolean.class).isEqualTo(expectedValue); - } + Assertions.assertNotNull(document.getVariables().get(variableName)); + Assertions.assertInstanceOf(Boolean.class,document.getVariables().get(variableName)); + Assertions.assertEquals(expectedValue,document.getVariables().get(variableName)); } private static void assertVariable(ContextualPreviousVariableDocument document, String variableName, int expectedValue ) { - Assertions.assertThat(document.getVariables().get(variableName)).isNotNull().isInstanceOf(Integer.class).isEqualTo(expectedValue); - } + Assertions.assertNotNull(document.getVariables().get(variableName)); + Assertions.assertInstanceOf(Integer.class,document.getVariables().get(variableName)); + Assertions.assertEquals(expectedValue,document.getVariables().get(variableName)); } private static void assertVariableNull(ContextualPreviousVariableDocument document, String variableName ) { - Assertions.assertThat(document.getVariables().get(variableName)).isNull(); + Assertions.assertNull(document.getVariables().get(variableName)); } @SuppressWarnings("unchecked") private static void assertVariableNull(ContextualPreviousVariableDocument document, String arrayVariableName, - int index - ) { - Assertions.assertThat((List)document.getVariables().get(arrayVariableName)).hasSizeGreaterThan(index); - List list = (List)document.getVariables().get(arrayVariableName); - Assertions.assertThat(list).hasSizeGreaterThan(index); - Assertions.assertThat(list.get(index)).isNull(); + int index ) { + var list = (List) document.getVariables().get(arrayVariableName); + Assertions.assertTrue(list.size()>index); + Assertions.assertNull(list.get(index)); } @SuppressWarnings("unchecked") @@ -772,12 +907,10 @@ private static void assertVariable(ContextualPreviousVariableDocument document, int index, String expectedValue ) throws ClassCastException{ - Assertions.assertThat((List)document.getVariables().get(arrayVariableName)).hasSizeGreaterThan(index); - - List list = (List)document.getVariables().get(arrayVariableName); - Assertions.assertThat(list).hasSizeGreaterThan(index); - Assertions.assertThat(list.get(index)).isInstanceOf(String.class); - Assertions.assertThat((String)list.get(index)).isEqualTo(expectedValue); + var list = (List)document.getVariables().get(arrayVariableName); + Assertions.assertTrue(list.size()>index); + Assertions.assertInstanceOf(String.class,list.get(index)); + Assertions.assertEquals(expectedValue,list.get(index)); } @SuppressWarnings("unchecked") @@ -786,12 +919,10 @@ private static void assertVariable(ContextualPreviousVariableDocument document, int index, int expectedValue ) throws ClassCastException{ - Assertions.assertThat((List)document.getVariables().get(arrayVariableName)).hasSizeGreaterThan(index); - List list = (List)document.getVariables().get(arrayVariableName); - Assertions.assertThat(list).hasSizeGreaterThan(index); - Assertions.assertThat(list.get(index)).isInstanceOf(Integer.class); - Assertions.assertThat((Integer)list.get(index)).isInstanceOf(Integer.class).isEqualTo(expectedValue); + Assertions.assertTrue(list.size()>index); + Assertions.assertInstanceOf(Integer.class,list.get(index)); + Assertions.assertEquals(expectedValue,(Integer)list.get(index)); } private List getContextualPreviousTestDocuments() { @@ -895,17 +1026,17 @@ private void assertDocumentEqualToDto(ContextualExternalVariableDocument context @SuppressWarnings("unchecked") private void assertEntryEqualToDto(Map.Entry documentVariable, List variableQualityToolDtosOfEntry) { - Assertions.assertThat(variableQualityToolDtosOfEntry).isNotEmpty(); + Assertions.assertFalse(variableQualityToolDtosOfEntry.isEmpty()); //If that variable is not a list if (!(documentVariable.getValue() instanceof List)) { - Assertions.assertThat(variableQualityToolDtosOfEntry).hasSize(1); + Assertions.assertEquals(1,variableQualityToolDtosOfEntry.size()); List variableStateDtos = variableQualityToolDtosOfEntry.getFirst().getVariableStateDtoList(); - Assertions.assertThat(variableStateDtos).hasSize(1); // Only 1 state - Assertions.assertThat(variableStateDtos.getFirst().getState()).isEqualTo(DataState.COLLECTED); - Assertions.assertThat(variableStateDtos.getFirst().getValue()).isEqualTo(documentVariable.getValue()); + Assertions.assertEquals(1,variableStateDtos.size()); // Only 1 state + Assertions.assertEquals(DataState.COLLECTED,variableStateDtos.getFirst().getState()); + Assertions.assertEquals(documentVariable.getValue(),variableStateDtos.getFirst().getValue()); return; } int i = 1; @@ -915,13 +1046,13 @@ private void assertEntryEqualToDto(Map.Entry documentVariable, variableQualityToolDtosOfEntry.stream().filter( variableQualityToolDto -> variableQualityToolDto.getIteration().equals(finalI) ).toList(); - Assertions.assertThat(variableQualityToolDtosOfIteration).hasSize(1); + Assertions.assertEquals(1,variableQualityToolDtosOfIteration.size()); List variableStateDtos = variableQualityToolDtosOfIteration.getFirst().getVariableStateDtoList(); - Assertions.assertThat(variableStateDtos).hasSize(1); - Assertions.assertThat(variableStateDtos.getFirst().getState()).isEqualTo(DataState.COLLECTED); - Assertions.assertThat(variableStateDtos.getFirst().getValue()).isEqualTo(documentVariableElement); + Assertions.assertEquals(1,variableStateDtos.size()); + Assertions.assertEquals(DataState.COLLECTED,variableStateDtos.getFirst().getState()); + Assertions.assertEquals(documentVariableElement,variableStateDtos.getFirst().getValue()); i++; } } @@ -930,28 +1061,34 @@ private static void assertVariable(ContextualExternalVariableDocument document, String variableName, String expectedValue ) { - Assertions.assertThat(document.getVariables().get(variableName)).isNotNull().isEqualTo(expectedValue); + Assertions.assertNotNull(document.getVariables().get(variableName)); + Assertions.assertEquals(expectedValue,document.getVariables().get(variableName)); } private static void assertVariable(ContextualExternalVariableDocument document, String variableName, double expectedValue ) { - Assertions.assertThat(document.getVariables().get(variableName)).isNotNull().isInstanceOf(Double.class).isEqualTo(expectedValue); + Assertions.assertNotNull(document.getVariables().get(variableName)); + Assertions.assertInstanceOf(Double.class,document.getVariables().get(variableName)); + Assertions.assertEquals(expectedValue,document.getVariables().get(variableName)); } private static void assertVariable(ContextualExternalVariableDocument document, String variableName, boolean expectedValue ) { - Assertions.assertThat(document.getVariables().get(variableName)).isNotNull().isInstanceOf(Boolean.class).isEqualTo(expectedValue); - } + Assertions.assertNotNull(document.getVariables().get(variableName)); + Assertions.assertInstanceOf(Boolean.class,document.getVariables().get(variableName)); + Assertions.assertEquals(expectedValue,document.getVariables().get(variableName)); } private static void assertVariable(ContextualExternalVariableDocument document, String variableName, int expectedValue ) { - Assertions.assertThat(document.getVariables().get(variableName)).isNotNull().isInstanceOf(Integer.class).isEqualTo(expectedValue); + Assertions.assertNotNull(document.getVariables().get(variableName)); + Assertions.assertInstanceOf(Integer.class,document.getVariables().get(variableName)); + Assertions.assertEquals(expectedValue,document.getVariables().get(variableName)); } @SuppressWarnings("unchecked") @@ -959,10 +1096,9 @@ private static void assertVariableNull(ContextualExternalVariableDocument docume String arrayVariableName, int index ) { - Assertions.assertThat((List)document.getVariables().get(arrayVariableName)).hasSizeGreaterThan(index); List list = (List)document.getVariables().get(arrayVariableName); - Assertions.assertThat(list).hasSizeGreaterThan(index); - Assertions.assertThat(list.get(index)).isNull(); + Assertions.assertTrue(list.size()>index); + Assertions.assertNull(list.get(index)); } @SuppressWarnings("unchecked") @@ -971,12 +1107,10 @@ private static void assertVariable(ContextualExternalVariableDocument document, int index, String expectedValue ) throws ClassCastException{ - Assertions.assertThat((List)document.getVariables().get(arrayVariableName)).hasSizeGreaterThan(index); - List list = (List)document.getVariables().get(arrayVariableName); - Assertions.assertThat(list).hasSizeGreaterThan(index); - Assertions.assertThat(list.get(index)).isInstanceOf(String.class); - Assertions.assertThat((String)list.get(index)).isEqualTo(expectedValue); + Assertions.assertTrue(list.size()>index); + Assertions.assertInstanceOf(String.class,list.get(index)); + Assertions.assertEquals(expectedValue,list.get(index)); } @SuppressWarnings("unchecked") @@ -985,12 +1119,10 @@ private static void assertVariable(ContextualExternalVariableDocument document, int index, int expectedValue ) throws ClassCastException{ - Assertions.assertThat((List)document.getVariables().get(arrayVariableName)).hasSizeGreaterThan(index); - List list = (List)document.getVariables().get(arrayVariableName); - Assertions.assertThat(list).hasSizeGreaterThan(index); - Assertions.assertThat(list.get(index)).isInstanceOf(Integer.class); - Assertions.assertThat((Integer)list.get(index)).isInstanceOf(Integer.class).isEqualTo(expectedValue); + Assertions.assertTrue(list.size()>index); + Assertions.assertInstanceOf(Integer.class,list.get(index)); + Assertions.assertEquals(expectedValue,(Integer)list.get(index)); } } diff --git a/src/test/java/fr/insee/genesis/controller/rest/responses/RawResponseControllerTest.java b/src/test/java/fr/insee/genesis/controller/rest/responses/RawResponseControllerTest.java index a98ae6d8..26d93a9f 100644 --- a/src/test/java/fr/insee/genesis/controller/rest/responses/RawResponseControllerTest.java +++ b/src/test/java/fr/insee/genesis/controller/rest/responses/RawResponseControllerTest.java @@ -223,7 +223,8 @@ void getRawResponsesFromJsonBody() { //THEN Assertions.assertThat(response.getStatusCode().is2xxSuccessful()).isTrue(); - Assertions.assertThat(response.getBody().getContent().size()).isEqualTo(1); + org.junit.jupiter.api.Assertions.assertNotNull(response.getBody()); + Assertions.assertThat(response.getBody().getContent()).hasSize(1); } //Utils diff --git a/src/test/java/fr/insee/genesis/controller/rest/responses/ResponseControllerTest.java b/src/test/java/fr/insee/genesis/controller/rest/responses/ResponseControllerTest.java index 90c3e733..0b3b8b71 100644 --- a/src/test/java/fr/insee/genesis/controller/rest/responses/ResponseControllerTest.java +++ b/src/test/java/fr/insee/genesis/controller/rest/responses/ResponseControllerTest.java @@ -1,7 +1,8 @@ package fr.insee.genesis.controller.rest.responses; -import cucumber.TestConstants; + import fr.insee.genesis.Constants; +import fr.insee.genesis.TestConstants; import fr.insee.genesis.configuration.Config; import fr.insee.genesis.controller.dto.SurveyUnitInputDto; import fr.insee.genesis.controller.dto.SurveyUnitQualityToolDto; diff --git a/src/test/java/fr/insee/genesis/controller/rest/responses/Utils.java b/src/test/java/fr/insee/genesis/controller/rest/responses/Utils.java index 4b10d120..3ce6d67f 100644 --- a/src/test/java/fr/insee/genesis/controller/rest/responses/Utils.java +++ b/src/test/java/fr/insee/genesis/controller/rest/responses/Utils.java @@ -1,6 +1,7 @@ package fr.insee.genesis.controller.rest.responses; -import cucumber.TestConstants; + +import fr.insee.genesis.TestConstants; import fr.insee.genesis.domain.model.surveyunit.DataState; import fr.insee.genesis.domain.model.surveyunit.Mode; import fr.insee.genesis.domain.model.surveyunit.SurveyUnitModel; diff --git a/src/test/java/fr/insee/genesis/infrastructure/adapter/SurveyUnitModelMongoAdapterTest.java b/src/test/java/fr/insee/genesis/infrastructure/adapter/SurveyUnitModelMongoAdapterTest.java index 58c312c3..49e6dc08 100644 --- a/src/test/java/fr/insee/genesis/infrastructure/adapter/SurveyUnitModelMongoAdapterTest.java +++ b/src/test/java/fr/insee/genesis/infrastructure/adapter/SurveyUnitModelMongoAdapterTest.java @@ -183,7 +183,7 @@ void shouldReturnZero_whenCountIsEmpty() { when(mongoRepository.countByCampaignId("CAMP999")).thenReturn(0L); long count = surveyUnitMongoAdapter.countByCampaignId("CAMP999"); - Assertions.assertThat(count).isEqualTo(0L); + Assertions.assertThat(count).isZero(); } diff --git a/src/test/java/fr/insee/genesis/infrastructure/utils/FileUtilsTest.java b/src/test/java/fr/insee/genesis/infrastructure/utils/FileUtilsTest.java index e8392bf2..cce8868d 100644 --- a/src/test/java/fr/insee/genesis/infrastructure/utils/FileUtilsTest.java +++ b/src/test/java/fr/insee/genesis/infrastructure/utils/FileUtilsTest.java @@ -1,6 +1,7 @@ package fr.insee.genesis.infrastructure.utils; -import cucumber.TestConstants; + +import fr.insee.genesis.TestConstants; import fr.insee.genesis.configuration.Config; import fr.insee.genesis.stubs.ConfigStub; import lombok.extern.slf4j.Slf4j; diff --git a/src/test/java/fr/insee/genesis/stubs/ConfigStub.java b/src/test/java/fr/insee/genesis/stubs/ConfigStub.java index 6ee44472..9f414c44 100644 --- a/src/test/java/fr/insee/genesis/stubs/ConfigStub.java +++ b/src/test/java/fr/insee/genesis/stubs/ConfigStub.java @@ -1,6 +1,7 @@ package fr.insee.genesis.stubs; -import cucumber.TestConstants; + +import fr.insee.genesis.TestConstants; import fr.insee.genesis.configuration.Config; public class ConfigStub extends Config { diff --git a/src/test/java/fr/insee/genesis/stubs/SurveyUnitPersistencePortStub.java b/src/test/java/fr/insee/genesis/stubs/SurveyUnitPersistencePortStub.java index cf1e517f..a0be834b 100644 --- a/src/test/java/fr/insee/genesis/stubs/SurveyUnitPersistencePortStub.java +++ b/src/test/java/fr/insee/genesis/stubs/SurveyUnitPersistencePortStub.java @@ -36,7 +36,7 @@ public List findByIds(String interrogationId, String questionna * @author Adrien Marchal */ public List findBySetOfIdsAndQuestionnaireIdAndMode(String questionnaireId, String mode, List interrogationIdSet) { - return new ArrayList(); + return new ArrayList<>(); } //========= OPTIMISATIONS PERFS (START) ========== @@ -89,6 +89,28 @@ public List findInterrogationIdsByQuestionnaireId(String questi return surveyUnitModelList; } + @Override + public List findModesByQuestionnaireIdV2(String questionnaireId) { + return findInterrogationIdsByQuestionnaireId(questionnaireId); + } + + @Override + public List findInterrogationIdsByCampaignId(String campaignId) { + return findModesByCampaignIdV2(campaignId); + } + + public List findModesByCampaignIdV2(String campaignId) { + List surveyUnitModelList = new ArrayList<>(); + for (SurveyUnitModel SurveyUnitModel : mongoStub) { + if (SurveyUnitModel.getCampaignId().equals(campaignId)) + surveyUnitModelList.add( + new SurveyUnitModel(SurveyUnitModel.getInterrogationId(), SurveyUnitModel.getMode()) + ); + } + + return surveyUnitModelList; + } + @Override public List findInterrogationIdsByQuestionnaireIdAndDateAfter(String questionnaireId, LocalDateTime since) { List surveyUnitModelList = new ArrayList<>(); @@ -118,47 +140,13 @@ public List findPageableInterrogationIdsByQuestionnaireId(Strin return List.of(); } + - @Override - public List findModesByCampaignIdV2(String campaignId) { - List surveyUnitModelList = new ArrayList<>(); - for(SurveyUnitModel SurveyUnitModel : mongoStub){ - if(SurveyUnitModel.getCampaignId().equals(campaignId)) - surveyUnitModelList.add( - new SurveyUnitModel(SurveyUnitModel.getInterrogationId(), SurveyUnitModel.getMode()) - ); - } - return surveyUnitModelList; - } - - @Override - public List findModesByQuestionnaireIdV2(String questionnaireId) { - List surveyUnitModelList = new ArrayList<>(); - for(SurveyUnitModel SurveyUnitModel : mongoStub){ - if(SurveyUnitModel.getQuestionnaireId().equals(questionnaireId)) - surveyUnitModelList.add( - new SurveyUnitModel(SurveyUnitModel.getInterrogationId(), SurveyUnitModel.getMode()) - ); - } - - return surveyUnitModelList; - } //======= OPTIMISATIONS PERFS (END) ========= - @Override - public List findInterrogationIdsByCampaignId(String campaignId) { - List surveyUnitModelList = new ArrayList<>(); - for(SurveyUnitModel SurveyUnitModel : mongoStub){ - if(SurveyUnitModel.getCampaignId().equals(campaignId)) - surveyUnitModelList.add( - new SurveyUnitModel(SurveyUnitModel.getInterrogationId(), SurveyUnitModel.getMode()) - ); - } - return surveyUnitModelList; - } @Override public Long deleteByQuestionnaireId(String questionnaireId) { diff --git a/src/test/resources/junit-plateform.properties b/src/test/resources/junit-plateform.properties new file mode 100644 index 00000000..1e0ee7b6 --- /dev/null +++ b/src/test/resources/junit-plateform.properties @@ -0,0 +1,3 @@ +cucumber.glue=cucumber.functional_tests,cucumber.config +cucumber.features=classpath:fr/insee/genesis/features +cucumber.plugin=pretty, html:target/cucumber-report.html