use of io.gravitee.am.gateway.handler.context.ReactableExecutionContext in project gravitee-access-management by gravitee-io.
the class TokenServiceTest method shouldCreateWithCustomClaims.
@Test
public void shouldCreateWithCustomClaims() {
OAuth2Request oAuth2Request = new OAuth2Request();
oAuth2Request.getContext().put(ConstantKeys.AUTH_FLOW_CONTEXT_ATTRIBUTES_KEY, new HashMap<>());
TokenClaim customClaim = new TokenClaim();
customClaim.setTokenType(TokenTypeHint.ACCESS_TOKEN);
customClaim.setClaimName("iss");
customClaim.setClaimValue("https://custom-iss");
TokenClaim customClaim2 = new TokenClaim();
customClaim2.setTokenType(TokenTypeHint.ACCESS_TOKEN);
customClaim2.setClaimName("aud");
customClaim2.setClaimValue("my-api");
Client client = new Client();
client.setClientId("my-client-id");
client.setTokenCustomClaims(Arrays.asList(customClaim, customClaim2));
ReactableExecutionContext executionContext = mock(ReactableExecutionContext.class);
TemplateEngine templateEngine = mock(TemplateEngine.class);
when(templateEngine.getValue("https://custom-iss", Object.class)).thenReturn("https://custom-iss");
when(templateEngine.getValue("my-api", Object.class)).thenReturn("my-api");
when(executionContext.getTemplateEngine()).thenReturn(templateEngine);
ArgumentCaptor<JWT> jwtCaptor = ArgumentCaptor.forClass(JWT.class);
when(jwtService.encode(jwtCaptor.capture(), any(Client.class))).thenReturn(Single.just(""));
when(tokenEnhancer.enhance(any(), any(), any(), any(), any())).thenReturn(Single.just(new AccessToken("token-id")));
when(executionContextFactory.create(any())).thenReturn(executionContext);
doNothing().when(tokenManager).storeAccessToken(any());
TestObserver<Token> testObserver = tokenService.create(oAuth2Request, client, null).test();
testObserver.assertComplete();
testObserver.assertNoErrors();
JWT jwt = jwtCaptor.getValue();
assertNotNull(jwt);
assertTrue(jwt.get("iss") != null && "https://custom-iss".equals(jwt.get("iss")));
assertTrue(jwt.get("aud") != null && "my-api".equals(jwt.get("aud")));
verify(tokenManager, times(1)).storeAccessToken(any());
verify(accessTokenRepository, never()).delete(anyString());
verify(refreshTokenRepository, never()).delete(anyString());
verify(executionContext).setAttribute(eq(ConstantKeys.AUTH_FLOW_CONTEXT_ATTRIBUTES_KEY), any());
}
Aggregations