Skip to content

Commit 4e81871

Browse files
committed
modify tests
1 parent 501d490 commit 4e81871

7 files changed

Lines changed: 112 additions & 45 deletions

File tree

src/main/java/fr/insee/genesis/controller/rest/QuestionnaireMetadataController.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,10 @@
33
import fr.insee.bpm.metadata.model.MetadataModel;
44
import fr.insee.genesis.domain.model.surveyunit.Mode;
55
import fr.insee.genesis.domain.ports.api.QuestionnaireMetadataApiPort;
6-
import fr.insee.genesis.exceptions.GenesisException;
6+
import fr.insee.genesis.exceptions.QuestionnaireNotFoundException;
77
import io.swagger.v3.oas.annotations.Operation;
88
import lombok.AllArgsConstructor;
9+
import org.springframework.http.HttpStatus;
910
import org.springframework.http.ResponseEntity;
1011
import org.springframework.security.access.prepost.PreAuthorize;
1112
import org.springframework.stereotype.Controller;
@@ -27,8 +28,8 @@ public ResponseEntity<Object> getMetadata(
2728
){
2829
try {
2930
return ResponseEntity.ok().body(questionnaireMetadataApiPort.find(questionnaireId, mode));
30-
} catch (GenesisException e) {
31-
return ResponseEntity.status(e.getStatus()).body(e.getMessage());
31+
} catch (QuestionnaireNotFoundException e) {
32+
return ResponseEntity.status(HttpStatus.NOT_FOUND).body(e.getMessage());
3233
}
3334
}
3435

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

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,11 @@ public ResponseEntity<Object> saveResponsesFromXmlCampaignFolder(@RequestParam("
142142
}catch (NoDataException nde){
143143
//Don't stop if NoDataError thrown
144144
log.warn("No data for campaign {} mode {} : {}", campaignName, currentMode, nde.getMessage());
145-
}
145+
} catch (Exception e) {
146+
log.warn("Error while processing campaign {} mode {} : {}",
147+
campaignName,
148+
currentMode,
149+
e.getMessage()); }
146150
}
147151

148152
return ResponseEntity.ok(getSuccessMessage(isAnyDataSaved));
@@ -474,8 +478,13 @@ public ResponseEntity<Object> saveEditedVariables(
474478
fileUtils,
475479
errors);
476480
if(metadataModel == null){
477-
throw new GenesisException(HttpStatus.NOT_FOUND, errors.getLast().getMessage());
478-
}
481+
String msg = errors.isEmpty()
482+
? "Empty metadataModel for questionnaireId=%s, mode=%s"
483+
.formatted(surveyUnitInputDto.getQuestionnaireId(), surveyUnitInputDto.getMode())
484+
: errors.getLast().getMessage();
485+
486+
throw new GenesisException(HttpStatus.NOT_FOUND, msg);
487+
}
479488

480489
//Check if input edited variables are in metadatas
481490
List<String> absentCollectedVariableNames =

src/main/java/fr/insee/genesis/domain/ports/api/QuestionnaireMetadataApiPort.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,13 @@
44
import fr.insee.genesis.domain.model.surveyunit.Mode;
55
import fr.insee.genesis.exceptions.GenesisError;
66
import fr.insee.genesis.exceptions.GenesisException;
7+
import fr.insee.genesis.exceptions.QuestionnaireNotFoundException;
78
import fr.insee.genesis.infrastructure.utils.FileUtils;
89

910
import java.util.List;
1011

1112
public interface QuestionnaireMetadataApiPort {
12-
MetadataModel find(String collectionInstrumentId, Mode mode) throws GenesisException;
13+
MetadataModel find(String collectionInstrumentId, Mode mode) throws QuestionnaireNotFoundException;
1314
MetadataModel loadAndSaveIfNotExists(String campaignName, String collectionInstrumentId, Mode mode, FileUtils fileUtils,
1415
List<GenesisError> errors) throws GenesisException;
1516
void remove(String collectionInstrumentId, Mode mode);

src/main/java/fr/insee/genesis/exceptions/GenesisExceptionHandler.java

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -60,15 +60,4 @@ public ResponseEntity<String> handleReviewDisabled(ReviewDisabledException excep
6060
return ResponseEntity.status(HttpStatus.FORBIDDEN)
6161
.body(exception.getMessage());
6262
}
63-
64-
@ExceptionHandler(Exception.class)
65-
public ResponseEntity<String> handleAny(Exception exception) {
66-
log.error("Unexpected error (Type: {}) : {}",
67-
exception.getClass().getSimpleName(),
68-
exception.getMessage(),
69-
exception);
70-
return ResponseEntity
71-
.status(HttpStatus.INTERNAL_SERVER_ERROR)
72-
.body("Internal server error");
73-
}
7463
}

