/** * Get the describedby Link value, if one exists. * @param url the URL * @return the location of a description resource, or null if none is available */ default String getDescription(final String url) { try (final Response res = target(url).request().head()) { return getLinks(res).stream().filter(link -> "describedby".equals(link.getRel())) .map(Link::getUri).map(URI::toString).findFirst().orElse(null); } }
/** * Get the describedby Link value, if one exists. * @param url the URL * @return the location of a description resource, or null if none is available */ default String getDescription(final String url) { try (final Response res = target(url).request().head()) { return getLinks(res).stream().filter(link -> "describedby".equals(link.getRel())) .map(Link::getUri).map(URI::toString).findFirst().orElse(null); } }
/** * Build a list of all Mementos. * @return the resource mementos */ default Map<String, String> getMementos() { final Map<String, String> mementos = new HashMap<>(); try (final Response res = target(getResourceLocation()).request().get()) { getLinks(res).stream().filter(link -> link.getRel().equals("memento")) .filter(l -> l.getParams().containsKey("datetime")) .forEach(link -> mementos.put(link.getUri().toString(), link.getParams().get("datetime"))); } return mementos; }
/** * Build a list of all Mementos. * @return the resource mementos */ default Map<String, String> getMementos() { final Map<String, String> mementos = new HashMap<>(); try (final Response res = target(getResourceLocation()).request().get()) { getLinks(res).stream().filter(link -> link.getRel().equals("memento")) .filter(l -> l.getParams().containsKey("datetime")) .forEach(link -> mementos.put(link.getUri().toString(), link.getParams().get("datetime"))); } return mementos; }
/** * Check a response for expected LDP Link headers. * @param res the Response object * @param ldpType the LDP Resource type * @return a Stream of executable assertions */ default Stream<Executable> checkMementoLdpHeaders(final Response res, final IRI ldpType) { return of( () -> assertEquals(SUCCESSFUL, res.getStatusInfo().getFamily(), "Check for a successful response"), () -> assertTrue(getLinks(res).stream().anyMatch(hasType(LDP.Resource)), "Check that the response is an LDP Resource"), () -> assertTrue(getLinks(res).stream().anyMatch(hasType(ldpType)), "Check that the response is an " + ldpType)); }
/** * Check a response for expected LDP Link headers. * @param res the Response object * @param ldpType the LDP Resource type * @return a Stream of executable assertions */ default Stream<Executable> checkMementoLdpHeaders(final Response res, final IRI ldpType) { return of( () -> assertEquals(SUCCESSFUL, res.getStatusInfo().getFamily(), "Check for a successful response"), () -> assertTrue(getLinks(res).stream().anyMatch(hasType(LDP.Resource)), "Check that the response is an LDP Resource"), () -> assertTrue(getLinks(res).stream().anyMatch(hasType(ldpType)), "Check that the response is an " + ldpType)); }
/** * Build a list of all Mementos. * @return the resource mementos */ default Map<String, String> getMementos() { final Map<String, String> mementos = new HashMap<>(); try (final Response res = target(getBinaryLocation()).request().head()) { getLinks(res).stream().filter(link -> link.getRel().equals("memento")) .filter(l -> l.getParams().containsKey("datetime")) .forEach(link -> mementos.put(link.getUri().toString(), link.getParams().get("datetime"))); } return mementos; }
/** * Build a list of all Mementos. * @return the resource mementos */ default Map<String, String> getMementos() { final Map<String, String> mementos = new HashMap<>(); try (final Response res = target(getBinaryLocation()).request().head()) { getLinks(res).stream().filter(link -> link.getRel().equals("memento")) .filter(l -> l.getParams().containsKey("datetime")) .forEach(link -> mementos.put(link.getUri().toString(), link.getParams().get("datetime"))); } return mementos; }
/** * Test the presence of a rel=timegate Link header. */ @Test @DisplayName("Test the presence of a rel=timegate Link header") default void testTimeGateLinkHeader() { try (final Response res = target(getResourceLocation()).request().get()) { assertEquals(SUCCESSFUL, res.getStatusInfo().getFamily(), "Check for a successful response"); assertTrue(getLinks(res).stream().filter(l -> l.getRels().contains("timegate") && l.getUri().toString().equals(getResourceLocation())).findFirst().isPresent(), "Check for a rel=timegate Link header"); } }
/** * Test the presence of a rel=timemap Link header. */ @Test @DisplayName("Test the presence of a rel=timemap Link header") default void testTimeMapLinkHeader() { try (final Response res = target(getResourceLocation()).request().get()) { assertEquals(SUCCESSFUL, res.getStatusInfo().getFamily(), "Check for a successful timemap response"); assertTrue(getLinks(res).stream().filter(l -> l.getRels().contains("timemap") && l.getUri().toString().equals(getResourceLocation() + TIMEMAP_QUERY_ARG)).findFirst() .isPresent(), "Check for a rel=timemap Link header"); } }
/** * Test the presence of a rel=timegate Link header. */ @Test @DisplayName("Test the presence of a rel=timegate Link header") default void testTimeGateLinkHeader() { try (final Response res = target(getResourceLocation()).request().get()) { assertEquals(SUCCESSFUL, res.getStatusInfo().getFamily(), "Check for a successful response"); assertTrue(getLinks(res).stream().filter(l -> l.getRels().contains("timegate") && l.getUri().toString().equals(getResourceLocation())).findFirst().isPresent(), "Check for a rel=timegate Link header"); } }
/** * Test the presence of a rel=original Link header. */ @Test @DisplayName("Test the presence of a rel=original Link header") default void testOriginalLinkHeader() { try (final Response res = target(getResourceLocation()).request().get()) { assertEquals(SUCCESSFUL, res.getStatusInfo().getFamily(), "Check for a successful response"); assertTrue(getLinks(res).stream().filter(l -> l.getRels().contains("original") && l.getUri().toString().equals(getResourceLocation())).findFirst().isPresent(), "Check for a rel=original Link header"); } }
/** * Check for a successful creation response. * @param res the response * @param ldpType the expected type * @return the location of the new resource */ default String checkCreateResponseAssumptions(final Response res, final IRI ldpType) { assumeTrue(SUCCESSFUL.equals(res.getStatusInfo().getFamily()), "Creation of " + ldpType + " appears not to be supported"); assumeTrue(getLinks(res).stream().anyMatch(hasType(ldpType)), "New resource was not of the expected " + ldpType + " type"); return res.getLocation().toString(); }
/** * Test the timemap response for a rel=timemap. */ @Test @DisplayName("Test the timemap response for a rel=timemap") default void testTimeMapResponseHasTimeMapLink() { try (final Response res = target(getResourceLocation() + TIMEMAP_QUERY_ARG).request().get()) { assertEquals(SUCCESSFUL, res.getStatusInfo().getFamily(), "Check for a successful response"); assertTrue(getLinks(res).stream().filter(l -> l.getRels().contains("timemap") && l.getUri().toString().equals(getResourceLocation() + TIMEMAP_QUERY_ARG)).findFirst() .isPresent(), "Check for a rel=timemap Link header"); } }
/** * Check for a successful creation response. * @param res the response * @param ldpType the expected type * @return the location of the new resource */ default String checkCreateResponseAssumptions(final Response res, final IRI ldpType) { assumeTrue(SUCCESSFUL.equals(res.getStatusInfo().getFamily()), "Creation of " + ldpType + " appears not to be supported"); assumeTrue(getLinks(res).stream().anyMatch(hasType(ldpType)), "New resource was not of the expected " + ldpType + " type"); return res.getLocation().toString(); }
/** * Test the presence of a rel=original Link header. */ @Test @DisplayName("Test the presence of a rel=original Link header") default void testOriginalLinkHeader() { try (final Response res = target(getResourceLocation()).request().get()) { assertEquals(SUCCESSFUL, res.getStatusInfo().getFamily(), "Check for a successful response"); assertTrue(getLinks(res).stream().filter(l -> l.getRels().contains("original") && l.getUri().toString().equals(getResourceLocation())).findFirst().isPresent(), "Check for a rel=original Link header"); } }
/** * Test the timemap response for a rel=timemap. */ @Test @DisplayName("Test the timemap response for a rel=timemap") default void testTimeMapResponseHasTimeMapLink() { try (final Response res = target(getResourceLocation() + TIMEMAP_QUERY_ARG).request().get()) { assertEquals(SUCCESSFUL, res.getStatusInfo().getFamily(), "Check for a successful response"); assertTrue(getLinks(res).stream().filter(l -> l.getRels().contains("timemap") && l.getUri().toString().equals(getResourceLocation() + TIMEMAP_QUERY_ARG)).findFirst() .isPresent(), "Check for a rel=timemap Link header"); } }
/** * Test the presence of a rel=timemap Link header. */ @Test @DisplayName("Test the presence of a rel=timemap Link header") default void testTimeMapLinkHeader() { try (final Response res = target(getResourceLocation()).request().get()) { assertEquals(SUCCESSFUL, res.getStatusInfo().getFamily(), "Check for a successful timemap response"); assertTrue(getLinks(res).stream().filter(l -> l.getRels().contains("timemap") && l.getUri().toString().equals(getResourceLocation() + TIMEMAP_QUERY_ARG)).findFirst() .isPresent(), "Check for a rel=timemap Link header"); } }
/** * Test creating resource with invalid RDF. */ @Test @DisplayName("Test creating resource with invalid RDF") default void testWeirdRDF() { final String rdf = getResourceAsString(SIMPLE_RESOURCE) + "<> a \"skos concept\" ."; // POST an LDP-RS try (final Response res = target().request().header(SLUG, generateRandomValue(getClass().getSimpleName())) .post(entity(rdf, TEXT_TURTLE))) { assertEquals(CLIENT_ERROR, res.getStatusInfo().getFamily(), "Semantically invalid RDF should throw a 4xx error"); assertTrue(getLinks(res).stream().anyMatch(hasConstrainedBy(Trellis.InvalidRange)), "Check for an InvalidRange constraint for weird rdf:type constructs"); } }
/** * Test updating an indirect container with no member resource. */ @Test @DisplayName("Test updating an indirect container with no member resource") default void testUpdateIndirectContainerMissingMemberResource() { final String location = createSimpleIndirectContainer(MEMBER_RESOURCE2); final String content = getResourceAsString(INDIRECT_CONTAINER); // PUT an LDP-DC try (final Response res = target(location).request() .header(LINK, fromUri(LDP.IndirectContainer.getIRIString()).rel(TYPE).build()) .put(entity(content, TEXT_TURTLE))) { assertEquals(CLIENT_ERROR, res.getStatusInfo().getFamily(), "no membershipResource results in 4xx"); assertTrue(getLinks(res).stream().anyMatch(hasConstrainedBy(Trellis.InvalidCardinality)), "A missing membershipResource property results in an InvalidCardinality constraint"); } }