From e10a6fc01056c54e66d8ef9931e2c24b397c7ad0 Mon Sep 17 00:00:00 2001 From: QDIBYS Date: Tue, 7 Apr 2026 15:35:26 +0200 Subject: [PATCH 1/5] chore: remove raw response endpoint --- .../rest/responses/RawResponseController.java | 8 ----- .../ports/api/LunaticJsonRawDataApiPort.java | 1 - .../LunaticJsonRawDataPersistencePort.java | 1 - .../rawdata/LunaticJsonRawDataService.java | 17 ---------- .../LunaticJsonRawDataMongoAdapter.java | 5 --- .../controller/rest/ControllerAccessIT.java | 1 - .../responses/RawResponseControllerTest.java | 16 ---------- .../LunaticJsonRawDataServiceUnitTest.java | 32 ------------------- .../LunaticJsonRawDataMongoAdapterTest.java | 29 ----------------- 9 files changed, 110 deletions(-) diff --git a/src/main/java/fr/insee/genesis/controller/rest/responses/RawResponseController.java b/src/main/java/fr/insee/genesis/controller/rest/responses/RawResponseController.java index 8f727787..6e65b41d 100644 --- a/src/main/java/fr/insee/genesis/controller/rest/responses/RawResponseController.java +++ b/src/main/java/fr/insee/genesis/controller/rest/responses/RawResponseController.java @@ -157,14 +157,6 @@ public ResponseEntity> getUnprocessedCollectionInstrument(){ } //GET unprocessed - @Operation(summary = "Get campaign id and interrogationId from all unprocessed raw json data") - @GetMapping(path = "/responses/raw/lunatic-json/get/unprocessed") - @PreAuthorize("hasRole('SCHEDULER')") - public ResponseEntity> getUnprocessedJsonRawData() { - log.info("Try to get unprocessed raw JSON datas..."); - return ResponseEntity.ok(lunaticJsonRawDataApiPort.getUnprocessedDataIds()); - } - @Operation(summary = "Get campaign id and interrogationId from all unprocessed raw json data") @GetMapping(path = "/responses/raw/lunatic-json/get/unprocessed/questionnaireIds") @PreAuthorize("hasRole('SCHEDULER')") diff --git a/src/main/java/fr/insee/genesis/domain/ports/api/LunaticJsonRawDataApiPort.java b/src/main/java/fr/insee/genesis/domain/ports/api/LunaticJsonRawDataApiPort.java index c32ee118..7aff80e4 100644 --- a/src/main/java/fr/insee/genesis/domain/ports/api/LunaticJsonRawDataApiPort.java +++ b/src/main/java/fr/insee/genesis/domain/ports/api/LunaticJsonRawDataApiPort.java @@ -21,7 +21,6 @@ public interface LunaticJsonRawDataApiPort { void save(LunaticJsonRawDataModel rawData); List getRawDataByQuestionnaireId(String questionnaireId, Mode mode, List interrogationIdList); List convertRawData(List rawData, VariablesMap variablesMap); - List getUnprocessedDataIds(); Set getUnprocessedDataQuestionnaireIds(); void updateProcessDates(List surveyUnitModels); Set findDistinctQuestionnaireIds(); diff --git a/src/main/java/fr/insee/genesis/domain/ports/spi/LunaticJsonRawDataPersistencePort.java b/src/main/java/fr/insee/genesis/domain/ports/spi/LunaticJsonRawDataPersistencePort.java index 5a9184e0..bf3423ae 100644 --- a/src/main/java/fr/insee/genesis/domain/ports/spi/LunaticJsonRawDataPersistencePort.java +++ b/src/main/java/fr/insee/genesis/domain/ports/spi/LunaticJsonRawDataPersistencePort.java @@ -17,7 +17,6 @@ public interface LunaticJsonRawDataPersistencePort { List findRawDataByQuestionnaireId(String questionnaireId, Mode mode, List interrogationIdList); Page findRawDataByQuestionnaireId(String questionnaireId, Pageable pageable); List findRawDataByInterrogationId(String interrogationId); - List getAllUnprocessedData(); void updateProcessDates(String campaignId, Set interrogationIds); Set findDistinctQuestionnaireIds(); Set findDistinctQuestionnaireIdsByNullProcessDate(); diff --git a/src/main/java/fr/insee/genesis/domain/service/rawdata/LunaticJsonRawDataService.java b/src/main/java/fr/insee/genesis/domain/service/rawdata/LunaticJsonRawDataService.java index a829a134..e3b32496 100644 --- a/src/main/java/fr/insee/genesis/domain/service/rawdata/LunaticJsonRawDataService.java +++ b/src/main/java/fr/insee/genesis/domain/service/rawdata/LunaticJsonRawDataService.java @@ -4,7 +4,6 @@ import fr.insee.bpm.metadata.model.VariablesMap; import fr.insee.genesis.Constants; import fr.insee.genesis.configuration.Config; -import fr.insee.genesis.controller.dto.rawdata.LunaticJsonRawDataUnprocessedDto; import fr.insee.genesis.controller.utils.ControllerUtils; import fr.insee.genesis.domain.model.context.DataProcessingContextModel; import fr.insee.genesis.domain.model.surveyunit.DataState; @@ -293,22 +292,6 @@ private static Boolean getIsCapturedIndirectly(LunaticJsonRawDataModel rawData) } - @Override - public List getUnprocessedDataIds() { - List dtos = new ArrayList<>(); - - for (GroupedInterrogation groupedInterrogation : lunaticJsonRawDataPersistencePort.findUnprocessedIds()) { - for (String interrogationId : groupedInterrogation.interrogationIds()){ - dtos.add(LunaticJsonRawDataUnprocessedDto.builder() - .questionnaireId(groupedInterrogation.questionnaireId()) - .interrogationId(interrogationId) - .build() - ); - } - } - return dtos; - } - @Override public Set getUnprocessedDataQuestionnaireIds() { Set unprocessedQuestionnaireIds = lunaticJsonRawDataPersistencePort.findDistinctQuestionnaireIdsByNullProcessDate(); diff --git a/src/main/java/fr/insee/genesis/infrastructure/adapter/LunaticJsonRawDataMongoAdapter.java b/src/main/java/fr/insee/genesis/infrastructure/adapter/LunaticJsonRawDataMongoAdapter.java index ee21c779..f4668727 100644 --- a/src/main/java/fr/insee/genesis/infrastructure/adapter/LunaticJsonRawDataMongoAdapter.java +++ b/src/main/java/fr/insee/genesis/infrastructure/adapter/LunaticJsonRawDataMongoAdapter.java @@ -44,11 +44,6 @@ public void save(LunaticJsonRawDataModel rawData) { repository.insert(doc); } - @Override - public List getAllUnprocessedData() { - return LunaticJsonRawDataDocumentMapper.INSTANCE.listDocumentToListModel(repository.findByNullProcessDate()); - } - @Override public Set findDistinctQuestionnaireIdsByNullProcessDate(){ return new HashSet<>(repository.findDistinctQuestionnaireIdByProcessDateIsNull()); diff --git a/src/test/java/fr/insee/genesis/controller/rest/ControllerAccessIT.java b/src/test/java/fr/insee/genesis/controller/rest/ControllerAccessIT.java index a884c053..c60947d4 100644 --- a/src/test/java/fr/insee/genesis/controller/rest/ControllerAccessIT.java +++ b/src/test/java/fr/insee/genesis/controller/rest/ControllerAccessIT.java @@ -74,7 +74,6 @@ private static Stream endpointsReader() { private static Stream responseEndpoint() { return Stream.of( - Arguments.of(GET,"/responses/raw/lunatic-json/get/unprocessed"), Arguments.of(GET,"/responses/raw/lunatic-json/TOTO"), Arguments.of(GET,"/raw-responses/TOTO"), Arguments.of(POST,"/responses/raw/lunatic-json/test/process") diff --git a/src/test/java/fr/insee/genesis/controller/rest/responses/RawResponseControllerTest.java b/src/test/java/fr/insee/genesis/controller/rest/responses/RawResponseControllerTest.java index a6536669..fb61b13b 100644 --- a/src/test/java/fr/insee/genesis/controller/rest/responses/RawResponseControllerTest.java +++ b/src/test/java/fr/insee/genesis/controller/rest/responses/RawResponseControllerTest.java @@ -279,22 +279,6 @@ void getUnprocessed_shouldReturn200WithIds() throws Exception { } } - @Nested - @DisplayName("GET /responses/raw/lunatic-json/get/unprocessed tests") - class GetUnprocessedJsonRawDataTests { - - @Test - @DisplayName("Should return 200 with unprocessed data ids") - void getUnprocessedJson_shouldReturn200() throws Exception { - // GIVEN - when(lunaticJsonRawDataApiPort.getUnprocessedDataIds()).thenReturn(List.of()); - - // WHEN / THEN - mockMvc.perform(get("/responses/raw/lunatic-json/get/unprocessed")) - .andExpect(status().isOk()); - } - } - @Nested @DisplayName("GET /responses/raw/lunatic-json/get/unprocessed/questionnaireIds tests") class GetUnprocessedJsonRawDataQuestionnairesIdsTests { diff --git a/src/test/java/fr/insee/genesis/domain/service/rawdata/LunaticJsonRawDataServiceUnitTest.java b/src/test/java/fr/insee/genesis/domain/service/rawdata/LunaticJsonRawDataServiceUnitTest.java index 76901124..228f5eed 100644 --- a/src/test/java/fr/insee/genesis/domain/service/rawdata/LunaticJsonRawDataServiceUnitTest.java +++ b/src/test/java/fr/insee/genesis/domain/service/rawdata/LunaticJsonRawDataServiceUnitTest.java @@ -458,38 +458,6 @@ void arrayValues_convertedToMultipleIterations() { } } - @Nested - @DisplayName("getUnprocessedDataIds()") - class GetUnprocessedDataIdsTests { - - @Test - @DisplayName("Returns DTOs for each interrogation id") - void returnsDtos() { - //GIVEN - GroupedInterrogation grouped = new GroupedInterrogation( - QUESTIONNAIRE_ID, List.of("id1", "id2")); - when(lunaticJsonRawDataPersistencePort.findUnprocessedIds()).thenReturn(List.of(grouped)); - - //WHEN - List result = service.getUnprocessedDataIds(); - - //THEN - assertThat(result).hasSize(2); - assertThat(result.get(0).interrogationId()).isEqualTo("id1"); - assertThat(result.get(1).interrogationId()).isEqualTo("id2"); - } - - @Test - @DisplayName("Returns empty list when no unprocessed ids") - void noUnprocessed_returnsEmpty() { - //GIVEN - when(lunaticJsonRawDataPersistencePort.findUnprocessedIds()).thenReturn(List.of()); - - //WHEN + THEN - assertThat(service.getUnprocessedDataIds()).isEmpty(); - } - } - @Nested @DisplayName("getUnprocessedDataQuestionnaireIds()") class GetUnprocessedDataQuestionnaireIdsTests { diff --git a/src/test/java/fr/insee/genesis/infrastructure/adapter/LunaticJsonRawDataMongoAdapterTest.java b/src/test/java/fr/insee/genesis/infrastructure/adapter/LunaticJsonRawDataMongoAdapterTest.java index 5e359a16..b1245c2f 100644 --- a/src/test/java/fr/insee/genesis/infrastructure/adapter/LunaticJsonRawDataMongoAdapterTest.java +++ b/src/test/java/fr/insee/genesis/infrastructure/adapter/LunaticJsonRawDataMongoAdapterTest.java @@ -89,35 +89,6 @@ void save_shouldUseInsertNotSave() { } } - @Nested - @DisplayName("getAllUnprocessedData() tests") - class GetAllUnprocessedDataTests { - - @Test - @DisplayName("Should return mapped models from repository") - void getAllUnprocessedData_shouldReturnMappedModels() { - //GIVEN - when(repository.findByNullProcessDate()).thenReturn(List.of(getDocument())); - - //WHEN - List result = adapter.getAllUnprocessedData(); - - //THEN - assertThat(result).isNotNull().hasSize(1); - verify(repository).findByNullProcessDate(); - } - - @Test - @DisplayName("Should return empty list when repository returns no documents") - void getAllUnprocessedData_noDocuments_shouldReturnEmptyList() { - //GIVEN - when(repository.findByNullProcessDate()).thenReturn(List.of()); - - //WHEN + THEN - assertThat(adapter.getAllUnprocessedData()).isEmpty(); - } - } - @Nested @DisplayName("findDistinctQuestionnaireIdsByNullProcessDate() tests") class FindDistinctQuestionnaireIdsByNullProcessDateTests { From b4fa0a51246acdd583c0f2d0adb62002cb013a74 Mon Sep 17 00:00:00 2001 From: Alexis Szmundy Date: Wed, 22 Apr 2026 14:57:48 +0200 Subject: [PATCH 2/5] feat: put back admin debug endpoints for raw data --- .../rest/responses/RawResponseController.java | 33 ++++++++++++- .../ports/api/LunaticJsonRawDataApiPort.java | 1 - .../rawdata/LunaticJsonRawDataService.java | 1 + .../responses/RawResponseControllerTest.java | 48 +++++++++++++++++++ 4 files changed, 81 insertions(+), 2 deletions(-) diff --git a/src/main/java/fr/insee/genesis/controller/rest/responses/RawResponseController.java b/src/main/java/fr/insee/genesis/controller/rest/responses/RawResponseController.java index 9864b3b1..510ccc9f 100644 --- a/src/main/java/fr/insee/genesis/controller/rest/responses/RawResponseController.java +++ b/src/main/java/fr/insee/genesis/controller/rest/responses/RawResponseController.java @@ -1,6 +1,5 @@ package fr.insee.genesis.controller.rest.responses; -import fr.insee.genesis.controller.dto.rawdata.LunaticJsonRawDataUnprocessedDto; import fr.insee.genesis.domain.model.surveyunit.Mode; import fr.insee.genesis.domain.model.surveyunit.rawdata.DataProcessResult; import fr.insee.genesis.domain.model.surveyunit.rawdata.LunaticJsonRawDataModel; @@ -11,6 +10,7 @@ import fr.insee.genesis.exceptions.GenesisException; import fr.insee.genesis.infrastructure.repository.RawResponseInputRepository; import fr.insee.modelefiliere.RawResponseDto; +import io.swagger.v3.oas.annotations.Hidden; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import jakarta.validation.Valid; @@ -267,4 +267,35 @@ public ResponseEntity exists(@PathVariable String interrogationId) { } return ResponseEntity.notFound().build(); } + + //Debug admin endpoints + @Operation(summary = "Get lunatic json raw data") + @GetMapping(path = "/responses/raw/lunatic-json/{collectionInstrumentId}/{mode}/{interrogationId}") + @PreAuthorize("hasRole('ADMIN')") + public ResponseEntity> getJsonRawData( + @PathVariable("collectionInstrumentId") String collectionInstrumentId, + @PathVariable("mode") Mode mode, + @PathVariable(INTERROGATION_ID) String interrogationId + ) { + return ResponseEntity.ok(lunaticJsonRawDataApiPort.getRawDataByQuestionnaireId( + collectionInstrumentId, + mode, + List.of(interrogationId) + )); + } + + @Operation(summary = "Get raw response") + @GetMapping(path = "/raw-responses/{collectionInstrumentId}/{mode}/{interrogationId}") + @PreAuthorize("hasRole('ADMIN')") + public ResponseEntity> getRawResponses( + @PathVariable("collectionInstrumentId") String collectionInstrumentId, + @PathVariable("mode") Mode mode, + @PathVariable(INTERROGATION_ID) String interrogationId + ) { + return ResponseEntity.ok(rawResponseApiPort.getRawResponses( + collectionInstrumentId, + mode, + List.of(interrogationId) + )); + } } diff --git a/src/main/java/fr/insee/genesis/domain/ports/api/LunaticJsonRawDataApiPort.java b/src/main/java/fr/insee/genesis/domain/ports/api/LunaticJsonRawDataApiPort.java index 50940108..aec28ed3 100644 --- a/src/main/java/fr/insee/genesis/domain/ports/api/LunaticJsonRawDataApiPort.java +++ b/src/main/java/fr/insee/genesis/domain/ports/api/LunaticJsonRawDataApiPort.java @@ -23,7 +23,6 @@ public interface LunaticJsonRawDataApiPort { List getRawDataByQuestionnaireId(String questionnaireId, Mode mode, List interrogationIdList); List convertRawData(List rawData, VariablesMap variablesMap); - List getUnprocessedDataIds(); Set getUnprocessedDataQuestionnaireIds(); void updateProcessDates(List surveyUnitModels); Set findDistinctQuestionnaireIds(); diff --git a/src/main/java/fr/insee/genesis/domain/service/rawdata/LunaticJsonRawDataService.java b/src/main/java/fr/insee/genesis/domain/service/rawdata/LunaticJsonRawDataService.java index 0d561a9d..243c0bd5 100644 --- a/src/main/java/fr/insee/genesis/domain/service/rawdata/LunaticJsonRawDataService.java +++ b/src/main/java/fr/insee/genesis/domain/service/rawdata/LunaticJsonRawDataService.java @@ -4,6 +4,7 @@ import fr.insee.bpm.metadata.model.VariablesMap; import fr.insee.genesis.Constants; import fr.insee.genesis.configuration.Config; +import fr.insee.genesis.controller.dto.rawdata.LunaticJsonRawDataUnprocessedDto; import fr.insee.genesis.controller.utils.ControllerUtils; import fr.insee.genesis.domain.model.context.DataProcessingContextModel; import fr.insee.genesis.domain.model.surveyunit.DataState; diff --git a/src/test/java/fr/insee/genesis/controller/rest/responses/RawResponseControllerTest.java b/src/test/java/fr/insee/genesis/controller/rest/responses/RawResponseControllerTest.java index 1cbb43fe..7b95af98 100644 --- a/src/test/java/fr/insee/genesis/controller/rest/responses/RawResponseControllerTest.java +++ b/src/test/java/fr/insee/genesis/controller/rest/responses/RawResponseControllerTest.java @@ -3,12 +3,14 @@ import fr.insee.genesis.configuration.auth.security.DefaultSecurityConfig; import fr.insee.genesis.domain.model.surveyunit.Mode; import fr.insee.genesis.domain.model.surveyunit.rawdata.DataProcessResult; +import fr.insee.genesis.domain.model.surveyunit.rawdata.LunaticJsonRawDataModel; import fr.insee.genesis.domain.model.surveyunit.rawdata.RawResponseModel; import fr.insee.genesis.domain.ports.api.LunaticJsonRawDataApiPort; import fr.insee.genesis.domain.ports.api.RawResponseApiPort; import fr.insee.genesis.domain.ports.api.SurveyUnitApiPort; import fr.insee.genesis.exceptions.GenesisException; import fr.insee.genesis.infrastructure.repository.RawResponseInputRepository; +import lombok.SneakyThrows; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; @@ -23,6 +25,7 @@ import org.springframework.data.domain.PageRequest; import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.http.MediaType; +import org.springframework.security.test.context.support.WithMockUser; import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.TestPropertySource; import org.springframework.test.context.bean.override.mockito.MockitoBean; @@ -505,4 +508,49 @@ void getProcessedIds_defaultHours_shouldReturn200() throws Exception { .andExpect(status().isOk()); } } + + @Nested + @DisplayName("GET raw responses and lunatic json admin endpoints tests") + class GetRawTests{ + @Test + @DisplayName("Should call lunaticjsondata api port and return 200 with lunaticJsonRawData model") + @SneakyThrows + void getLunaticJsonRawData_call_port(){ + //GIVEN + String questionnaireId = "quest"; + Mode mode = Mode.WEB; + String interrogationId = "interro"; + LunaticJsonRawDataModel lunaticJsonRawDataModel = + LunaticJsonRawDataModel.builder().interrogationId(interrogationId).build(); + when(lunaticJsonRawDataApiPort.getRawDataByQuestionnaireId(eq(questionnaireId), eq(mode), anyList())) + .thenReturn(List.of(lunaticJsonRawDataModel)); + + //WHEN + THEN + mockMvc.perform(get("/responses/raw/lunatic-json/%s/%s/%s".formatted( + questionnaireId, mode.getModeName(), interrogationId + ))) + .andExpect(status().isOk()) + .andExpect(content().string(containsString(interrogationId))); + } + + @Test + @DisplayName("Should call raw response api port and return 200 with raw response model") + @SneakyThrows + void getRawResponse_call_port(){ + //GIVEN + String collectionInstrumentId = "collectionInstrumentId"; + Mode mode = Mode.WEB; + String interrogationId = "interro"; + RawResponseModel rawResponseModel = RawResponseModel.builder().interrogationId(interrogationId).build(); + when(rawResponseApiPort.getRawResponses(eq(collectionInstrumentId), eq(mode), anyList())) + .thenReturn(List.of(rawResponseModel)); + + //WHEN + THEN + mockMvc.perform(get("/raw-responses/%s/%s/%s".formatted( + collectionInstrumentId, mode.getModeName(), interrogationId + ))) + .andExpect(status().isOk()) + .andExpect(content().string(containsString(interrogationId))); + } + } } \ No newline at end of file From 613c73937436d967f899ce9b626bb968b958d03f Mon Sep 17 00:00:00 2001 From: Alexis Szmundy Date: Wed, 22 Apr 2026 14:59:24 +0200 Subject: [PATCH 3/5] fix: hide those endpoints --- .../controller/rest/responses/RawResponseController.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/fr/insee/genesis/controller/rest/responses/RawResponseController.java b/src/main/java/fr/insee/genesis/controller/rest/responses/RawResponseController.java index 510ccc9f..c68ffbbd 100644 --- a/src/main/java/fr/insee/genesis/controller/rest/responses/RawResponseController.java +++ b/src/main/java/fr/insee/genesis/controller/rest/responses/RawResponseController.java @@ -269,6 +269,7 @@ public ResponseEntity exists(@PathVariable String interrogationId) { } //Debug admin endpoints + @Hidden @Operation(summary = "Get lunatic json raw data") @GetMapping(path = "/responses/raw/lunatic-json/{collectionInstrumentId}/{mode}/{interrogationId}") @PreAuthorize("hasRole('ADMIN')") @@ -284,6 +285,7 @@ public ResponseEntity> getJsonRawData( )); } + @Hidden @Operation(summary = "Get raw response") @GetMapping(path = "/raw-responses/{collectionInstrumentId}/{mode}/{interrogationId}") @PreAuthorize("hasRole('ADMIN')") From fdee8bbb4fe8bd3c7a48ed1ea92de8f93690e2a2 Mon Sep 17 00:00:00 2001 From: Alexis Szmundy Date: Wed, 22 Apr 2026 15:13:52 +0200 Subject: [PATCH 4/5] test: integrations tests for admin endpoints --- .../responses/RawResponseControllerIT.java | 58 +++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git a/src/test/java/fr/insee/genesis/controller/rest/responses/RawResponseControllerIT.java b/src/test/java/fr/insee/genesis/controller/rest/responses/RawResponseControllerIT.java index 450eaeba..b19f0291 100644 --- a/src/test/java/fr/insee/genesis/controller/rest/responses/RawResponseControllerIT.java +++ b/src/test/java/fr/insee/genesis/controller/rest/responses/RawResponseControllerIT.java @@ -9,6 +9,7 @@ import fr.insee.genesis.TestConstants; import fr.insee.genesis.controller.IntegrationTestAbstract; import fr.insee.genesis.domain.model.surveyunit.Mode; +import fr.insee.genesis.domain.model.surveyunit.rawdata.RawResponseModel; import fr.insee.genesis.infrastructure.adapter.LunaticJsonRawDataMongoAdapter; import fr.insee.genesis.infrastructure.adapter.RawResponseMongoAdapter; import fr.insee.genesis.infrastructure.document.context.DataProcessingContextDocument; @@ -44,6 +45,7 @@ import java.util.Set; import static fr.insee.genesis.domain.utils.JsonUtils.jsonToMap; +import static org.hamcrest.Matchers.containsString; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyList; import static org.mockito.ArgumentMatchers.argThat; @@ -53,8 +55,10 @@ import static org.mockito.Mockito.verifyNoInteractions; import static org.mockito.Mockito.when; import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.csrf; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.put; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @Slf4j @@ -880,6 +884,60 @@ private void setOldModelTestMockBehaviour(String questionnaireId, } } + @Nested + @DisplayName("GET raw responses and lunatic json admin endpoints tests") + class GetRawTests{ + @Test + @DisplayName("GET lunatic json Should return 200 with lunaticJsonRawData model") + @WithMockUser(roles = "ADMIN") + @SneakyThrows + void getLunaticJsonRawData_test(){ + //GIVEN + String questionnaireId = "quest"; + Mode mode = Mode.WEB; + String interrogationId = "interro"; + LunaticJsonRawDataDocument lunaticJsonRawDataDocument = LunaticJsonRawDataDocument.builder() + .interrogationId(interrogationId).build(); + when(lunaticJsonMongoDBRepository.findByQuestionnaireModeAndInterrogations( + eq(questionnaireId), + eq(mode), + anyList() + )).thenReturn(List.of(lunaticJsonRawDataDocument)); + + //WHEN + THEN + mockMvc.perform(get("/responses/raw/lunatic-json/%s/%s/%s".formatted( + questionnaireId, mode.getModeName(), interrogationId + ))) + .andExpect(status().isOk()) + .andExpect(content().string(containsString(interrogationId))); + } + + @Test + @DisplayName("GET Raw Response should return 200 with raw response model") + @WithMockUser(roles = "ADMIN") + @SneakyThrows + void getRawResponse_test(){ + //GIVEN + String collectionInstrumentId = "collectionInstrumentId"; + Mode mode = Mode.WEB; + String interrogationId = "interro"; + RawResponseDocument rawResponseDocument = RawResponseDocument.builder().interrogationId(interrogationId) + .build(); + when(rawResponseRepository.findByCollectionInstrumentIdAndModeAndInterrogationIdList( + eq(collectionInstrumentId), + eq(mode.getJsonName()), + anyList() + )).thenReturn(List.of(rawResponseDocument)); + + //WHEN + THEN + mockMvc.perform(get("/raw-responses/%s/%s/%s".formatted( + collectionInstrumentId, mode.toString(), interrogationId + ))) + .andExpect(status().isOk()) + .andExpect(content().string(containsString(interrogationId))); + } + } + //UTILS private Map getNewDataMap() { Map dataMap = new HashMap<>(); From 320335a74538268ed6dbefdaa3ad47682ea874d1 Mon Sep 17 00:00:00 2001 From: Alexis Szmundy Date: Thu, 23 Apr 2026 09:23:44 +0200 Subject: [PATCH 5/5] chore: unused import --- .../controller/rest/responses/RawResponseControllerIT.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/test/java/fr/insee/genesis/controller/rest/responses/RawResponseControllerIT.java b/src/test/java/fr/insee/genesis/controller/rest/responses/RawResponseControllerIT.java index b19f0291..df51c3d3 100644 --- a/src/test/java/fr/insee/genesis/controller/rest/responses/RawResponseControllerIT.java +++ b/src/test/java/fr/insee/genesis/controller/rest/responses/RawResponseControllerIT.java @@ -9,7 +9,6 @@ import fr.insee.genesis.TestConstants; import fr.insee.genesis.controller.IntegrationTestAbstract; import fr.insee.genesis.domain.model.surveyunit.Mode; -import fr.insee.genesis.domain.model.surveyunit.rawdata.RawResponseModel; import fr.insee.genesis.infrastructure.adapter.LunaticJsonRawDataMongoAdapter; import fr.insee.genesis.infrastructure.adapter.RawResponseMongoAdapter; import fr.insee.genesis.infrastructure.document.context.DataProcessingContextDocument;