| 
					
				 | 
			
			
				@@ -24,6 +24,7 @@ import java.util.HashMap; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import java.util.Iterator; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import java.util.Map; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import java.util.function.Function; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.util.function.Predicate; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import okhttp3.mockwebserver.MockResponse; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import okhttp3.mockwebserver.MockWebServer; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -107,6 +108,15 @@ public class OidcReactiveOAuth2UserServiceTests { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		assertThatIllegalArgumentException().isThrownBy(() -> this.userService.setClaimTypeConverterFactory(null)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	@Test 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	public void setRetrieveUserInfoWhenNullThenThrowIllegalArgumentException() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		// @formatter:off 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		assertThatIllegalArgumentException() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				.isThrownBy(() -> this.userService.setRetrieveUserInfo(null)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				.withMessage("retrieveUserInfo cannot be null"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		// @formatter:on 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	@Test 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	public void loadUserWhenUserInfoUriNullThenUserInfoNotRetrieved() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		this.registration.userInfoUri(null); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -183,6 +193,48 @@ public class OidcReactiveOAuth2UserServiceTests { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		verify(customClaimTypeConverterFactory).apply(same(userRequest.getClientRegistration())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	@Test 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	public void loadUserWhenTokenScopesIsEmptyThenUserInfoNotRetrieved() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		// @formatter:off 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		OAuth2AccessToken accessToken = new OAuth2AccessToken( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				this.accessToken.getTokenType(), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				this.accessToken.getTokenValue(), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				this.accessToken.getIssuedAt(), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				this.accessToken.getExpiresAt(), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				Collections.emptySet()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		// @formatter:on 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		OidcUserRequest userRequest = new OidcUserRequest(this.registration.build(), accessToken, this.idToken); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		OidcUser oidcUser = this.userService.loadUser(userRequest).block(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		assertThat(oidcUser).isNotNull(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		assertThat(oidcUser.getUserInfo()).isNull(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	@Test 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	public void loadUserWhenCustomRetrieveUserInfoSetThenUsed() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		Map<String, Object> attributes = new HashMap<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		attributes.put(StandardClaimNames.SUB, "subject"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		attributes.put("user", "steve"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		OAuth2User oauth2User = new DefaultOAuth2User(AuthorityUtils.createAuthorityList("ROLE_USER"), attributes, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				"user"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		given(this.oauth2UserService.loadUser(any())).willReturn(Mono.just(oauth2User)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		Predicate<OidcUserRequest> customRetrieveUserInfo = mock(Predicate.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		this.userService.setRetrieveUserInfo(customRetrieveUserInfo); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		given(customRetrieveUserInfo.test(any(OidcUserRequest.class))).willReturn(true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		// @formatter:off 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		OAuth2AccessToken accessToken = new OAuth2AccessToken( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				this.accessToken.getTokenType(), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				this.accessToken.getTokenValue(), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				this.accessToken.getIssuedAt(), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				this.accessToken.getExpiresAt(), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				Collections.emptySet()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		// @formatter:on 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		OidcUserRequest userRequest = new OidcUserRequest(this.registration.build(), accessToken, this.idToken); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		OidcUser oidcUser = this.userService.loadUser(userRequest).block(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		assertThat(oidcUser).isNotNull(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		assertThat(oidcUser.getUserInfo()).isNotNull(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		verify(customRetrieveUserInfo).test(userRequest); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	@Test 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	public void loadUserWhenTokenContainsScopesThenIndividualScopeAuthorities() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		OidcReactiveOAuth2UserService userService = new OidcReactiveOAuth2UserService(); 
			 |