Allow for the backend to return granted scopes in any order.

Closes #12395
This commit is contained in:
Alexander Schwartz 2022-06-08 09:25:32 +02:00 committed by Pedro Igor
parent 5d2bf6ea33
commit 9272c7a5ec
2 changed files with 20 additions and 4 deletions

View file

@ -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) {

View file

@ -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(" "));