src/test/java/fr/insee/genesis/controller/rest/responses/ContextualVariableControllerTest.java

Lines changed: 77 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,11 @@
1111
import fr.insee.genesis.domain.service.contextualvariable.external.ContextualExternalVariableJsonService;
1212
import fr.insee.genesis.domain.service.contextualvariable.previous.ContextualPreviousVariableJsonService;
1313
import fr.insee.genesis.exceptions.GenesisException;
14+
import fr.insee.genesis.exceptions.GenesisExceptionHandler;
15+
import fr.insee.genesis.exceptions.NoDataException;
16+
import fr.insee.genesis.exceptions.QuestionnaireNotFoundException;
17+
import fr.insee.genesis.exceptions.ReviewDisabledException;
18+
import fr.insee.genesis.exceptions.SpecificationNotFoundException;
1419
import fr.insee.genesis.infrastructure.document.contextualexternal.ContextualExternalVariableDocument;
1520
import fr.insee.genesis.infrastructure.document.contextualprevious.ContextualPreviousVariableDocument;
1621
import fr.insee.genesis.stubs.ConfigStub;
@@ -26,6 +31,7 @@
2631
import org.junit.jupiter.params.provider.Arguments;
2732
import org.junit.jupiter.params.provider.MethodSource;
2833
import org.junit.jupiter.params.provider.ValueSource;
34+
import org.springframework.http.HttpStatus;
2935
import org.springframework.http.ResponseEntity;
3036
import org.springframework.util.FileSystemUtils;
3137

@@ -607,10 +613,14 @@ void readPreviousJson_sourceState_too_long(String sourceState){
607613
);
608614

609615
//WHEN + THEN
610-
ResponseEntity<Object> response = contextualVariableController.readContextualPreviousJson(QUESTIONNAIRE_ID_PREVIOUS, Mode.WEB, sourceState,
611-
fileName);
612-
Assertions.assertEquals(400,response.getStatusCode().value());
613-
}
616+
GenesisException ex = Assertions.assertThrows(
617+
GenesisException.class,
618+
() -> contextualVariableController.readContextualPreviousJson(
619+
QUESTIONNAIRE_ID_PREVIOUS, Mode.WEB, sourceState, fileName
620+
)
621+
);
622+
623+
Assertions.assertEquals(400, ex.getStatus().value()); }
614624

615625
@Test
616626
@SneakyThrows
@@ -628,9 +638,17 @@ void readPreviousJson_invalid_syntax(){
628638
);
629639

630640
//WHEN + THEN
631-
ResponseEntity<Object> response = contextualVariableController.readContextualPreviousJson(QUESTIONNAIRE_ID_PREVIOUS, Mode.WEB, null,
632-
syntaxErrorFileName);
633-
Assertions.assertEquals(400,response.getStatusCode().value());
641+
GenesisException ex = Assertions.assertThrows(
642+
GenesisException.class,
643+
() -> contextualVariableController.readContextualPreviousJson(
644+
QUESTIONNAIRE_ID_PREVIOUS,
645+
Mode.WEB,
646+
null,
647+
syntaxErrorFileName
648+
)
649+
);
650+
651+
Assertions.assertEquals(400, ex.getStatus().value());
634652
}
635653
@Test
636654
@SneakyThrows
@@ -648,9 +666,14 @@ void readPreviousJson_not_a_json(){
648666
);
649667

