Add WithMockUser & mutateWith to WebFlux Samples

This commit is contained in:
Rob Winch 2017-09-18 10:18:11 -05:00
parent ae342dfcce
commit 404a8e793e
3 changed files with 77 additions and 17 deletions

View File

@ -17,24 +17,26 @@
*/ */
package sample; package sample;
import java.util.Map;
import java.util.function.Consumer;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContext;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.security.test.context.support.WithMockUser;
import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.ActiveProfiles;
import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.reactive.server.WebTestClient; import org.springframework.test.web.reactive.server.WebTestClient;
import java.nio.charset.Charset; import static org.springframework.security.test.web.reactive.server.SecurityMockServerConfigurers.mockUser;
import java.util.Base64; import static org.springframework.security.test.web.reactive.server.SecurityMockServerConfigurers.springSecurity;
import java.util.Map;
import java.util.function.Consumer;
import static org.springframework.web.reactive.function.client.ExchangeFilterFunctions.Credentials.basicAuthenticationCredentials;
import static org.springframework.web.reactive.function.client.ExchangeFilterFunctions.basicAuthentication; import static org.springframework.web.reactive.function.client.ExchangeFilterFunctions.basicAuthentication;
import static org.springframework.web.reactive.function.client.ExchangeFilterFunctions.Credentials.basicAuthenticationCredentials;
/** /**
* @author Rob Winch * @author Rob Winch
@ -52,7 +54,8 @@ public class HelloWebfluxMethodApplicationTests {
@Before @Before
public void setup() { public void setup() {
this.rest = WebTestClient this.rest = WebTestClient
.bindToApplicationContext(context) .bindToApplicationContext(this.context)
.apply(springSecurity())
.configureClient() .configureClient()
.filter(basicAuthentication()) .filter(basicAuthentication())
.build(); .build();
@ -67,6 +70,8 @@ public class HelloWebfluxMethodApplicationTests {
.expectStatus().isUnauthorized(); .expectStatus().isUnauthorized();
} }
// --- Basic Authentication ---
@Test @Test
public void messageWhenUserThenForbidden() throws Exception { public void messageWhenUserThenForbidden() throws Exception {
this.rest this.rest
@ -89,16 +94,59 @@ public class HelloWebfluxMethodApplicationTests {
.expectBody(String.class).isEqualTo("Hello World!"); .expectBody(String.class).isEqualTo("Hello World!");
} }
// --- WithMockUser ---
@Test
@WithMockUser
public void messageWhenWithMockUserThenForbidden() throws Exception {
this.rest
.get()
.uri("/message")
.exchange()
.expectStatus().isEqualTo(HttpStatus.FORBIDDEN)
.expectBody().isEmpty();
}
@Test
@WithMockUser(roles = "ADMIN")
public void messageWhenWithMockAdminThenOk() throws Exception {
this.rest
.get()
.uri("/message")
.exchange()
.expectStatus().isOk()
.expectBody(String.class).isEqualTo("Hello World!");
}
// --- mutateWith mockUser ---
@Test
public void messageWhenMutateWithMockUserThenForbidden() throws Exception {
this.rest
.mutateWith(mockUser())
.get()
.uri("/message")
.exchange()
.expectStatus().isEqualTo(HttpStatus.FORBIDDEN)
.expectBody().isEmpty();
}
@Test
public void messageWhenMutateWithMockAdminThenOk() throws Exception {
this.rest
.mutateWith(mockUser().roles("ADMIN"))
.get()
.uri("/message")
.exchange()
.expectStatus().isOk()
.expectBody(String.class).isEqualTo("Hello World!");
}
private Consumer<Map<String, Object>> robsCredentials() { private Consumer<Map<String, Object>> robsCredentials() {
return basicAuthenticationCredentials("rob","rob"); return basicAuthenticationCredentials("rob","rob");
} }
private Consumer<Map<String, Object>> adminCredentials() { private Consumer<Map<String, Object>> adminCredentials() {
return basicAuthenticationCredentials("admin","admin"); return basicAuthenticationCredentials("admin","admin");
} }
private String base64Encode(String value) {
return Base64.getEncoder().encodeToString(value.getBytes(Charset.defaultCharset()));
}
} }

View File

@ -26,6 +26,7 @@ import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContext;
import org.springframework.security.test.context.support.WithMockUser;
import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.ActiveProfiles;
import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.context.junit4.SpringRunner;
@ -91,7 +92,7 @@ public class HelloWebfluxApplicationTests {
} }
@Test @Test
public void mockSupportWhenValidMockUserThenOk() throws Exception { public void mockSupportWhenMutateWithMockUserThenOk() throws Exception {
this.rest this.rest
.mutateWith(mockUser()) .mutateWith(mockUser())
.get() .get()
@ -99,12 +100,17 @@ public class HelloWebfluxApplicationTests {
.exchange() .exchange()
.expectStatus().isOk() .expectStatus().isOk()
.expectBody().json("{\"message\":\"Hello user!\"}"); .expectBody().json("{\"message\":\"Hello user!\"}");
}
@Test
@WithMockUser
public void mockSupportWhenWithMockUserThenOk() throws Exception {
this.rest this.rest
.get() .get()
.uri("/") .uri("/")
.exchange() .exchange()
.expectStatus().isUnauthorized(); .expectStatus().isOk()
.expectBody().json("{\"message\":\"Hello user!\"}");
} }
private Consumer<Map<String, Object>> userCredentials() { private Consumer<Map<String, Object>> userCredentials() {

View File

@ -25,6 +25,7 @@ import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.test.context.support.WithMockUser;
import org.springframework.security.web.server.WebFilterChainFilter; import org.springframework.security.web.server.WebFilterChainFilter;
import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.ActiveProfiles;
import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.ContextConfiguration;
@ -34,8 +35,8 @@ import org.springframework.web.reactive.function.server.RouterFunction;
import static org.springframework.security.test.web.reactive.server.SecurityMockServerConfigurers.mockUser; import static org.springframework.security.test.web.reactive.server.SecurityMockServerConfigurers.mockUser;
import static org.springframework.security.test.web.reactive.server.SecurityMockServerConfigurers.springSecurity; import static org.springframework.security.test.web.reactive.server.SecurityMockServerConfigurers.springSecurity;
import static org.springframework.web.reactive.function.client.ExchangeFilterFunctions.Credentials.basicAuthenticationCredentials;
import static org.springframework.web.reactive.function.client.ExchangeFilterFunctions.basicAuthentication; import static org.springframework.web.reactive.function.client.ExchangeFilterFunctions.basicAuthentication;
import static org.springframework.web.reactive.function.client.ExchangeFilterFunctions.Credentials.basicAuthenticationCredentials;
/** /**
* @author Rob Winch * @author Rob Winch
@ -95,7 +96,7 @@ public class HelloWebfluxFnApplicationTests {
} }
@Test @Test
public void mockSupportWhenValidMockUserThenOk() throws Exception { public void mockSupportWhenMutateWithMockUserThenOk() throws Exception {
this.rest this.rest
.mutateWith(mockUser()) .mutateWith(mockUser())
.get() .get()
@ -103,12 +104,17 @@ public class HelloWebfluxFnApplicationTests {
.exchange() .exchange()
.expectStatus().isOk() .expectStatus().isOk()
.expectBody().json("{\"message\":\"Hello user!\"}"); .expectBody().json("{\"message\":\"Hello user!\"}");
}
@Test
@WithMockUser
public void mockSupportWhenWithMockUserThenOk() throws Exception {
this.rest this.rest
.get() .get()
.uri("/") .uri("/")
.exchange() .exchange()
.expectStatus().isUnauthorized(); .expectStatus().isOk()
.expectBody().json("{\"message\":\"Hello user!\"}");
} }
private Consumer<Map<String, Object>> userCredentials() { private Consumer<Map<String, Object>> userCredentials() {