@Override public IRI getInteractionModel() { return mutable.getInteractionModel(); }
private void addAllowHeaders(final ResponseBuilder builder) { if (isMemento) { builder.header(ALLOW, join(",", GET, HEAD, OPTIONS)); } else if (ACL.equals(getRequest().getExt())) { builder.header(ALLOW, join(",", GET, HEAD, OPTIONS, PATCH)); } else if (getResource().getInteractionModel().equals(LDP.RDFSource)) { builder.header(ALLOW, join(",", GET, HEAD, OPTIONS, PATCH, PUT, DELETE)); } else { builder.header(ALLOW, join(",", GET, HEAD, OPTIONS, PATCH, PUT, DELETE, POST)); } }
@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 testPutUncontainedIndirectContainer() { final EventService myEventService = mock(EventService.class); when(mockBundler.getEventService()).thenReturn(myEventService); when(mockRootResource.getInteractionModel()).thenReturn(LDP.IndirectContainer); when(mockRootResource.getMembershipResource()).thenReturn(of(newresourceIdentifier)); when(mockResource.getContainer()).thenReturn(empty()); final Response res = target(RESOURCE_PATH).request() .put(entity("<> <http://purl.org/dc/terms/title> \"A title\" .", TEXT_TURTLE_TYPE)); assertEquals(SC_NO_CONTENT, res.getStatus(), "Unexpected response code!"); verify(myEventService, times(1)).emit(any()); }
@Test public void testDeleteNoChildren1() { when(mockVersionedResource.getInteractionModel()).thenReturn(LDP.BasicContainer); when(mockVersionedResource.stream(eq(LDP.PreferContainment))).thenAnswer(inv -> Stream.empty()); final Response res = target(RESOURCE_PATH).request().delete(); assertEquals(SC_NO_CONTENT, 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 testPostBinaryWithSha1Digest() { when(mockResource.getInteractionModel()).thenReturn(LDP.Container); when(mockMementoService.get(eq(rdf.createIRI(TRELLIS_DATA_PREFIX + RESOURCE_PATH + "/newresource")), any(Instant.class))).thenAnswer(inv -> completedFuture(MISSING_RESOURCE)); final Response res = target(RESOURCE_PATH).request().header(DIGEST, "sha=3VWEuvPnAM6riDQJUu4TG7A4Ots=") .header(SLUG, "newresource").post(entity("some data.", TEXT_PLAIN_TYPE)); assertEquals(SC_CREATED, res.getStatus(), "Unexpected response code!"); assertAll("Check LDP type Link headers", checkLdpTypeHeaders(res, LDP.NonRDFSource)); }
@Test public void testGetTimeMapLinkDefaultFormat2() { when(mockResource.getInteractionModel()).thenReturn(LDP.Container); final Response res = target("resource").queryParam("ext", "timemap").request().get(); assertEquals(SC_OK, res.getStatus(), "Unexpected response code!"); assertEquals(MediaType.valueOf(APPLICATION_LINK_FORMAT), res.getMediaType(), "Incorrect content-type!"); }
@Test public void testPostBinary() { when(mockResource.getInteractionModel()).thenReturn(LDP.Container); when(mockMementoService.get(eq(rdf.createIRI(TRELLIS_DATA_PREFIX + RESOURCE_PATH + "/newresource")), any(Instant.class))).thenAnswer(inv -> completedFuture(MISSING_RESOURCE)); final Response res = target(RESOURCE_PATH).request().header(SLUG, "newresource") .post(entity("some data.", TEXT_PLAIN_TYPE)); assertEquals(SC_CREATED, res.getStatus(), "Unexpected response code!"); assertTrue(getLinks(res).stream().map(Link::getRel).anyMatch(isEqual("describedby")), "No describedby link!"); assertAll("Check LDP type Link headers", checkLdpTypeHeaders(res, LDP.NonRDFSource)); }
@Test public void testPatchAclOnIc() { when(mockResource.getInteractionModel()).thenReturn(LDP.IndirectContainer); final Response res = target(RESOURCE_PATH).queryParam("ext", "acl").request() .method("PATCH", entity("INSERT { <> <http://purl.org/dc/terms/title> \"A title\" } WHERE {}", APPLICATION_SPARQL_UPDATE)); assertEquals(SC_NO_CONTENT, res.getStatus(), "Unexpected response code!"); assertAll("Check LDP type Link headers", checkLdpTypeHeaders(res, LDP.RDFSource)); }
@Test public void testGetBinaryDescription2() { when(mockResource.getBinaryMetadata()).thenReturn(of(testBinary)); when(mockResource.getInteractionModel()).thenReturn(LDP.NonRDFSource); when(mockTrellisRequest.getExt()).thenReturn(DESCRIPTION); final GetHandler handler = new GetHandler(mockTrellisRequest, mockBundler, false, true, true, null, null); final Response res = handler.getRepresentation(handler.standardHeaders(handler.initialize(mockResource))) .toCompletableFuture().join().build(); assertAll("Check binary description", checkBinaryDescription(res)); }
@Test public void testDeleteWithChildren() { when(mockVersionedResource.getInteractionModel()).thenReturn(LDP.Container); when(mockVersionedResource.stream(eq(LDP.PreferContainment))).thenAnswer(inv -> Stream.of( rdf.createTriple(identifier, LDP.contains, rdf.createIRI(identifier.getIRIString() + "/child")))); final Response res = target(RESOURCE_PATH).request().delete(); assertEquals(SC_NO_CONTENT, res.getStatus(), "Unexpected response code!"); }
@Test public void testGetBinaryDescription() { when(mockResource.getBinaryMetadata()).thenReturn(of(testBinary)); when(mockResource.getInteractionModel()).thenReturn(LDP.NonRDFSource); final GetHandler handler = new GetHandler(mockTrellisRequest, mockBundler, false, true, true, null, null); final Response res = handler.getRepresentation(handler.standardHeaders(handler.initialize(mockResource))) .toCompletableFuture().join().build(); assertAll("Check binary description", checkBinaryDescription(res)); }
@Test public void testPatchOnDc() { when(mockResource.getInteractionModel()).thenReturn(LDP.DirectContainer); final Response res = target(RESOURCE_PATH).request() .method("PATCH", entity("INSERT { <> <http://purl.org/dc/terms/title> \"A title\" } WHERE {}", APPLICATION_SPARQL_UPDATE)); assertEquals(SC_CONFLICT, res.getStatus(), "Unexpected response code!"); assertTrue(getLinks(res).stream().anyMatch(hasLink(InvalidCardinality, LDP.constrainedBy.getIRIString())), "Missing constrainedBy link header!"); }
@Test public void testPutOnDc() { when(mockResource.getInteractionModel()).thenReturn(LDP.DirectContainer); final Response res = target(RESOURCE_PATH).request() .put(entity("<> <http://purl.org/dc/terms/title> \"A title\" .", TEXT_TURTLE_TYPE)); assertEquals(SC_CONFLICT, res.getStatus(), "Unexpected response code!"); assertTrue(getLinks(res).stream().anyMatch(hasLink(InvalidCardinality, LDP.constrainedBy.getIRIString())), "Missing constrainedBy header!"); }
@Test public void testPutConflict() { when(mockResource.getInteractionModel()).thenReturn(LDP.BasicContainer); when(mockTrellisRequest.getLink()).thenReturn(fromUri(LDP.DirectContainer.getIRIString()).rel("type").build()); when(mockTrellisRequest.getContentType()).thenReturn(TEXT_TURTLE); final PutHandler handler = buildPutHandler("/simpleTriple.ttl", null); final Response res = assertThrows(WebApplicationException.class, () -> handler.setResource(handler.initialize(mockParent, mockResource)).toCompletableFuture().join(), "No exception when trying to invalidly change IXN models!").getResponse(); assertEquals(CONFLICT, res.getStatusInfo(), "Incorrect response code!"); }
@Test public void testRdfToNonRDFSource() { when(mockResource.getInteractionModel()).thenReturn(LDP.NonRDFSource); when(mockTrellisRequest.getContentType()).thenReturn(TEXT_TURTLE); when(mockTrellisRequest.getLink()).thenReturn(fromUri(LDP.NonRDFSource.getIRIString()).rel("type").build()); final PutHandler handler = buildPutHandler("/simpleTriple.ttl", null); final Response res = handler.setResource(handler.initialize(mockParent, mockResource)) .toCompletableFuture().join().build(); assertEquals(NO_CONTENT, res.getStatusInfo(), "Incorrect response code!"); assertAll("Check RDF PUT interactions", checkRdfPut(res)); }
@Test public void testError() { when(mockResource.getInteractionModel()).thenReturn(LDP.NonRDFSource); when(mockTrellisRequest.getPath()).thenReturn("resource"); when(mockTrellisRequest.getContentType()).thenReturn(TEXT_PLAIN); when(mockTrellisRequest.getLink()).thenReturn(fromUri(LDP.NonRDFSource.getIRIString()).rel("type").build()); when(mockResourceService.replace(any(Metadata.class), any(Dataset.class))).thenReturn(asyncException()); final PutHandler handler = buildPutHandler("/simpleData.txt", null); assertThrows(CompletionException.class, () -> unwrapAsyncError(handler.setResource(handler.initialize(mockParent, mockResource))), "No exception when there's a problem with the backend!"); }
@Test public void testOptionsLdpnr() { when(mockResource.getInteractionModel()).thenReturn(LDP.NonRDFSource); final OptionsHandler optionsHandler = new OptionsHandler(mockTrellisRequest, mockBundler, false, null); final Response res = optionsHandler.ldpOptions(optionsHandler.initialize(mockResource)).build(); assertEquals(NO_CONTENT, res.getStatusInfo(), "Incorrect response code!"); assertEquals(APPLICATION_SPARQL_UPDATE, res.getHeaderString(ACCEPT_PATCH), "Incorrect Accept-Patch header!"); assertAll("Check Allow headers", checkAllowHeader(res, asList(GET, HEAD, OPTIONS, PUT, DELETE, PATCH))); }
private static Stream<Executable> checkResource(final Resource res, final IRI identifier, final IRI ldpType, final boolean hasBinary, final boolean hasAcl, final boolean hasParent) { return Stream.of( () -> assertEquals(identifier, res.getIdentifier(), "Incorrect identifier!"), () -> assertEquals(ldpType, res.getInteractionModel(), "Incorrect interaction model!"), () -> assertEquals(parse(time), res.getModified(), "Incorrect modified date!"), () -> assertEquals(hasBinary, res.getBinaryMetadata().isPresent(), "Unexpected binary presence!"), () -> assertEquals(hasParent, res.getContainer().isPresent(), "Unexpected parent resource!"), () -> assertEquals(hasAcl, res.hasAcl(), "Unexpected ACL presence!")); }