From 5ba0b037031c3b1afc89a419d432c5f1d8748aa2 Mon Sep 17 00:00:00 2001
From: Matthias Piepkorn <mpiepk@gmail.com>
Date: Sun, 05 Feb 2017 11:18:26 +0000
Subject: [PATCH] Add test for ContentTypeHelper, fix format parameter handling
---
src/main/java/org/keycloak/protocol/cas/utils/ContentTypeHelper.java | 3 ++-
src/test/java/org/keycloak/protocol/cas/ContentTypeHelperTest.java | 45 +++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 47 insertions(+), 1 deletions(-)
diff --git a/src/main/java/org/keycloak/protocol/cas/utils/ContentTypeHelper.java b/src/main/java/org/keycloak/protocol/cas/utils/ContentTypeHelper.java
index e842ef0..0e13ca6 100644
--- a/src/main/java/org/keycloak/protocol/cas/utils/ContentTypeHelper.java
+++ b/src/main/java/org/keycloak/protocol/cas/utils/ContentTypeHelper.java
@@ -19,7 +19,8 @@
public MediaType selectResponseType() {
String format = uriInfo.getQueryParameters().getFirst(CASLoginProtocol.FORMAT_PARAM);
if (format != null && !format.isEmpty()) {
- request.getMutableHeaders().add(HttpHeaders.ACCEPT, "application/" + format);
+ //if parameter is set, it overrides all header values (see spec section 2.5.1)
+ request.getMutableHeaders().putSingle(HttpHeaders.ACCEPT, "application/" + format.toLowerCase());
}
Variant variant = restRequest.selectVariant(Variant.mediaTypes(MediaType.APPLICATION_XML_TYPE, MediaType.APPLICATION_JSON_TYPE).build());
return variant == null ? MediaType.APPLICATION_XML_TYPE : variant.getMediaType();
diff --git a/src/test/java/org/keycloak/protocol/cas/ContentTypeHelperTest.java b/src/test/java/org/keycloak/protocol/cas/ContentTypeHelperTest.java
new file mode 100644
index 0000000..c08ab47
--- /dev/null
+++ b/src/test/java/org/keycloak/protocol/cas/ContentTypeHelperTest.java
@@ -0,0 +1,45 @@
+package org.keycloak.protocol.cas;
+
+import org.jboss.resteasy.mock.MockHttpRequest;
+import org.jboss.resteasy.mock.MockHttpResponse;
+import org.jboss.resteasy.specimpl.RequestImpl;
+import org.junit.Test;
+import org.keycloak.protocol.cas.utils.ContentTypeHelper;
+
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.MediaType;
+
+import static org.junit.Assert.assertEquals;
+
+public class ContentTypeHelperTest {
+ @Test
+ public void test() throws Exception {
+ assertEquals(MediaType.APPLICATION_XML_TYPE, get("http://example.com/", null).selectResponseType());
+ assertEquals(MediaType.APPLICATION_JSON_TYPE, get("http://example.com/?format=json", null).selectResponseType());
+ assertEquals(MediaType.APPLICATION_XML_TYPE, get("http://example.com/?format=xml", null).selectResponseType());
+ assertEquals(MediaType.APPLICATION_JSON_TYPE, get("http://example.com/?format=JSON", null).selectResponseType());
+ assertEquals(MediaType.APPLICATION_XML_TYPE, get("http://example.com/?format=XML", null).selectResponseType());
+
+ assertEquals(MediaType.APPLICATION_XML_TYPE, get("http://example.com/", MediaType.APPLICATION_XML).selectResponseType());
+ assertEquals(MediaType.APPLICATION_JSON_TYPE, get("http://example.com/?format=json", MediaType.APPLICATION_XML).selectResponseType());
+ assertEquals(MediaType.APPLICATION_XML_TYPE, get("http://example.com/?format=xml", MediaType.APPLICATION_XML).selectResponseType());
+
+ assertEquals(MediaType.APPLICATION_JSON_TYPE, get("http://example.com/", MediaType.APPLICATION_JSON).selectResponseType());
+ assertEquals(MediaType.APPLICATION_JSON_TYPE, get("http://example.com/?format=json", MediaType.APPLICATION_JSON).selectResponseType());
+ assertEquals(MediaType.APPLICATION_XML_TYPE, get("http://example.com/?format=xml", MediaType.APPLICATION_JSON).selectResponseType());
+
+ assertEquals(MediaType.APPLICATION_XML_TYPE, get("http://example.com/", MediaType.TEXT_PLAIN).selectResponseType());
+ }
+
+ private ContentTypeHelper get(String uri, String acceptHeader) throws Exception {
+ MockHttpRequest req = MockHttpRequest.get(uri);
+ MockHttpResponse res = new MockHttpResponse();
+ RequestImpl restReq = new RequestImpl(req, res);
+
+ if (acceptHeader != null) {
+ req = req.header(HttpHeaders.ACCEPT, acceptHeader);
+ }
+
+ return new ContentTypeHelper(req, restReq, req.getUri());
+ }
+}
--
Gitblit v1.9.1