650668
//WHEN + THEN
651-
ResponseEntity<Object> response = contextualVariableController.readContextualPreviousJson(QUESTIONNAIRE_ID_PREVIOUS, Mode.WEB, null,
652-
syntaxErrorFileName);
653-
Assertions.assertEquals(400,response.getStatusCode().value());
669+
GenesisException ex = Assertions.assertThrows(
670+
GenesisException.class,
671+
() -> contextualVariableController.readContextualPreviousJson(
672+
QUESTIONNAIRE_ID_PREVIOUS, Mode.WEB, null, syntaxErrorFileName
673+
)
674+
);
675+
676+
Assertions.assertEquals(400, ex.getStatus().value());
654677
}
655678

656679

@@ -671,8 +694,14 @@ void readPreviousJson_no_interrogation_id(String fileName){
671694
);
672695

673696
//WHEN + THEN
674-
ResponseEntity<Object> response = contextualVariableController.readContextualPreviousJson(QUESTIONNAIRE_ID_PREVIOUS, Mode.WEB, null, fileName);
675-
Assertions.assertEquals(400,response.getStatusCode().value());
697+
GenesisException ex = Assertions.assertThrows(
698+
GenesisException.class,
699+
() -> contextualVariableController.readContextualPreviousJson(
700+
QUESTIONNAIRE_ID_PREVIOUS, Mode.WEB, null, fileName
701+
)
702+
);
703+
704+
Assertions.assertEquals(400, ex.getStatus().value());
676705
}
677706

678707

@@ -856,6 +885,27 @@ static Stream<Arguments> overrideExternalCases() {
856885
);
857886
}
858887

