private CompletionStage<? extends Resource> getParent(final IRI identifier) { final Optional<IRI> parent = getContainer(identifier); if (parent.isPresent()) { return trellis.getResourceService().get(parent.get()); } return completedFuture(MISSING_RESOURCE); }
private Optional<Resource> getNearestResource(final IRI identifier) { final Resource res = resourceService.get(identifier).toCompletableFuture().join(); if (resourceExists(res)) { return of(res); } return getContainer(identifier).flatMap(this::getNearestResource); }
private Predicate<IRI> isAgentInGroup(final IRI agent) { return group -> resourceService.get(cleanIdentifier(group)).thenApply(res -> { try (final Stream<RDFTerm> triples = res.stream(Trellis.PreferUserManaged) .filter(t -> t.getSubject().equals(group) && t.getPredicate().equals(VCARD.hasMember)) .map(Triple::getObject)) { return triples.anyMatch(agent::equals); } }).toCompletableFuture().join(); }
@BeforeEach public void setUpMocks() throws Exception { super.setUpMocks(); when(mockResourceService.get(any(IRI.class))).thenAnswer(inv -> completedFuture(mockResource)); when(mockAccessControlService.getAccessModes(any(IRI.class), any(Session.class))).thenReturn(emptySet()); }
@BeforeEach public void setUpMocks() throws Exception { super.setUpMocks(); when(mockResourceService.get(any(IRI.class))).thenAnswer(inv -> of(mockResource)); when(mockAccessControlService.getAccessModes(any(IRI.class), any(Session.class))).thenReturn(emptySet()); }
@Test public void testPostToLdpRs() { when(mockResourceService.get(eq(rdf.createIRI(TRELLIS_DATA_PREFIX + RESOURCE_PATH + "/" + RANDOM_VALUE)))) .thenAnswer(inv -> completedFuture(MISSING_RESOURCE)); final Response res = target(RESOURCE_PATH).request() .post(entity("<> <http://purl.org/dc/terms/title> \"A title\" .", TEXT_TURTLE_TYPE)); assertEquals(SC_METHOD_NOT_ALLOWED, res.getStatus(), "Unexpected response code!"); }
@Test public void testPostGone() { when(mockResourceService.get(eq(rdf.createIRI(TRELLIS_DATA_PREFIX + DELETED_PATH + "/" + RANDOM_VALUE)))) .thenAnswer(inv -> completedFuture(DELETED_RESOURCE)); final Response res = target(DELETED_PATH).request() .post(entity("<> <http://purl.org/dc/terms/title> \"A title\" .", TEXT_TURTLE_TYPE)); assertEquals(SC_GONE, res.getStatus(), "Unexpected response code!"); }
@Test public void testPostBadContent() { when(mockResource.getInteractionModel()).thenReturn(LDP.Container); when(mockResourceService.get(eq(rdf.createIRI(TRELLIS_DATA_PREFIX + RESOURCE_PATH + "/" + RANDOM_VALUE)))) .thenAnswer(inv -> completedFuture(MISSING_RESOURCE)); final Response res = target(RESOURCE_PATH).request() .post(entity("<> <http://purl.org/dc/terms/title> A title\" .", TEXT_TURTLE_TYPE)); assertEquals(SC_BAD_REQUEST, res.getStatus(), "Unexpected response code!"); }
@Test public void testPatchException() { when(mockResourceService.get(eq(identifier))).thenAnswer(inv -> supplyAsync(() -> { throw new RuntimeTrellisException("Expected exception"); })); final Response res = target(RESOURCE_PATH).request().method("PATCH", entity("", APPLICATION_SPARQL_UPDATE)); assertEquals(SC_INTERNAL_SERVER_ERROR, res.getStatus(), "Unexpected response code!"); }
@Test public void testGetException() { when(mockResourceService.get(eq(identifier))).thenAnswer(inv -> supplyAsync(() -> { throw new RuntimeTrellisException("Expected exception"); })); final Response res = target(RESOURCE_PATH).request().get(); assertEquals(SC_INTERNAL_SERVER_ERROR, res.getStatus(), "Unexpected response code!"); }
@Test public void testPostBadJsonLdSemantics() { when(mockResource.getInteractionModel()).thenReturn(LDP.Container); when(mockResourceService.get(eq(rdf.createIRI(TRELLIS_DATA_PREFIX + RESOURCE_PATH + "/" + RANDOM_VALUE)))) .thenAnswer(inv -> completedFuture(MISSING_RESOURCE)); final Response res = target(RESOURCE_PATH).request() .post(entity("{\"@id\": \"\", \"@type\": \"some type\"}", APPLICATION_LD_JSON_TYPE)); assertEquals(SC_BAD_REQUEST, res.getStatus(), "Unexpected response code!"); }
@Test public void testPostBadJsonLdSyntax() { when(mockResource.getInteractionModel()).thenReturn(LDP.Container); when(mockResourceService.get(eq(rdf.createIRI(TRELLIS_DATA_PREFIX + RESOURCE_PATH + "/" + RANDOM_VALUE)))) .thenAnswer(inv -> completedFuture(MISSING_RESOURCE)); final Response res = target(RESOURCE_PATH).request().post(entity("{\"@id:", APPLICATION_LD_JSON_TYPE)); assertEquals(SC_BAD_REQUEST, res.getStatus(), "Unexpected response code!"); }
@Test public void testPostIgnoreContains() { when(mockResource.getInteractionModel()).thenReturn(LDP.Container); when(mockResourceService.get(eq(rdf.createIRI(TRELLIS_DATA_PREFIX + RESOURCE_PATH + "/" + RANDOM_VALUE)))) .thenAnswer(inv -> completedFuture(MISSING_RESOURCE)); final Response res = target(RESOURCE_PATH).request() .post(entity("<> <http://www.w3.org/ns/ldp#contains> <./other> . ", TEXT_TURTLE_TYPE)); assertEquals(SC_CREATED, res.getStatus(), "Unexpected response code!"); }
@Test public void testDeleteException() { when(mockResourceService.get(eq(identifier))).thenAnswer(inv -> supplyAsync(() -> { throw new RuntimeTrellisException("Expected exception"); })); final Response res = target(RESOURCE_PATH).request().delete(); assertEquals(SC_INTERNAL_SERVER_ERROR, res.getStatus(), "Unexpected response code!"); }
@Test public void testPostConflict() { when(mockResource.getInteractionModel()).thenReturn(LDP.Container); when(mockResourceService.get(eq(rdf.createIRI(TRELLIS_DATA_PREFIX + RESOURCE_PATH + "/" + RANDOM_VALUE)))) .thenAnswer(inv -> completedFuture(mockResource)); final Response res = target(RESOURCE_PATH).request() .header("Link", "<http://www.w3.org/ns/ldp#NonRDFSource>; rel=\"type\"") .post(entity("<> <http://purl.org/dc/terms/title> \"A title\" .", TEXT_TURTLE_TYPE)); assertEquals(SC_CONFLICT, res.getStatus(), "Unexpected response code!"); }
@Test public void testPutException() { when(mockResourceService.get(eq(identifier))).thenAnswer(inv -> supplyAsync(() -> { throw new RuntimeTrellisException("Expected exception"); })); final Response res = target(RESOURCE_PATH).request().put(entity("", TEXT_TURTLE_TYPE)); assertEquals(SC_INTERNAL_SERVER_ERROR, res.getStatus(), "Unexpected response code!"); }
@Test public void testOptionsException() { when(mockResourceService.get(eq(identifier))).thenAnswer(inv -> supplyAsync(() -> { throw new RuntimeTrellisException("Expected exception"); })); final Response res = target(RESOURCE_PATH).request().options(); assertEquals(SC_INTERNAL_SERVER_ERROR, res.getStatus(), "Unexpected response code!"); }
@Test public void testDeleteNonExistant() { final IRI identifier = rdf.createIRI(TRELLIS_DATA_PREFIX + RESOURCE_PATH + "/test"); when(mockResourceService.get(eq(identifier))).thenAnswer(inv -> completedFuture(MISSING_RESOURCE)); when(mockMementoService.get(eq(identifier), eq(MAX))).thenAnswer(inv -> completedFuture(MISSING_RESOURCE)); final Response res = target(RESOURCE_PATH + "/test").request().delete(); assertEquals(SC_NOT_FOUND, res.getStatus(), "Unexpected response code!"); assertNull(res.getHeaderString(MEMENTO_DATETIME), "Unexpected Memento-Datetime header!"); }
@Test public void testPostConstraint() { when(mockResource.getInteractionModel()).thenReturn(LDP.Container); when(mockResourceService.get(eq(rdf.createIRI(TRELLIS_DATA_PREFIX + RESOURCE_PATH + "/" + RANDOM_VALUE)))) .thenAnswer(inv -> completedFuture(MISSING_RESOURCE)); final Response res = target(RESOURCE_PATH).request() .post(entity("<> <http://www.w3.org/ns/ldp#inbox> \"Some literal\" .", TEXT_TURTLE_TYPE)); assertEquals(SC_CONFLICT, res.getStatus(), "Unexpected response code!"); assertTrue(getLinks(res).stream() .anyMatch(hasLink(InvalidRange, LDP.constrainedBy.getIRIString())), "Missing constrainedBy link"); }
@Test public void testNoRoot() { final ResourceService svc = new TriplestoreResourceService(); assertEquals(MISSING_RESOURCE, svc.get(rdf.createIRI(TRELLIS_DATA_PREFIX)).toCompletableFuture().join(), "Not a missing resource!"); }