Implemented an interceptor, that forbiddes access according to a header
[demos/spring-boot] / src / test / java / de / juplo / demo / DemoApplicationTests.java
index e16b8ec..0c07e93 100644 (file)
@@ -2,25 +2,126 @@ package de.juplo.demo;
 
 import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.test.autoconfigure.web.reactive.AutoConfigureWebTestClient;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
 import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.test.web.reactive.server.WebTestClient;
+import org.springframework.test.web.servlet.MockMvc;
 
+import static de.juplo.demo.RequestTypeInterceptor.REQUEST_TYPE;
+import static de.juplo.demo.RequestTypeInterceptor.RequestType.HUMAN;
+import static de.juplo.demo.RequestTypeInterceptor.RequestType.MACHINE;
+import static org.springframework.http.HttpHeaders.ACCEPT;
+import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
+import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
+import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
+import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
+
+
+@SpringBootTest(properties = { "application.name=FOO", "build.version=BAR" })
+@AutoConfigureMockMvc
+class DemoApplicationTests
+{
+
+       @Value("${build.version}")
+       String projectVersion;
+
+
+       @Test
+       void contextLoads()
+       {
+       }
 
-@SpringBootTest
-@AutoConfigureWebTestClient
-class DemoApplicationTests {
 
        @Test
-       void contextLoads() {
+       void getWelcomeResponseIsOkIfRequestTypeHeaderIsNotSet(@Autowired MockMvc mvc) throws Exception
+       {
+               mvc
+                               .perform(get("/"))
+                               .andExpect(status().isOk());
        }
 
+       @Test
+       void getWelcomeResponseIsOkIfRequestIsOfTypeMachine(@Autowired MockMvc mvc) throws Exception
+       {
+               mvc
+                               .perform(get("/")
+                                               .header(REQUEST_TYPE, MACHINE))
+                               .andExpect(status().isOk());
+       }
+
+       @Test
+       void getWelcomeResponseIsOkIfRequestIsOfTypeHuman(@Autowired MockMvc mvc) throws Exception
+       {
+               mvc
+                               .perform(get("/")
+                                               .header(REQUEST_TYPE, HUMAN))
+                               .andExpect(status().isOk());
+       }
+
+       @Test
+       void expectedResultsForGreetIfRequestIsOfTypeMachine(@Autowired MockMvc mvc) throws Exception
+       {
+               mvc
+                               .perform(post("/greet/peter")
+                                               .header(ACCEPT, "application/json")
+                                               .header(REQUEST_TYPE, MACHINE)
+                                               .content("Hello TO_NAME, nice to meet you. I'm FROM_NAME."))
+                               .andExpect(status().isOk())
+                               .andExpect(content().json("{\"message\": \"Hello peter, nice to meet you. I'm FOO@BAR.\"}"));
+       }
+
+       @Test
+       void expectedResultsForGreetIfRequestIsOfTypeHuman(@Autowired MockMvc mvc) throws Exception
+       {
+               mvc
+                               .perform(post("/greet/peter")
+                                               .header(ACCEPT, "application/json")
+                                               .header(REQUEST_TYPE, HUMAN)
+                                               .content("Hello TO_NAME, nice to meet you. I'm FROM_NAME."))
+                               .andExpect(status().isOk())
+                               .andExpect(content().json("{\"message\": \"Hello peter, nice to meet you. I'm FOO@BAR.\"}"));
+       }
+
+       @Test
+       void badRequestForGreetIfRequestTypeHeaderIsNotSet(@Autowired MockMvc mvc) throws Exception
+       {
+               mvc
+                               .perform(post("/greet/peter")
+                                               .header(ACCEPT, "application/json")
+                                               .content("Hello TO_NAME, nice to meet you. I'm FROM_NAME."))
+                               .andExpect(status().isBadRequest());
+       }
+
+       @Test
+       void expectedResultsForAcknowlegeIfRequestIsOfTypeMachine(@Autowired MockMvc mvc) throws Exception
+       {
+               mvc
+                               .perform(post("/acknowledge/peter")
+                                               .header(ACCEPT, "application/json")
+                                               .header(REQUEST_TYPE, MACHINE)
+                                               .content("Hello TO_NAME, nice to meet you. I'm FROM_NAME."))
+                               .andExpect(status().isOk())
+                               .andExpect(content().json("{\"message\": \"Hello peter, nice to meet you. I'm FOO@BAR.\"}"));
+       }
+
+       @Test
+       void isForbiddenForAcknowlegeIfRequestIsOfTypeHuman(@Autowired MockMvc mvc) throws Exception
+       {
+               mvc
+                               .perform(post("/acknowledge/peter")
+                                               .header(ACCEPT, "application/json")
+                                               .header(REQUEST_TYPE, HUMAN)
+                                               .content("Hello TO_NAME, nice to meet you. I'm FROM_NAME."))
+                               .andExpect(status().isForbidden());
+       }
 
        @Test
-       void getWelcomeResponseIsOk(@Autowired WebTestClient webClient) {
-               webClient
-                               .get().uri("/")
-                               .exchange()
-                               .expectStatus().isOk();
+       void badRequestForAcknowlegeIfRequestTypeHeaderIsNotSet(@Autowired MockMvc mvc) throws Exception
+       {
+               mvc
+                               .perform(post("/acknowledge/peter")
+                                               .header(ACCEPT, "application/json")
+                                               .content("Hello TO_NAME, nice to meet you. I'm FROM_NAME."))
+                               .andExpect(status().isBadRequest());
        }
 }