Skip to content

Commit 4dfcf6a

Browse files
Merge pull request #148 from InseeFr/devSaveFolderHotfix
Fix save folder saving only 1 file at a time
2 parents 38be775 + 4708d1c commit 4dfcf6a

File tree

9 files changed

+289752
-12
lines changed

9 files changed

+289752
-12
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,3 +47,4 @@ hs_err_pid*
4747
src/test/resources/OUT/*
4848
/src/test/resources/DONE/*
4949
/src/test/resources/genesis_deleted_schedules/*
50+
/src/test/resources/IN/WEB/SAMPLETEST/

src/main/java/fr/insee/genesis/controller/rest/responses/ResponseController.java

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -422,7 +422,7 @@ private void processCampaignWithMode(String campaignName, Mode mode, List<Genesi
422422
if(isDataFileInDoneFolder(filepath, campaignName, mode.getFolder())){
423423
log.warn("File {} already exists in DONE folder ! Deleting...", fileName);
424424
Files.deleteIfExists(filepath);
425-
return;
425+
continue; //Go to next file
426426
}
427427
//Read file
428428
log.info("Try to read Xml file : {}", fileName);
@@ -433,11 +433,13 @@ private void processCampaignWithMode(String campaignName, Mode mode, List<Genesi
433433
response = processXmlFileSequentially(filepath, mode, variablesMap);
434434
}
435435
log.debug("File {} saved", fileName);
436-
if(response.getStatusCode() == HttpStatus.OK){
437-
fileUtils.moveDataFile(campaignName, mode.getFolder(), filepath);
438-
return;
436+
if (response.getStatusCode() == HttpStatus.OK) {
437+
fileUtils.moveDataFile(campaignName, mode.getFolder(),
438+
filepath);
439+
//Sonar is annoying when there is more than 1 continue
440+
} else {
441+
log.error("Error {} on file {} : {}", response.getStatusCode(), fileName, response.getBody());
439442
}
440-
log.error("Error on file {}", fileName);
441443
}
442444
}
443445

src/test/java/cucumber/functional_tests/MainDefinitions.java

Lines changed: 73 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,30 @@
44
import fr.insee.bpm.exceptions.MetadataParserException;
55
import fr.insee.bpm.metadata.model.VariablesMap;
66
import fr.insee.bpm.metadata.reader.ddi.DDIReader;
7+
import fr.insee.genesis.configuration.Config;
78
import fr.insee.genesis.controller.adapter.LunaticXmlAdapter;
8-
import fr.insee.genesis.domain.model.surveyunit.SurveyUnitModel;
9-
import fr.insee.genesis.domain.service.surveyunit.SurveyUnitQualityService;
9+
import fr.insee.genesis.controller.rest.responses.ResponseController;
1010
import fr.insee.genesis.controller.sources.xml.LunaticXmlCampaign;
1111
import fr.insee.genesis.controller.sources.xml.LunaticXmlDataParser;
1212
import fr.insee.genesis.controller.sources.xml.LunaticXmlSurveyUnit;
13+
import fr.insee.genesis.controller.utils.ControllerUtils;
1314
import fr.insee.genesis.domain.model.surveyunit.CollectedVariable;
1415
import fr.insee.genesis.domain.model.surveyunit.DataState;
1516
import fr.insee.genesis.domain.model.surveyunit.Mode;
17+
import fr.insee.genesis.domain.model.surveyunit.SurveyUnitModel;
1618
import fr.insee.genesis.domain.model.surveyunit.Variable;
19+
import fr.insee.genesis.domain.service.rawdata.LunaticJsonRawDataService;
20+
import fr.insee.genesis.domain.service.rawdata.LunaticXmlRawDataService;
21+
import fr.insee.genesis.domain.service.surveyunit.SurveyUnitQualityService;
22+
import fr.insee.genesis.domain.service.surveyunit.SurveyUnitService;
1723
import fr.insee.genesis.exceptions.GenesisException;
24+
import fr.insee.genesis.infrastructure.utils.FileUtils;
25+
import fr.insee.genesis.stubs.ConfigStub;
26+
import fr.insee.genesis.stubs.LunaticJsonPersistanceStub;
27+
import fr.insee.genesis.stubs.LunaticXmlPersistanceStub;
28+
import fr.insee.genesis.stubs.SurveyUnitPersistencePortStub;
29+
import io.cucumber.java.After;
30+
import io.cucumber.java.Before;
1831
import io.cucumber.java.en.Given;
1932
import io.cucumber.java.en.Then;
2033
import io.cucumber.java.en.When;
@@ -24,8 +37,10 @@
2437
import javax.xml.parsers.ParserConfigurationException;
2538
import java.io.FileInputStream;
2639
import java.io.IOException;
40+
import java.nio.file.Files;
2741
import java.nio.file.Path;
2842
import java.nio.file.Paths;
43+
import java.nio.file.StandardCopyOption;
2944
import java.util.ArrayList;
3045
import java.util.List;
3146
import java.util.Optional;
@@ -36,19 +51,37 @@ public class MainDefinitions {
3651
final Path ddiDirectory = Paths.get(TestConstants.FUNCTIONAL_TESTS_DDI_DIRECTORY);
3752

3853
SurveyUnitQualityService surveyUnitQualityService = new SurveyUnitQualityService();
54+
SurveyUnitPersistencePortStub surveyUnitPersistence = new SurveyUnitPersistencePortStub();
55+
Config config = new ConfigStub();
56+
57+
ResponseController responseController = new ResponseController(
58+
new SurveyUnitService(surveyUnitPersistence),
59+
surveyUnitQualityService,
60+
new LunaticXmlRawDataService(new LunaticXmlPersistanceStub()),
61+
new LunaticJsonRawDataService(new LunaticJsonPersistanceStub()),
62+
new FileUtils(config),
63+
new ControllerUtils(new FileUtils(config))
64+
);
3965

4066
List<SurveyUnitModel> surveyUnitModels;
4167

68+
@Before
69+
public void init() {
70+
this.surveyUnitPersistence.getMongoStub().clear();
71+
}
72+
4273
@Given("We have data in directory {string}")
43-
public void init(String directory){
74+
public void init_folder(String directory) throws IOException {
4475
this.directory = directory;
4576
inDirectory = inDirectory.resolve(directory);
77+
Files.createDirectories(inDirectory);
4678
}
4779

4880
@When("We create DTOs from file {string} with DDI {string}")
49-
public void get_dtos(String fileName, String DDIName) throws IOException, ParserConfigurationException, SAXException, GenesisException, MetadataParserException {
81+
public void get_dtos(String fileName, String ddiName) throws IOException, ParserConfigurationException,
82+
SAXException, GenesisException, MetadataParserException {
5083
Path filePath = inDirectory.resolve(fileName);
51-
Path ddiFilePath = ddiDirectory.resolve(directory).resolve(DDIName);
84+
Path ddiFilePath = ddiDirectory.resolve(directory).resolve(ddiName);
5285

5386
if(fileName.endsWith(".xml")){
5487
LunaticXmlDataParser parser = new LunaticXmlDataParser();
@@ -67,6 +100,32 @@ public void get_dtos(String fileName, String DDIName) throws IOException, Parser
67100
}
68101
}
69102

103+
@When("We copy data file {string} to that directory")
104+
public void copy_data_file(String dataFile) throws IOException {
105+
Path dataFilePath = Paths.get(TestConstants.TEST_RESOURCES_DIRECTORY).resolve(dataFile);
106+
Files.copy(dataFilePath, this.inDirectory.resolve(dataFilePath.getFileName().toString()),
107+
StandardCopyOption.REPLACE_EXISTING);
108+
}
109+
110+
@When("We save data from that directory")
111+
public void get_dtos_from_folder() throws Exception {
112+
responseController.saveResponsesFromXmlCampaignFolder(this.inDirectory.getFileName().toString(), null, true);
113+
}
114+
115+
@When("We delete that directory")
116+
public void delete_directory() throws IOException {
117+
org.springframework.util.FileSystemUtils.deleteRecursively(inDirectory);
118+
}
119+
120+
@Then("There should be {int} {string} SurveyUnit in database")
121+
public void check_surveyunits_by_state(int expectedCount, String expectedStatus) {
122+
Assertions.assertThat(this.surveyUnitPersistence.getMongoStub().stream().filter(
123+
surveyUnitModel -> surveyUnitModel.getState().name().equals(expectedStatus)
124+
).toList()).hasSize(expectedCount);
125+
}
126+
127+
128+
70129
@Then("For SurveyUnit {string} there should be at least one {string} SurveyUnit DTO")
71130
public void check_expected_datastate_dto(String surveyUnitId, String expectedDataState) {
72131
Assertions.assertThat(this.surveyUnitModels).filteredOn(surveyUnitDto ->
@@ -76,9 +135,9 @@ public void check_expected_datastate_dto(String surveyUnitId, String expectedDat
76135
}
77136

78137
@Then("For SurveyUnit {string} there shouldn't be a {string} SurveyUnit DTO")
79-
public void check_unexpected_datastate_dto(String surveyUnitId, String UnexpectedDataState) {
138+
public void check_unexpected_datastate_dto(String surveyUnitId, String unexpectedDataState) {
80139
Assertions.assertThat(this.surveyUnitModels).filteredOn(surveyUnitDto ->
81-
surveyUnitDto.getState().toString().equals(UnexpectedDataState)
140+
surveyUnitDto.getState().toString().equals(unexpectedDataState)
82141
&& surveyUnitDto.getIdUE().equals(surveyUnitId)
83142
).isEmpty();
84143
}
@@ -185,4 +244,11 @@ public void external_variable_content_check(String externalVariableName, String
185244
Assertions.assertThat(concernedVariable.getValues()).hasSizeGreaterThan(expectedValueIndex);
186245
Assertions.assertThat(concernedVariable.getValues().get(expectedValueIndex)).isEqualTo(expectedValue);
187246
}
247+
248+
@After
249+
public void clean() throws IOException {
250+
//Clean DONE test folder
251+
org.springframework.util.FileSystemUtils.deleteRecursively(Path.of(TestConstants.TEST_RESOURCES_DIRECTORY,
252+
"DONE"));
253+
}
188254
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<Campaign>
3+
<Id>SAMPLETEST-PARADATA-v1</Id>
4+
<Label />
5+
<SurveyUnits />
6+
</Campaign>

0 commit comments

Comments
 (0)