2727import org .mockito .ArgumentCaptor ;
2828
2929import java .time .LocalDateTime ;
30+ import java .time .format .DateTimeFormatter ;
3031import java .util .ArrayList ;
3132import java .util .Collections ;
3233import java .util .HashMap ;
@@ -49,7 +50,7 @@ class RawResponseServiceUnitTest {
4950
5051 private ArgumentCaptor <List <SurveyUnitModel >> surveyUnitModelsCaptor ;
5152
52- private LocalDateTime validationDate ;
53+ private static final String TEST_VALIDATION_DATE = "2025-11-11T06:00:00Z" ;
5354
5455 @ BeforeEach
5556 @ SuppressWarnings ("unchecked" )
@@ -79,6 +80,7 @@ void init() {
7980 @ DisplayName ("Non regression tests of #22875 : validation date and questionnaire state in processed responses" )
8081 class ValidationDateAndQuestionnaireStateTests {
8182 @ ParameterizedTest
83+ @ DisplayName ("Process by collection instrument id OK test" )
8284 @ EnumSource (RawResponseDto .QuestionnaireStateEnum .class )
8385 @ SneakyThrows
8486 void processRawResponses_byCollectionInstrumentId_validation_date_questionnaire_state_test (
@@ -98,6 +100,7 @@ void processRawResponses_byCollectionInstrumentId_validation_date_questionnaire_
98100
99101 @ ParameterizedTest
100102 @ EnumSource (RawResponseDto .QuestionnaireStateEnum .class )
103+ @ DisplayName ("Process by collection instrument id and interrogation id OK test" )
101104 @ SneakyThrows
102105 void processRawResponses_byCollectionInstrumentIdAndInterrogationList_validation_date_questionnaire_state_test (
103106 RawResponseDto .QuestionnaireStateEnum questionnaireState
@@ -120,11 +123,10 @@ void processRawResponses_byCollectionInstrumentIdAndInterrogationList_validation
120123 @ SneakyThrows
121124 private void processRawResponses_given (RawResponseDto .QuestionnaireStateEnum questionnaireState ){
122125 VariablesMap variablesMap = new VariablesMap ();
123- //TODO if the bug is caused by BPM, put variables into it to emulate fix
124126 MetadataModel metadataModel = new MetadataModel ();
125127 metadataModel .setVariables (variablesMap );
126- validationDate = questionnaireState .equals (RawResponseDto .QuestionnaireStateEnum .FINISHED ) ?
127- LocalDateTime . now () : null ;
128+ String validationDate = questionnaireState .equals (RawResponseDto .QuestionnaireStateEnum .FINISHED ) ?
129+ TEST_VALIDATION_DATE : null ;
128130
129131 List <RawResponse > rawResponses = new ArrayList <>();
130132 RawResponse rawResponse = new RawResponse (
@@ -149,19 +151,24 @@ private void processRawResponses_given(RawResponseDto.QuestionnaireStateEnum que
149151
150152 //Mocks behaviour
151153 doReturn (Collections .singletonList (Mode .WEB )).when (controllerUtils ).getModesList (any (),any ());
152- doReturn (Set .of (TestConstants .DEFAULT_INTERROGATION_ID )).when (rawResponsePersistencePort ).findUnprocessedInterrogationIdsByCollectionInstrumentId (any ());
154+ doReturn (Set .of (TestConstants .DEFAULT_INTERROGATION_ID ))
155+ .when (rawResponsePersistencePort ).findUnprocessedInterrogationIdsByCollectionInstrumentId (any ());
153156 doReturn (metadataModel ).when (metadataService ).loadAndSaveIfNotExists (any (), any (), any (), any (), any ());
154157 doReturn (rawResponses ).when (rawResponsePersistencePort ).findRawResponses (any (), any (), any ());
155158 }
156159 private void processRawResponses_then (RawResponseDto .QuestionnaireStateEnum questionnaireState ,
157160 List <SurveyUnitModel > createdModels ) {
158161 Assertions .assertThat (createdModels ).hasSize (1 );
159- Assertions .assertThat (createdModels .getFirst ().getValidationDate ()).isEqualTo (validationDate );
162+ Assertions .assertThat (createdModels .getFirst ().getValidationDate ()).isEqualTo (
163+ LocalDateTime .parse (TEST_VALIDATION_DATE , DateTimeFormatter .ISO_OFFSET_DATE_TIME )
164+ );
160165 Assertions .assertThat (createdModels .getFirst ().getQuestionnaireState ()).isEqualTo (questionnaireState );
161166 }
162167
163- //Non blocking exception tests
168+ //Non-blocking exception tests
169+ //Invalid questionnaire state
164170 @ Test
171+ @ DisplayName ("Invalid questionnaireState test (process by collection id)" )
165172 @ SneakyThrows
166173 void processRawResponses_byCollectionInstrumentId_invalid_questionnaire_state_test () {
167174 //GIVEN
@@ -177,9 +184,10 @@ void processRawResponses_byCollectionInstrumentId_invalid_questionnaire_state_te
177184 List <SurveyUnitModel > createdModels = surveyUnitModelsCaptor .getValue ();
178185
179186 //THEN
180- processRawResponses_then_validation_date_null (createdModels );
187+ processRawResponses_then_questionnaire_state_null (createdModels );
181188 }
182189 @ Test
190+ @ DisplayName ("Invalid questionnaireState test (process by collection id and interrogation id list)" )
183191 @ SneakyThrows
184192 void processRawResponses_byCollectionInstrumentIdAndInterrogationList_invalid_questionnaire_state_test () {
185193 //GIVEN
@@ -193,15 +201,13 @@ void processRawResponses_byCollectionInstrumentIdAndInterrogationList_invalid_qu
193201 List <SurveyUnitModel > createdModels = surveyUnitModelsCaptor .getValue ();
194202
195203 //THEN
196- processRawResponses_then_validation_date_null (createdModels );
204+ processRawResponses_then_questionnaire_state_null (createdModels );
197205 }
198-
199206 @ SneakyThrows
200207 private void processRawResponses_given_invalid_questionnaire_state (){
201208 VariablesMap variablesMap = new VariablesMap ();
202209 MetadataModel metadataModel = new MetadataModel ();
203210 metadataModel .setVariables (variablesMap );
204- validationDate = LocalDateTime .now ();
205211
206212 List <RawResponse > rawResponses = new ArrayList <>();
207213 RawResponse rawResponse = new RawResponse (
@@ -213,7 +219,7 @@ private void processRawResponses_given_invalid_questionnaire_state(){
213219 LocalDateTime .now (),
214220 null
215221 );
216- rawResponse .payload ().put ("validationDate" , validationDate );
222+ rawResponse .payload ().put ("validationDate" , TEST_VALIDATION_DATE );
217223 rawResponse .payload ().put ("questionnaireState" , "not a questionnaire state" );
218224 rawResponse .payload ().put ("usualSurveyUnitId" , TestConstants .DEFAULT_SURVEY_UNIT_ID );
219225 rawResponse .payload ().put ("majorModelVersion" , 2 );
@@ -226,14 +232,93 @@ private void processRawResponses_given_invalid_questionnaire_state(){
226232
227233 //Mocks behaviour
228234 doReturn (Collections .singletonList (Mode .WEB )).when (controllerUtils ).getModesList (any (),any ());
229- doReturn (Set .of (TestConstants .DEFAULT_INTERROGATION_ID )).when (rawResponsePersistencePort ).findUnprocessedInterrogationIdsByCollectionInstrumentId (any ());
235+ doReturn (Set .of (TestConstants .DEFAULT_INTERROGATION_ID ))
236+ .when (rawResponsePersistencePort ).findUnprocessedInterrogationIdsByCollectionInstrumentId (any ());
230237 doReturn (metadataModel ).when (metadataService ).loadAndSaveIfNotExists (any (), any (), any (), any (), any ());
231238 doReturn (rawResponses ).when (rawResponsePersistencePort ).findRawResponses (any (), any (), any ());
232239 }
233- private void processRawResponses_then_validation_date_null (List <SurveyUnitModel > createdModels ){
240+ private void processRawResponses_then_questionnaire_state_null (List <SurveyUnitModel > createdModels ){
234241 Assertions .assertThat (createdModels ).hasSize (1 );
235- Assertions .assertThat (createdModels .getFirst ().getValidationDate ()).isEqualTo (validationDate );
236242 Assertions .assertThat (createdModels .getFirst ().getQuestionnaireState ()).isNull ();
237243 }
244+
245+ //Invalid validationDate
246+ @ Test
247+ @ DisplayName ("Invalid validationDate test (process by collection id)" )
248+ @ SneakyThrows
249+ void processRawResponses_byCollectionId_invalid_validation_date_test (){
250+ //GIVEN
251+ processRawResponses_given_invalid_validation_date ();
252+
253+ //WHEN
254+ rawResponseService .processRawResponses (
255+ TestConstants .DEFAULT_COLLECTION_INSTRUMENT_ID
256+ );
257+ verify (surveyUnitService ).saveSurveyUnits (surveyUnitModelsCaptor .capture ());
258+ List <SurveyUnitModel > createdModels = surveyUnitModelsCaptor .getValue ();
259+
260+ //THEN
261+ processRawResponses_then_validation_date_null (createdModels );
262+ }
263+ @ Test
264+ @ DisplayName ("Invalid validationDate test (process by collection id and interrogation id list)" )
265+ @ SneakyThrows
266+ void processRawResponses_byCollectionIdAndInterrogationIds_invalid_validation_date_test (){
267+ //GIVEN
268+ processRawResponses_given_invalid_validation_date ();
269+
270+ //WHEN
271+ rawResponseService .processRawResponses (
272+ TestConstants .DEFAULT_COLLECTION_INSTRUMENT_ID ,
273+ Collections .singletonList (TestConstants .DEFAULT_INTERROGATION_ID ),
274+ new ArrayList <>()
275+ );
276+ verify (surveyUnitService ).saveSurveyUnits (surveyUnitModelsCaptor .capture ());
277+ List <SurveyUnitModel > createdModels = surveyUnitModelsCaptor .getValue ();
278+
279+ //THEN
280+ processRawResponses_then_validation_date_null (createdModels );
281+ }
282+
283+ @ SneakyThrows
284+ private void processRawResponses_given_invalid_validation_date (){
285+ VariablesMap variablesMap = new VariablesMap ();
286+ MetadataModel metadataModel = new MetadataModel ();
287+ metadataModel .setVariables (variablesMap );
288+
289+ List <RawResponse > rawResponses = new ArrayList <>();
290+ RawResponse rawResponse = new RawResponse (
291+ null ,
292+ TestConstants .DEFAULT_INTERROGATION_ID ,
293+ TestConstants .DEFAULT_COLLECTION_INSTRUMENT_ID ,
294+ Mode .WEB ,
295+ new HashMap <>(),
296+ LocalDateTime .now (),
297+ null
298+ );
299+ rawResponse .payload ().put ("validationDate" , "not a validation date" );
300+ rawResponse .payload ().put ("questionnaireState" , RawResponseDto .QuestionnaireStateEnum .FINISHED );
301+ rawResponse .payload ().put ("usualSurveyUnitId" , TestConstants .DEFAULT_SURVEY_UNIT_ID );
302+ rawResponse .payload ().put ("majorModelVersion" , 2 );
303+ Map <String , Map <String , Map <String , String >>> dataMap = new HashMap <>();
304+ dataMap .put ("COLLECTED" , new HashMap <>());
305+ dataMap .get ("COLLECTED" ).put ("VAR1" , new HashMap <>());
306+ dataMap .get ("COLLECTED" ).get ("VAR1" ).put ("COLLECTED" , "value" );
307+ rawResponse .payload ().put ("data" , dataMap );
308+ rawResponses .add (rawResponse );
309+
310+ //Mocks behaviour
311+ doReturn (Collections .singletonList (Mode .WEB )).when (controllerUtils ).getModesList (any (),any ());
312+ doReturn (Set .of (TestConstants .DEFAULT_INTERROGATION_ID ))
313+ .when (rawResponsePersistencePort ).findUnprocessedInterrogationIdsByCollectionInstrumentId (any ());
314+ doReturn (metadataModel ).when (metadataService ).loadAndSaveIfNotExists (any (), any (), any (), any (), any ());
315+ doReturn (rawResponses ).when (rawResponsePersistencePort ).findRawResponses (any (), any (), any ());
316+ }
317+ private void processRawResponses_then_validation_date_null (
318+ List <SurveyUnitModel > createdModels
319+ ){
320+ Assertions .assertThat (createdModels ).hasSize (1 );
321+ Assertions .assertThat (createdModels .getFirst ().getValidationDate ()).isNull ();
322+ }
238323 }
239324}
0 commit comments