/******************************************************************************* * Copyright (c) 2012-2016 Codenvy, S.A. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Codenvy, S.A. - initial API and implementation *******************************************************************************/ package org.everrest.core.impl.uri; import com.google.common.collect.ImmutableMap; import org.junit.Before; import org.junit.Test; import javax.ws.rs.core.Link; import java.net.URI; import java.util.Map; import static com.google.common.collect.Lists.newArrayList; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; public class LinkBuilderImplTest { private LinkBuilderImpl linkBuilder; @Before public void setUp() throws Exception { linkBuilder = new LinkBuilderImpl(); } @Test public void buildsLinkBuilderFromExistedLink() { Link link = mock(Link.class); URI uri = URI.create("http://localhost:8080/x/y/z"); when(link.getUri()).thenReturn(uri); Map<String, String> params = ImmutableMap.of("rel", "xxx", "title", "yyy"); when(link.getParams()).thenReturn(params); Link newLink = linkBuilder.link(link).build(); assertEquals(uri, newLink.getUri()); assertEquals(params, newLink.getParams()); } @Test(expected = IllegalArgumentException.class) public void throwsExceptionWhenLinkStringIsNull() { linkBuilder.link((String)null).build(); } @Test public void buildsLinkFromStringWithEmptyUri() { String uri = "<>"; Link link = linkBuilder.link(uri).build(); assertEquals(URI.create(""), link.getUri()); assertNull(link.getRel()); assertNull(link.getTitle()); assertNull(link.getType()); assertTrue(link.getRels().isEmpty()); assertTrue(link.getParams().isEmpty()); } @Test public void buildsLinkFromStringWithoutLinkParameters() { String uri = "< http://localhost:8080/x/y/z >"; Link link = linkBuilder.link(uri).build(); assertEquals(URI.create("http://localhost:8080/x/y/z"), link.getUri()); assertNull(link.getRel()); assertNull(link.getTitle()); assertNull(link.getType()); assertTrue(link.getRels().isEmpty()); assertTrue(link.getParams().isEmpty()); } @Test public void buildsLinkFromStringWithEmptyLinkParameters() { String uri = "< http://localhost:8080/x/y/z>"; Link link = linkBuilder.link(uri + ";").build(); assertEquals(URI.create("http://localhost:8080/x/y/z"), link.getUri()); assertNull(link.getRel()); assertNull(link.getTitle()); assertNull(link.getType()); assertTrue(link.getRels().isEmpty()); assertTrue(link.getParams().isEmpty()); } @Test public void buildsLinkFromStringWithLinkParameters() { String uri = "< http://localhost:8080/x/y/z >"; Link link = linkBuilder.link(uri + "; rel=\"xxx\"; title=\"yyy\"").build(); assertEquals(URI.create("http://localhost:8080/x/y/z"), link.getUri()); assertEquals("xxx", link.getRel()); assertEquals("yyy", link.getTitle()); assertEquals(ImmutableMap.of("rel", "xxx", "title", "yyy"), link.getParams()); } @Test public void buildsLinkFromUri() { URI uri = URI.create("http://localhost:8080/x/y/z"); Link link = linkBuilder.uri(uri).build(); assertEquals(uri, link.getUri()); } @Test public void buildsLinkWithRel() { Link link = linkBuilder.uri("http://localhost:8080/x/y/z").rel("xxx").build(); assertEquals("xxx", link.getRel()); assertEquals(newArrayList("xxx"), link.getRels()); assertEquals(ImmutableMap.of("rel", "xxx"), link.getParams()); } @Test public void buildsLinkWithMultipleRels() { Link link = linkBuilder.uri("http://localhost:8080/x/y/z").rel("xxx").rel("yyy").build(); assertEquals("xxx yyy", link.getRel()); assertEquals(newArrayList("xxx", "yyy"), link.getRels()); assertEquals(ImmutableMap.of("rel", "xxx yyy"), link.getParams()); } @Test(expected = IllegalArgumentException.class) public void throwsExceptionWhenRelIsNull() { linkBuilder.uri("http://localhost:8080/x/y/z").rel(null); } @Test public void buildsLinkWithTitle() { Link link = linkBuilder.uri("http://localhost:8080/x/y/z").title("yyy").build(); assertEquals("yyy", link.getTitle()); assertEquals(ImmutableMap.of("title", "yyy"), link.getParams()); } @Test(expected = IllegalArgumentException.class) public void throwsExceptionWhenTileIsNull() { linkBuilder.uri("http://localhost:8080/x/y/z").title(null); } @Test public void buildsLinkWithType() { Link link = linkBuilder.uri("http://localhost:8080/x/y/z").type("text/css").build(); assertEquals("text/css", link.getType()); assertEquals(ImmutableMap.of("type", "text/css"), link.getParams()); } @Test(expected = IllegalArgumentException.class) public void throwsExceptionWhenTypeIsNull() { linkBuilder.uri("http://localhost:8080/x/y/z").type(null); } @Test public void buildsLinkWithLinkParams() { Link link = linkBuilder.uri("http://localhost:8080/x/y/z").param("a", "b").param("c", "d").build(); assertEquals(ImmutableMap.of("a", "b", "c", "d"), link.getParams()); } @Test(expected = IllegalArgumentException.class) public void throwsExceptionWhenNameOfParameterIsNull() { linkBuilder.uri("http://localhost:8080/x/y/z").param(null, "b"); } @Test(expected = IllegalArgumentException.class) public void throwsExceptionWhenValueOfParameterIsNull() { linkBuilder.uri("http://localhost:8080/x/y/z").param("a", null); } @Test public void buildsLinkWithParameters() { Link link = linkBuilder.uri("http://localhost:8080/{x}/{y}/{x}").build("a", "b"); assertEquals(URI.create("http://localhost:8080/a/b/a"), link.getUri()); } @Test public void buildsLinkWithBaseUriAndParameters() { Link link = linkBuilder.baseUri("http://localhost:8080").uri("/{x}/{y}/{x}").build("a", "b"); assertEquals(URI.create("http://localhost:8080/a/b/a"), link.getUri()); } @Test(expected = IllegalArgumentException.class) public void throwsExceptionWhenValuesForBuildIsNull() { linkBuilder.uri("http://localhost:8080/x/y/z").build(null); } @Test public void buildsLinkWithRelativizedUri() { Link link = linkBuilder.uri("http://localhost:8080/x/y/z").buildRelativized(URI.create("http://localhost:8080/x")); assertEquals(URI.create("y/z"), link.getUri()); } @Test public void buildsLinkWhenSpecifiedUriDoesNotShareSamePrefixWithLinkUri() { Link link = linkBuilder.uri("http://localhost:8080/x/y/z").buildRelativized(URI.create("http://localhost2:8080/x")); assertEquals(URI.create("http://localhost:8080/x/y/z"), link.getUri()); } @Test public void buildsLinkWithRelativeUri() { Link link = linkBuilder.uri("x/y/z").buildRelativized(URI.create("http://localhost:8080/x")); assertEquals(URI.create("x/y/z"), link.getUri()); } @Test(expected = IllegalArgumentException.class) public void throwsExceptionWhenUriForBuildRelativizedLinkIsNull() { linkBuilder.uri("http://localhost:8080/x/y/z").buildRelativized(null, "a"); } @Test(expected = IllegalArgumentException.class) public void throwsExceptionWhenValuesForBuildRelativizedLinkIsNull() { linkBuilder.uri("http://localhost:8080/x/y/z").buildRelativized(URI.create("http://localhost:8080/x"), null); } }