/* * Copyright (C) 2011 Laurent Caillette * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation, either * version 3 of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package org.novelang.produce; import java.util.Set; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Sets; import org.apache.commons.lang.StringUtils; import org.junit.Test; import static org.fest.assertions.Assertions.assertThat; import static org.junit.Assert.*; import org.novelang.common.metadata.PageIdentifier; import org.novelang.designator.Tag; import org.novelang.designator.TagTestTools; import org.novelang.logger.Logger; import org.novelang.logger.LoggerFactory; import org.novelang.rendering.RenditionMimeType; /** * Tests for {@link GenericRequest}. * * @author Laurent Caillette */ public class GenericRequestTest { @Test public void documentRequest() throws MalformedRequestException { final DocumentRequest request = createDocumentRequest( PDF_REQUEST_PATH ) ; assertEquals( PDF_REQUEST_PATH, request.getOriginalTarget() ) ; assertEquals( RenditionMimeType.PDF, request.getRenditionMimeType() ) ; assertTrue( request.isRendered() ) ; assertEquals( SIMPLE_REQUEST_BODY, request.getDocumentSourceName() ) ; assertTrue( "Got: " + request.getTags(), request.getTags().isEmpty() ) ; assertFalse( StringUtils.isBlank( request.toString() ) ) ; assertNull( request.getAlternateStylesheet() ) ; // assertEquals( "pdf", ( ( ResourceRequest2 ) request ).getResourceExtension() ) ; } @Test public void documentRequestWithStylesheet() throws MalformedRequestException { final DocumentRequest request = createDocumentRequest( PDF_REQUEST_PATH_WITHSTYLESHEET ) ; assertEquals( PDF_REQUEST_PATH_WITHSTYLESHEET, request.getOriginalTarget() ) ; assertEquals( RenditionMimeType.PDF, request.getRenditionMimeType() ) ; assertTrue( request.isRendered() ) ; assertEquals( SIMPLE_REQUEST_BODY, request.getDocumentSourceName() ) ; assertNotNull( request.getAlternateStylesheet() ) ; assertEquals( STYLESHEET_RESOURCENAME, request.getAlternateStylesheet().getName() ) ; assertFalse( StringUtils.isBlank( request.toString() ) ) ; // assertEquals( "pdf", ( ( ResourceRequest2 ) request ).getResourceExtension() ) ; } @Test public void documentRequestWithDots() throws MalformedRequestException { final DocumentRequest request = createDocumentRequest( DOTTEDHTML_REQUEST_PATH ) ; assertEquals( DOTTEDHTML_REQUEST_PATH, request.getOriginalTarget() ) ; assertEquals( RenditionMimeType.HTML, request.getRenditionMimeType() ) ; assertTrue( request.isRendered() ) ; assertEquals( DOTTED_REQUEST_BODY, request.getDocumentSourceName() ) ; assertTrue( "Got: " + request.getTags(), request.getTags().isEmpty() ) ; assertFalse( StringUtils.isBlank( request.toString() ) ) ; assertNull( request.getAlternateStylesheet() ) ; } @Test public void requestForError() throws MalformedRequestException { final DocumentRequest request = createDocumentRequest( REQUEST_PATH_BROKEN ) ; assertTrue( request.getDisplayProblems() ) ; assertEquals( PDF_REQUEST_PATH, request.getOriginalTarget() ) ; assertEquals( RenditionMimeType.PDF, request.getRenditionMimeType() ) ; assertEquals( SIMPLE_REQUEST_BODY, request.getDocumentSourceName() ) ; assertTrue( request.getDisplayProblems() ) ; assertFalse( StringUtils.isBlank( request.toString() ) ) ; } @Test public void resource() throws MalformedRequestException { final ResourceRequest request = createResourceRequest( CSS_REQUEST_PATH ) ; // assertFalse( request.getDisplayProblems() ) ; assertEquals( CSS_REQUEST_PATH, request.getOriginalTarget() ) ; assertEquals( SIMPLE_REQUEST_BODY, request.getDocumentSourceName() ) ; assertFalse( StringUtils.isBlank( request.toString() ) ) ; assertNull( ( ( DocumentRequest ) request ).getRenditionMimeType() ) ; } @Test public void documentRequestWithStylesheetAndTags() throws MalformedRequestException { final DocumentRequest request = createDocumentRequest( PDF_REQUEST_PATH_WITHSTYLESHEET_AND_TAGS ) ; assertFalse( request.getDisplayProblems() ) ; assertEquals( PDF_REQUEST_PATH_WITHSTYLESHEET_AND_TAGS, request.getOriginalTarget() ) ; assertEquals( RenditionMimeType.PDF, request.getRenditionMimeType() ) ; assertEquals( SIMPLE_REQUEST_BODY, request.getDocumentSourceName() ) ; assertEquals( TAGSET, request.getTags() ) ; assertFalse( StringUtils.isBlank( request.toString() ) ) ; } @Test public void documentRequestWithStylesheetAndTagsAndError() throws MalformedRequestException { final DocumentRequest request = createDocumentRequest( PDF_REQUEST_PATH_WITHSTYLESHEET_AND_TAGS_AND_ERROR ) ; assertThat( request.getDisplayProblems() ).isTrue() ; assertThat( request.getOriginalTarget() ) .isEqualTo( PDF_REQUEST_PATH_WITHSTYLESHEET_AND_TAGS ) ; assertThat( GenericRequest.getRedirectionWithError( request ) ) .isEqualTo( PDF_REQUEST_PATH_WITHSTYLESHEET_AND_TAGS_AND_ERROR ) ; assertThat( request.getRenditionMimeType() ).isEqualTo( RenditionMimeType.PDF ) ; assertThat( request.getDocumentSourceName() ).isEqualTo( SIMPLE_REQUEST_BODY ) ; assertThat( request.getTags() ).isEqualTo( TAGSET ) ; assertThat( request.toString() ).isNotEmpty() ; } @Test public void documentRequestWithStylesheetAndError() throws MalformedRequestException { final DocumentRequest request = createDocumentRequest( PDF_REQUEST_PATH_WITHSTYLESHEET_AND_ERROR ) ; assertThat( request.getOriginalTarget() ).isEqualTo( PDF_REQUEST_PATH_WITHSTYLESHEET ) ; assertThat( GenericRequest.getRedirectionWithError( request ) ) .isEqualTo( PDF_REQUEST_PATH_WITHSTYLESHEET_AND_ERROR ) ; assertThat( request.getRenditionMimeType() ).isEqualTo( RenditionMimeType.PDF ) ; assertThat( request.getDocumentSourceName() ).isEqualTo( SIMPLE_REQUEST_BODY ) ; assertThat( request.getTags() ).isEmpty() ; assertThat( request.getDisplayProblems() ).isTrue() ; assertThat(request.toString() ).isNotEmpty() ; } @Test public void pageIdentifier() throws MalformedRequestException { final String originalTarget = "/path/document--page_identifier.html"; final DocumentRequest request = createDocumentRequest( originalTarget ) ; assertFalse( request.getDisplayProblems() ) ; assertEquals( originalTarget, request.getOriginalTarget() ) ; assertEquals( RenditionMimeType.HTML, request.getRenditionMimeType() ) ; assertEquals( "/path/document", request.getDocumentSourceName() ) ; assertEquals( NO_TAG, request.getTags() ) ; assertEquals( new PageIdentifier( "page_identifier" ), request.getPageIdentifier() ) ; assertFalse( StringUtils.isBlank( request.toString() ) ) ; } @Test( expected = MalformedRequestException.class ) public void polymorphicRequestWithSuspiciousTagDefinition() throws MalformedRequestException { createDocumentRequest( "/path/to/file.pdf?tags=;t1;t2" ) ; } @Test( expected = MalformedRequestException.class ) public void incorrectDocumentSourceName1() throws MalformedRequestException { createDocumentRequest( "/foo-_bar.pdf" ) ; } @Test( expected = MalformedRequestException.class ) public void incorrectDocumentSourceName2() throws MalformedRequestException { createDocumentRequest( "/foo__bar.pdf" ) ; } @Test( expected = MalformedRequestException.class ) public void incorrectDocumentSourceName3() throws MalformedRequestException { createDocumentRequest( "/fo..o.pdf" ) ; } @Test( expected = MalformedRequestException.class ) public void incorrectDocumentSourceName4() throws MalformedRequestException { createDocumentRequest( "/fo./.o.pdf" ) ; } // ======= // Fixture // ======= private static final String SIMPLE_REQUEST_BODY = "/path/to/file" ; private static final String DOTTED_REQUEST_BODY = "/path/to/0.1.2" ; private static final String PDF_REQUEST_PATH = SIMPLE_REQUEST_BODY + ".pdf" ; private static final String CSS_REQUEST_PATH = SIMPLE_REQUEST_BODY + ".css" ; private static final String DOTTEDHTML_REQUEST_PATH = DOTTED_REQUEST_BODY + ".html" ; private static final String STYLESHEET_RESOURCENAME = "dir/sheet.xsl" ; private static final String PDF_REQUEST_PATH_WITHSTYLESHEET = PDF_REQUEST_PATH + "?stylesheet=" + STYLESHEET_RESOURCENAME ; private static final String PDF_REQUEST_PATH_WITHSTYLESHEET_AND_ERROR = PDF_REQUEST_PATH + GenericRequest.ERRORPAGE_SUFFIX + "?stylesheet=" + STYLESHEET_RESOURCENAME ; private static final ImmutableSet< Tag > TAGSET = ImmutableSet.of( new Tag( "tag-1" ), new Tag( "Tag2" ) ) ; private static final ImmutableSet< Tag > NO_TAG = ImmutableSet.of() ; private static final String PDF_REQUEST_PATH_WITHSTYLESHEET_AND_TAGS = PDF_REQUEST_PATH + "?" + DocumentRequest.ALTERNATE_STYLESHEET_PARAMETER_NAME + "=" + STYLESHEET_RESOURCENAME + "&" + GenericRequest.TAGSET_PARAMETER_NAME + "=" + TagTestTools.getTagSetAsString( TAGSET, ";" ) ; private static final String PDF_REQUEST_PATH_WITHSTYLESHEET_AND_TAGS_AND_ERROR = PDF_REQUEST_PATH + GenericRequest.ERRORPAGE_SUFFIX + "?" + DocumentRequest.ALTERNATE_STYLESHEET_PARAMETER_NAME + "=" + STYLESHEET_RESOURCENAME + "&" + GenericRequest.TAGSET_PARAMETER_NAME + "=" + TagTestTools.getTagSetAsString( TAGSET, ";" ) ; private static final Set< String > TAGS_AS_STRINGSET = Sets.newHashSet(); static { for( final Tag tag : TAGSET ) { TAGS_AS_STRINGSET.add( TagTestTools.getTagAsString( tag ) ) ; } } private static final String PDF_REQUEST_PATH_WITH_ILL_FORMED_TAGS = "/path/to/file.pdf?tags=;t1;t2" ; private static final String REQUEST_PATH_BROKEN = PDF_REQUEST_PATH + GenericRequest.ERRORPAGE_SUFFIX ; private static final Logger LOGGER = LoggerFactory.getLogger( GenericRequestTest.class ) ; private static DocumentRequest createDocumentRequest( final String requestString ) throws MalformedRequestException { LOGGER.info( "Using ", requestString ) ; return ( DocumentRequest ) GenericRequest.parse( requestString ) ; } private static ResourceRequest createResourceRequest( final String requestString ) throws MalformedRequestException { LOGGER.info( "Using ", requestString ) ; return ( ResourceRequest ) GenericRequest.parse( requestString ) ; } }