From 32c76c4de0d36f5f9d25be56a1ac69f06c328348 Mon Sep 17 00:00:00 2001 From: Hok Wai Chan <77360958+hokwaichan@users.noreply.github.com> Date: Thu, 5 Dec 2024 09:05:47 -1000 Subject: [PATCH] Refactor ForTestingController (#1047) --- .../api/controller/ForTestingController.java | 39 ---------- .../controller/ErrorRestController.java | 18 +++-- .../exceptions/ExceptionForTesting.java | 8 ++ .../javascript/mainApp/groupings.service.js | 2 +- .../controller/ForTestingControllerTest.java | 74 ------------------- .../controller/ErrorRestControllerTest.java | 29 ++++++-- .../controller/ExceptionForTestingTest.java | 18 +++++ 7 files changed, 63 insertions(+), 125 deletions(-) delete mode 100644 src/main/java/edu/hawaii/its/api/controller/ForTestingController.java create mode 100644 src/main/java/edu/hawaii/its/groupings/exceptions/ExceptionForTesting.java delete mode 100644 src/test/java/edu/hawaii/its/api/controller/ForTestingControllerTest.java create mode 100644 src/test/java/edu/hawaii/its/groupings/controller/ExceptionForTestingTest.java diff --git a/src/main/java/edu/hawaii/its/api/controller/ForTestingController.java b/src/main/java/edu/hawaii/its/api/controller/ForTestingController.java deleted file mode 100644 index 2f0f49214..000000000 --- a/src/main/java/edu/hawaii/its/api/controller/ForTestingController.java +++ /dev/null @@ -1,39 +0,0 @@ -package edu.hawaii.its.api.controller; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.http.HttpMethod; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -import edu.hawaii.its.api.service.HttpRequestService; -import edu.hawaii.its.groupings.access.UserContextService; -@RestController -@RequestMapping("/api/groupings/testing") -public class ForTestingController { - - private static final Log logger = LogFactory.getLog(ForTestingController.class); - - @Value("${url.api.2.1.base}/testing") - private String API_2_1_BASE; - - private final HttpRequestService httpRequestService; - - private final UserContextService userContextService; - - public ForTestingController(HttpRequestService httpRequestService, UserContextService userContextService) { - this.httpRequestService = httpRequestService; - this.userContextService = userContextService; - } - - @GetMapping(value = "/exception") - public ResponseEntity throwException() { - logger.info("Entered REST throwException..."); - String currentUid = userContextService.getCurrentUid(); - String uri = String.format(API_2_1_BASE + "/exception"); - return httpRequestService.makeApiRequest(currentUid, uri, HttpMethod.GET); - } -} diff --git a/src/main/java/edu/hawaii/its/groupings/controller/ErrorRestController.java b/src/main/java/edu/hawaii/its/groupings/controller/ErrorRestController.java index 9b694d7e4..576de801d 100755 --- a/src/main/java/edu/hawaii/its/groupings/controller/ErrorRestController.java +++ b/src/main/java/edu/hawaii/its/groupings/controller/ErrorRestController.java @@ -1,26 +1,24 @@ package edu.hawaii.its.groupings.controller; - import java.util.Map; - import jakarta.servlet.http.HttpSession; - import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.springframework.beans.factory.annotation.Value; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; +import edu.hawaii.its.groupings.exceptions.ExceptionForTesting; import edu.hawaii.its.groupings.type.Feedback; @RestController public class ErrorRestController { - private static final Log logger = LogFactory.getLog(ErrorRestController.class); - @PreAuthorize("isAuthenticated()") @PostMapping("/feedback/error") public ResponseEntity feedbackError(@RequestBody Map body, HttpSession session) { @@ -29,4 +27,12 @@ public ResponseEntity feedbackError(@RequestBody Map body, session.setAttribute("feedback", new Feedback(exceptionMessage)); return new ResponseEntity<>(HttpStatus.NO_CONTENT); } -} + + @PreAuthorize("hasRole('ADMIN')") + @GetMapping(value = "/testing/exception") + public ResponseEntity throwException() { + logger.info("Entered REST throwException..."); + + throw new ExceptionForTesting("Exception thrown intentionally"); + } +} \ No newline at end of file diff --git a/src/main/java/edu/hawaii/its/groupings/exceptions/ExceptionForTesting.java b/src/main/java/edu/hawaii/its/groupings/exceptions/ExceptionForTesting.java new file mode 100644 index 000000000..e235fdd31 --- /dev/null +++ b/src/main/java/edu/hawaii/its/groupings/exceptions/ExceptionForTesting.java @@ -0,0 +1,8 @@ +package edu.hawaii.its.groupings.exceptions; + +public class ExceptionForTesting extends RuntimeException { + + public ExceptionForTesting(String message) { + super(message); + } +} \ No newline at end of file diff --git a/src/main/resources/static/javascript/mainApp/groupings.service.js b/src/main/resources/static/javascript/mainApp/groupings.service.js index a170d018f..b5e815f2e 100644 --- a/src/main/resources/static/javascript/mainApp/groupings.service.js +++ b/src/main/resources/static/javascript/mainApp/groupings.service.js @@ -442,7 +442,7 @@ * Throws an exception */ throwException(onSuccess, onError) { - let endpoint = BASE_URL + "testing/" + "exception"; + let endpoint = "/testing/" + "exception"; dataProvider.loadData(endpoint, onSuccess, onError); }, }; diff --git a/src/test/java/edu/hawaii/its/api/controller/ForTestingControllerTest.java b/src/test/java/edu/hawaii/its/api/controller/ForTestingControllerTest.java deleted file mode 100644 index 68091c024..000000000 --- a/src/test/java/edu/hawaii/its/api/controller/ForTestingControllerTest.java +++ /dev/null @@ -1,74 +0,0 @@ -package edu.hawaii.its.api.controller; - -import static org.junit.jupiter.api.Assertions.assertNotNull; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.anyString; -import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.BDDMockito.given; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; -import static org.springframework.security.test.web.servlet.setup.SecurityMockMvcConfigurers.springSecurity; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; -import static org.springframework.test.web.servlet.setup.MockMvcBuilders.webAppContextSetup; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.http.HttpMethod; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.test.context.ActiveProfiles; -import org.springframework.test.web.servlet.MockMvc; -import org.springframework.web.context.WebApplicationContext; - -import edu.hawaii.its.api.service.HttpRequestService; -import edu.hawaii.its.groupings.configuration.SpringBootWebApplication; -import edu.hawaii.its.groupings.controller.WithMockUhUser; - -@ActiveProfiles("localTest") -@SpringBootTest(classes = { SpringBootWebApplication.class }) -public class ForTestingControllerTest { - - private static final String UID = "user"; - - private static final String REST_CONTROLLER_BASE = "/api/groupings/testing/"; - - @Autowired - GroupingsRestController groupingsRestController; - - @MockBean - private HttpRequestService httpRequestService; - - @Autowired - private WebApplicationContext context; - private MockMvc mockMvc; - - @BeforeEach - public void setUp() { - mockMvc = webAppContextSetup(context) - .apply(springSecurity()) - .build(); - - when(httpRequestService.makeApiRequest(anyString(), anyString(), any(HttpMethod.class))) - .thenReturn(new ResponseEntity(HttpStatus.BAD_REQUEST)); - } - - @Test - @WithMockUhUser - public void throwExceptionTest() throws Exception { - String uri = REST_CONTROLLER_BASE + "exception"; - given(httpRequestService.makeApiRequest(eq(UID), anyString(), eq(HttpMethod.GET))) - .willReturn(new ResponseEntity(HttpStatus.INTERNAL_SERVER_ERROR)); - - assertNotNull(mockMvc.perform(get(uri)) - .andExpect(status().isInternalServerError()) - .andReturn()); - - verify(httpRequestService, times(1)) - .makeApiRequest(eq(UID), anyString(), eq(HttpMethod.GET)); - } -} diff --git a/src/test/java/edu/hawaii/its/groupings/controller/ErrorRestControllerTest.java b/src/test/java/edu/hawaii/its/groupings/controller/ErrorRestControllerTest.java index 61117c0db..fa79fd342 100755 --- a/src/test/java/edu/hawaii/its/groupings/controller/ErrorRestControllerTest.java +++ b/src/test/java/edu/hawaii/its/groupings/controller/ErrorRestControllerTest.java @@ -2,10 +2,13 @@ import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.containsString; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; import static org.springframework.test.web.servlet.setup.MockMvcBuilders.webAppContextSetup; +import static org.springframework.security.test.web.servlet.setup.SecurityMockMvcConfigurers.springSecurity; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; import jakarta.servlet.http.HttpSession; @@ -14,18 +17,20 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.http.MediaType; +import org.springframework.test.context.ActiveProfiles; import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.MvcResult; import org.springframework.web.context.WebApplicationContext; import edu.hawaii.its.groupings.configuration.SpringBootWebApplication; import edu.hawaii.its.groupings.type.Feedback; +@ActiveProfiles("localTest") @SpringBootTest(classes = { SpringBootWebApplication.class }) public class ErrorRestControllerTest { @Autowired private ErrorRestController restController; - @Autowired private WebApplicationContext context; @@ -35,12 +40,10 @@ public class ErrorRestControllerTest { public void setUp() { mockMvc = webAppContextSetup(context).build(); } - @Test public void testConstruction() { assertNotNull(restController); } - @Test public void httpPostFeedbackError() throws Exception { HttpSession session = mockMvc.perform(post("/feedback/error") @@ -50,11 +53,27 @@ public void httpPostFeedbackError() throws Exception { .andReturn() .getRequest() .getSession(); - assert session != null; assertNotNull(session.getAttribute("feedback")); Feedback feedback = (Feedback) session.getAttribute("feedback"); assertThat(feedback.getExceptionMessage(), is("exception")); } -} + @Test + @WithMockUhUser(uid = "admin", roles = { "ROLE_UH", "ROLE_ADMIN" }) + public void throwExceptionTest() throws Exception { + mockMvc = webAppContextSetup(context) + .apply(springSecurity()) + .build(); + + String uri = "/testing/exception"; + + MvcResult result = mockMvc.perform(get(uri)) + .andExpect(status().isInternalServerError()) + .andReturn(); + + String responseBody = result.getResponse().getContentAsString(); + assertNotNull(responseBody); + assertThat(responseBody, containsString("Exception thrown intentionally")); + } +} \ No newline at end of file diff --git a/src/test/java/edu/hawaii/its/groupings/controller/ExceptionForTestingTest.java b/src/test/java/edu/hawaii/its/groupings/controller/ExceptionForTestingTest.java new file mode 100644 index 000000000..423538d17 --- /dev/null +++ b/src/test/java/edu/hawaii/its/groupings/controller/ExceptionForTestingTest.java @@ -0,0 +1,18 @@ +package edu.hawaii.its.groupings.controller; + +import static org.hamcrest.CoreMatchers.equalTo; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.junit.jupiter.api.Assertions.assertNotNull; + +import org.junit.jupiter.api.Test; +import edu.hawaii.its.groupings.exceptions.ExceptionForTesting; + +public class ExceptionForTestingTest { + + @Test + public void construction() { + ExceptionForTesting ex = new ExceptionForTesting("Test Exception"); + assertNotNull(ex); + assertThat(ex.getMessage(), equalTo("Test Exception")); + } +} \ No newline at end of file