/*
* Copyright 2016 Red Hat, Inc. and/or its affiliates
* and other contributors as indicated by the @author tags.
*
* 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
*
* http://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 org.keycloak.test;
import org.junit.Assert;
import org.junit.Test;
import org.keycloak.protocol.oidc.utils.OIDCResponseType;
import java.util.Arrays;
import java.util.Collections;
/**
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
*/
public class ResponseTypeTest {
@Test
public void testResponseTypes() {
assertFail(null);
assertFail("");
assertFail("foo");
assertSuccess("code");
assertSuccess("none");
assertSuccess("id_token");
assertSuccess("token");
assertFail("refresh_token");
assertSuccess("id_token token");
assertSuccess("code token");
assertSuccess("code id_token");
assertSuccess("code id_token token");
assertFail("code none");
assertFail("code refresh_token");
}
@Test
public void testMultipleResponseTypes() {
OIDCResponseType responseType = OIDCResponseType.parse(Arrays.asList("code", "token"));
Assert.assertTrue(responseType.hasResponseType("code"));
Assert.assertFalse(responseType.hasResponseType("none"));
Assert.assertTrue(responseType.isImplicitOrHybridFlow());
Assert.assertFalse(responseType.isImplicitFlow());
responseType = OIDCResponseType.parse(Collections.singletonList("code"));
Assert.assertTrue(responseType.hasResponseType("code"));
Assert.assertFalse(responseType.hasResponseType("none"));
Assert.assertFalse(responseType.isImplicitOrHybridFlow());
responseType = OIDCResponseType.parse(Arrays.asList("code", "none"));
Assert.assertTrue(responseType.hasResponseType("code"));
Assert.assertTrue(responseType.hasResponseType("none"));
Assert.assertFalse(responseType.isImplicitOrHybridFlow());
responseType = OIDCResponseType.parse(Arrays.asList("code", "code token"));
Assert.assertTrue(responseType.hasResponseType("code"));
Assert.assertFalse(responseType.hasResponseType("none"));
Assert.assertTrue(responseType.hasResponseType("token"));
Assert.assertFalse(responseType.hasResponseType("id_token"));
Assert.assertTrue(responseType.isImplicitOrHybridFlow());
Assert.assertFalse(responseType.isImplicitFlow());
responseType = OIDCResponseType.parse(Arrays.asList("id_token", "id_token token"));
Assert.assertFalse(responseType.hasResponseType("code"));
Assert.assertTrue(responseType.isImplicitOrHybridFlow());
Assert.assertTrue(responseType.isImplicitFlow());
}
private void assertSuccess(String responseType) {
OIDCResponseType.parse(responseType);
}
private void assertFail(String responseType) {
try {
OIDCResponseType.parse(responseType);
Assert.fail("Not expected to parse '" + responseType + "' with success");
} catch (IllegalArgumentException expected) {
}
}
}