package org.atomhopper.util.uri.template; import org.apache.abdera.protocol.server.RequestContext; import org.apache.abdera.protocol.server.impl.TemplateTargetBuilder; import org.junit.Before; import org.junit.Ignore; import org.junit.Test; import org.junit.experimental.runners.Enclosed; import org.junit.runner.RunWith; import java.util.Arrays; import java.util.HashMap; import java.util.Map; import static org.junit.Assert.assertEquals; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; @RunWith(Enclosed.class) public class TemplateTargetBuilderTest { public static final Object COLLECTION = new Object(); public static class WhenGeneratingURLsFromFeedTemplates extends TestParent { @Test public void shouldGenerateHttpFeedURLWithDefaults() { targetBuilder.setTemplate(TemplateTargetKey.FEED, URITemplate.FEED.toString()); final EnumKeyedTemplateParameters<TemplateTargetKey> params = new EnumKeyedTemplateParameters<TemplateTargetKey>(TemplateTargetKey.FEED); params.set(URITemplateParameter.HOST_SCHEME, "http"); params.set(URITemplateParameter.HOST_DOMAIN, "domain.com"); params.set(URITemplateParameter.WORKSPACE_RESOURCE, "a"); params.set(URITemplateParameter.FEED_RESOURCE, "b"); final String expected = "http://domain.com/root/context/a/b/"; assertEquals("URL built from template should match expected feed URL", expected, targetBuilder.urlFor(requestContext, TemplateTargetKey.FEED, params.toMap())); } @Test public void shouldGeneratehttpsFeedURLWithDefaults() { targetBuilder.setTemplate(TemplateTargetKey.FEED, URITemplate.FEED.toString()); final EnumKeyedTemplateParameters<TemplateTargetKey> params = new EnumKeyedTemplateParameters<TemplateTargetKey>(TemplateTargetKey.FEED); params.set(URITemplateParameter.HOST_SCHEME, "https"); params.set(URITemplateParameter.HOST_DOMAIN, "domain.com"); params.set(URITemplateParameter.WORKSPACE_RESOURCE, "a"); params.set(URITemplateParameter.FEED_RESOURCE, "b"); final String expected = "https://domain.com/root/context/a/b/"; assertEquals("URL built from template should match expected feed URL", expected, targetBuilder.urlFor(requestContext, TemplateTargetKey.FEED, params.toMap())); } @Test public void shouldGenerateHttpFeedURLWithMarker() { targetBuilder.setTemplate(TemplateTargetKey.FEED, URITemplate.FEED.toString()); final EnumKeyedTemplateParameters<TemplateTargetKey> params = new EnumKeyedTemplateParameters<TemplateTargetKey>(TemplateTargetKey.FEED); params.set(URITemplateParameter.HOST_SCHEME, "http"); params.set(URITemplateParameter.HOST_DOMAIN, "domain.com"); params.set(URITemplateParameter.WORKSPACE_RESOURCE, "a"); params.set(URITemplateParameter.FEED_RESOURCE, "b"); params.set(URITemplateParameter.MARKER, "12345"); final String expected = "http://domain.com/root/context/a/b/?lochint=12345"; assertEquals("URL built from template should match expected feed URL", expected, targetBuilder.urlFor(requestContext, params.getTargetTemplateKey(), params.toMap())); } @Test public void shouldGenerateHttpsFeedURLWithMarker() { targetBuilder.setTemplate(TemplateTargetKey.FEED, URITemplate.FEED.toString()); final EnumKeyedTemplateParameters<TemplateTargetKey> params = new EnumKeyedTemplateParameters<TemplateTargetKey>(TemplateTargetKey.FEED); params.set(URITemplateParameter.HOST_SCHEME, "https"); params.set(URITemplateParameter.HOST_DOMAIN, "domain.com"); params.set(URITemplateParameter.WORKSPACE_RESOURCE, "a"); params.set(URITemplateParameter.FEED_RESOURCE, "b"); params.set(URITemplateParameter.MARKER, "12345"); final String expected = "https://domain.com/root/context/a/b/?lochint=12345"; assertEquals("URL built from template should match expected feed URL", expected, targetBuilder.urlFor(requestContext, params.getTargetTemplateKey(), params.toMap())); } @Test public void shouldGeneratehttpFeedURLWithLimitAndMarker() { targetBuilder.setTemplate(TemplateTargetKey.FEED, URITemplate.FEED.toString()); final EnumKeyedTemplateParameters<TemplateTargetKey> params = new EnumKeyedTemplateParameters<TemplateTargetKey>(TemplateTargetKey.FEED); params.set(URITemplateParameter.HOST_SCHEME, "http"); params.set(URITemplateParameter.HOST_DOMAIN, "domain.com"); params.set(URITemplateParameter.WORKSPACE_RESOURCE, "a"); params.set(URITemplateParameter.FEED_RESOURCE, "b"); params.set(URITemplateParameter.MARKER, "12345"); params.set(URITemplateParameter.PAGE_LIMIT, "5"); final String expected = "http://domain.com/root/context/a/b/?lochint=12345&limit=5"; assertEquals("URL built from template should match expected feed URL", expected, targetBuilder.urlFor(requestContext, params.getTargetTemplateKey(), params.toMap())); } @Test public void shouldGenerateHttpsFeedURLWithLimitAndMarker() { targetBuilder.setTemplate(TemplateTargetKey.FEED, URITemplate.FEED.toString()); final EnumKeyedTemplateParameters<TemplateTargetKey> params = new EnumKeyedTemplateParameters<TemplateTargetKey>(TemplateTargetKey.FEED); params.set(URITemplateParameter.HOST_SCHEME, "https"); params.set(URITemplateParameter.HOST_DOMAIN, "domain.com"); params.set(URITemplateParameter.WORKSPACE_RESOURCE, "a"); params.set(URITemplateParameter.FEED_RESOURCE, "b"); params.set(URITemplateParameter.MARKER, "12345"); params.set(URITemplateParameter.PAGE_LIMIT, "5"); final String expected = "https://domain.com/root/context/a/b/?lochint=12345&limit=5"; assertEquals("URL built from template should match expected feed URL", expected, targetBuilder.urlFor(requestContext, params.getTargetTemplateKey(), params.toMap())); } } @Ignore public static class TestParent { protected TemplateTargetBuilder targetBuilder; protected RequestContext requestContext; @Before public void standUp() { requestContext = mock(RequestContext.class); when(requestContext.getTargetBasePath()).thenReturn("/root/context"); targetBuilder = new TemplateTargetBuilder(); } } }