@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 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(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"));
 }