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