Skip to content

Commit

Permalink
Fix null response to 404
Browse files Browse the repository at this point in the history
  • Loading branch information
arybakov-cgi committed Jun 14, 2024
1 parent d963cee commit f0f47e1
Show file tree
Hide file tree
Showing 14 changed files with 43 additions and 79 deletions.
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
package ca.bc.gov.educ.api.course.config;

import ca.bc.gov.educ.api.course.exception.EntityNotFoundException;
import ca.bc.gov.educ.api.course.exception.GradBusinessRuleException;
import ca.bc.gov.educ.api.course.util.ApiResponseMessage.MessageTypeEnum;
import ca.bc.gov.educ.api.course.util.ApiResponseModel;
import ca.bc.gov.educ.api.course.util.GradValidation;
import org.hibernate.dialect.lock.OptimisticEntityLockException;
import org.hibernate.exception.ConstraintViolationException;
import org.jboss.logging.Logger;
Expand All @@ -15,11 +20,6 @@
import org.springframework.web.context.request.WebRequest;
import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler;

import ca.bc.gov.educ.api.course.util.ApiResponseMessage.MessageTypeEnum;
import ca.bc.gov.educ.api.course.util.ApiResponseModel;
import ca.bc.gov.educ.api.course.exception.GradBusinessRuleException;
import ca.bc.gov.educ.api.course.util.GradValidation;

