Explorar o código

Update Tests in oauth2webclient Sample

Issue gh-7886
Josh Cummings %!s(int64=5) %!d(string=hai) anos
pai
achega
187c76e610

+ 1 - 0
samples/boot/oauth2webclient/spring-security-samples-boot-oauth2webclient.gradle

@@ -12,4 +12,5 @@ dependencies {
 
 	testCompile project(':spring-security-test')
 	testCompile 'org.springframework.boot:spring-boot-starter-test'
+	testCompile 'com.squareup.okhttp3:mockwebserver'
 }

+ 6 - 2
samples/boot/oauth2webclient/src/main/java/sample/config/WebClientConfig.java

@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2019 the original author or authors.
+ * Copyright 2002-2020 the original author or authors.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -16,13 +16,14 @@
 
 package sample.config;
 
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
+import org.springframework.security.oauth2.client.OAuth2AuthorizedClientManager;
 import org.springframework.security.oauth2.client.OAuth2AuthorizedClientProvider;
 import org.springframework.security.oauth2.client.OAuth2AuthorizedClientProviderBuilder;
 import org.springframework.security.oauth2.client.registration.ClientRegistrationRepository;
 import org.springframework.security.oauth2.client.web.DefaultOAuth2AuthorizedClientManager;
-import org.springframework.security.oauth2.client.OAuth2AuthorizedClientManager;
 import org.springframework.security.oauth2.client.web.OAuth2AuthorizedClientRepository;
 import org.springframework.security.oauth2.client.web.reactive.function.client.ServletOAuth2AuthorizedClientExchangeFilterFunction;
 import org.springframework.web.reactive.function.client.WebClient;
