Skip to content

Commit a8f4542

Browse files
committed
test: bug reproducing
1 parent 7cdeb02 commit a8f4542

File tree

3 files changed

+158
-1
lines changed

3 files changed

+158
-1
lines changed

src/main/java/fr/insee/genesis/domain/model/surveyunit/SurveyUnitModel.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package fr.insee.genesis.domain.model.surveyunit;
22

33
import com.fasterxml.jackson.annotation.JsonFormat;
4+
import fr.insee.modelefiliere.RawResponseDto;
45
import lombok.AllArgsConstructor;
56
import lombok.Builder;
67
import lombok.Data;
@@ -38,6 +39,7 @@ public class SurveyUnitModel {
3839
private DataState state;
3940
private Mode mode;
4041
private Boolean isCapturedIndirectly;
42+
private RawResponseDto.QuestionnaireStateEnum questionnaireState;
4143
private LocalDateTime validationDate;
4244
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'hh:mm")
4345
private LocalDateTime recordDate;

src/main/java/fr/insee/genesis/domain/service/rawdata/RawResponseService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@
4040

4141
@Service
4242
@Slf4j
43-
public class RawResponseService implements RawResponseApiPort {
43+
public class RawResponseService implements RawResponseApiPort {
4444

4545
private final ControllerUtils controllerUtils;
4646
private final QuestionnaireMetadataService metadataService;
Lines changed: 155 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,155 @@
1+
package fr.insee.genesis.domain.service.rawdata;
2+
3+
import fr.insee.bpm.metadata.model.MetadataModel;
4+
import fr.insee.bpm.metadata.model.VariablesMap;
5+
import fr.insee.genesis.TestConstants;
6+
import fr.insee.genesis.controller.utils.ControllerUtils;
7+
import fr.insee.genesis.domain.model.surveyunit.Mode;
8+
import fr.insee.genesis.domain.model.surveyunit.SurveyUnitModel;
9+
import fr.insee.genesis.domain.model.surveyunit.rawdata.RawResponse;
10+
import fr.insee.genesis.domain.ports.spi.RawResponsePersistencePort;
11+
import fr.insee.genesis.domain.ports.spi.SurveyUnitQualityToolPort;
12+
import fr.insee.genesis.domain.service.context.DataProcessingContextService;
13+
import fr.insee.genesis.domain.service.metadata.QuestionnaireMetadataService;
14+
import fr.insee.genesis.domain.service.surveyunit.SurveyUnitQualityService;
15+
import fr.insee.genesis.domain.service.surveyunit.SurveyUnitService;
16+
import fr.insee.genesis.infrastructure.utils.FileUtils;
17+
import fr.insee.genesis.stubs.ConfigStub;
18+
import fr.insee.modelefiliere.RawResponseDto;
19+
import lombok.SneakyThrows;
20+
import org.assertj.core.api.Assertions;
21+
import org.junit.jupiter.api.BeforeEach;
22+
import org.junit.jupiter.params.ParameterizedTest;
23+
import org.junit.jupiter.params.provider.EnumSource;
24+
import org.mockito.ArgumentCaptor;
25+
26+
import java.time.LocalDateTime;
27+
import java.util.ArrayList;
28+
import java.util.Collections;
29+
import java.util.HashMap;
30+
import java.util.List;
31+
import java.util.Map;
32+
import java.util.Set;
33+
34+
import static org.mockito.ArgumentMatchers.any;
35+
import static org.mockito.Mockito.doReturn;
36+
import static org.mockito.Mockito.mock;
37+
import static org.mockito.Mockito.verify;
38+
39+
class RawResponseServiceUnitTest {
40+
41+
static RawResponseService rawResponseService;
42+
static RawResponsePersistencePort rawResponsePersistencePort;
43+
static ControllerUtils controllerUtils;
44+
static QuestionnaireMetadataService metadataService;
45+
static SurveyUnitService surveyUnitService;
46+
47+
private ArgumentCaptor<List<SurveyUnitModel>> surveyUnitModelsCaptor;
48+
49+
private LocalDateTime validationDate;
50+
51+
@BeforeEach
52+
@SuppressWarnings("unchecked")
53+
void init() {
54+
rawResponsePersistencePort = mock(RawResponsePersistencePort.class);
55+
controllerUtils = mock(ControllerUtils.class);
56+
metadataService = mock(QuestionnaireMetadataService.class);
57+
surveyUnitService = mock(SurveyUnitService.class);
58+
59+
rawResponseService = new RawResponseService(
60+
controllerUtils,
61+
metadataService,
62+
surveyUnitService,
63+
mock(SurveyUnitQualityService.class),
64+
mock(SurveyUnitQualityToolPort.class),
65+
mock(DataProcessingContextService.class),
66+
new FileUtils(new ConfigStub()),
67+
new ConfigStub(),
68+
rawResponsePersistencePort
69+
);
70+
71+
surveyUnitModelsCaptor = ArgumentCaptor.forClass(List.class);
72+
}
73+
74+
//Non regression tests of #22875
75+
@ParameterizedTest
76+
@EnumSource(RawResponseDto.QuestionnaireStateEnum.class)
77+
@SneakyThrows
78+
void processRawResponses_byCollectionInstrumentId_validation_date_questionnaire_state_test(
79+
RawResponseDto.QuestionnaireStateEnum questionnaireState
80+
) {
81+
//GIVEN
82+
processRawResponses_given(questionnaireState);
83+
84+
//WHEN
85+
rawResponseService.processRawResponses(TestConstants.DEFAULT_COLLECTION_INSTRUMENT_ID);
86+
verify(surveyUnitService).saveSurveyUnits(surveyUnitModelsCaptor.capture());
87+
List<SurveyUnitModel> createdModels = surveyUnitModelsCaptor.getValue();
88+
89+
//THEN
90+
processRawResponses_then(questionnaireState, createdModels);
91+
}
92+
93+
@ParameterizedTest
94+
@EnumSource(RawResponseDto.QuestionnaireStateEnum.class)
95+
@SneakyThrows
96+
void processRawResponses_byCollectionInstrumentIdAndInterrogationList_validation_date_questionnaire_state_test(
97+
RawResponseDto.QuestionnaireStateEnum questionnaireState
98+
) {
99+
//GIVEN
100+
processRawResponses_given(questionnaireState);
101+
102+
//WHEN
103+
rawResponseService.processRawResponses(
104+
TestConstants.DEFAULT_COLLECTION_INSTRUMENT_ID,
105+
Collections.singletonList(TestConstants.DEFAULT_INTERROGATION_ID),
106+
new ArrayList<>()
107+
);
108+
verify(surveyUnitService).saveSurveyUnits(surveyUnitModelsCaptor.capture());
109+
List<SurveyUnitModel> createdModels = surveyUnitModelsCaptor.getValue();
110+
111+
//THEN
112+
processRawResponses_then(questionnaireState, createdModels);
113+
}
114+
@SneakyThrows
115+
private void processRawResponses_given(RawResponseDto.QuestionnaireStateEnum questionnaireState){
116+
VariablesMap variablesMap = new VariablesMap();
117+
//TODO if the bug is caused by BPM, put variables into it to emulate fix
118+
MetadataModel metadataModel = new MetadataModel();
119+
metadataModel.setVariables(variablesMap);
120+
validationDate = questionnaireState.equals(RawResponseDto.QuestionnaireStateEnum.FINISHED) ?
121+
LocalDateTime.now() : null;
122+
123+
124+
List<RawResponse> rawResponses = new ArrayList<>();
125+
RawResponse rawResponse = new RawResponse(
126+
null,
127+
TestConstants.DEFAULT_INTERROGATION_ID,
128+
TestConstants.DEFAULT_COLLECTION_INSTRUMENT_ID,
129+
Mode.WEB,
130+
new HashMap<>(),
131+
LocalDateTime.now(),
132+
null
133+
);
134+
rawResponse.payload().put("validationDate", validationDate);
135+
rawResponse.payload().put("questionnaireState", questionnaireState);
136+
Map<String, Map<String, Map<String, String>>> dataMap = new HashMap<>();
137+
dataMap.put("COLLECTED", new HashMap<>());
138+
dataMap.get("COLLECTED").put("VAR1", new HashMap<>());
139+
dataMap.get("COLLECTED").get("VAR1").put("COLLECTED", "value");
140+
rawResponse.payload().put("data", dataMap);
141+
rawResponses.add(rawResponse);
142+
143+
//Mocks behaviour
144+
doReturn(Collections.singletonList(Mode.WEB)).when(controllerUtils).getModesList(any(),any());
145+
doReturn(Set.of(TestConstants.DEFAULT_INTERROGATION_ID)).when(rawResponsePersistencePort).findUnprocessedInterrogationIdsByCollectionInstrumentId(any());
146+
doReturn(metadataModel).when(metadataService).loadAndSaveIfNotExists(any(), any(), any(), any(), any());
147+
doReturn(rawResponses).when(rawResponsePersistencePort).findRawResponses(any(), any(), any());
148+
}
149+
private void processRawResponses_then(RawResponseDto.QuestionnaireStateEnum questionnaireState,
150+
List<SurveyUnitModel> createdModels) {
151+
Assertions.assertThat(createdModels).hasSize(1);
152+
Assertions.assertThat(createdModels.getFirst().getValidationDate()).isEqualTo(validationDate);
153+
Assertions.assertThat(createdModels.getFirst().getQuestionnaireState()).isEqualTo(questionnaireState);
154+
}
155+
}

0 commit comments

Comments
 (0)