@ControllerAdvice
public class RestErrorHandler extends ResponseEntityExceptionHandler {

Expand Down Expand Up @@ -55,16 +55,17 @@ protected ResponseEntity<Object> handleAuthorizationErrors(Exception ex, WebRequ
return new ResponseEntity<>(ApiResponseModel.ERROR(null, message), HttpStatus.FORBIDDEN);
}

@ExceptionHandler(value = { GradBusinessRuleException.class })
protected ResponseEntity<Object> handleIrisBusinessException(Exception ex, WebRequest request) {
ApiResponseModel<?> response = ApiResponseModel.ERROR(null);
@ExceptionHandler(value = { GradBusinessRuleException.class, EntityNotFoundException.class })
protected ResponseEntity<Object> handleGradBusinessException(Exception ex, WebRequest request) {
ApiResponseModel<?> response = ApiResponseModel.ERROR(request.toString());
validation.ifErrors(response::addErrorMessages);
validation.ifWarnings(response::addWarningMessages);
if (response.getMessages().isEmpty()) {
response.addMessageItem(ex.getLocalizedMessage(), MessageTypeEnum.ERROR);
}
validation.clear();
return new ResponseEntity<>(response, HttpStatus.UNPROCESSABLE_ENTITY);
HttpStatus httpStatus = (ex instanceof EntityNotFoundException) ? HttpStatus.NOT_FOUND : HttpStatus.UNPROCESSABLE_ENTITY;
return new ResponseEntity<>(response, httpStatus);
}

@ExceptionHandler(value = { OptimisticEntityLockException.class })
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.responses.ApiResponses;
import io.swagger.v3.oas.annotations.security.SecurityRequirement;
import org.springframework.http.HttpStatusCode;
import org.springframework.http.ResponseEntity;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.GetMapping;
Expand Down Expand Up @@ -45,11 +44,6 @@ public ResponseEntity<List<EquivalentOrChallengeCode>> getEquivalentOrChallengeC
@Operation(summary = "Find Equivalent Or Challenge Code", description = "Find Equivalent Or Challenge Code", tags = {"Equivalent Or Challenge Code"})
@ApiResponses(value = {@ApiResponse(responseCode = "200", description = "OK"), @ApiResponse(responseCode = "404", description = "NOT FOUND")})
public ResponseEntity<EquivalentOrChallengeCode> getEquivalentOrChallengeCode(@PathVariable String equivalentOrChallengeCode) {
EquivalentOrChallengeCode result = equivalentOrChallengeCodeService.getEquivalentOrChallengeCode(equivalentOrChallengeCode);
if(result != null) {
return ResponseEntity.ok().body(result);
} else {
return ResponseEntity.status(HttpStatusCode.valueOf(404)).body(null);
}
return ResponseEntity.ok().body(equivalentOrChallengeCodeService.getEquivalentOrChallengeCode(equivalentOrChallengeCode));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.responses.ApiResponses;
import io.swagger.v3.oas.annotations.security.SecurityRequirement;
import org.springframework.http.HttpStatusCode;
import org.springframework.http.ResponseEntity;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.GetMapping;
Expand Down Expand Up @@ -45,11 +44,6 @@ public ResponseEntity<List<ExamSpecialCaseCode>> getExamSpecialCaseCodes() {
@Operation(summary = "Find Exam Special Case Code", description = "Find Exam Special Case Code", tags = {"Exam Special Case Code"})
@ApiResponses(value = {@ApiResponse(responseCode = "200", description = "OK"), @ApiResponse(responseCode = "404", description = "NOT FOUND")})
public ResponseEntity<ExamSpecialCaseCode> getExamSpecialCaseCode(@PathVariable String examSpecialCaseCode) {
ExamSpecialCaseCode result = examSpecialCaseCodeService.getExamSpecialCaseCode(examSpecialCaseCode);
if(result != null) {
return ResponseEntity.ok().body(result);
} else {
return ResponseEntity.status(HttpStatusCode.valueOf(404)).body(null);
}
return ResponseEntity.ok().body(examSpecialCaseCodeService.getExamSpecialCaseCode(examSpecialCaseCode));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.responses.ApiResponses;
import io.swagger.v3.oas.annotations.security.SecurityRequirement;
import org.springframework.http.HttpStatusCode;
import org.springframework.http.ResponseEntity;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.GetMapping;
Expand Down Expand Up @@ -45,11 +44,6 @@ public ResponseEntity<List<FineArtsAppliedSkillsCode>> getFineArtsAppliedSkillsC
@Operation(summary = "Find Fine Arts Applied Skills Code", description = "Find Fine Arts Applied Skills Code", tags = {"Fine Arts Applied Skills Code"})
@ApiResponses(value = {@ApiResponse(responseCode = "200", description = "OK"), @ApiResponse(responseCode = "404", description = "NOT FOUND")})
public ResponseEntity<FineArtsAppliedSkillsCode> getFineArtsAppliedSkillsCode(@PathVariable String fineArtsAppliedSkillsCode) {
FineArtsAppliedSkillsCode result = fineArtsAppliedSkillsCodeService.getFineArtsAppliedSkillsCode(fineArtsAppliedSkillsCode);
if(result != null) {
return ResponseEntity.ok().body(result);
} else {
return ResponseEntity.status(HttpStatusCode.valueOf(404)).body(null);
}
return ResponseEntity.ok().body(fineArtsAppliedSkillsCodeService.getFineArtsAppliedSkillsCode(fineArtsAppliedSkillsCode));
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package ca.bc.gov.educ.api.course.exception;

import org.apache.commons.lang3.StringUtils;

import java.util.HashMap;
import java.util.Map;
import java.util.stream.IntStream;
Expand All @@ -17,6 +18,10 @@ public EntityNotFoundException(Class<?> clazz, String... searchParamsMap) {
super(EntityNotFoundException.generateMessage(clazz.getSimpleName(), toMap(String.class, String.class, searchParamsMap)));
}

public EntityNotFoundException(String message) {
super(message);
}

private static String generateMessage(String entity, Map<String, String> searchParams) {
return StringUtils.capitalize(entity) +
" was not found for parameters " +
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package ca.bc.gov.educ.api.course.service;

import ca.bc.gov.educ.api.course.exception.EntityNotFoundException;
import ca.bc.gov.educ.api.course.model.dto.EquivalentOrChallengeCode;
import ca.bc.gov.educ.api.course.model.transformer.EquivalentOrChallengeCodeTransformer;
import ca.bc.gov.educ.api.course.repository.EquivalentOrChallengeCodeRepository;
Expand Down Expand Up @@ -39,8 +40,10 @@ public List<EquivalentOrChallengeCode> getEquivalentOrChallengeCodeList() {
* @return EquivalentOrChallengeCode
*/
@Retry(name = "generalgetcall")
public EquivalentOrChallengeCode getEquivalentOrChallengeCode(String equivalentOrChallengeCode) {
return equivalentOrChallengeCodeTransformer.transformToDTO(equivalentOrChallengeCodeRepository.findById(equivalentOrChallengeCode));
public EquivalentOrChallengeCode getEquivalentOrChallengeCode(String equivalentOrChallengeCode) throws EntityNotFoundException {
EquivalentOrChallengeCode result = equivalentOrChallengeCodeTransformer.transformToDTO(equivalentOrChallengeCodeRepository.findById(equivalentOrChallengeCode));
if(result != null) return result;
throw new EntityNotFoundException(String.format("Equivalent Or Challenge Code %s not found", equivalentOrChallengeCode));
}

private List<EquivalentOrChallengeCode> sort(List<EquivalentOrChallengeCode> equivalentOrChallengeCodes) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package ca.bc.gov.educ.api.course.service;

import ca.bc.gov.educ.api.course.exception.EntityNotFoundException;
import ca.bc.gov.educ.api.course.model.dto.ExamSpecialCaseCode;
import ca.bc.gov.educ.api.course.model.transformer.ExamSpecialCaseCodeTransformer;
import ca.bc.gov.educ.api.course.repository.ExamSpecialCaseCodeRepository;
Expand Down Expand Up @@ -40,7 +41,9 @@ public List<ExamSpecialCaseCode> getExamSpecialCaseCodeList() {
*/
@Retry(name = "generalgetcall")
public ExamSpecialCaseCode getExamSpecialCaseCode(String examSpecialCaseCode) {
return examSpecialCaseCodeTransformer.transformToDTO(examSpecialCaseCodeRepository.findById(examSpecialCaseCode));
ExamSpecialCaseCode result = examSpecialCaseCodeTransformer.transformToDTO(examSpecialCaseCodeRepository.findById(examSpecialCaseCode));
if(result != null) return result;
throw new EntityNotFoundException(String.format("Exam Special Code %s not found", examSpecialCaseCode));
}

private List<ExamSpecialCaseCode> sort(List<ExamSpecialCaseCode> examSpecialCaseCodes) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package ca.bc.gov.educ.api.course.service;

import ca.bc.gov.educ.api.course.exception.EntityNotFoundException;
import ca.bc.gov.educ.api.course.model.dto.FineArtsAppliedSkillsCode;
import ca.bc.gov.educ.api.course.model.transformer.FineArtsAppliedSkillsCodeTransformer;
import ca.bc.gov.educ.api.course.repository.FineArtsAppliedSkillsCodeRepository;
Expand Down Expand Up @@ -40,7 +41,9 @@ public List<FineArtsAppliedSkillsCode> getFineArtsAppliedSkillsCodeList() {
*/
@Retry(name = "generalgetcall")
public FineArtsAppliedSkillsCode getFineArtsAppliedSkillsCode(String fineArtsAppliedSkillsCode) {
return fineArtsAppliedSkillsCodeTransformer.transformToDTO(fineArtsAppliedSkillsCodeRepository.findById(fineArtsAppliedSkillsCode));
FineArtsAppliedSkillsCode result = fineArtsAppliedSkillsCodeTransformer.transformToDTO(fineArtsAppliedSkillsCodeRepository.findById(fineArtsAppliedSkillsCode));
if(result != null) return result;
throw new EntityNotFoundException(String.format("Fine Art Applied Skills Code %s not found", fineArtsAppliedSkillsCode));
}

private List<FineArtsAppliedSkillsCode> sort(List<FineArtsAppliedSkillsCode> fineArtsAppliedSkillsCodes) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@
import java.util.List;

import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;


@RunWith(MockitoJUnitRunner.class)
Expand Down Expand Up @@ -59,12 +58,4 @@ public void testGetEquivalentOrChallengeCode() {
equivalentOrChallengeCodeController.getEquivalentOrChallengeCode("equivalentOrChallengeCode");
Mockito.verify(equivalentOrChallengeCodeService).getEquivalentOrChallengeCode("equivalentOrChallengeCode");
}

@Test
public void testGetEquivalentOrChallengeCode_noContent() {
Mockito.when(equivalentOrChallengeCodeService.getEquivalentOrChallengeCode("equivalentOrChallengeCode")).thenReturn(null);
ResponseEntity<EquivalentOrChallengeCode> result = equivalentOrChallengeCodeController.getEquivalentOrChallengeCode("equivalentOrChallengeCode");
Mockito.verify(equivalentOrChallengeCodeService).getEquivalentOrChallengeCode("equivalentOrChallengeCode");
assertTrue(result.getStatusCode().is4xxClientError());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,14 +10,11 @@
import org.mockito.Mockito;
import org.mockito.junit.MockitoJUnitRunner;
import org.mockito.junit.jupiter.MockitoExtension;
import org.springframework.http.ResponseEntity;

import java.sql.Date;
import java.util.ArrayList;
import java.util.List;

import static org.junit.Assert.assertTrue;


@RunWith(MockitoJUnitRunner.class)
@ExtendWith(MockitoExtension.class)
Expand Down Expand Up @@ -59,12 +56,4 @@ public void testGetExamSpecialCaseCode() {
examSpecialCaseCodeController.getExamSpecialCaseCode("examSpecialCaseCode");
Mockito.verify(examSpecialCaseCodeService).getExamSpecialCaseCode("examSpecialCaseCode");
}

@Test
public void testGetExamSpecialCaseCode_noContent() {
Mockito.when(examSpecialCaseCodeService.getExamSpecialCaseCode("examSpecialCaseCode")).thenReturn(null);
ResponseEntity<ExamSpecialCaseCode> result = examSpecialCaseCodeController.getExamSpecialCaseCode("examSpecialCaseCode");
Mockito.verify(examSpecialCaseCodeService).getExamSpecialCaseCode("examSpecialCaseCode");
assertTrue(result.getStatusCode().is4xxClientError());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,14 +10,11 @@
import org.mockito.Mockito;
import org.mockito.junit.MockitoJUnitRunner;
import org.mockito.junit.jupiter.MockitoExtension;
import org.springframework.http.ResponseEntity;

import java.sql.Date;
import java.util.ArrayList;
import java.util.List;

import static org.junit.Assert.assertTrue;


@RunWith(MockitoJUnitRunner.class)
@ExtendWith(MockitoExtension.class)
Expand Down Expand Up @@ -59,12 +56,5 @@ public void testGetFineArtsAppliedSkillsCode() {
fineArtsAppliedSkillsCodeController.getFineArtsAppliedSkillsCode("fineArtsAppliedSkillsCode");
Mockito.verify(fineArtsAppliedSkillsCodeService).getFineArtsAppliedSkillsCode("fineArtsAppliedSkillsCode");
}

@Test
public void testGetFineArtsAppliedSkillsCode_noContent() {
Mockito.when(fineArtsAppliedSkillsCodeService.getFineArtsAppliedSkillsCode("fineArtsAppliedSkillsCode")).thenReturn(null);
ResponseEntity<FineArtsAppliedSkillsCode> result = fineArtsAppliedSkillsCodeController.getFineArtsAppliedSkillsCode("fineArtsAppliedSkillsCode");
Mockito.verify(fineArtsAppliedSkillsCodeService).getFineArtsAppliedSkillsCode("fineArtsAppliedSkillsCode");
assertTrue(result.getStatusCode().is4xxClientError());
}

}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package ca.bc.gov.educ.api.course.service;

import ca.bc.gov.educ.api.course.exception.EntityNotFoundException;
import ca.bc.gov.educ.api.course.model.entity.EquivalentOrChallengeCodeEntity;
import ca.bc.gov.educ.api.course.repository.EquivalentOrChallengeCodeRepository;
import org.junit.Test;
Expand All @@ -18,7 +19,6 @@

import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;

@RunWith(SpringRunner.class)
@SpringBootTest
Expand Down Expand Up @@ -62,10 +62,9 @@ public void testGetEquivalentOrChallengeCode() {
assertNotNull(result);
}

@Test
@Test(expected=EntityNotFoundException.class)
public void testGetEquivalentOrChallengeCode_noContent() {
Mockito.when(equivalentOrChallengeCodeRepository.findById("equivalentOrChallengeCode")).thenReturn(Optional.empty());
var result = equivalentOrChallengeCodeService.getEquivalentOrChallengeCode("equivalentOrChallengeCode");
assertNull(result);
equivalentOrChallengeCodeService.getEquivalentOrChallengeCode("equivalentOrChallengeCode");
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package ca.bc.gov.educ.api.course.service;

import ca.bc.gov.educ.api.course.exception.EntityNotFoundException;
import ca.bc.gov.educ.api.course.model.entity.ExamSpecialCaseCodeEntity;
import ca.bc.gov.educ.api.course.repository.ExamSpecialCaseCodeRepository;
import org.junit.Test;
Expand All @@ -18,7 +19,6 @@

import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;

@RunWith(SpringRunner.class)
@SpringBootTest
Expand Down Expand Up @@ -61,11 +61,10 @@ public void testGetExamSpecialCaseCode() {
var result = examSpecialCaseCodeService.getExamSpecialCaseCode("examSpecialCaseCode");
assertNotNull(result);
}
@Test

@Test(expected= EntityNotFoundException.class)
public void testGetExamSpecialCaseCode_noContent() {
Mockito.when(examSpecialCaseCodeRepository.findById("examSpecialCaseCode")).thenReturn(Optional.empty());
var result = examSpecialCaseCodeService.getExamSpecialCaseCode("examSpecialCaseCode");
assertNull(result);
examSpecialCaseCodeService.getExamSpecialCaseCode("examSpecialCaseCode");
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package ca.bc.gov.educ.api.course.service;

import ca.bc.gov.educ.api.course.exception.EntityNotFoundException;
import ca.bc.gov.educ.api.course.model.entity.FineArtsAppliedSkillsCodeEntity;
import ca.bc.gov.educ.api.course.repository.FineArtsAppliedSkillsCodeRepository;
import org.junit.Test;
Expand All @@ -18,7 +19,6 @@

import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;

@RunWith(SpringRunner.class)
@SpringBootTest
Expand Down Expand Up @@ -61,11 +61,10 @@ public void testGetFineArtsAppliedSkillsCode() {
var result = fineArtsAppliedSkillsCodeService.getFineArtsAppliedSkillsCode("fineArtsAppliedSkillsCode");
assertNotNull(result);
}
@Test

@Test(expected= EntityNotFoundException.class)
public void testGetFineArtsAppliedSkillsCode_noContent() {
Mockito.when(fineArtsAppliedSkillsCodeRepository.findById("fineArtsAppliedSkillsCode")).thenReturn(Optional.empty());
var result = fineArtsAppliedSkillsCodeService.getFineArtsAppliedSkillsCode("fineArtsAppliedSkillsCode");
assertNull(result);
fineArtsAppliedSkillsCodeService.getFineArtsAppliedSkillsCode("fineArtsAppliedSkillsCode");
}
}

0 comments on commit f0f47e1

Please sign in to comment.