@@ -34,12 +35,15 @@ import org.springframework.web.reactive.function.client.WebClient;
 @Configuration
 public class WebClientConfig {
 
+	@Value("${resource-uri}") String resourceUri;
+
 	@Bean
 	WebClient webClient(OAuth2AuthorizedClientManager authorizedClientManager) {
 		ServletOAuth2AuthorizedClientExchangeFilterFunction oauth2 =
 				new ServletOAuth2AuthorizedClientExchangeFilterFunction(authorizedClientManager);
 		oauth2.setDefaultOAuth2AuthorizedClient(true);
 		return WebClient.builder()
+				.baseUrl(this.resourceUri)
 				.apply(oauth2.oauth2Configuration())
 				.build();
 	}

+ 2 - 8
samples/boot/oauth2webclient/src/main/java/sample/web/OAuth2WebClientController.java

@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2018 the original author or authors.
+ * Copyright 2002-2020 the original author or authors.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -15,7 +15,6 @@
  */
 package sample.web;
 
-import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.Model;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -33,18 +32,14 @@ import static org.springframework.security.oauth2.client.web.reactive.function.c
 public class OAuth2WebClientController {
 	private final WebClient webClient;
 
-	private final String uri;
-
-	public OAuth2WebClientController(WebClient webClient, @Value("${resource-uri}") String uri) {
+	public OAuth2WebClientController(WebClient webClient) {
 		this.webClient = webClient;
-		this.uri = uri;
 	}
 
 	@GetMapping("/explicit")
 	String explicit(Model model) {
 		String body = this.webClient
 				.get()
-				.uri(this.uri)
 				.attributes(clientRegistrationId("client-id"))
 				.retrieve()
 				.bodyToMono(String.class)
@@ -57,7 +52,6 @@ public class OAuth2WebClientController {
 	String implicit(Model model) {
 		String body = this.webClient
 				.get()
-				.uri(this.uri)
 				.retrieve()
 				.bodyToMono(String.class)
 				.block();

+ 2 - 8
samples/boot/oauth2webclient/src/main/java/sample/web/RegisteredOAuth2AuthorizedClientController.java

@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2018 the original author or authors.
+ * Copyright 2002-2020 the original author or authors.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -15,7 +15,6 @@
  */
 package sample.web;
 
-import org.springframework.beans.factory.annotation.Value;
 import org.springframework.security.oauth2.client.OAuth2AuthorizedClient;
 import org.springframework.security.oauth2.client.annotation.RegisteredOAuth2AuthorizedClient;
 import org.springframework.stereotype.Controller;
@@ -35,18 +34,14 @@ import static org.springframework.security.oauth2.client.web.reactive.function.c
 public class RegisteredOAuth2AuthorizedClientController {
 	private final WebClient webClient;
 
-	private final String uri;
-
-	public RegisteredOAuth2AuthorizedClientController(WebClient webClient, @Value("${resource-uri}") String uri) {
+	public RegisteredOAuth2AuthorizedClientController(WebClient webClient) {
 		this.webClient = webClient;
-		this.uri = uri;
 	}
 
 	@GetMapping("/explicit")
 	String explicit(Model model, @RegisteredOAuth2AuthorizedClient("client-id") OAuth2AuthorizedClient authorizedClient) {
 		String body = this.webClient
 				.get()
-				.uri(this.uri)
 				.attributes(oauth2AuthorizedClient(authorizedClient))
 				.retrieve()
 				.bodyToMono(String.class)
@@ -59,7 +54,6 @@ public class RegisteredOAuth2AuthorizedClientController {
 	String implicit(Model model, @RegisteredOAuth2AuthorizedClient OAuth2AuthorizedClient authorizedClient) {
 		String body = this.webClient
 				.get()
-				.uri(this.uri)
 				.attributes(oauth2AuthorizedClient(authorizedClient))
 				.retrieve()
 				.bodyToMono(String.class)

+ 1 - 1
samples/boot/oauth2webclient/src/test/java/sample/OAuth2WebClientApplicationTests.java

@@ -18,6 +18,7 @@ package sample;
 
 import org.junit.Test;
 import org.junit.runner.RunWith;
+
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
 import org.springframework.boot.test.context.SpringBootTest;
@@ -34,7 +35,6 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.
 @AutoConfigureMockMvc
 @RunWith(SpringRunner.class)
 public class OAuth2WebClientApplicationTests {
-
 	@Autowired
 	private MockMvc mockMvc;
 

+ 109 - 0
samples/boot/oauth2webclient/src/test/java/sample/OAuth2WebClientControllerTests.java

@@ -0,0 +1,109 @@
+/*
+ * Copyright 2002-2020 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package sample;
+
+import okhttp3.mockwebserver.MockResponse;
+import okhttp3.mockwebserver.MockWebServer;
+import org.junit.AfterClass;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import sample.config.SecurityConfig;
+import sample.web.OAuth2WebClientController;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
+import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
+import org.springframework.boot.test.mock.mockito.MockBean;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Import;
+import org.springframework.security.oauth2.client.registration.ClientRegistrationRepository;
+import org.springframework.security.oauth2.client.web.HttpSessionOAuth2AuthorizedClientRepository;
+import org.springframework.security.oauth2.client.web.OAuth2AuthorizedClientRepository;
+import org.springframework.test.context.junit4.SpringRunner;
+import org.springframework.test.web.servlet.MockMvc;
+import org.springframework.web.reactive.function.client.WebClient;
+
+import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.oauth2Client;
+import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.oauth2Login;
+import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
+import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
+
+@WebMvcTest
+@Import({ SecurityConfig.class, OAuth2WebClientController.class })
+@AutoConfigureMockMvc
+@RunWith(SpringRunner.class)
+public class OAuth2WebClientControllerTests {
+	private static MockWebServer web = new MockWebServer();
+
+	@Autowired
+	private MockMvc mockMvc;
+
+	@MockBean
+	ClientRegistrationRepository clientRegistrationRepository;
+
+	@AfterClass
+	public static void shutdown() throws Exception {
+		web.shutdown();
+	}
+
+	@Test
+	public void explicitWhenAuthenticatedThenUsesClientIdRegistration() throws Exception {
+		web.enqueue(new MockResponse().setBody("body").setResponseCode(200));
+		this.mockMvc.perform(get("/webclient/explicit")
+				.with(oauth2Login())
+				.with(oauth2Client("client-id")))
+				.andExpect(status().isOk());
+	}
+
+	@Test
+	public void implicitWhenAuthenticatedThenUsesDefaultRegistration() throws Exception {
+		web.enqueue(new MockResponse().setBody("body").setResponseCode(200));
+		this.mockMvc.perform(get("/webclient/implicit")
+				.with(oauth2Login()))
+				.andExpect(status().isOk());
+	}
+
+	@Test
+	public void publicExplicitWhenAuthenticatedThenUsesClientIdRegistration() throws Exception {
+		web.enqueue(new MockResponse().setBody("body").setResponseCode(200));
+		this.mockMvc.perform(get("/public/webclient/explicit")
+				.with(oauth2Client("client-id")))
+				.andExpect(status().isOk());
+	}
+
+	@Test
+	public void publicImplicitWhenAuthenticatedThenUsesDefaultRegistration() throws Exception {
+		web.enqueue(new MockResponse().setBody("body").setResponseCode(200));
+		this.mockMvc.perform(get("/public/webclient/implicit")
+				.with(oauth2Login()))
+				.andExpect(status().isOk());
+	}
+
+	@Configuration
+	static class WebClientConfig {
+		@Bean
+		WebClient web() {
+			return WebClient.create(web.url("/").toString());
+		}
+
+		@Bean
+		OAuth2AuthorizedClientRepository authorizedClientRepository() {
+			return new HttpSessionOAuth2AuthorizedClientRepository();
+		}
+	}
+}

+ 109 - 0
samples/boot/oauth2webclient/src/test/java/sample/RegisteredOAuth2AuthorizedClientControllerTests.java

@@ -0,0 +1,109 @@
+/*
+ * Copyright 2002-2020 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package sample;
+
+import okhttp3.mockwebserver.MockResponse;
+import okhttp3.mockwebserver.MockWebServer;
+import org.junit.AfterClass;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import sample.config.SecurityConfig;
+import sample.web.RegisteredOAuth2AuthorizedClientController;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
+import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
+import org.springframework.boot.test.mock.mockito.MockBean;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Import;
+import org.springframework.security.oauth2.client.registration.ClientRegistrationRepository;
+import org.springframework.security.oauth2.client.web.HttpSessionOAuth2AuthorizedClientRepository;
+import org.springframework.security.oauth2.client.web.OAuth2AuthorizedClientRepository;
+import org.springframework.test.context.junit4.SpringRunner;
+import org.springframework.test.web.servlet.MockMvc;
+import org.springframework.web.reactive.function.client.WebClient;
+
+import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.oauth2Client;
+import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.oauth2Login;
+import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
+import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
+
+@WebMvcTest
+@Import({ SecurityConfig.class, RegisteredOAuth2AuthorizedClientController.class })
+@AutoConfigureMockMvc
+@RunWith(SpringRunner.class)
+public class RegisteredOAuth2AuthorizedClientControllerTests {
+	private static MockWebServer web = new MockWebServer();
+
+	@Autowired
+	private MockMvc mockMvc;
+
+	@MockBean
+	ClientRegistrationRepository clientRegistrationRepository;
+
+	@AfterClass
+	public static void shutdown() throws Exception {
+		web.shutdown();
+	}
+
+	@Test
+	public void annotationExplicitWhenAuthenticatedThenUsesClientIdRegistration() throws Exception {
+		web.enqueue(new MockResponse().setBody("body").setResponseCode(200));
+		this.mockMvc.perform(get("/annotation/explicit")
+				.with(oauth2Login())
+				.with(oauth2Client("client-id")))
+				.andExpect(status().isOk());
+	}
+
+	@Test
+	public void annotationImplicitWhenAuthenticatedThenUsesDefaultRegistration() throws Exception {
+		web.enqueue(new MockResponse().setBody("body").setResponseCode(200));
+		this.mockMvc.perform(get("/annotation/implicit")
+				.with(oauth2Login()))
+				.andExpect(status().isOk());
+	}
+
+	@Test
+	public void publicAnnotationExplicitWhenAuthenticatedThenUsesClientIdRegistration() throws Exception {
+		web.enqueue(new MockResponse().setBody("body").setResponseCode(200));
+		this.mockMvc.perform(get("/public/annotation/explicit")
+				.with(oauth2Client("client-id")))
+				.andExpect(status().isOk());
+	}
+
+	@Test
+	public void publicAnnotationImplicitWhenAuthenticatedThenUsesDefaultRegistration() throws Exception {
+		web.enqueue(new MockResponse().setBody("body").setResponseCode(200));
+		this.mockMvc.perform(get("/public/annotation/implicit")
+				.with(oauth2Login()))
+				.andExpect(status().isOk());
+	}
+
+	@Configuration
+	static class WebClientConfig {
+		@Bean
+		WebClient web() {
+			return WebClient.create(web.url("/").toString());
+		}
+
+		@Bean
+		OAuth2AuthorizedClientRepository authorizedClientRepository() {
+			return new HttpSessionOAuth2AuthorizedClientRepository();
+		}
+	}
+}