public class ResourceNotFoundException extends RuntimeException {
@ControllerAdvice
public class RestResponseEntityExceptionHandler extends ResponseEntityExceptionHandler {
@ExceptionHandler({ResourceNotFoundException.class})
public ResponseEntity<Object> handleNotFoundException(Exception exception, WebRequest request) {
return new ResponseEntity<Object>("Resource not found", new HttpHeaders(), HttpStatus.NOT_FOUND);
}
}
@Override
public CategoryDTO getCategoryByName(String name) {
return categoryRepository.findByName(name)
.map(cateoryMapper::categoryToCategoryDTO)
.orElseThrow(ResourceNotFoundException::new);
}
@GetMapping("/{name}")
public ResponseEntity<CategoryDTO> getCategoryByName(@PathVariable String name) {
return new ResponseEntity<CategoryDTO>(categoryService.getCategoryByName(name), HttpStatus.OK);
}
....
@BeforeEach
void setUp() {
MockitoAnnotations.initMocks(this);
mockMvc = MockMvcBuilders.standaloneSetup(categoryController)
.setControllerAdvice(new RestResponseEntityExceptionHandler())
.build();
}
....
@Test
void getCategoryByNameNotFound() throws Exception {
when(categoryService.getCategoryByName(anyString())).thenThrow(ResourceNotFoundException.class);
mockMvc.perform(get("/api/v1/categories/" + NAME + "NotFound")
.contentType(MediaType.APPLICATION_JSON))
.andExpect(status().isNotFound());
}