package org.apereo.cas.authentication.principal; import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.commons.io.FileUtils; import org.apereo.cas.CasProtocolConstants; import org.junit.Test; import org.springframework.mock.web.MockHttpServletRequest; import java.io.File; import java.io.IOException; import static org.junit.Assert.*; /** * @author Scott Battaglia * @author Arnaud Lesueur * @since 3.1 */ public class SimpleWebApplicationServiceImplTests { private static final File JSON_FILE = new File(FileUtils.getTempDirectoryPath(), "simpleWebApplicationServiceImpl.json"); private static final ObjectMapper MAPPER = new ObjectMapper(); private static final String SERVICE = "service"; @Test public void verifySerializeACompletePrincipalToJson() throws IOException { final MockHttpServletRequest request = new MockHttpServletRequest(); request.setParameter(CasProtocolConstants.PARAMETER_SERVICE, SERVICE); final WebApplicationService serviceWritten = new WebApplicationServiceFactory().createService(request); MAPPER.writeValue(JSON_FILE, serviceWritten); final SimpleWebApplicationServiceImpl serviceRead = MAPPER.readValue(JSON_FILE, SimpleWebApplicationServiceImpl.class); assertEquals(serviceWritten, serviceRead); } @Test public void verifyResponse() { final MockHttpServletRequest request = new MockHttpServletRequest(); request.setParameter(CasProtocolConstants.PARAMETER_SERVICE, SERVICE); final WebApplicationService impl = new WebApplicationServiceFactory().createService(request); final Response response = new WebApplicationServiceResponseBuilder().build(impl, "ticketId"); assertNotNull(response); assertEquals(Response.ResponseType.REDIRECT, response.getResponseType()); } @Test public void verifyCreateSimpleWebApplicationServiceImplFromServiceAttribute() { final MockHttpServletRequest request = new MockHttpServletRequest(); request.setAttribute(CasProtocolConstants.PARAMETER_SERVICE, SERVICE); final WebApplicationService impl = new WebApplicationServiceFactory().createService(request); assertNotNull(impl); } @Test public void verifyResponseForJsession() { final MockHttpServletRequest request = new MockHttpServletRequest(); request.setParameter(CasProtocolConstants.PARAMETER_SERVICE, "http://www.cnn.com/;jsession=test"); final WebApplicationService impl = new WebApplicationServiceFactory().createService(request); assertEquals("http://www.cnn.com/", impl.getId()); } @Test public void verifyResponseWithNoTicket() { final MockHttpServletRequest request = new MockHttpServletRequest(); request.setParameter(CasProtocolConstants.PARAMETER_SERVICE, SERVICE); final WebApplicationService impl = new WebApplicationServiceFactory().createService(request); final Response response = new WebApplicationServiceResponseBuilder().build(impl, null); assertNotNull(response); assertEquals(Response.ResponseType.REDIRECT, response.getResponseType()); assertFalse(response.getUrl().contains("ticket=")); } @Test public void verifyResponseWithNoTicketAndNoParameterInServiceURL() { final MockHttpServletRequest request = new MockHttpServletRequest(); request.setParameter(SERVICE, "http://foo.com/"); final WebApplicationService impl = new WebApplicationServiceFactory().createService(request); final Response response = new WebApplicationServiceResponseBuilder().build(impl, null); assertNotNull(response); assertEquals(Response.ResponseType.REDIRECT, response.getResponseType()); assertFalse(response.getUrl().contains("ticket=")); assertEquals("http://foo.com/", response.getUrl()); } @Test public void verifyResponseWithNoTicketAndOneParameterInServiceURL() { final MockHttpServletRequest request = new MockHttpServletRequest(); request.setParameter(CasProtocolConstants.PARAMETER_SERVICE, "http://foo.com/?param=test"); final WebApplicationService impl = new WebApplicationServiceFactory().createService(request); final Response response = new WebApplicationServiceResponseBuilder().build(impl, null); assertNotNull(response); assertEquals(Response.ResponseType.REDIRECT, response.getResponseType()); assertEquals("http://foo.com/?param=test", response.getUrl()); } }