888+
private ResponseEntity<String> toResponse(Exception e) {
889+
GenesisExceptionHandler handler = new GenesisExceptionHandler();
890+
891+
if (e instanceof GenesisException ge) {
892+
return handler.handleGenesis(ge);
893+
}
894+
if (e instanceof QuestionnaireNotFoundException qnfe) {
895+
return handler.handleQuestionnaireNotFound(qnfe);
896+
}
897+
if (e instanceof NoDataException nde) {
898+
return handler.handleNoData(nde);
899+
}
900+
if (e instanceof SpecificationNotFoundException snfe) {
901+
return handler.handleSpec(snfe);
902+
}
903+
if (e instanceof ReviewDisabledException rde) {
904+
return handler.handleReviewDisabled(rde);
905+
}
906+
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Internal server error");
907+
}
908+
859909
@ParameterizedTest
860910
@ValueSource(strings = {"invalid_syntax.json",
861911
"not_a_json.xml",
@@ -864,8 +914,8 @@ static Stream<Arguments> overrideExternalCases() {
864914
"double_interrogationId.json"}
865915
)
866916
@SneakyThrows
867-
void readExternalJson_error_400(String fileName){
868-
//GIVEN
917+
void readExternalJson_error_400(String fileName) {
918+
// GIVEN
869919
Path contextualPath = SOURCE_PATH_EXTERNAL.resolve("contextual");
870920
Files.createDirectories(contextualPath);
871921

@@ -877,9 +927,19 @@ void readExternalJson_error_400(String fileName){
877927
StandardCopyOption.REPLACE_EXISTING
878928
);
879929

880-
//WHEN + THEN
881-
ResponseEntity<Object> response = contextualVariableController.readContextualExternalJson(QUESTIONNAIRE_ID_EXTERNAL, Mode.WEB, fileName);
882-
Assertions.assertEquals(400,response.getStatusCode().value());
930+
// WHEN + THEN
931+
ResponseEntity<String> response;
932+
try {
933+
ResponseEntity<Object> raw = contextualVariableController.readContextualExternalJson(
934+
QUESTIONNAIRE_ID_EXTERNAL, Mode.WEB, fileName
935+
);
936+
response = ResponseEntity.status(raw.getStatusCode())
937+
.body(raw.getBody() == null ? null : raw.getBody().toString());
938+
} catch (Exception e) {
939+
response = toResponse(e);
940+
}
941+
942+
Assertions.assertEquals(400, response.getStatusCode().value());
883943
}
884944

885945
//UTILS

src/test/java/fr/insee/genesis/controller/rest/responses/ResponseControllerTest.java

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@
3232
import org.junit.jupiter.api.BeforeAll;
3333
import org.junit.jupiter.api.BeforeEach;
3434
import org.junit.jupiter.api.Test;
35-
import org.springframework.http.HttpStatusCode;
3635
import org.springframework.http.ResponseEntity;
3736

3837
import java.io.IOException;
@@ -45,6 +44,8 @@
4544
import static fr.insee.genesis.TestConstants.DEFAULT_COLLECTION_INSTRUMENT_ID;
4645
import static fr.insee.genesis.TestConstants.DEFAULT_INTERROGATION_ID;
4746
import static fr.insee.genesis.TestConstants.DEFAULT_SURVEY_UNIT_ID;
47+
import static org.junit.jupiter.api.Assertions.assertEquals;
48+
import static org.junit.jupiter.api.Assertions.assertThrows;
4849

4950
class ResponseControllerTest {
5051
//Given
@@ -611,11 +612,12 @@ void saveEditedTest_No_Metadata_Error() throws GenesisException {
611612
.build();
612613
surveyUnitPersistencePortStub.getMongoStub().add(suModel);
613614

614-
ResponseEntity<Object> response = responseControllerStatic.saveEditedVariables(
615-
surveyUnitInputDto);
616-
Assertions.assertThat(
617-
response.getStatusCode()
618-
).isEqualTo(HttpStatusCode.valueOf(404));
615+
GenesisException ex = assertThrows(
616+
GenesisException.class,
617+
() -> responseControllerStatic.saveEditedVariables(surveyUnitInputDto)
618+
);
619+
620+
assertEquals(404, ex.getStatus().value());
619621
}
620622

621623
@Test
@@ -654,8 +656,12 @@ void saveTest_With_Collected_State_Error() throws GenesisException {
654656
.build();
655657
surveyUnitPersistencePortStub.getMongoStub().add(suModel);
656658

657-
Assertions.assertThat(responseControllerStatic.saveEditedVariables(surveyUnitInputDto).getStatusCode()).isEqualTo(HttpStatusCode.valueOf(400));
658-
}
659+
GenesisException ex = assertThrows(
660+
GenesisException.class,
661+
() -> responseControllerStatic.saveEditedVariables(surveyUnitInputDto)
662+
);
663+
664+
assertEquals(400, ex.getStatus().value()); }
659665

660666
@Test
661667
void saveEditedTest_int() throws GenesisException {

src/test/java/fr/insee/genesis/domain/service/context/DataProcessingContextServiceTest.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import org.junit.jupiter.api.BeforeAll;
1515
import org.junit.jupiter.api.BeforeEach;
1616
import org.junit.jupiter.api.Test;
17+
import org.springframework.http.HttpStatus;
1718

1819
import java.time.LocalDateTime;
1920
import java.util.ArrayList;
@@ -212,15 +213,15 @@ void getContext_shouldThrow500IfMultipleCollectionInstruments() {
212213
GenesisException ex = assertThrows(GenesisException.class, () -> dataProcessingContextService.getContext("00001"));
213214
//To ensure test is portable on Unix/Linux/macOS and windows systems
214215
String normalizedMessage = ex.getMessage().replaceAll("\\r?\\n", "");
215-
Assertions.assertThat(ex.getStatus()).isEqualTo(500);
216+
Assertions.assertThat(ex.getStatus()).isEqualTo(HttpStatus.INTERNAL_SERVER_ERROR);
216217
Assertions.assertThat(normalizedMessage).isEqualTo("Multiple collection instruments for interrogation 00001");
217218
}
218219

219220
@Test
220221
void getContext_shouldThrow404IfNoInterrogations() {
221222
// When & Then
222223
GenesisException ex = assertThrows(GenesisException.class, () -> dataProcessingContextService.getContext("00001"));
223-
Assertions.assertThat(ex.getStatus()).isEqualTo(404);
224+
Assertions.assertThat(ex.getStatus()).isEqualTo(HttpStatus.NOT_FOUND);
224225
Assertions.assertThat(ex.getMessage()).isEqualTo("No interrogation in database with id 00001");
225226
}
226227

0 commit comments

Comments
 (0)