Skip to content

Commit a65d5cd

Browse files
committed
Merge branch 'devRawDataProcessing' into develop
2 parents f871779 + 6804728 commit a65d5cd

File tree

7 files changed

+174
-229
lines changed

7 files changed

+174
-229
lines changed

pom.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,12 @@
138138
<version>${cucumber.version}</version>
139139
<scope>test</scope>
140140
</dependency>
141+
<dependency>
142+
<groupId>io.cucumber</groupId>
143+
<artifactId>cucumber-spring</artifactId>
144+
<version>${cucumber.version}</version>
145+
<scope>test</scope>
146+
</dependency>
141147

142148

143149
<dependency>

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,8 @@ public RawResponseController(LunaticJsonRawDataApiPort lunaticJsonRawDataApiPort
5656
@Operation(summary = "Save lunatic json data from one interrogation in Genesis Database")
5757
@PutMapping(path = "/lunatic-json/save")
5858
@PreAuthorize("hasRole('COLLECT_PLATFORM')")
59-
public ResponseEntity<Object> saveRawResponsesFromJsonBody(
59+
public ResponseEntity<String> saveRawResponsesFromJsonBody(
60+
6061
@RequestParam("campaignName") String campaignName,
6162
@RequestParam("questionnaireId") String questionnaireId,
6263
@RequestParam("interrogationId") String interrogationId,
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package cucumber.config;
2+
3+
4+
import fr.insee.genesis.GenesisApi;
5+
import io.cucumber.spring.CucumberContextConfiguration;
6+
import org.springframework.boot.test.context.SpringBootTest;
7+
8+
@CucumberContextConfiguration
9+
@SpringBootTest(classes = GenesisApi.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
10+
public class CucumberSpringConfiguration {
11+
}
12+
Lines changed: 65 additions & 194 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,51 @@
11
package cucumber.functional_tests;
22

3+
import fr.insee.genesis.TestConstants;
4+
import fr.insee.genesis.configuration.Config;
5+
import fr.insee.genesis.controller.rest.responses.RawResponseController;
6+
import fr.insee.genesis.controller.services.MetadataService;
7+
import fr.insee.genesis.controller.utils.ControllerUtils;
8+
import fr.insee.genesis.domain.model.surveyunit.Mode;
9+
import fr.insee.genesis.domain.ports.api.LunaticJsonRawDataApiPort;
10+
import fr.insee.genesis.domain.service.rawdata.LunaticJsonRawDataService;
11+
import fr.insee.genesis.domain.service.surveyunit.SurveyUnitQualityService;
12+
import fr.insee.genesis.domain.service.surveyunit.SurveyUnitService;
13+
import fr.insee.genesis.infrastructure.utils.FileUtils;
14+
import fr.insee.genesis.stubs.ConfigStub;
15+
import fr.insee.genesis.stubs.LunaticJsonRawDataPersistanceStub;
16+
import fr.insee.genesis.stubs.SurveyUnitPersistencePortStub;
17+
import io.cucumber.java.Before;
18+
import io.cucumber.java.en.Given;
19+
import io.cucumber.java.en.Then;
20+
import io.cucumber.java.en.When;
21+
import lombok.extern.slf4j.Slf4j;
22+
import org.assertj.core.api.Assertions;
23+
import org.springframework.beans.factory.annotation.Autowired;
24+
import org.springframework.boot.test.web.client.TestRestTemplate;
25+
import org.springframework.boot.test.web.server.LocalServerPort;
26+
import org.springframework.http.HttpEntity;
27+
import org.springframework.http.HttpHeaders;
28+
import org.springframework.http.HttpMethod;
29+
import org.springframework.http.HttpStatus;
30+
import org.springframework.http.MediaType;
31+
import org.springframework.http.ResponseEntity;
32+
33+
import java.io.IOException;
34+
import java.nio.file.Files;
35+
import java.nio.file.Path;
36+
37+
@Slf4j
338
public class RawDataDefinitions {
4-
/* LunaticJsonRawDataPersistanceStub lunaticJsonRawDataPersistanceStub = new LunaticJsonRawDataPersistanceStub();
39+
40+
41+
@LocalServerPort
42+
private int port;
43+
44+
private String BASE_URL;
45+
@Autowired
46+
private TestRestTemplate rest;
47+
48+
LunaticJsonRawDataPersistanceStub lunaticJsonRawDataPersistanceStub = new LunaticJsonRawDataPersistanceStub();
549
LunaticJsonRawDataApiPort lunaticJsonRawDataApiPort = new LunaticJsonRawDataService(lunaticJsonRawDataPersistanceStub);
650
Config config = new ConfigStub();
751
FileUtils fileUtils = new FileUtils(config);
@@ -16,229 +60,56 @@ public class RawDataDefinitions {
1660
fileUtils
1761
);
1862
Path rawDataFilePath;
19-
ResponseEntity<Object> response;
63+
String rawJsonData;
64+
ResponseEntity<String> response;
65+
int nbRawSaved = 0;
2066

2167
@Before
2268
public void init(){
2369
this.lunaticJsonRawDataPersistanceStub.getMongoStub().clear();
70+
log.info("rest autowired : {}", rest.getRootUri());
71+
BASE_URL = "http://localhost:" + port + "/";
2472
}
2573

26-
2774
@Given("We have raw data file in {string}")
28-
public void set_input_file(String rawDataFile){
75+
public void set_input_file(String rawDataFile) throws IOException {
2976
this.rawDataFilePath = Path.of(TestConstants.TEST_RESOURCES_DIRECTORY,rawDataFile);
77+
rawJsonData = Files.readString(rawDataFilePath);
3078
}
3179

3280
@When("We save that raw data for web campaign {string}, questionnaire {string}, interrogation {string}")
3381
public void save_raw_data(String campaignId, String questionnaireId, String interrogationId) throws IOException {
34-
if(rawDataFilePath == null){
35-
throw new RuntimeException("Raw data file path is null !");
36-
}
82+
HttpHeaders headers = new HttpHeaders();
83+
headers.setContentType(MediaType.APPLICATION_JSON);
3784

38-
response = rawResponseController.saveRawResponsesFromJsonBody(
85+
String url = String.format("%sresponses/raw/lunatic-json/save?campaignName=%s&questionnaireId=%s&interrogationId=%s&surveyUnitId=%s&mode=%s",
86+
BASE_URL,
3987
campaignId,
4088
questionnaireId,
4189
interrogationId,
4290
null,
43-
Mode.WEB,
44-
Files.readString(rawDataFilePath)
91+
Mode.WEB
4592
);
46-
}
47-
48-
@When("We process raw data for campaign {string}, questionnaire {string} and interrogation {string}")
49-
public void process_raw_data(
50-
String campaignId,
51-
String questionnaireId,
52-
String interrogationId
5393

54-
) {
55-
List<String> interrogationIdList = Collections.singletonList(interrogationId);
94+
HttpEntity<String> requestEntity = new HttpEntity<>(rawJsonData.trim(), headers);
95+
try {
96+
response = rest.exchange(url, HttpMethod.PUT, requestEntity, String.class);
97+
if(response.getStatusCode().is2xxSuccessful()){nbRawSaved++;}
98+
} catch (Exception e) {
99+
response = new ResponseEntity<>("Unexpected error", HttpStatus.INTERNAL_SERVER_ERROR);
100+
}
56101

57-
response = rawResponseController.processJsonRawData(
58-
campaignId,
59-
questionnaireId,
60-
interrogationIdList
61-
);
62-
Assertions.assertThat(response.getStatusCode().is2xxSuccessful()).isTrue();
63102
}
64103

65104
@Then("We should have {int} raw data document")
66105
public void check_document_count(int expectedCount){
67-
Assertions.assertThat(lunaticJsonRawDataPersistanceStub.getMongoStub()).hasSize(expectedCount);
68-
}
69-
70-
@Then("We should have {int} collected variables and {int} " +
71-
"external variables for campaign {string}, questionnaire {string}, interrogation {string}")
72-
public void check_variables_count(
73-
int expectedCollectedVariablesCount,
74-
int expectedExternalVariablesCount,
75-
String campaignId,
76-
String questionnaireId,
77-
String interrogationId
78-
){
79-
List<LunaticJsonDataDocument> lunaticJsonDataDocuments = lunaticJsonRawDataPersistanceStub.getMongoStub()
80-
.stream().filter(
81-
lunaticJsonDataDocument -> lunaticJsonDataDocument.campaignId().equals(campaignId)
82-
&& lunaticJsonDataDocument.questionnaireId().equals(questionnaireId)
83-
&& lunaticJsonDataDocument.interrogationId().equals(interrogationId)
84-
).toList();
85-
86-
Assertions.assertThat(lunaticJsonDataDocuments).hasSize(1);
87-
Assertions.assertThat(lunaticJsonDataDocuments.getFirst().data().collectedVariables()).hasSize(expectedCollectedVariablesCount);
88-
Assertions.assertThat(lunaticJsonDataDocuments.getFirst().data().externalVariables()).hasSize(expectedExternalVariablesCount);
89-
}
90-
91-
@Then("For {string} collected variable, state {string}, campaign {string}, questionnaire {string}, interrogation " +
92-
"{string} we should have {string} as value number {int} in array")
93-
public void check_collected_variable_content_array(
94-
String variableName,
95-
String datastate,
96-
String campaignId,
97-
String questionnaireId,
98-
String interrogationId,
99-
String expectedValue,
100-
int index
101-
) {
102-
List<LunaticJsonDataDocument> lunaticJsonDataDocuments = lunaticJsonRawDataPersistanceStub.getMongoStub()
103-
.stream().filter(
104-
lunaticJsonDataDocument -> lunaticJsonDataDocument.campaignId().equals(campaignId)
105-
&& lunaticJsonDataDocument.questionnaireId().equals(questionnaireId)
106-
&& lunaticJsonDataDocument.interrogationId().equals(interrogationId)
107-
).toList();
108-
109-
110-
Assertions.assertThat(lunaticJsonDataDocuments).hasSize(1);
111-
Assertions.assertThat(lunaticJsonDataDocuments.getFirst().data().collectedVariables()).containsKey(variableName);
112-
113-
LunaticJsonRawDataCollectedVariable lunaticJsonRawDataCollectedVariable =
114-
lunaticJsonDataDocuments.getFirst().data().collectedVariables().get(variableName);
115-
Assertions.assertThat(lunaticJsonRawDataCollectedVariable.collectedVariableByStateMap()).containsKey(DataState.valueOf(datastate));
116-
117-
LunaticJsonRawDataVariable lunaticJsonRawDataVariable =
118-
lunaticJsonRawDataCollectedVariable.collectedVariableByStateMap().get(DataState.valueOf(datastate));
119-
120-
Assertions.assertThat(lunaticJsonRawDataVariable.value()).isNull();
121-
Assertions.assertThat(lunaticJsonRawDataVariable.valuesArray()).isNotNull();
122-
Assertions.assertThat(lunaticJsonRawDataVariable.valuesArray().get(index)).isNotNull().isEqualTo(expectedValue);
106+
Assertions.assertThat(nbRawSaved).isEqualTo(expectedCount);
123107
}
124108

125-
@Then("For {string} external variable, campaign {string}, questionnaire {string}, interrogation {string} we " +
126-
"should have {string} as value number {int} in array")
127-
public void check_external_variable_content_array(
128-
String variableName,
129-
String campaignId,
130-
String questionnaireId,
131-
String interrogationId,
132-
String expectedValue,
133-
int index
134-
) {
135-
List<LunaticJsonDataDocument> lunaticJsonDataDocuments = lunaticJsonRawDataPersistanceStub.getMongoStub()
136-
.stream().filter(
137-
lunaticJsonDataDocument -> lunaticJsonDataDocument.campaignId().equals(campaignId)
138-
&& lunaticJsonDataDocument.questionnaireId().equals(questionnaireId)
139-
&& lunaticJsonDataDocument.interrogationId().equals(interrogationId)
140-
).toList();
141-
142-
Assertions.assertThat(lunaticJsonDataDocuments).hasSize(1);
143-
Assertions.assertThat(lunaticJsonDataDocuments.getFirst().data().externalVariables()).containsKey(variableName);
144-
145-
LunaticJsonRawDataVariable lunaticJsonRawDataVariable =
146-
lunaticJsonDataDocuments.getFirst().data().externalVariables().get(variableName);
147-
148-
Assertions.assertThat(lunaticJsonRawDataVariable.value()).isNull();
149-
Assertions.assertThat(lunaticJsonRawDataVariable.valuesArray()).isNotNull();
150-
Assertions.assertThat(lunaticJsonRawDataVariable.valuesArray().get(index)).isNotNull().isEqualTo(expectedValue);
151-
}
152-
153-
@Then("For {string} external variable, campaign {string}, questionnaire {string}, interrogation {string} we should have {string} as value")
154-
public void check_external_variable_content_no_array(
155-
String variableName,
156-
String campaignId,
157-
String questionnaireId,
158-
String interrogationId,
159-
String expectedValue
160-
) {
161-
List<LunaticJsonDataDocument> lunaticJsonDataDocuments = lunaticJsonRawDataPersistanceStub.getMongoStub()
162-
.stream().filter(
163-
lunaticJsonDataDocument -> lunaticJsonDataDocument.campaignId().equals(campaignId)
164-
&& lunaticJsonDataDocument.questionnaireId().equals(questionnaireId)
165-
&& lunaticJsonDataDocument.interrogationId().equals(interrogationId)
166-
).toList();
167-
168-
Assertions.assertThat(lunaticJsonDataDocuments).hasSize(1);
169-
Assertions.assertThat(lunaticJsonDataDocuments.getFirst().data().externalVariables()).containsKey(variableName);
170-
171-
LunaticJsonRawDataVariable lunaticJsonRawDataVariable =
172-
lunaticJsonDataDocuments.getFirst().data().externalVariables().get(variableName);
173-
174-
Assertions.assertThat(lunaticJsonRawDataVariable.valuesArray()).isNull();
175-
Assertions.assertThat(lunaticJsonRawDataVariable.value()).isNotNull().isEqualTo(expectedValue);
176-
}
177109

178110
@Then("We should have {int} status code")
179111
public void check_response_status_code(int expectedStatusCode){
180112
Assertions.assertThat(response.getStatusCode().value()).isEqualTo(expectedStatusCode);
181113
}
182114

183-
@Then("For collected variable {string} in survey unit {string} we should have {string} for " +
184-
"iteration {int}")
185-
public void check_collected_variable_content_in_mongo(
186-
String collectedVariableName,
187-
String interrogationId,
188-
String expectedValue,
189-
Integer iteration
190-
) {
191-
//Get SurveyUnitModel
192-
List<SurveyUnitModel> concernedSurveyUnitModels = surveyUnitPersistencePortStub.getMongoStub().stream().filter(surveyUnitModel ->
193-
surveyUnitModel.getState().equals(DataState.COLLECTED)
194-
&& surveyUnitModel.getInterrogationId().equals(interrogationId)
195-
).toList();
196-
Assertions.assertThat(concernedSurveyUnitModels).hasSize(1);
197-
198-
SurveyUnitModel surveyUnitModel = concernedSurveyUnitModels.getFirst();
199-
200-
//Get Variable
201-
List<VariableModel> concernedCollectedVariables =
202-
surveyUnitModel.getCollectedVariables().stream().filter(variableModel ->
203-
variableModel.varId().equals(collectedVariableName)
204-
&& variableModel.iteration().equals(iteration)
205-
).toList();
206-
Assertions.assertThat(concernedCollectedVariables).hasSize(1);
207-
208-
VariableModel variableModel = concernedCollectedVariables.getFirst();
209-
210-
//Value content assertion
211-
Assertions.assertThat(variableModel.value()).isEqualTo(expectedValue);
212-
}
213-
214-
@Then("For external variable {string} in survey unit {string} we should have {string} for " +
215-
"iteration {int}")
216-
public void check_external_variable_content_in_mongo(
217-
String externalVariableName,
218-
String interrogationId,
219-
String expectedValue,
220-
Integer iteration
221-
) {
222-
//Get SurveyUnitModel
223-
List<SurveyUnitModel> concernedSurveyUnitModels = surveyUnitPersistencePortStub.getMongoStub().stream().filter(surveyUnitModel ->
224-
surveyUnitModel.getState().equals(DataState.COLLECTED)
225-
&& surveyUnitModel.getInterrogationId().equals(interrogationId)
226-
).toList();
227-
Assertions.assertThat(concernedSurveyUnitModels).hasSize(1);
228-
229-
SurveyUnitModel surveyUnitModel = concernedSurveyUnitModels.getFirst();
230-
231-
//Get Variable
232-
List<VariableModel> concernedExternalVariables =
233-
surveyUnitModel.getExternalVariables().stream().filter(variableModel ->
234-
variableModel.varId().equals(externalVariableName)
235-
&& variableModel.iteration().equals(iteration)
236-
).toList();
237-
Assertions.assertThat(concernedExternalVariables).hasSize(1);
238-
239-
VariableModel variableModel = concernedExternalVariables.getFirst();
240-
241-
//Value content assertion
242-
Assertions.assertThat(variableModel.value()).isEqualTo(expectedValue);
243-
}*/
244115
}

src/test/java/fr/insee/genesis/RunCucumberTest.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,14 @@
33
import io.cucumber.junit.Cucumber;
44
import io.cucumber.junit.CucumberOptions;
55
import org.junit.runner.RunWith;
6+
import org.springframework.boot.test.context.SpringBootTest;
67

78
@RunWith(Cucumber.class)
8-
@CucumberOptions(plugin = {"pretty"}, glue = "cucumber.functional_tests")
9+
@SpringBootTest(classes = GenesisApi.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
10+
@CucumberOptions(
11+
features = "src/test/resources/fr/insee/genesis/features",
12+
glue = {"cucumber.functional_tests", "cucumber.config"},
13+
plugin = {"pretty"}
14+
)
915
public class RunCucumberTest {
1016
}

0 commit comments

Comments
 (0)