diff --git a/persistence/src/main/java/edu/msudenver/tsp/persistence/controller/TheoremController.java b/persistence/src/main/java/edu/msudenver/tsp/persistence/controller/TheoremController.java index 457ac10..fc78e77 100644 --- a/persistence/src/main/java/edu/msudenver/tsp/persistence/controller/TheoremController.java +++ b/persistence/src/main/java/edu/msudenver/tsp/persistence/controller/TheoremController.java @@ -1,6 +1,8 @@ package edu.msudenver.tsp.persistence.controller; import edu.msudenver.tsp.persistence.dto.Theorem; +import edu.msudenver.tsp.persistence.exception.BadRequestException; +import edu.msudenver.tsp.persistence.exception.UnprocessableEntityException; import edu.msudenver.tsp.persistence.repository.TheoremRepository; import edu.msudenver.tsp.utilities.PersistenceUtilities; import lombok.AllArgsConstructor; @@ -45,11 +47,11 @@ public class TheoremController { @GetMapping("/branch") public @ResponseBody - ResponseEntity> getAllTheoremsByBranch(@RequestParam("branch") String branch) { + ResponseEntity> getAllTheoremsByBranch(@RequestParam("branch") String branch) throws BadRequestException { LOG.info("Received request to query for theorems related to the {} branch of mathematics", branch); if (branch == null) { LOG.error("ERROR: branch was null"); - return new ResponseEntity<>(HttpStatus.BAD_REQUEST); + throw new BadRequestException("Specified branch is null"); } if (branch.contains("_") || branch.contains("-")) { @@ -80,11 +82,11 @@ public class TheoremController { @GetMapping("/proven_status") public @ResponseBody - ResponseEntity> getAllTheoremsByProvenStatus(@RequestParam("proven_status") final String provenStatus) { + ResponseEntity> getAllTheoremsByProvenStatus(@RequestParam("proven_status") final String provenStatus) throws BadRequestException { LOG.info("Received request to query for theorems whose proven status is {}", provenStatus); if (provenStatus == null) { LOG.error("ERROR: status was null"); - return new ResponseEntity<>(HttpStatus.BAD_REQUEST); + throw new BadRequestException("Specified status is null"); } final Boolean isProven = Boolean.parseBoolean(provenStatus); @@ -112,11 +114,11 @@ public class TheoremController { @GetMapping("/name") public @ResponseBody - ResponseEntity> getAllTheoremsByName(@RequestParam("name") String name) { + ResponseEntity> getAllTheoremsByName(@RequestParam("name") String name) throws BadRequestException { LOG.info("Received request to query for theorems whose name is {}", name); if (name == null) { LOG.error("ERROR: name was null"); - return new ResponseEntity<>(HttpStatus.BAD_REQUEST); + throw new BadRequestException("Specified name is null"); } if (name.contains("_") || name.contains("-")) { @@ -147,11 +149,11 @@ public class TheoremController { @GetMapping("/id") public @ResponseBody - ResponseEntity getTheoremById(@RequestParam("id") final Integer id) { + ResponseEntity getTheoremById(@RequestParam("id") final Integer id) throws BadRequestException { LOG.info("Received request to query for theorem with id {}", id); if (id == null) { LOG.error("ERROR: ID was null"); - return new ResponseEntity<>(HttpStatus.BAD_REQUEST); + throw new BadRequestException("Specified ID is null"); } LOG.debug("Querying for theorem with id {}", id); @@ -179,16 +181,16 @@ public class TheoremController { @Validated({Theorem.Insert.class, Default.class}) public @ResponseBody ResponseEntity insertTheorem( @Valid @RequestBody final Theorem theorem, - final BindingResult bindingResult) { + final BindingResult bindingResult) throws UnprocessableEntityException, BadRequestException { LOG.info("Received request to insert a new theorem"); if (bindingResult.hasErrors()) { LOG.error("Binding result is unprocessable"); - return new ResponseEntity<>(HttpStatus.UNPROCESSABLE_ENTITY); + throw new UnprocessableEntityException(bindingResult.getAllErrors().toString()); } if (theorem == null) { LOG.error("Passed entity is null"); - return new ResponseEntity<>(HttpStatus.BAD_REQUEST); + throw new BadRequestException("Passed theorem is null"); } LOG.debug("Saving new theorem"); @@ -208,22 +210,22 @@ public class TheoremController { @PatchMapping("/{id}") public @ResponseBody ResponseEntity updateTheorem( @PathVariable("id") final Integer id, - @RequestBody final Theorem theorem, final BindingResult bindingResult) { + @RequestBody final Theorem theorem, final BindingResult bindingResult) throws UnprocessableEntityException, BadRequestException { LOG.info("Received request to update a theorem"); if (bindingResult.hasErrors()) { LOG.error("Binding result is unprocessable"); - return new ResponseEntity<>(HttpStatus.UNPROCESSABLE_ENTITY); + throw new UnprocessableEntityException(bindingResult.getAllErrors().toString()); } if (theorem == null) { LOG.error("Passed entity is null"); - return new ResponseEntity<>(HttpStatus.BAD_REQUEST); + throw new BadRequestException("Passed theorem is null"); } if (id == null) { LOG.error("Theorem ID must be specified"); - return new ResponseEntity<>(HttpStatus.BAD_REQUEST); + throw new BadRequestException("Specified ID is null"); } LOG.debug("Checking for existence of theorem with id {}", id); @@ -239,7 +241,7 @@ public class TheoremController { if (!existingTheorem.isPresent()) { LOG.error("No theorem associated with id {}", id); - return new ResponseEntity<>(HttpStatus.BAD_REQUEST); + return new ResponseEntity<>(HttpStatus.NOT_FOUND); } PersistenceUtilities.copyNonNullProperties(theorem, existingTheorem.get()); @@ -260,11 +262,11 @@ public class TheoremController { } @DeleteMapping("/{id}") - public @ResponseBody ResponseEntity deleteTheoremById(@PathVariable("id") final Integer id) { + public @ResponseBody ResponseEntity deleteTheoremById(@PathVariable("id") final Integer id) throws BadRequestException { LOG.info("Received request to delete theorem with id {}", id); if (id == null) { LOG.error("Specified id is null"); - return new ResponseEntity<>(HttpStatus.BAD_REQUEST); + throw new BadRequestException("Specified ID is null"); } LOG.debug("Deleting theorem with id {}", id); diff --git a/persistence/src/test/java/edu/msudenver/tsp/persistence/controller/TheoremControllerTest.java b/persistence/src/test/java/edu/msudenver/tsp/persistence/controller/TheoremControllerTest.java index a667d0a..7fee5c8 100644 --- a/persistence/src/test/java/edu/msudenver/tsp/persistence/controller/TheoremControllerTest.java +++ b/persistence/src/test/java/edu/msudenver/tsp/persistence/controller/TheoremControllerTest.java @@ -2,6 +2,8 @@ package edu.msudenver.tsp.persistence.controller; import edu.msudenver.tsp.persistence.dto.Theorem; import edu.msudenver.tsp.persistence.dto.TheoremType; +import edu.msudenver.tsp.persistence.exception.BadRequestException; +import edu.msudenver.tsp.persistence.exception.UnprocessableEntityException; import edu.msudenver.tsp.persistence.repository.TheoremRepository; import org.junit.Test; import org.junit.runner.RunWith; @@ -50,7 +52,7 @@ public class TheoremControllerTest { } @Test - public void testGetTheoremById() { + public void testGetTheoremById() throws BadRequestException { final Theorem theorem = createTheorem(); when(theoremRepository.findById(anyInt())).thenReturn(Optional.ofNullable(theorem)); @@ -64,18 +66,13 @@ public class TheoremControllerTest { verify(theoremRepository).findById(anyInt()); } - @Test - public void testGetTheoremById_nullId() { - final ResponseEntity responseEntity = theoremController.getTheoremById(null); - - assertNotNull(responseEntity); - assertFalse(responseEntity.hasBody()); - assertEquals(HttpStatus.BAD_REQUEST, responseEntity.getStatusCode()); - verifyZeroInteractions(theoremRepository); + @Test(expected = BadRequestException.class) + public void testGetTheoremById_nullId() throws BadRequestException { + theoremController.getTheoremById(null); } @Test - public void testGetTheoremById_noTheoremFound() { + public void testGetTheoremById_noTheoremFound() throws BadRequestException { when(theoremRepository.findById(anyInt())).thenReturn(Optional.empty()); final ResponseEntity responseEntity = theoremController.getTheoremById(1); @@ -87,7 +84,7 @@ public class TheoremControllerTest { } @Test - public void testGetAllTheoremsByBranch() { + public void testGetAllTheoremsByBranch() throws BadRequestException { final Theorem theoremDto = createTheorem(); final List listOfTheorems = new ArrayList<>(); listOfTheorems.add(theoremDto); @@ -105,18 +102,13 @@ public class TheoremControllerTest { responseEntity.getBody().forEach(theorem -> assertEquals(theoremDto, theorem)); } - @Test - public void testGetAllTheoremsByBranch_nullBranch() { - final ResponseEntity> responseEntity = theoremController.getAllTheoremsByBranch(null); - - assertNotNull(responseEntity); - assertFalse(responseEntity.hasBody()); - assertEquals(HttpStatus.BAD_REQUEST, responseEntity.getStatusCode()); - verifyZeroInteractions(theoremRepository); + @Test(expected = BadRequestException.class) + public void testGetAllTheoremsByBranch_nullBranch() throws BadRequestException { + theoremController.getAllTheoremsByBranch(null); } @Test - public void testGetAllTheoremsByBranch_noTheoremsFound() { + public void testGetAllTheoremsByBranch_noTheoremsFound() throws BadRequestException { when(theoremRepository.findByBranch(anyString())).thenReturn(Collections.emptyList()); final ResponseEntity> responseEntity = theoremController.getAllTheoremsByBranch("test_nonexistent_branch"); @@ -127,7 +119,7 @@ public class TheoremControllerTest { } @Test - public void testGetAllTheoremsByProvenStatus() { + public void testGetAllTheoremsByProvenStatus() throws BadRequestException { final Theorem theoremDto = createTheorem(); final List listOfTheorems = new ArrayList<>(); listOfTheorems.add(theoremDto); @@ -145,18 +137,13 @@ public class TheoremControllerTest { responseEntity.getBody().forEach(theorem -> assertEquals(theoremDto, theorem)); } - @Test - public void testGetAllTheoremsByProvenStatus_nullProvenStatus() { - final ResponseEntity> responseEntity = theoremController.getAllTheoremsByProvenStatus(null); - - assertNotNull(responseEntity); - assertFalse(responseEntity.hasBody()); - assertEquals(HttpStatus.BAD_REQUEST, responseEntity.getStatusCode()); - verifyZeroInteractions(theoremRepository); + @Test(expected = BadRequestException.class) + public void testGetAllTheoremsByProvenStatus_nullProvenStatus() throws BadRequestException { + theoremController.getAllTheoremsByProvenStatus(null); } @Test - public void testGetAllTheoremsByProvenStatus_invalidProvenStatus() { + public void testGetAllTheoremsByProvenStatus_invalidProvenStatus() throws BadRequestException { final ResponseEntity> responseEntity = theoremController.getAllTheoremsByProvenStatus("test"); assertNotNull(responseEntity); @@ -165,7 +152,7 @@ public class TheoremControllerTest { } @Test - public void testGetAllTheoremsByProvenStatus_noTheoremsFound() { + public void testGetAllTheoremsByProvenStatus_noTheoremsFound() throws BadRequestException { when(theoremRepository.findByProvenStatus(anyBoolean())).thenReturn(Collections.emptyList()); final ResponseEntity> responseEntity = theoremController.getAllTheoremsByProvenStatus("false"); @@ -176,7 +163,7 @@ public class TheoremControllerTest { } @Test - public void testGetAllTheoremsByName() { + public void testGetAllTheoremsByName() throws BadRequestException { final Theorem theoremDto = createTheorem(); final List listOfTheorems = new ArrayList<>(); listOfTheorems.add(theoremDto); @@ -194,18 +181,13 @@ public class TheoremControllerTest { responseEntity.getBody().forEach(theorem -> assertEquals(theoremDto, theorem)); } - @Test - public void testGetAllTheoremsByName_nullName() { - final ResponseEntity> responseEntity = theoremController.getAllTheoremsByName(null); - - assertNotNull(responseEntity); - assertFalse(responseEntity.hasBody()); - assertEquals(HttpStatus.BAD_REQUEST, responseEntity.getStatusCode()); - verifyZeroInteractions(theoremRepository); + @Test(expected = BadRequestException.class) + public void testGetAllTheoremsByName_nullName() throws BadRequestException { + theoremController.getAllTheoremsByName(null); } @Test - public void testGetAllTheoremsByName_noNameFound() { + public void testGetAllTheoremsByName_noNameFound() throws BadRequestException { when(theoremRepository.findByName(anyString())).thenReturn(Collections.emptyList()); final ResponseEntity> responseEntity = theoremController.getAllTheoremsByName("No-name"); @@ -216,7 +198,7 @@ public class TheoremControllerTest { } @Test - public void testInsertTheorem() { + public void testInsertTheorem() throws BadRequestException, UnprocessableEntityException { final Theorem theorem = createTheorem(); when(theoremRepository.save(any(Theorem.class))).thenReturn(theorem); @@ -230,31 +212,21 @@ public class TheoremControllerTest { verify(theoremRepository).save(any(Theorem.class)); } - @Test - public void testInsertTheorem_theoremDtoIsNull() { - final ResponseEntity responseEntity = theoremController.insertTheorem(null, bindingResult); - - assertNotNull(responseEntity); - assertFalse(responseEntity.hasBody()); - assertEquals(HttpStatus.BAD_REQUEST, responseEntity.getStatusCode()); - verifyZeroInteractions(theoremRepository); + @Test(expected = BadRequestException.class) + public void testInsertTheorem_theoremDtoIsNull() throws BadRequestException, UnprocessableEntityException { + theoremController.insertTheorem(null, bindingResult); } - @Test - public void testInsertTheorem_bindingResultHasErrors() { + @Test(expected = UnprocessableEntityException.class) + public void testInsertTheorem_bindingResultHasErrors() throws BadRequestException, UnprocessableEntityException { final Theorem theorem = createTheorem(); when(bindingResult.hasErrors()).thenReturn(true); - final ResponseEntity responseEntity = theoremController.insertTheorem(theorem, bindingResult); - - assertNotNull(responseEntity); - assertFalse(responseEntity.hasBody()); - assertEquals(HttpStatus.UNPROCESSABLE_ENTITY, responseEntity.getStatusCode()); - verifyZeroInteractions(theoremRepository); + theoremController.insertTheorem(theorem, bindingResult); } @Test - public void testUpdateTheorem() { + public void testUpdateTheorem() throws BadRequestException, UnprocessableEntityException { final Theorem existingTheorem = createTheorem(); existingTheorem.setId(1); existingTheorem.setVersion(1); @@ -275,52 +247,37 @@ public class TheoremControllerTest { verify(theoremRepository).save(any(Theorem.class)); } - @Test - public void testUpdateTheorem_bindingResultHasErrors() { + @Test(expected = UnprocessableEntityException.class) + public void testUpdateTheorem_bindingResultHasErrors() throws BadRequestException, UnprocessableEntityException { when(bindingResult.hasErrors()).thenReturn(true); - final ResponseEntity responseEntity = theoremController.updateTheorem(1, createTheorem(), bindingResult); + theoremController.updateTheorem(1, createTheorem(), bindingResult); + } - assertNotNull(responseEntity); - assertFalse(responseEntity.hasBody()); - assertEquals(HttpStatus.UNPROCESSABLE_ENTITY, responseEntity.getStatusCode()); - verifyZeroInteractions(theoremRepository); + @Test(expected = BadRequestException.class) + public void testUpdateTheorem_theoremDtoIsNull() throws BadRequestException, UnprocessableEntityException { + theoremController.updateTheorem(1, null, bindingResult); + } + + @Test(expected = BadRequestException.class) + public void testUpdateTheorem_idIsNull() throws BadRequestException, UnprocessableEntityException { + theoremController.updateTheorem(null, createTheorem(), bindingResult); } @Test - public void testUpdateTheorem_theoremDtoIsNull() { - final ResponseEntity responseEntity = theoremController.updateTheorem(1, null, bindingResult); - - assertNotNull(responseEntity); - assertFalse(responseEntity.hasBody()); - assertEquals(HttpStatus.BAD_REQUEST, responseEntity.getStatusCode()); - verifyZeroInteractions(theoremRepository); - } - - @Test - public void testUpdateTheorem_idIsNull() { - final ResponseEntity responseEntity = theoremController.updateTheorem(null, createTheorem(), bindingResult); - - assertNotNull(responseEntity); - assertFalse(responseEntity.hasBody()); - assertEquals(HttpStatus.BAD_REQUEST, responseEntity.getStatusCode()); - verifyZeroInteractions(theoremRepository); - } - - @Test - public void testUpdateTheorem_theoremDoesNotExist() { + public void testUpdateTheorem_theoremDoesNotExist() throws BadRequestException, UnprocessableEntityException { when(theoremRepository.findById(anyInt())).thenReturn(Optional.empty()); final ResponseEntity responseEntity = theoremController.updateTheorem(1, createTheorem(), bindingResult); assertNotNull(responseEntity); assertFalse(responseEntity.hasBody()); - assertEquals(HttpStatus.BAD_REQUEST, responseEntity.getStatusCode()); + assertEquals(HttpStatus.NOT_FOUND, responseEntity.getStatusCode()); verify(theoremRepository, times(0)).save(any(Theorem.class)); } @Test - public void testDeleteTheoremById() { + public void testDeleteTheoremById() throws BadRequestException { doNothing().when(theoremRepository).deleteById(anyInt()); final ResponseEntity responseEntity = theoremController.deleteTheoremById(1); @@ -331,14 +288,9 @@ public class TheoremControllerTest { verify(theoremRepository).deleteById(anyInt()); } - @Test - public void testDeleteTheoremById_idIsNull() { - final ResponseEntity responseEntity = theoremController.deleteTheoremById(null); - - assertNotNull(responseEntity); - assertFalse(responseEntity.hasBody()); - assertEquals(HttpStatus.BAD_REQUEST, responseEntity.getStatusCode()); - verifyZeroInteractions(theoremRepository); + @Test(expected = BadRequestException.class) + public void testDeleteTheoremById_idIsNull() throws BadRequestException { + theoremController.deleteTheoremById(null); } private Theorem createTheorem() {