Allow for the backend to return granted scopes in any order.
Closes #12395
This commit is contained in:
parent
5d2bf6ea33
commit
9272c7a5ec
2 changed files with 20 additions and 4 deletions
|
@ -36,6 +36,7 @@ import org.keycloak.representations.idm.UserRepresentation;
|
||||||
import org.keycloak.representations.idm.UserSessionRepresentation;
|
import org.keycloak.representations.idm.UserSessionRepresentation;
|
||||||
import org.keycloak.util.TokenUtil;
|
import org.keycloak.util.TokenUtil;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
@ -310,7 +311,23 @@ public class AssertEvents implements TestRule {
|
||||||
}
|
}
|
||||||
|
|
||||||
public ExpectedEvent detail(String key, String value) {
|
public ExpectedEvent detail(String key, String value) {
|
||||||
return detail(key, CoreMatchers.equalTo(value));
|
if (key.equals(Details.SCOPE)) {
|
||||||
|
// the scopes can be given in any order,
|
||||||
|
// therefore, use a matcher that takes a string and ignores the order of the scopes
|
||||||
|
return detail(key, new TypeSafeMatcher<String>() {
|
||||||
|
@Override
|
||||||
|
protected boolean matchesSafely(String actualValue) {
|
||||||
|
return Matchers.containsInAnyOrder(value.split(" ")).matches(Arrays.asList(actualValue.split(" ")));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void describeTo(Description description) {
|
||||||
|
description.appendText("contains scope in any order");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
return detail(key, CoreMatchers.equalTo(value));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public ExpectedEvent detail(String key, Matcher<? super String> matcher) {
|
public ExpectedEvent detail(String key, Matcher<? super String> matcher) {
|
||||||
|
|
|
@ -1029,9 +1029,8 @@ public class AccountRestServiceTest extends AbstractRestServiceTest {
|
||||||
.asJson(ConsentRepresentation.class);
|
.asJson(ConsentRepresentation.class);
|
||||||
assertTrue(consentRepresentation.getCreatedDate() > 0);
|
assertTrue(consentRepresentation.getCreatedDate() > 0);
|
||||||
assertTrue(consentRepresentation.getLastUpdatedDate() > 0);
|
assertTrue(consentRepresentation.getLastUpdatedDate() > 0);
|
||||||
assertEquals(2, consentRepresentation.getGrantedScopes().size());
|
assertThat(consentRepresentation.getGrantedScopes().stream().map(ConsentScopeRepresentation::getId).collect(Collectors.toList()),
|
||||||
assertEquals(requestedScopes.get(0).getId(), consentRepresentation.getGrantedScopes().get(0).getId());
|
containsInAnyOrder(requestedScopes.stream().map(ClientScopeRepresentation::getId).toArray()));
|
||||||
assertEquals(requestedScopes.get(1).getId(), consentRepresentation.getGrantedScopes().get(1).getId());
|
|
||||||
|
|
||||||
events.poll();
|
events.poll();
|
||||||
String expectedScopeDetails = requestedScopes.stream().map(cs->cs.getName()).collect(Collectors.joining(" "));
|
String expectedScopeDetails = requestedScopes.stream().map(cs->cs.getName()).collect(Collectors.joining(" "));
|
||||||
|
|
Loading…
Reference in a new issue