From c471801d9564e665bd21b954efa9dab485bb1590 Mon Sep 17 00:00:00 2001 From: Adrien MARCHAL Date: Mon, 28 Jul 2025 10:27:22 +0200 Subject: [PATCH] ResponseController refacto --- .../rest/responses/ResponseController.java | 354 ++--------------- .../domain/ports/api/SurveyUnitApiPort.java | 17 +- .../service/surveyunit/SurveyUnitService.java | 370 +++++++++++++++++- .../LunaticModelDefinitions.java | 25 +- .../functional_tests/MainDefinitions.java | 19 +- .../functional_tests/RawDataDefinitions.java | 17 +- .../rest/HealthCheckControllerTest.java | 20 +- .../controller/rest/UtilsControllerTest.java | 30 +- .../responses/CampaignControllerTest.java | 22 +- .../InterrogationControllerTest.java | 22 +- .../rest/responses/ModeControllerTest.java | 22 +- .../QuestionnaireControllerTest.java | 22 +- .../responses/RawResponseControllerTest.java | 34 +- .../responses/ResponseControllerTest.java | 16 +- .../domain/service/SurveyUnitServiceTest.java | 27 +- .../LunaticJsonRawDataServiceTest.java | 25 +- 16 files changed, 671 insertions(+), 371 deletions(-) diff --git a/src/main/java/fr/insee/genesis/controller/rest/responses/ResponseController.java b/src/main/java/fr/insee/genesis/controller/rest/responses/ResponseController.java index 5a490cca..d7f18647 100644 --- a/src/main/java/fr/insee/genesis/controller/rest/responses/ResponseController.java +++ b/src/main/java/fr/insee/genesis/controller/rest/responses/ResponseController.java @@ -1,36 +1,17 @@ package fr.insee.genesis.controller.rest.responses; import fr.insee.bpm.exceptions.MetadataParserException; -import fr.insee.bpm.metadata.model.VariablesMap; -import fr.insee.bpm.metadata.reader.ddi.DDIReader; -import fr.insee.bpm.metadata.reader.lunatic.LunaticReader; -import fr.insee.genesis.Constants; -import fr.insee.genesis.controller.adapter.LunaticXmlAdapter; +import fr.insee.genesis.controller.dto.SurveyUnitQualityToolDto; import fr.insee.genesis.domain.model.surveyunit.InterrogationId; -import fr.insee.genesis.controller.dto.SurveyUnitDto; import fr.insee.genesis.controller.dto.SurveyUnitInputDto; -import fr.insee.genesis.controller.dto.SurveyUnitQualityToolDto; import fr.insee.genesis.controller.dto.SurveyUnitSimplified; import fr.insee.genesis.controller.rest.CommonApiResponse; -import fr.insee.genesis.controller.services.MetadataService; -import fr.insee.genesis.controller.sources.xml.LunaticXmlCampaign; -import fr.insee.genesis.controller.sources.xml.LunaticXmlDataParser; -import fr.insee.genesis.controller.sources.xml.LunaticXmlDataSequentialParser; -import fr.insee.genesis.controller.sources.xml.LunaticXmlSurveyUnit; -import fr.insee.genesis.controller.utils.AuthUtils; -import fr.insee.genesis.controller.utils.ControllerUtils; -import fr.insee.genesis.controller.utils.DataTransformer; -import fr.insee.genesis.domain.model.context.DataProcessingContextModel; import fr.insee.genesis.domain.model.surveyunit.Mode; import fr.insee.genesis.domain.model.surveyunit.SurveyUnitModel; import fr.insee.genesis.domain.model.surveyunit.VariableModel; -import fr.insee.genesis.domain.ports.api.DataProcessingContextApiPort; import fr.insee.genesis.domain.ports.api.SurveyUnitApiPort; -import fr.insee.genesis.domain.service.surveyunit.SurveyUnitQualityService; -import fr.insee.genesis.exceptions.GenesisError; import fr.insee.genesis.exceptions.GenesisException; import fr.insee.genesis.exceptions.NoDataException; -import fr.insee.genesis.infrastructure.utils.FileUtils; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.extern.slf4j.Slf4j; @@ -50,18 +31,9 @@ import javax.xml.parsers.ParserConfigurationException; import javax.xml.stream.XMLStreamException; -import java.io.File; -import java.io.FileInputStream; import java.io.IOException; -import java.io.InputStream; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.time.LocalDateTime; import java.util.ArrayList; import java.util.List; -import java.util.Set; -import java.util.stream.Stream; @RequestMapping(path = "/responses" ) @Controller @@ -69,33 +41,13 @@ @Slf4j public class ResponseController implements CommonApiResponse { - public static final String PATH_FORMAT = "%s/%s"; - private static final String CAMPAIGN_ERROR = "Error for campaign {}: {}"; - private static final String SUCCESS_MESSAGE = "Data saved"; + public static final String CAMPAIGN_ERROR = "Error for campaign {}: {}"; private static final String SUCCESS_NO_DATA_MESSAGE = "No data has been saved"; + public static final String SUCCESS_MESSAGE = "Data saved"; private final SurveyUnitApiPort surveyUnitService; - private final SurveyUnitQualityService surveyUnitQualityService; - private final DataProcessingContextApiPort contextService; - private final FileUtils fileUtils; - private final ControllerUtils controllerUtils; - private final AuthUtils authUtils; - private final MetadataService metadataService; - - public ResponseController(SurveyUnitApiPort surveyUnitService, - SurveyUnitQualityService surveyUnitQualityService, - FileUtils fileUtils, - ControllerUtils controllerUtils, - AuthUtils authUtils, - MetadataService metadataService, - DataProcessingContextApiPort contextService - ) { + + public ResponseController(SurveyUnitApiPort surveyUnitService) { this.surveyUnitService = surveyUnitService; - this.surveyUnitQualityService = surveyUnitQualityService; - this.fileUtils = fileUtils; - this.controllerUtils = controllerUtils; - this.authUtils = authUtils; - this.metadataService = metadataService; - this.contextService = contextService; } //SAVE @@ -107,31 +59,18 @@ public ResponseEntity saveResponsesFromXmlFile(@RequestParam("pathLunati @RequestParam(value = "mode") Mode modeSpecified, @RequestParam(value = "withDDI", defaultValue = "true") boolean withDDI )throws Exception { - VariablesMap variablesMap; - if(withDDI) { - //Parse DDI - log.info("Try to read DDI file : {}", metadataFilePath); - try { - variablesMap = - DDIReader.getMetadataFromDDI(Path.of(metadataFilePath).toFile().toURI().toURL().toString(), - new FileInputStream(metadataFilePath)).getVariables(); - } catch (MetadataParserException e) { - return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(e.getMessage()); - } - }else{ - //Parse Lunatic - log.info("Try to read lunatic file : {}", metadataFilePath); - - variablesMap = LunaticReader.getMetadataFromLunatic(new FileInputStream(metadataFilePath)).getVariables(); - } - - log.info("Try to read Xml file : {}", xmlFile); - Path filepath = Paths.get(xmlFile); - - if (getFileSizeInMB(filepath) <= Constants.MAX_FILE_SIZE_UNTIL_SEQUENTIAL) { - return processXmlFileWithMemory(filepath, modeSpecified, variablesMap); + try { + surveyUnitService.saveResponsesFromXmlFile(xmlFile, metadataFilePath, modeSpecified, withDDI); + return ResponseEntity.ok().build(); + } catch(MetadataParserException | + IOException | + ParserConfigurationException | + SAXException | + XMLStreamException ex) { + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(ex.getMessage()); + } catch(GenesisException e) { + return ResponseEntity.status(e.getStatus()).body(e.getMessage()); } - return processXmlFileSequentially(filepath, modeSpecified, variablesMap); } @Operation(summary = "Save multiple files to Genesis Database from the campaign root folder") @@ -140,29 +79,14 @@ public ResponseEntity saveResponsesFromXmlFile(@RequestParam("pathLunati public ResponseEntity saveResponsesFromXmlCampaignFolder(@RequestParam("campaignName") String campaignName, @RequestParam(value = "mode", required = false) Mode modeSpecified )throws Exception { - List errors = new ArrayList<>(); - boolean isAnyDataSaved = false; - - log.info("Try to import XML data for campaign: {}", campaignName); - - List modesList = controllerUtils.getModesList(campaignName, modeSpecified); - for (Mode currentMode : modesList) { - try { - processCampaignWithMode(campaignName, currentMode, errors, null); - isAnyDataSaved = true; - }catch (NoDataException nde){ - //Don't stop if NoDataError thrown - log.warn(nde.getMessage()); - }catch (Exception e){ - log.error(CAMPAIGN_ERROR, campaignName, e.toString()); - return ResponseEntity.status(500).body(e.getMessage()); - } - } - - if (errors.isEmpty()){ + try { + boolean isAnyDataSaved = surveyUnitService.saveResponsesFromXmlCampaignFolder(campaignName, modeSpecified); return ResponseEntity.ok(getSuccessMessage(isAnyDataSaved)); + } catch(GenesisException e) { + return ResponseEntity.status(e.getStatus()).body(e.getMessage()); + } catch(Exception e) { + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(e.getMessage()); } - return ResponseEntity.internalServerError().body(errors.getFirst().getMessage()); } //SAVE ALL @@ -170,34 +94,14 @@ public ResponseEntity saveResponsesFromXmlCampaignFolder(@RequestParam(" @PutMapping(path = "/lunatic-xml/save-all-campaigns") @PreAuthorize("hasRole('SCHEDULER')") public ResponseEntity saveResponsesFromAllCampaignFolders(){ - List errors = new ArrayList<>(); - List campaignFolders = fileUtils.listAllSpecsFolders(); - - if (campaignFolders.isEmpty()) { - return ResponseEntity.ok("No campaign to save"); - } - - for (File campaignFolder: campaignFolders) { - String campaignName = campaignFolder.getName(); - log.info("Try to import data for campaign: {}", campaignName); - - try { - List modesList = controllerUtils.getModesList(campaignName, null); //modeSpecified null = all modes - for (Mode currentMode : modesList) { - processCampaignWithMode(campaignName, currentMode, errors, Constants.DIFFERENTIAL_DATA_FOLDER_NAME); - } - }catch (NoDataException nde){ - log.warn(nde.getMessage()); - } - catch (Exception e) { - log.warn(CAMPAIGN_ERROR, campaignName, e.toString()); - errors.add(new GenesisError(e.getMessage())); - } - } - if (errors.isEmpty()) { - return ResponseEntity.ok(SUCCESS_MESSAGE); + try { + surveyUnitService.saveResponsesFromAllCampaignFolders(); + return ResponseEntity.ok(ResponseController.SUCCESS_MESSAGE); + } catch(NoDataException e) { + return ResponseEntity.ok(e.getMessage()); + } catch(GenesisException e) { + return ResponseEntity.status(e.getStatus()).body(e.getMessage()); } - return ResponseEntity.status(209).body("Data saved with " + errors.size() + " errors"); } @@ -229,17 +133,12 @@ public ResponseEntity> findResponsesByInterrogationAndQues public ResponseEntity findResponsesByInterrogationAndQuestionnaireLatestStates( @RequestParam("interrogationId") String interrogationId, @RequestParam("questionnaireId") String questionnaireId) throws GenesisException { - //Check context - DataProcessingContextModel dataProcessingContextModel = - contextService.getContext(interrogationId); - - if(dataProcessingContextModel == null || !dataProcessingContextModel.isWithReview()){ - return ResponseEntity.status(403).body(new ApiError("Review is disabled for that partition")); + try { + SurveyUnitQualityToolDto responseQualityToolDto = surveyUnitService.findResponsesByInterrogationAndQuestionnaireLatestStates(interrogationId, questionnaireId); + return ResponseEntity.ok(responseQualityToolDto); + } catch(GenesisException e) { + return ResponseEntity.status(e.getStatus()).body(e.getMessage()); } - - SurveyUnitDto response = surveyUnitService.findLatestValuesByStateByIdAndByQuestionnaireId(interrogationId, questionnaireId); - SurveyUnitQualityToolDto responseQualityToolDto = DataTransformer.transformSurveyUnitDto(response); - return ResponseEntity.ok(responseQualityToolDto); } @Operation(summary = "Retrieve responses for an interrogation, using interrogationId and questionnaireId from Genesis Database. It returns only the latest value of each variable regardless of the state.") @@ -394,194 +293,17 @@ private SurveyUnitSimplified fusionWithLastUpdated(List respons public ResponseEntity saveEditedVariables( @RequestBody SurveyUnitInputDto surveyUnitInputDto ){ - log.debug("Received in save edited : {}",surveyUnitInputDto.toString()); - //Code quality : we need to put all that logic out of this controller - //Parse metadata - //Try to look for DDI first, if no DDI found looks for lunatic components - List errors = new ArrayList<>(); - //We need to retrieve campaignId - Set campaignIds = surveyUnitService.findCampaignIdsFrom(surveyUnitInputDto); - if (campaignIds.size() != 1){ - return ResponseEntity.status(500).body("Impossible to assign one campaignId to that response"); - } - // If the size is equal to 1 we get this campaignId - String campaignId = campaignIds.iterator().next(); - surveyUnitInputDto.setCampaignId(campaignId); - VariablesMap variablesMap = metadataService.readMetadatas(surveyUnitInputDto.getCampaignId(), - surveyUnitInputDto.getMode().getModeName(), fileUtils, errors); - if(variablesMap == null){ - log.warn("Can't find DDI, trying with lunatic..."); - variablesMap = metadataService.readMetadatas(surveyUnitInputDto.getCampaignId(), - surveyUnitInputDto.getMode().getModeName(), fileUtils, errors); - if(variablesMap == null){ - return ResponseEntity.status(404).body(errors.getLast().getMessage()); - } - } - - //Check if input edited variables are in metadatas - List absentCollectedVariableNames = - surveyUnitQualityService.checkVariablesPresentInMetadata(surveyUnitInputDto.getCollectedVariables(), - variablesMap); - if (!absentCollectedVariableNames.isEmpty()) { - String absentVariables = String.join("\n", absentCollectedVariableNames); - return ResponseEntity.badRequest().body( - String.format("The following variables are absent in metadatas : %n%s", absentVariables) - ); - } - - //Fetch user identifier from OIDC token - String userIdentifier = authUtils.getIDEP(); - - - //Create surveyUnitModel for each STATE received (Quality tool could send variables with another STATE than EDITED) - List surveyUnitModels; - try{ - surveyUnitModels = surveyUnitService.parseEditedVariables( - surveyUnitInputDto, - userIdentifier, - variablesMap - ); - }catch (GenesisException e){ - return ResponseEntity.status(e.getStatus()).body(e.getMessage()); - } - - //Check data with dataverifier (might create a FORCED document) - surveyUnitQualityService.verifySurveyUnits(surveyUnitModels, variablesMap); - - //Save documents - surveyUnitService.saveSurveyUnits(surveyUnitModels); - return ResponseEntity.ok(SUCCESS_MESSAGE); - } - - - - //Utilities - /** - * Process a campaign with a specific mode - * @param campaignName name of campaign - * @param mode mode of collected data - * @param errors error list to fill - */ - private void processCampaignWithMode(String campaignName, Mode mode, List errors, String rootDataFolder) - throws IOException, ParserConfigurationException, SAXException, XMLStreamException, NoDataException, GenesisException { - log.info("Starting data import for mode: {}", mode.getModeName()); - String dataFolder = rootDataFolder == null ? - fileUtils.getDataFolder(campaignName, mode.getFolder(), null) - : fileUtils.getDataFolder(campaignName, mode.getFolder(), rootDataFolder); - List dataFiles = fileUtils.listFiles(dataFolder); - log.info("Number of files to load in folder {} : {}", dataFolder, dataFiles.size()); - if (dataFiles.isEmpty()) { - throw new NoDataException("No data file found in folder %s".formatted(dataFolder)); - } - - VariablesMap variablesMap = metadataService.readMetadatas(campaignName, mode.getModeName(), fileUtils, errors); - if (variablesMap == null){ - return; - } - - //For each XML data file - for (String fileName : dataFiles.stream().filter(s -> s.endsWith(".xml")).toList()) { - processOneXmlFileForCampaign(campaignName, mode, fileName, dataFolder, variablesMap); - } - - //Create context if not exist - if(contextService.getContextByPartitionId(campaignName) == null){ - contextService.saveContext(campaignName, false); - } - - } - - private void processOneXmlFileForCampaign(String campaignName, - Mode mode, - String fileName, - String dataFolder, - VariablesMap variablesMap) throws IOException, ParserConfigurationException, SAXException, XMLStreamException, GenesisException { - String filepathString = String.format(PATH_FORMAT, dataFolder, fileName); - Path filepath = Paths.get(filepathString); - //Check if file not in done folder, delete if true - if(isDataFileInDoneFolder(filepath, campaignName, mode.getFolder())){ - log.warn("File {} already exists in DONE folder ! Deleting...", fileName); - Files.deleteIfExists(filepath); - return; - } - //Read file - log.info("Try to read Xml file : {}", fileName); - ResponseEntity response; - if (getFileSizeInMB(filepath) <= Constants.MAX_FILE_SIZE_UNTIL_SEQUENTIAL) { - response = processXmlFileWithMemory(filepath, mode, variablesMap); - } else { - response = processXmlFileSequentially(filepath, mode, variablesMap); - } - log.debug("File {} saved", fileName); - if (response.getStatusCode() == HttpStatus.OK) { - fileUtils.moveDataFile(campaignName, mode.getFolder(),filepath); - return; - } - log.error("Error {} on file {} : {}", response.getStatusCode(), fileName, response.getBody()); - - } - - private static long getFileSizeInMB(Path filepath) { - return filepath.toFile().length() / 1024 / 1024; - } - - private boolean isDataFileInDoneFolder(Path filepath, String campaignName, String modeFolder) { - return Path.of(fileUtils.getDoneFolder(campaignName, modeFolder)).resolve(filepath.getFileName()).toFile().exists(); - } - - private ResponseEntity processXmlFileWithMemory(Path filepath, Mode modeSpecified, VariablesMap variablesMap) throws IOException, ParserConfigurationException, SAXException, GenesisException { - LunaticXmlCampaign campaign; - // DOM method - LunaticXmlDataParser parser = new LunaticXmlDataParser(); try { - campaign = parser.parseDataFile(filepath); - } catch (GenesisException e) { - log.error(e.toString()); + surveyUnitService.saveEditedVariables(surveyUnitInputDto); + return ResponseEntity.ok(ResponseController.SUCCESS_MESSAGE); + } catch(GenesisException e) { return ResponseEntity.status(e.getStatus()).body(e.getMessage()); } - - List surveyUnitModels = new ArrayList<>(); - for (LunaticXmlSurveyUnit su : campaign.getSurveyUnits()) { - surveyUnitModels.addAll(LunaticXmlAdapter.convert(su, variablesMap, campaign.getCampaignId(), modeSpecified)); - } - surveyUnitQualityService.verifySurveyUnits(surveyUnitModels, variablesMap); - - log.debug("Saving {} survey units updates", surveyUnitModels.size()); - surveyUnitService.saveSurveyUnits(surveyUnitModels); - log.debug("Survey units updates saved"); - - log.info("File {} processed with {} survey units", filepath.getFileName(), surveyUnitModels.size()); - return ResponseEntity.ok().build(); } - private ResponseEntity processXmlFileSequentially(Path filepath, Mode modeSpecified, VariablesMap variablesMap) throws IOException, XMLStreamException, GenesisException { - LunaticXmlCampaign campaign; - //Sequential method - log.warn("File size > {} MB! Parsing XML file using sequential method...", Constants.MAX_FILE_SIZE_UNTIL_SEQUENTIAL); - try (final InputStream stream = new FileInputStream(filepath.toFile())) { - LunaticXmlDataSequentialParser parser = new LunaticXmlDataSequentialParser(filepath, stream); - int suCount = 0; - - campaign = parser.getCampaign(); - LunaticXmlSurveyUnit su = parser.readNextSurveyUnit(); - contextService.saveContext(campaign.getCampaignId(), false); - - while (su != null) { - List surveyUnitModels = new ArrayList<>(LunaticXmlAdapter.convert(su, variablesMap, campaign.getCampaignId(), modeSpecified)); - - surveyUnitQualityService.verifySurveyUnits(surveyUnitModels, variablesMap); - surveyUnitService.saveSurveyUnits(surveyUnitModels); - suCount++; - - su = parser.readNextSurveyUnit(); - } - - log.info("Saved {} survey units updates from Xml file {}", suCount, filepath.getFileName()); - } - return ResponseEntity.ok().build(); - } private static String getSuccessMessage(boolean isAnyDataSaved) { return isAnyDataSaved ? SUCCESS_MESSAGE : SUCCESS_NO_DATA_MESSAGE; } + } diff --git a/src/main/java/fr/insee/genesis/domain/ports/api/SurveyUnitApiPort.java b/src/main/java/fr/insee/genesis/domain/ports/api/SurveyUnitApiPort.java index d690ec42..c60d2841 100644 --- a/src/main/java/fr/insee/genesis/domain/ports/api/SurveyUnitApiPort.java +++ b/src/main/java/fr/insee/genesis/domain/ports/api/SurveyUnitApiPort.java @@ -1,14 +1,12 @@ package fr.insee.genesis.domain.ports.api; import fr.insee.bpm.metadata.model.VariablesMap; -import fr.insee.genesis.controller.dto.CampaignWithQuestionnaire; +import fr.insee.genesis.controller.dto.*; import fr.insee.genesis.domain.model.surveyunit.InterrogationId; -import fr.insee.genesis.controller.dto.QuestionnaireWithCampaign; -import fr.insee.genesis.controller.dto.SurveyUnitDto; -import fr.insee.genesis.controller.dto.SurveyUnitInputDto; import fr.insee.genesis.domain.model.surveyunit.Mode; import fr.insee.genesis.domain.model.surveyunit.SurveyUnitModel; import fr.insee.genesis.exceptions.GenesisException; +import fr.insee.genesis.exceptions.NoDataException; import java.util.List; import java.util.Set; @@ -84,4 +82,15 @@ List parseEditedVariables(SurveyUnitInputDto surveyUnitInputDto String findQuestionnaireIdByInterrogationId(String interrogationId) throws GenesisException; Set findCampaignIdsFrom(SurveyUnitInputDto dto); + + void saveResponsesFromXmlFile(String xmlFile, String metadataFilePath, Mode modeSpecified, boolean withDDI) throws Exception; + + boolean saveResponsesFromXmlCampaignFolder(String campaignName, Mode modeSpecified) throws Exception; + + void saveResponsesFromAllCampaignFolders() throws NoDataException, GenesisException; + + SurveyUnitQualityToolDto findResponsesByInterrogationAndQuestionnaireLatestStates(String interrogationId, String questionnaireId) throws GenesisException; + + void saveEditedVariables(SurveyUnitInputDto surveyUnitInputDto) throws GenesisException; + } \ No newline at end of file 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 5bb0f435..41261be1 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 @@ -1,31 +1,51 @@ package fr.insee.genesis.domain.service.surveyunit; +import fr.insee.bpm.exceptions.MetadataParserException; import fr.insee.bpm.metadata.model.VariableType; import fr.insee.bpm.metadata.model.VariablesMap; -import fr.insee.genesis.controller.dto.CampaignWithQuestionnaire; -import fr.insee.genesis.controller.dto.QuestionnaireWithCampaign; -import fr.insee.genesis.controller.dto.SurveyUnitDto; -import fr.insee.genesis.controller.dto.SurveyUnitInputDto; -import fr.insee.genesis.controller.dto.VariableDto; -import fr.insee.genesis.controller.dto.VariableInputDto; -import fr.insee.genesis.controller.dto.VariableStateDto; +import fr.insee.bpm.metadata.reader.ddi.DDIReader; +import fr.insee.bpm.metadata.reader.lunatic.LunaticReader; +import fr.insee.genesis.Constants; +import fr.insee.genesis.controller.adapter.LunaticXmlAdapter; +import fr.insee.genesis.controller.dto.*; +import fr.insee.genesis.controller.rest.responses.ApiError; +import fr.insee.genesis.controller.rest.responses.ResponseController; import fr.insee.genesis.controller.services.MetadataService; +import fr.insee.genesis.controller.sources.xml.LunaticXmlCampaign; +import fr.insee.genesis.controller.sources.xml.LunaticXmlDataParser; +import fr.insee.genesis.controller.sources.xml.LunaticXmlDataSequentialParser; +import fr.insee.genesis.controller.sources.xml.LunaticXmlSurveyUnit; +import fr.insee.genesis.controller.utils.AuthUtils; +import fr.insee.genesis.controller.utils.ControllerUtils; +import fr.insee.genesis.controller.utils.DataTransformer; +import fr.insee.genesis.domain.model.context.DataProcessingContextModel; import fr.insee.genesis.domain.model.surveyunit.DataState; import fr.insee.genesis.domain.model.surveyunit.InterrogationId; import fr.insee.genesis.domain.model.surveyunit.Mode; import fr.insee.genesis.domain.model.surveyunit.SurveyUnitModel; import fr.insee.genesis.domain.model.surveyunit.VarIdScopeTuple; import fr.insee.genesis.domain.model.surveyunit.VariableModel; +import fr.insee.genesis.domain.ports.api.DataProcessingContextApiPort; import fr.insee.genesis.domain.ports.api.SurveyUnitApiPort; import fr.insee.genesis.domain.ports.spi.SurveyUnitPersistencePort; import fr.insee.genesis.domain.utils.GroupUtils; +import fr.insee.genesis.exceptions.GenesisError; import fr.insee.genesis.exceptions.GenesisException; +import fr.insee.genesis.exceptions.NoDataException; import fr.insee.genesis.infrastructure.utils.FileUtils; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Service; - +import org.xml.sax.SAXException; + +import javax.xml.parsers.ParserConfigurationException; +import javax.xml.stream.XMLStreamException; +import java.io.*; +import java.net.MalformedURLException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; import java.time.LocalDateTime; import java.util.ArrayList; import java.util.HashMap; @@ -40,18 +60,33 @@ @Slf4j public class SurveyUnitService implements SurveyUnitApiPort { + public static final String PATH_FORMAT = "%s/%s"; + @Qualifier("surveyUnitMongoAdapter") private final SurveyUnitPersistencePort surveyUnitPersistencePort; private final MetadataService metadataService; private final FileUtils fileUtils; + private final DataProcessingContextApiPort contextService; + private final SurveyUnitQualityService surveyUnitQualityService; + private final ControllerUtils controllerUtils; + private final AuthUtils authUtils; @Autowired - public SurveyUnitService(SurveyUnitPersistencePort surveyUnitPersistencePort, MetadataService metadataService, - FileUtils fileUtils) { + public SurveyUnitService(SurveyUnitPersistencePort surveyUnitPersistencePort, + MetadataService metadataService, + FileUtils fileUtils, + DataProcessingContextApiPort contextService, + SurveyUnitQualityService surveyUnitQualityService, + ControllerUtils controllerUtils, + AuthUtils authUtils) { this.surveyUnitPersistencePort = surveyUnitPersistencePort; this.metadataService = metadataService; this.fileUtils = fileUtils; + this.contextService = contextService; + this.surveyUnitQualityService = surveyUnitQualityService; + this.controllerUtils = controllerUtils; + this.authUtils = authUtils; } @Override @@ -660,4 +695,319 @@ private boolean isLastVariableState(SurveyUnitModel surveyUnitModel, VariableDto } return true; } + + + @Override + public void saveResponsesFromXmlFile(String xmlFile, String metadataFilePath, Mode modeSpecified, boolean withDDI) throws Exception { + VariablesMap variablesMap; + if(withDDI) { + //Parse DDI + log.info("Try to read DDI file : {}", metadataFilePath); + try { + variablesMap = + DDIReader.getMetadataFromDDI(Path.of(metadataFilePath).toFile().toURI().toURL().toString(), + new FileInputStream(metadataFilePath)).getVariables(); + } catch (MetadataParserException e) { + throw new MetadataParserException(e.getMessage()); + } catch (FileNotFoundException e) { + throw new FileNotFoundException(e.getMessage()); + } catch(MalformedURLException e) { + throw new MalformedURLException(e.getMessage()); + } + }else{ + //Parse Lunatic + log.info("Try to read lunatic file : {}", metadataFilePath); + + variablesMap = LunaticReader.getMetadataFromLunatic(new FileInputStream(metadataFilePath)).getVariables(); + } + + log.info("Try to read Xml file : {}", xmlFile); + Path filepath = Paths.get(xmlFile); + + try { + if (getFileSizeInMB(filepath) <= Constants.MAX_FILE_SIZE_UNTIL_SEQUENTIAL) { + processXmlFileWithMemory(filepath, modeSpecified, variablesMap); + return; + } + processXmlFileSequentially(filepath, modeSpecified, variablesMap); + } catch(IOException e) { + throw new IOException(e.getMessage()); + } catch(ParserConfigurationException e) { + throw new ParserConfigurationException(e.getMessage()); + } catch(SAXException e) { + throw new SAXException(e.getMessage()); + } catch(XMLStreamException e) { + throw new XMLStreamException(e.getMessage()); + } catch(GenesisException e) { + throw new GenesisException(e.getStatus(), e.getMessage()); + } + } + + + @Override + public boolean saveResponsesFromXmlCampaignFolder(String campaignName, Mode modeSpecified) throws Exception { + List errors = new ArrayList<>(); + boolean isAnyDataSaved = false; + + log.info("Try to import XML data for campaign: {}", campaignName); + + List modesList = controllerUtils.getModesList(campaignName, modeSpecified); + for (Mode currentMode : modesList) { + try { + processCampaignWithMode(campaignName, currentMode, errors, null); + isAnyDataSaved = true; + }catch (NoDataException nde){ + //Don't stop if NoDataError thrown + log.warn(nde.getMessage()); + }catch (Exception e){ + log.error(ResponseController.CAMPAIGN_ERROR, campaignName, e.toString()); + throw new Exception(e.getMessage()); + } + } + + if (!errors.isEmpty()){ + throw new GenesisException(500, errors.getFirst().getMessage()); + } + return isAnyDataSaved; + } + + + @Override + public void saveResponsesFromAllCampaignFolders() throws NoDataException, GenesisException { + List errors = new ArrayList<>(); + List campaignFolders = fileUtils.listAllSpecsFolders(); + + if (campaignFolders.isEmpty()) { + throw new NoDataException("No campaign to save"); + } + + for (File campaignFolder: campaignFolders) { + String campaignName = campaignFolder.getName(); + log.info("Try to import data for campaign: {}", campaignName); + + try { + List modesList = controllerUtils.getModesList(campaignName, null); //modeSpecified null = all modes + for (Mode currentMode : modesList) { + processCampaignWithMode(campaignName, currentMode, errors, Constants.DIFFERENTIAL_DATA_FOLDER_NAME); + } + }catch (NoDataException nde){ + log.warn(nde.getMessage()); + } + catch (Exception e) { + log.warn(ResponseController.CAMPAIGN_ERROR, campaignName, e.toString()); + errors.add(new GenesisError(e.getMessage())); + } + } + + if (!errors.isEmpty()){ + throw new GenesisException(209, "Data saved with " + errors.size() + " errors"); + } + } + + + @Override + public SurveyUnitQualityToolDto findResponsesByInterrogationAndQuestionnaireLatestStates(String interrogationId, String questionnaireId) throws GenesisException { + //Check context + DataProcessingContextModel dataProcessingContextModel = + contextService.getContext(interrogationId); + + if(dataProcessingContextModel == null || !dataProcessingContextModel.isWithReview()){ + throw new GenesisException(403, new ApiError("Review is disabled for that partition").message()); + } + + SurveyUnitDto response = findLatestValuesByStateByIdAndByQuestionnaireId(interrogationId, questionnaireId); + return DataTransformer.transformSurveyUnitDto(response); + } + + + @Override + public void saveEditedVariables(SurveyUnitInputDto surveyUnitInputDto) throws GenesisException { + log.debug("Received in save edited : {}",surveyUnitInputDto.toString()); + //Code quality : we need to put all that logic out of this controller + //Parse metadata + //Try to look for DDI first, if no DDI found looks for lunatic components + List errors = new ArrayList<>(); + //We need to retrieve campaignId + Set campaignIds = findCampaignIdsFrom(surveyUnitInputDto); + if (campaignIds.size() != 1){ + throw new GenesisException(500, "Impossible to assign one campaignId to that response"); + } + // If the size is equal to 1 we get this campaignId + String campaignId = campaignIds.iterator().next(); + surveyUnitInputDto.setCampaignId(campaignId); + VariablesMap variablesMap = metadataService.readMetadatas(surveyUnitInputDto.getCampaignId(), + surveyUnitInputDto.getMode().getModeName(), fileUtils, errors); + if(variablesMap == null){ + log.warn("Can't find DDI, trying with lunatic..."); + variablesMap = metadataService.readMetadatas(surveyUnitInputDto.getCampaignId(), + surveyUnitInputDto.getMode().getModeName(), fileUtils, errors); + if(variablesMap == null){ + throw new GenesisException(404, errors.getLast().getMessage()); + } + } + + //Check if input edited variables are in metadatas + List absentCollectedVariableNames = + surveyUnitQualityService.checkVariablesPresentInMetadata(surveyUnitInputDto.getCollectedVariables(), + variablesMap); + if (!absentCollectedVariableNames.isEmpty()) { + String absentVariables = String.join("\n", absentCollectedVariableNames); + //400 = Bad Request + throw new GenesisException(400, String.format("The following variables are absent in metadatas : %n%s", absentVariables)); + } + + //Fetch user identifier from OIDC token + String userIdentifier = authUtils.getIDEP(); + + + //Create surveyUnitModel for each STATE received (Quality tool could send variables with another STATE than EDITED) + List surveyUnitModels; + try{ + surveyUnitModels = parseEditedVariables( + surveyUnitInputDto, + userIdentifier, + variablesMap + ); + }catch (GenesisException e){ + throw new GenesisException(e.getStatus(), e.getMessage()); + } + + //Check data with dataverifier (might create a FORCED document) + surveyUnitQualityService.verifySurveyUnits(surveyUnitModels, variablesMap); + + //Save documents + saveSurveyUnits(surveyUnitModels); + } + + + //Utilities + /** + * Process a campaign with a specific mode + * @param campaignName name of campaign + * @param mode mode of collected data + * @param errors error list to fill + */ + private void processCampaignWithMode(String campaignName, Mode mode, List errors, String rootDataFolder) + throws IOException, ParserConfigurationException, SAXException, XMLStreamException, NoDataException, GenesisException { + log.info("Starting data import for mode: {}", mode.getModeName()); + String dataFolder = rootDataFolder == null ? + fileUtils.getDataFolder(campaignName, mode.getFolder(), null) + : fileUtils.getDataFolder(campaignName, mode.getFolder(), rootDataFolder); + List dataFiles = fileUtils.listFiles(dataFolder); + log.info("Number of files to load in folder {} : {}", dataFolder, dataFiles.size()); + if (dataFiles.isEmpty()) { + throw new NoDataException("No data file found in folder %s".formatted(dataFolder)); + } + + VariablesMap variablesMap = metadataService.readMetadatas(campaignName, mode.getModeName(), fileUtils, errors); + if (variablesMap == null){ + return; + } + + //For each XML data file + for (String fileName : dataFiles.stream().filter(s -> s.endsWith(".xml")).toList()) { + processOneXmlFileForCampaign(campaignName, mode, fileName, dataFolder, variablesMap); + } + + //Create context if not exist + if(contextService.getContextByPartitionId(campaignName) == null){ + contextService.saveContext(campaignName, false); + } + + } + + + private void processOneXmlFileForCampaign(String campaignName, + Mode mode, + String fileName, + String dataFolder, + VariablesMap variablesMap) throws IOException, ParserConfigurationException, SAXException, XMLStreamException, GenesisException { + String filepathString = String.format(PATH_FORMAT, dataFolder, fileName); + Path filepath = Paths.get(filepathString); + //Check if file not in done folder, delete if true + if(isDataFileInDoneFolder(filepath, campaignName, mode.getFolder())){ + log.warn("File {} already exists in DONE folder ! Deleting...", fileName); + Files.deleteIfExists(filepath); + return; + } + //Read file + log.info("Try to read Xml file : {}", fileName); + try { + if (getFileSizeInMB(filepath) <= Constants.MAX_FILE_SIZE_UNTIL_SEQUENTIAL) { + processXmlFileWithMemory(filepath, mode, variablesMap); + } else { + processXmlFileSequentially(filepath, mode, variablesMap); + } + log.debug("File {} saved", fileName); + //If no exception has been thrown at this step, all is good then : we can move the file! + fileUtils.moveDataFile(campaignName, mode.getFolder(), filepath); + } catch(GenesisException e) { + log.error("Error {} on file {} : {}", e.getStatus(), fileName, e.getMessage()); + throw new GenesisException(e.getStatus(), e.getMessage()); + } + } + + + private static long getFileSizeInMB(Path filepath) { + return filepath.toFile().length() / 1024 / 1024; + } + + + private boolean isDataFileInDoneFolder(Path filepath, String campaignName, String modeFolder) { + return Path.of(fileUtils.getDoneFolder(campaignName, modeFolder)).resolve(filepath.getFileName()).toFile().exists(); + } + + + private void processXmlFileWithMemory(Path filepath, Mode modeSpecified, VariablesMap variablesMap) throws IOException, ParserConfigurationException, SAXException, GenesisException { + LunaticXmlCampaign campaign; + // DOM method + LunaticXmlDataParser parser = new LunaticXmlDataParser(); + try { + campaign = parser.parseDataFile(filepath); + } catch (GenesisException e) { + log.error(e.toString()); + throw new GenesisException(e.getStatus(), e.getMessage()); + } + + List surveyUnitModels = new ArrayList<>(); + for (LunaticXmlSurveyUnit su : campaign.getSurveyUnits()) { + surveyUnitModels.addAll(LunaticXmlAdapter.convert(su, variablesMap, campaign.getCampaignId(), modeSpecified)); + } + surveyUnitQualityService.verifySurveyUnits(surveyUnitModels, variablesMap); + + log.debug("Saving {} survey units updates", surveyUnitModels.size()); + saveSurveyUnits(surveyUnitModels); + log.debug("Survey units updates saved"); + + log.info("File {} processed with {} survey units", filepath.getFileName(), surveyUnitModels.size()); + } + + + private void processXmlFileSequentially(Path filepath, Mode modeSpecified, VariablesMap variablesMap) throws IOException, XMLStreamException, GenesisException { + LunaticXmlCampaign campaign; + //Sequential method + log.warn("File size > {} MB! Parsing XML file using sequential method...", Constants.MAX_FILE_SIZE_UNTIL_SEQUENTIAL); + try (final InputStream stream = new FileInputStream(filepath.toFile())) { + LunaticXmlDataSequentialParser parser = new LunaticXmlDataSequentialParser(filepath, stream); + int suCount = 0; + + campaign = parser.getCampaign(); + LunaticXmlSurveyUnit su = parser.readNextSurveyUnit(); + contextService.saveContext(campaign.getCampaignId(), false); + + while (su != null) { + List surveyUnitModels = new ArrayList<>(LunaticXmlAdapter.convert(su, variablesMap, campaign.getCampaignId(), modeSpecified)); + + surveyUnitQualityService.verifySurveyUnits(surveyUnitModels, variablesMap); + saveSurveyUnits(surveyUnitModels); + suCount++; + + su = parser.readNextSurveyUnit(); + } + + log.info("Saved {} survey units updates from Xml file {}", suCount, filepath.getFileName()); + } + } + + } diff --git a/src/test/java/cucumber/functional_tests/LunaticModelDefinitions.java b/src/test/java/cucumber/functional_tests/LunaticModelDefinitions.java index 5be2715a..18b7bf4d 100644 --- a/src/test/java/cucumber/functional_tests/LunaticModelDefinitions.java +++ b/src/test/java/cucumber/functional_tests/LunaticModelDefinitions.java @@ -4,16 +4,23 @@ import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import fr.insee.genesis.TestConstants; +import fr.insee.genesis.configuration.Config; import fr.insee.genesis.controller.rest.LunaticModelController; import fr.insee.genesis.controller.rest.responses.QuestionnaireController; import fr.insee.genesis.controller.services.MetadataService; +import fr.insee.genesis.controller.utils.AuthUtils; +import fr.insee.genesis.controller.utils.ControllerUtils; import fr.insee.genesis.domain.model.surveyunit.SurveyUnitModel; +import fr.insee.genesis.domain.ports.api.DataProcessingContextApiPort; +import fr.insee.genesis.domain.service.context.DataProcessingContextService; import fr.insee.genesis.domain.service.lunaticmodel.LunaticModelService; +import fr.insee.genesis.domain.service.surveyunit.SurveyUnitQualityService; import fr.insee.genesis.domain.service.surveyunit.SurveyUnitService; import fr.insee.genesis.domain.utils.JsonUtils; import fr.insee.genesis.infrastructure.document.lunaticmodel.LunaticModelDocument; import fr.insee.genesis.infrastructure.utils.FileUtils; import fr.insee.genesis.stubs.ConfigStub; +import fr.insee.genesis.stubs.DataProcessingContextPersistancePortStub; import fr.insee.genesis.stubs.LunaticModelPersistanceStub; import fr.insee.genesis.stubs.SurveyUnitPersistencePortStub; import io.cucumber.java.Before; @@ -46,11 +53,27 @@ public class LunaticModelDefinitions { LunaticModelController lunaticModelController = new LunaticModelController(new LunaticModelService(lunaticModelPersistanceStub)); SurveyUnitPersistencePortStub surveyUnitPersistencePortStub = new SurveyUnitPersistencePortStub(); + + Config config = new ConfigStub(); + FileUtils fileUtils = new FileUtils(config); + SurveyUnitQualityService surveyUnitQualityService = new SurveyUnitQualityService(); + DataProcessingContextPersistancePortStub dataProcessingContextPersistancePortStub = + new DataProcessingContextPersistancePortStub(); + DataProcessingContextApiPort dataProcessingContextApiPort = new DataProcessingContextService( + dataProcessingContextPersistancePortStub, + surveyUnitPersistencePortStub + ); + + QuestionnaireController questionnaireController = new QuestionnaireController( new SurveyUnitService( surveyUnitPersistencePortStub, new MetadataService(), - new FileUtils(new ConfigStub()) + fileUtils, + dataProcessingContextApiPort, + surveyUnitQualityService, + new ControllerUtils(fileUtils), + new AuthUtils(config) ) ); diff --git a/src/test/java/cucumber/functional_tests/MainDefinitions.java b/src/test/java/cucumber/functional_tests/MainDefinitions.java index 5e44eb3b..a83bbe2f 100644 --- a/src/test/java/cucumber/functional_tests/MainDefinitions.java +++ b/src/test/java/cucumber/functional_tests/MainDefinitions.java @@ -71,18 +71,21 @@ public class MainDefinitions { ); Config config = new ConfigStub(); + FileUtils fileUtils = new FileUtils(config); ResponseEntity> surveyUnitModelResponse; ResponseEntity surveyUnitLatestStatesResponse; - ResponseController responseController = new ResponseController( - new SurveyUnitService(surveyUnitPersistence, new MetadataService(), new FileUtils(config)), - surveyUnitQualityService, - new FileUtils(config), - new ControllerUtils(new FileUtils(config)), - new AuthUtils(config), + SurveyUnitService surveyUnitService = new SurveyUnitService( + surveyUnitPersistence, new MetadataService(), - dataProcessingContextApiPort - ); + fileUtils, + dataProcessingContextApiPort, + surveyUnitQualityService, + new ControllerUtils(fileUtils), + new AuthUtils(config) + ); + + ResponseController responseController = new ResponseController(surveyUnitService); List surveyUnitModels; diff --git a/src/test/java/cucumber/functional_tests/RawDataDefinitions.java b/src/test/java/cucumber/functional_tests/RawDataDefinitions.java index f5ed7f61..1f86abac 100644 --- a/src/test/java/cucumber/functional_tests/RawDataDefinitions.java +++ b/src/test/java/cucumber/functional_tests/RawDataDefinitions.java @@ -5,11 +5,13 @@ import fr.insee.genesis.configuration.Config; import fr.insee.genesis.controller.rest.responses.RawResponseController; import fr.insee.genesis.controller.services.MetadataService; +import fr.insee.genesis.controller.utils.AuthUtils; import fr.insee.genesis.controller.utils.ControllerUtils; import fr.insee.genesis.domain.model.surveyunit.DataState; import fr.insee.genesis.domain.model.surveyunit.Mode; import fr.insee.genesis.domain.model.surveyunit.SurveyUnitModel; import fr.insee.genesis.domain.model.surveyunit.VariableModel; +import fr.insee.genesis.domain.ports.api.DataProcessingContextApiPort; import fr.insee.genesis.domain.service.context.DataProcessingContextService; import fr.insee.genesis.domain.service.rawdata.LunaticJsonRawDataService; import fr.insee.genesis.domain.service.surveyunit.SurveyUnitQualityService; @@ -66,11 +68,24 @@ public class RawDataDefinitions { DataProcessingContextPersistancePortStub contextStub = new DataProcessingContextPersistancePortStub(); Config config = new ConfigStub(); FileUtils fileUtils = new FileUtils(config); - SurveyUnitService surveyUnitService = new SurveyUnitService(surveyUnitPersistencePortStub, metadataService, fileUtils); ControllerUtils controllerUtils = new ControllerUtils(fileUtils); SurveyUnitQualityService surveyUnitQualityService = new SurveyUnitQualityService(); DataProcessingContextPersistancePortStub dataProcessingContextPersistancePortStub = new DataProcessingContextPersistancePortStub(); + DataProcessingContextApiPort dataProcessingContextApiPort = new DataProcessingContextService( + dataProcessingContextPersistancePortStub, + surveyUnitPersistencePortStub + ); + SurveyUnitService surveyUnitService = new SurveyUnitService( + surveyUnitPersistencePortStub, + metadataService, + fileUtils, + dataProcessingContextApiPort, + surveyUnitQualityService, + controllerUtils, + new AuthUtils(config)); + + SurveyUnitQualityToolPerretAdapterStub surveyUnitQualityToolPerretAdapterStub = new SurveyUnitQualityToolPerretAdapterStub(); LunaticJsonRawDataService lunaticJsonRawDataService = new LunaticJsonRawDataService( diff --git a/src/test/java/fr/insee/genesis/controller/rest/HealthCheckControllerTest.java b/src/test/java/fr/insee/genesis/controller/rest/HealthCheckControllerTest.java index b28572b1..2c295868 100644 --- a/src/test/java/fr/insee/genesis/controller/rest/HealthCheckControllerTest.java +++ b/src/test/java/fr/insee/genesis/controller/rest/HealthCheckControllerTest.java @@ -1,12 +1,17 @@ package fr.insee.genesis.controller.rest; +import fr.insee.genesis.configuration.Config; import fr.insee.genesis.controller.services.MetadataService; +import fr.insee.genesis.controller.utils.AuthUtils; +import fr.insee.genesis.controller.utils.ControllerUtils; import fr.insee.genesis.domain.model.surveyunit.DataState; import fr.insee.genesis.domain.model.surveyunit.Mode; import fr.insee.genesis.domain.model.surveyunit.SurveyUnitModel; import fr.insee.genesis.domain.model.surveyunit.VariableModel; +import fr.insee.genesis.domain.ports.api.DataProcessingContextApiPort; import fr.insee.genesis.domain.ports.api.SurveyUnitApiPort; import fr.insee.genesis.domain.service.context.DataProcessingContextService; +import fr.insee.genesis.domain.service.surveyunit.SurveyUnitQualityService; import fr.insee.genesis.domain.service.surveyunit.SurveyUnitService; import fr.insee.genesis.infrastructure.utils.FileUtils; import fr.insee.genesis.stubs.ConfigStub; @@ -27,6 +32,15 @@ class HealthCheckControllerTest { static HealthCheckController healthCheckController; static SurveyUnitPersistencePortStub surveyUnitPersistencePortStub; + static Config config = new ConfigStub(); + static FileUtils fileUtils = new FileUtils(config); + static SurveyUnitQualityService surveyUnitQualityService = new SurveyUnitQualityService(); + static DataProcessingContextPersistancePortStub dataProcessingContextPersistancePortStub = + new DataProcessingContextPersistancePortStub(); + static DataProcessingContextApiPort dataProcessingContextApiPort = new DataProcessingContextService( + dataProcessingContextPersistancePortStub, + surveyUnitPersistencePortStub + ); @BeforeAll static void init() { @@ -34,7 +48,11 @@ static void init() { SurveyUnitApiPort surveyUnitApiPort = new SurveyUnitService( surveyUnitPersistencePortStub, new MetadataService(), - new FileUtils(new ConfigStub()) + fileUtils, + dataProcessingContextApiPort, + surveyUnitQualityService, + new ControllerUtils(fileUtils), + new AuthUtils(config) ); List externalVariableList = new ArrayList<>(); VariableModel variable = VariableModel.builder() 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 b2dd078a..ecbcfd45 100644 --- a/src/test/java/fr/insee/genesis/controller/rest/UtilsControllerTest.java +++ b/src/test/java/fr/insee/genesis/controller/rest/UtilsControllerTest.java @@ -2,6 +2,8 @@ import cucumber.TestConstants; import fr.insee.genesis.Constants; +import fr.insee.genesis.configuration.Config; +import fr.insee.genesis.controller.utils.AuthUtils; import fr.insee.genesis.domain.model.surveyunit.InterrogationId; import fr.insee.genesis.controller.services.MetadataService; import fr.insee.genesis.controller.utils.ControllerUtils; @@ -9,6 +11,7 @@ import fr.insee.genesis.domain.model.surveyunit.Mode; import fr.insee.genesis.domain.model.surveyunit.SurveyUnitModel; import fr.insee.genesis.domain.model.surveyunit.VariableModel; +import fr.insee.genesis.domain.ports.api.DataProcessingContextApiPort; import fr.insee.genesis.domain.ports.api.LunaticJsonRawDataApiPort; import fr.insee.genesis.domain.ports.api.SurveyUnitApiPort; import fr.insee.genesis.domain.ports.spi.DataProcessingContextPersistancePort; @@ -50,11 +53,25 @@ class UtilsControllerTest { static DataProcessingContextPersistancePort contextStub = new DataProcessingContextPersistancePortStub(); static SurveyUnitQualityToolPerretAdapterStub surveyUnitQualityToolPerretAdapterStub; static List interrogationIdList; - static FileUtils fileUtils = new FileUtils(new ConfigStub()); + static Config config = new ConfigStub(); + static FileUtils fileUtils = new FileUtils(config); static ControllerUtils controllerUtils = new ControllerUtils(fileUtils); static MetadataService metadataService = new MetadataService(); - static SurveyUnitService surveyUnitService = new SurveyUnitService(new SurveyUnitPersistencePortStub(), metadataService, fileUtils); + + static DataProcessingContextApiPort dataProcessingContextApiPort = new DataProcessingContextService( + new DataProcessingContextPersistancePortStub(), + surveyUnitPersistencePortStub + ); static SurveyUnitQualityService surveyUnitQualityService = new SurveyUnitQualityService(); + static SurveyUnitService surveyUnitService = new SurveyUnitService( + new SurveyUnitPersistencePortStub(), + metadataService, + fileUtils, + dataProcessingContextApiPort, + surveyUnitQualityService, + controllerUtils, + new AuthUtils(config)); + //Constants static final String DEFAULT_INTERROGATION_ID = "TESTINTERROGATIONID"; static final String DEFAULT_QUESTIONNAIRE_ID = "TESTQUESTIONNAIREID"; @@ -63,7 +80,14 @@ class UtilsControllerTest { static void init() { surveyUnitPersistencePortStub = new SurveyUnitPersistencePortStub(); lunaticJsonRawDataPersistencePort = new LunaticJsonRawDataPersistanceStub(); - SurveyUnitApiPort surveyUnitApiPort = new SurveyUnitService(surveyUnitPersistencePortStub, metadataService, fileUtils); + SurveyUnitApiPort surveyUnitApiPort = new SurveyUnitService( + surveyUnitPersistencePortStub, + metadataService, + fileUtils, + dataProcessingContextApiPort, + surveyUnitQualityService, + controllerUtils, + new AuthUtils(config)); LunaticJsonRawDataApiPort lunaticJsonRawDataApiPort = new LunaticJsonRawDataService( lunaticJsonRawDataPersistencePort, controllerUtils, diff --git a/src/test/java/fr/insee/genesis/controller/rest/responses/CampaignControllerTest.java b/src/test/java/fr/insee/genesis/controller/rest/responses/CampaignControllerTest.java index 94c39b81..3aa183a9 100644 --- a/src/test/java/fr/insee/genesis/controller/rest/responses/CampaignControllerTest.java +++ b/src/test/java/fr/insee/genesis/controller/rest/responses/CampaignControllerTest.java @@ -1,11 +1,18 @@ package fr.insee.genesis.controller.rest.responses; +import fr.insee.genesis.configuration.Config; import fr.insee.genesis.controller.dto.CampaignWithQuestionnaire; import fr.insee.genesis.controller.services.MetadataService; +import fr.insee.genesis.controller.utils.AuthUtils; +import fr.insee.genesis.controller.utils.ControllerUtils; +import fr.insee.genesis.domain.ports.api.DataProcessingContextApiPort; import fr.insee.genesis.domain.ports.api.SurveyUnitApiPort; +import fr.insee.genesis.domain.service.context.DataProcessingContextService; +import fr.insee.genesis.domain.service.surveyunit.SurveyUnitQualityService; import fr.insee.genesis.domain.service.surveyunit.SurveyUnitService; import fr.insee.genesis.infrastructure.utils.FileUtils; import fr.insee.genesis.stubs.ConfigStub; +import fr.insee.genesis.stubs.DataProcessingContextPersistancePortStub; import fr.insee.genesis.stubs.SurveyUnitPersistencePortStub; import org.assertj.core.api.Assertions; import org.junit.jupiter.api.BeforeAll; @@ -22,6 +29,15 @@ class CampaignControllerTest { static CampaignController campaignControllerStatic; static SurveyUnitPersistencePortStub surveyUnitPersistencePortStub; + static Config config = new ConfigStub(); + static FileUtils fileUtils = new FileUtils(config); + static DataProcessingContextPersistancePortStub dataProcessingContextPersistancePortStub = + new DataProcessingContextPersistancePortStub(); + static DataProcessingContextApiPort dataProcessingContextApiPort = new DataProcessingContextService( + dataProcessingContextPersistancePortStub, + surveyUnitPersistencePortStub + ); + //Constants static final String DEFAULT_INTERROGATION_ID = "TESTINTERROGATIONID"; static final String DEFAULT_QUESTIONNAIRE_ID = "TESTQUESTIONNAIREID"; @@ -32,7 +48,11 @@ static void init() { SurveyUnitApiPort surveyUnitApiPort = new SurveyUnitService( surveyUnitPersistencePortStub, new MetadataService(), - new FileUtils(new ConfigStub()) + fileUtils, + dataProcessingContextApiPort, + new SurveyUnitQualityService(), + new ControllerUtils(fileUtils), + new AuthUtils(config) ); campaignControllerStatic = new CampaignController( surveyUnitApiPort ); diff --git a/src/test/java/fr/insee/genesis/controller/rest/responses/InterrogationControllerTest.java b/src/test/java/fr/insee/genesis/controller/rest/responses/InterrogationControllerTest.java index e1a45d79..0b26b82c 100644 --- a/src/test/java/fr/insee/genesis/controller/rest/responses/InterrogationControllerTest.java +++ b/src/test/java/fr/insee/genesis/controller/rest/responses/InterrogationControllerTest.java @@ -1,11 +1,18 @@ package fr.insee.genesis.controller.rest.responses; +import fr.insee.genesis.configuration.Config; +import fr.insee.genesis.controller.utils.AuthUtils; +import fr.insee.genesis.controller.utils.ControllerUtils; import fr.insee.genesis.domain.model.surveyunit.InterrogationId; import fr.insee.genesis.controller.services.MetadataService; +import fr.insee.genesis.domain.ports.api.DataProcessingContextApiPort; import fr.insee.genesis.domain.ports.api.SurveyUnitApiPort; +import fr.insee.genesis.domain.service.context.DataProcessingContextService; +import fr.insee.genesis.domain.service.surveyunit.SurveyUnitQualityService; import fr.insee.genesis.domain.service.surveyunit.SurveyUnitService; import fr.insee.genesis.infrastructure.utils.FileUtils; import fr.insee.genesis.stubs.ConfigStub; +import fr.insee.genesis.stubs.DataProcessingContextPersistancePortStub; import fr.insee.genesis.stubs.SurveyUnitPersistencePortStub; import org.assertj.core.api.Assertions; import org.junit.jupiter.api.BeforeAll; @@ -24,13 +31,26 @@ class InterrogationControllerTest { static InterrogationController interrogationControllerStatic; static SurveyUnitPersistencePortStub surveyUnitPersistencePortStub; + static Config config = new ConfigStub(); + static FileUtils fileUtils = new FileUtils(config); + static DataProcessingContextPersistancePortStub dataProcessingContextPersistancePortStub = + new DataProcessingContextPersistancePortStub(); + static DataProcessingContextApiPort dataProcessingContextApiPort = new DataProcessingContextService( + dataProcessingContextPersistancePortStub, + surveyUnitPersistencePortStub + ); + @BeforeAll static void init() { surveyUnitPersistencePortStub = new SurveyUnitPersistencePortStub(); SurveyUnitApiPort surveyUnitApiPort = new SurveyUnitService( surveyUnitPersistencePortStub, new MetadataService(), - new FileUtils(new ConfigStub()) + fileUtils, + dataProcessingContextApiPort, + new SurveyUnitQualityService(), + new ControllerUtils(fileUtils), + new AuthUtils(config) ); interrogationControllerStatic = new InterrogationController( surveyUnitApiPort ); diff --git a/src/test/java/fr/insee/genesis/controller/rest/responses/ModeControllerTest.java b/src/test/java/fr/insee/genesis/controller/rest/responses/ModeControllerTest.java index db5c0f84..e664daeb 100644 --- a/src/test/java/fr/insee/genesis/controller/rest/responses/ModeControllerTest.java +++ b/src/test/java/fr/insee/genesis/controller/rest/responses/ModeControllerTest.java @@ -1,11 +1,18 @@ package fr.insee.genesis.controller.rest.responses; +import fr.insee.genesis.configuration.Config; import fr.insee.genesis.controller.services.MetadataService; +import fr.insee.genesis.controller.utils.AuthUtils; +import fr.insee.genesis.controller.utils.ControllerUtils; import fr.insee.genesis.domain.model.surveyunit.Mode; +import fr.insee.genesis.domain.ports.api.DataProcessingContextApiPort; import fr.insee.genesis.domain.ports.api.SurveyUnitApiPort; +import fr.insee.genesis.domain.service.context.DataProcessingContextService; +import fr.insee.genesis.domain.service.surveyunit.SurveyUnitQualityService; import fr.insee.genesis.domain.service.surveyunit.SurveyUnitService; import fr.insee.genesis.infrastructure.utils.FileUtils; import fr.insee.genesis.stubs.ConfigStub; +import fr.insee.genesis.stubs.DataProcessingContextPersistancePortStub; import fr.insee.genesis.stubs.SurveyUnitPersistencePortStub; import org.assertj.core.api.Assertions; import org.junit.jupiter.api.BeforeAll; @@ -24,13 +31,26 @@ class ModeControllerTest { static ModeController modeControllerStatic; static SurveyUnitPersistencePortStub surveyUnitPersistencePortStub; + static Config config = new ConfigStub(); + static FileUtils fileUtils = new FileUtils(config); + static DataProcessingContextPersistancePortStub dataProcessingContextPersistancePortStub = + new DataProcessingContextPersistancePortStub(); + static DataProcessingContextApiPort dataProcessingContextApiPort = new DataProcessingContextService( + dataProcessingContextPersistancePortStub, + surveyUnitPersistencePortStub + ); + @BeforeAll static void init() { surveyUnitPersistencePortStub = new SurveyUnitPersistencePortStub(); SurveyUnitApiPort surveyUnitApiPort = new SurveyUnitService( surveyUnitPersistencePortStub, new MetadataService(), - new FileUtils(new ConfigStub()) + fileUtils, + dataProcessingContextApiPort, + new SurveyUnitQualityService(), + new ControllerUtils(fileUtils), + new AuthUtils(config) ); modeControllerStatic = new ModeController( surveyUnitApiPort ); diff --git a/src/test/java/fr/insee/genesis/controller/rest/responses/QuestionnaireControllerTest.java b/src/test/java/fr/insee/genesis/controller/rest/responses/QuestionnaireControllerTest.java index d4ca486c..0067c600 100644 --- a/src/test/java/fr/insee/genesis/controller/rest/responses/QuestionnaireControllerTest.java +++ b/src/test/java/fr/insee/genesis/controller/rest/responses/QuestionnaireControllerTest.java @@ -1,11 +1,18 @@ package fr.insee.genesis.controller.rest.responses; +import fr.insee.genesis.configuration.Config; import fr.insee.genesis.controller.dto.QuestionnaireWithCampaign; import fr.insee.genesis.controller.services.MetadataService; +import fr.insee.genesis.controller.utils.AuthUtils; +import fr.insee.genesis.controller.utils.ControllerUtils; +import fr.insee.genesis.domain.ports.api.DataProcessingContextApiPort; import fr.insee.genesis.domain.ports.api.SurveyUnitApiPort; +import fr.insee.genesis.domain.service.context.DataProcessingContextService; +import fr.insee.genesis.domain.service.surveyunit.SurveyUnitQualityService; import fr.insee.genesis.domain.service.surveyunit.SurveyUnitService; import fr.insee.genesis.infrastructure.utils.FileUtils; import fr.insee.genesis.stubs.ConfigStub; +import fr.insee.genesis.stubs.DataProcessingContextPersistancePortStub; import fr.insee.genesis.stubs.SurveyUnitPersistencePortStub; import org.assertj.core.api.Assertions; import org.junit.jupiter.api.BeforeAll; @@ -24,13 +31,26 @@ class QuestionnaireControllerTest { static QuestionnaireController questionnaireControllerStatic; static SurveyUnitPersistencePortStub surveyUnitPersistencePortStub; + static Config config = new ConfigStub(); + static FileUtils fileUtils = new FileUtils(config); + static DataProcessingContextPersistancePortStub dataProcessingContextPersistancePortStub = + new DataProcessingContextPersistancePortStub(); + static DataProcessingContextApiPort dataProcessingContextApiPort = new DataProcessingContextService( + dataProcessingContextPersistancePortStub, + surveyUnitPersistencePortStub + ); + @BeforeAll static void init() { surveyUnitPersistencePortStub = new SurveyUnitPersistencePortStub(); SurveyUnitApiPort surveyUnitApiPort = new SurveyUnitService( surveyUnitPersistencePortStub, new MetadataService(), - new FileUtils(new ConfigStub()) + fileUtils, + dataProcessingContextApiPort, + new SurveyUnitQualityService(), + new ControllerUtils(fileUtils), + new AuthUtils(config) ); questionnaireControllerStatic = new QuestionnaireController(surveyUnitApiPort); 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 434181ac..224cdc0e 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 @@ -1,13 +1,16 @@ package fr.insee.genesis.controller.rest.responses; +import fr.insee.genesis.configuration.Config; import fr.insee.genesis.controller.dto.rawdata.LunaticJsonRawDataUnprocessedDto; import fr.insee.genesis.controller.services.MetadataService; +import fr.insee.genesis.controller.utils.AuthUtils; import fr.insee.genesis.controller.utils.ControllerUtils; import fr.insee.genesis.domain.model.context.DataProcessingContextModel; import fr.insee.genesis.domain.model.surveyunit.DataState; import fr.insee.genesis.domain.model.surveyunit.Mode; import fr.insee.genesis.domain.model.surveyunit.rawdata.LunaticJsonRawDataModel; +import fr.insee.genesis.domain.ports.api.DataProcessingContextApiPort; import fr.insee.genesis.domain.ports.api.LunaticJsonRawDataApiPort; import fr.insee.genesis.domain.service.context.DataProcessingContextService; import fr.insee.genesis.domain.service.rawdata.LunaticJsonRawDataService; @@ -35,22 +38,39 @@ import java.util.Map; class RawResponseControllerTest { - private final FileUtils fileUtils = new FileUtils(new ConfigStub()); + Config config = new ConfigStub(); + private final FileUtils fileUtils = new FileUtils(config); private final LunaticJsonRawDataPersistanceStub lunaticJsonRawDataPersistanceStub = new LunaticJsonRawDataPersistanceStub(); private final SurveyUnitPersistencePortStub surveyUnitPersistencePortStub = new SurveyUnitPersistencePortStub(); private final SurveyUnitQualityToolPerretAdapterStub surveyUnitQualityToolPerretAdapterStub = new SurveyUnitQualityToolPerretAdapterStub(); private final DataProcessingContextPersistancePortStub dataProcessingContextPersistancePortStub = new DataProcessingContextPersistancePortStub(); + private final DataProcessingContextApiPort dataProcessingContextApiPort = new DataProcessingContextService( + dataProcessingContextPersistancePortStub, + surveyUnitPersistencePortStub + ); + MetadataService metadataService = new MetadataService(); + SurveyUnitQualityService surveyUnitQualityService = new SurveyUnitQualityService(); + ControllerUtils controllerUtils = new ControllerUtils(fileUtils); + SurveyUnitService surveyUnitService = new SurveyUnitService( + surveyUnitPersistencePortStub, + metadataService, + fileUtils, + dataProcessingContextApiPort, + surveyUnitQualityService, + controllerUtils, + new AuthUtils(config) + ); private final LunaticJsonRawDataApiPort lunaticJsonRawDataApiPort = new LunaticJsonRawDataService(lunaticJsonRawDataPersistanceStub, - new ControllerUtils(fileUtils), - new MetadataService(), - new SurveyUnitService(surveyUnitPersistencePortStub, new MetadataService(), fileUtils), - new SurveyUnitQualityService(), + controllerUtils, + metadataService, + surveyUnitService, + surveyUnitQualityService, fileUtils, new DataProcessingContextService(dataProcessingContextPersistancePortStub, surveyUnitPersistencePortStub), surveyUnitQualityToolPerretAdapterStub, - new ConfigStub(), - new DataProcessingContextPersistancePortStub() + config, + dataProcessingContextPersistancePortStub ); private final RawResponseController rawResponseController = new RawResponseController(lunaticJsonRawDataApiPort); 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 4b37f937..806935c5 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 @@ -64,18 +64,14 @@ static void init() { SurveyUnitApiPort surveyUnitApiPort = new SurveyUnitService( surveyUnitPersistencePortStub, new MetadataService(), - fileUtils + fileUtils, + new DataProcessingContextService(dataProcessingContextPersistancePortStub, surveyUnitPersistencePortStub), + new SurveyUnitQualityService(), + new ControllerUtils(fileUtils), + new AuthUtils(config) ); - responseControllerStatic = new ResponseController( - surveyUnitApiPort - , new SurveyUnitQualityService() - , fileUtils - , new ControllerUtils(fileUtils) - , new AuthUtils(config) - , new MetadataService() - , new DataProcessingContextService(dataProcessingContextPersistancePortStub, surveyUnitPersistencePortStub) - ); + responseControllerStatic = new ResponseController(surveyUnitApiPort); interrogationIdList = new ArrayList<>(); interrogationIdList.add(new InterrogationId(DEFAULT_INTERROGATION_ID)); diff --git a/src/test/java/fr/insee/genesis/domain/service/SurveyUnitServiceTest.java b/src/test/java/fr/insee/genesis/domain/service/SurveyUnitServiceTest.java index d56d4b49..00ba59d4 100644 --- a/src/test/java/fr/insee/genesis/domain/service/SurveyUnitServiceTest.java +++ b/src/test/java/fr/insee/genesis/domain/service/SurveyUnitServiceTest.java @@ -1,15 +1,22 @@ package fr.insee.genesis.domain.service; +import fr.insee.genesis.configuration.Config; import fr.insee.genesis.controller.dto.SurveyUnitDto; import fr.insee.genesis.controller.dto.VariableDto; import fr.insee.genesis.controller.services.MetadataService; +import fr.insee.genesis.controller.utils.AuthUtils; +import fr.insee.genesis.controller.utils.ControllerUtils; import fr.insee.genesis.domain.model.surveyunit.DataState; import fr.insee.genesis.domain.model.surveyunit.Mode; import fr.insee.genesis.domain.model.surveyunit.SurveyUnitModel; import fr.insee.genesis.domain.model.surveyunit.VariableModel; +import fr.insee.genesis.domain.ports.api.DataProcessingContextApiPort; +import fr.insee.genesis.domain.service.context.DataProcessingContextService; +import fr.insee.genesis.domain.service.surveyunit.SurveyUnitQualityService; import fr.insee.genesis.domain.service.surveyunit.SurveyUnitService; import fr.insee.genesis.infrastructure.utils.FileUtils; import fr.insee.genesis.stubs.ConfigStub; +import fr.insee.genesis.stubs.DataProcessingContextPersistancePortStub; import fr.insee.genesis.stubs.SurveyUnitPersistencePortStub; import org.assertj.core.api.Assertions; import org.junit.jupiter.api.BeforeAll; @@ -28,6 +35,15 @@ class SurveyUnitServiceTest { static SurveyUnitService surveyUnitServiceStatic; static SurveyUnitPersistencePortStub surveyUnitPersistencePortStub; + static Config config = new ConfigStub(); + static FileUtils fileUtils = new FileUtils(config); + static DataProcessingContextPersistancePortStub dataProcessingContextPersistancePortStub = + new DataProcessingContextPersistancePortStub(); + static DataProcessingContextApiPort dataProcessingContextApiPort = new DataProcessingContextService( + dataProcessingContextPersistancePortStub, + surveyUnitPersistencePortStub + ); + //Constants static final String DEFAULT_INTERROGATION_ID = "TESTINTERROGATIONID"; static final String DEFAULT_QUESTIONNAIRE_ID = "TESTQUESTIONNAIREID"; @@ -36,8 +52,15 @@ class SurveyUnitServiceTest { static void init(){ surveyUnitPersistencePortStub = new SurveyUnitPersistencePortStub(); - surveyUnitServiceStatic = new SurveyUnitService(surveyUnitPersistencePortStub, new MetadataService(), - new FileUtils(new ConfigStub())); + surveyUnitServiceStatic = new SurveyUnitService( + surveyUnitPersistencePortStub, + new MetadataService(), + fileUtils, + dataProcessingContextApiPort, + new SurveyUnitQualityService(), + new ControllerUtils(fileUtils), + new AuthUtils(config) + ); } @BeforeEach diff --git a/src/test/java/fr/insee/genesis/domain/service/rawdata/LunaticJsonRawDataServiceTest.java b/src/test/java/fr/insee/genesis/domain/service/rawdata/LunaticJsonRawDataServiceTest.java index dc6f1b67..d9a7d66c 100644 --- a/src/test/java/fr/insee/genesis/domain/service/rawdata/LunaticJsonRawDataServiceTest.java +++ b/src/test/java/fr/insee/genesis/domain/service/rawdata/LunaticJsonRawDataServiceTest.java @@ -2,7 +2,9 @@ import com.fasterxml.jackson.core.JsonProcessingException; import fr.insee.bpm.metadata.model.VariablesMap; +import fr.insee.genesis.configuration.Config; import fr.insee.genesis.controller.services.MetadataService; +import fr.insee.genesis.controller.utils.AuthUtils; import fr.insee.genesis.controller.utils.ControllerUtils; import fr.insee.genesis.domain.model.context.DataProcessingContextModel; import fr.insee.genesis.domain.model.surveyunit.DataState; @@ -10,6 +12,7 @@ import fr.insee.genesis.domain.model.surveyunit.SurveyUnitModel; import fr.insee.genesis.domain.model.surveyunit.rawdata.DataProcessResult; import fr.insee.genesis.domain.model.surveyunit.rawdata.LunaticJsonRawDataModel; +import fr.insee.genesis.domain.ports.api.DataProcessingContextApiPort; import fr.insee.genesis.domain.service.context.DataProcessingContextService; import fr.insee.genesis.domain.service.surveyunit.SurveyUnitQualityService; import fr.insee.genesis.domain.service.surveyunit.SurveyUnitService; @@ -35,14 +38,28 @@ class LunaticJsonRawDataServiceTest { LunaticJsonRawDataPersistanceStub lunaticJsonRawDataPersistanceStub = new LunaticJsonRawDataPersistanceStub(); - FileUtils fileUtils = new FileUtils(new ConfigStub()); + Config config = new ConfigStub(); + FileUtils fileUtils = new FileUtils(config); ControllerUtils controllerUtils = new ControllerUtils(fileUtils); MetadataService metadataService = new MetadataService(); SurveyUnitPersistencePortStub surveyUnitPersistencePortStub = new SurveyUnitPersistencePortStub(); - SurveyUnitService surveyUnitService = new SurveyUnitService(surveyUnitPersistencePortStub, metadataService, fileUtils); SurveyUnitQualityService surveyUnitQualityService = new SurveyUnitQualityService(); DataProcessingContextPersistancePortStub dataProcessingContextPersistancePortStub = new DataProcessingContextPersistancePortStub(); + DataProcessingContextApiPort dataProcessingContextApiPort = new DataProcessingContextService( + dataProcessingContextPersistancePortStub, + surveyUnitPersistencePortStub + ); + SurveyUnitService surveyUnitService = new SurveyUnitService( + surveyUnitPersistencePortStub, + metadataService, + fileUtils, + dataProcessingContextApiPort, + surveyUnitQualityService, + controllerUtils, + new AuthUtils(config) + ); + SurveyUnitQualityToolPerretAdapterStub surveyUnitQualityToolPerretAdapterStub = new SurveyUnitQualityToolPerretAdapterStub(); ConfigStub configStub = new ConfigStub(); LunaticJsonRawDataService lunaticJsonRawDataService = @@ -50,8 +67,8 @@ class LunaticJsonRawDataServiceTest { lunaticJsonRawDataPersistanceStub, controllerUtils, metadataService, - new SurveyUnitService(surveyUnitPersistencePortStub, metadataService, fileUtils), - new SurveyUnitQualityService(), + surveyUnitService, + surveyUnitQualityService, fileUtils, new DataProcessingContextService(dataProcessingContextPersistancePortStub, surveyUnitPersistencePortStub), surveyUnitQualityToolPerretAdapterStub,