@Test public void mergeWithSelfShouldReturnEqualTemplatedLink() { // given final TemplatedLink aboutLink = ABOUTPAGE_LINK; // when final ResourceLink mergedLink = aboutLink.mergeWith(aboutLink); // then assertEquals(aboutLink, mergedLink); }
@Test(expectedExceptions = IllegalArgumentException.class) public void mergeWithDirectLinkShouldFailWithIllegalStateException() { // given final TemplatedLink templatedLink = ABOUTPAGE_LINK; final DirectLink directLink = STOREFRONT_LINK; // when templatedLink.mergeWith(directLink); // then an exception is thrown. }
@Test(expectedExceptions = IllegalArgumentException.class) public void mergeWithShouldFailWithExceptionIfOtherLinksToDifferentResource() { // given final TemplatedLink aboutPageLink = ABOUTPAGE_LINK; final TemplatedLink otherTemplatedLink = templatedLink( RESOURCELINK_SHOP_PAGE, "/foo/{fooId}", asList(hrefVar("fooId", VAR_TYPE_PAGEID, emptyDocs())), Hints.hints(of(GET), asList("text/html"))); // when aboutPageLink.mergeWith(otherTemplatedLink); // then an exception is thrown }
@Test(expectedExceptions = IllegalArgumentException.class) public void mergeWithShouldFailWithExceptionIfOtherDoesNotHaveSameRelationType() { // given final TemplatedLink aboutPageLink = ABOUTPAGE_LINK; final TemplatedLink otherTemplatedLink = TemplatedLink.templatedLink( RESOURCELINK_SHOP_STOREFRONT, REL_PAGE_HREF, asList(hrefVar("pageId", VAR_TYPE_PAGEID, emptyDocs())), Hints.hints(of(GET), asList("text/html"))); // when aboutPageLink.mergeWith(otherTemplatedLink); // then an exception is thrown }
@Test(expectedExceptions = IllegalArgumentException.class) public void expansionShouldFailWithIllegalArgumentExceptionForUnknownVarType() { // given final URI varType = create("http://example.org/vars/bar"); final TemplatedLink templatedLink = templatedLink( create("http://example.org/rel/foo"), "http://example.org/foo/{bar}", asList(hrefVar("bar", varType)), null); // when templatedLink.expandToUri(create("http://example.org/vars/foo"), "42"); // then an exception is thrown. }
@Test(expectedExceptions = IllegalArgumentException.class) public void mergeWithShouldFailForDifferentHrefVars() { // given final TemplatedLink aboutPageLink = ABOUTPAGE_LINK; final TemplatedLink otherTemplatedLink = templatedLink( RESOURCELINK_SHOP_PAGE, "pages/{pageId}", asList(hrefVar("foo", VAR_TYPE_PAGEID)), Hints.hints(of(GET), asList("text/html", "application/json"))); // when aboutPageLink.mergeWith(otherTemplatedLink); // then an exception is thrown }
@Test public void mergeWithShouldMergeAllowsSpec() { // given final TemplatedLink aboutPageLink = ABOUTPAGE_LINK; final TemplatedLink otherTemplatedLink = templatedLink( RESOURCELINK_SHOP_PAGE, REL_PAGE_HREF, asList(hrefVar("pageId", VAR_TYPE_PAGEID, emptyDocs())), Hints.hints(of(PUT), asList("text/html", "application/json"))); // when final ResourceLink resourceLink = aboutPageLink.mergeWith(otherTemplatedLink); // then assertEquals(resourceLink.getHints().getAllows(), of(GET, PUT)); }
@Test public void shouldExpandUriForExistingVarType() { // given final URI varType = create("http://example.org/vars/bar"); final TemplatedLink templatedLink = templatedLink( create("http://example.org/rel/foo"), "http://example.org/foo/{bar}", asList(hrefVar("bar", varType)), null); // when final URI uri = templatedLink.expandToUri(varType, "42"); // then assertEquals(uri, create("http://example.org/foo/42")); }
@Test public void expansionShouldTreatMissingVarTypeAsEmptyValue() { // given final URI fooVarType = create("http://example.org/vars/foo"); final URI barVarType = create("http://example.org/vars/bar"); final TemplatedLink templatedLink = templatedLink( create("http://example.org/rel/foo"), "http://example.org/{foo}/{bar}", asList(hrefVar("foo", fooVarType), hrefVar("bar", barVarType)), null); // when final URI uri = templatedLink.expandToUri(create("http://example.org/vars/foo"), "42"); // then assertEquals(uri, create("http://example.org/42/")); }
@Test public void shouldExpandUriWithRequestParams() { // given final URI fooVarType = create("http://example.org/vars/foo"); final URI barVarType = create("http://example.org/vars/bar"); final TemplatedLink templatedLink = templatedLink( create("http://example.org/rel/foo"), "http://example.org{?foo,bar}", asList(hrefVar("foo", fooVarType), hrefVar("bar", barVarType)), null); // when final URI uri = templatedLink.expandToUri(fooVarType, "42", barVarType, 4711); // then assertEquals(uri, create("http://example.org?foo=42&bar=4711")); }
@Test(enabled = false) public void mergeWithShouldMergeAcceptPost() { // given final TemplatedLink thisTemplatedLink = templatedLink( RESOURCELINK_SHOP_PAGE, REL_PAGE_HREF, asList(hrefVar("pageId", VAR_TYPE_PAGEID)), Hints.hints( of(GET, POST), asList("application/foo"), Collections.<String>emptyList(), asList("application/json"), Collections.<Precondition>emptyList(), Status.OK, emptyDocs())); final TemplatedLink thatTemplatedLink = templatedLink( RESOURCELINK_SHOP_PAGE, REL_PAGE_HREF, asList(hrefVar("pageId", VAR_TYPE_PAGEID)), Hints.hints( of(GET, POST), asList("application/foo"), Collections.<String>emptyList(), asList("application/foo"), Collections.<Precondition>emptyList(), Status.OK, emptyDocs())); // when final ResourceLink resourceLink = thisTemplatedLink.mergeWith(thatTemplatedLink); // then final Hints hints = resourceLink.getHints(); assertEquals(hints.getRepresentations(), asList("application/foo")); assertEquals(hints.getAcceptPost(), asList("application/json", "application/foo")); }