@Test public void testRetrievableResource() { final Instant time = now(); final Quad quad = createQuad(testResourceId2, testResourceId2, testResourceId1, badId); final Resource mockMutable = mock(Resource.class); when(mockMutable.getInteractionModel()).thenReturn(LDP.RDFSource); when(mockMutable.getModified()).thenReturn(time); when(mockMutable.hasAcl()).thenReturn(true); when(mockMutable.getContainer()).thenReturn(empty()); when(mockMutable.stream()).thenAnswer(inv -> Stream.of(quad)); final Resource res = new RetrievableResource(mockMutable, null); assertEquals(LDP.RDFSource, res.getInteractionModel(), "Resource retrieved with wrong interaction model!"); assertEquals(time, res.getModified(), "Resource has wrong modified date!"); assertTrue(res.hasAcl(), "Resource is missing ACL!"); assertFalse(res.getContainer().isPresent(), "Unexpected parent resource!"); assertTrue(res.stream().anyMatch(quad::equals), "Expected quad not present in resource stream!"); }
@Override public CompletionStage<Void> add(final IRI identifier, final Dataset dataset) { resources.compute(identifier, (id, old) -> { final TestResource newRes = new TestResource(id, dataset); return old == null ? newRes : new RetrievableResource(old, newRes); }); return isntBadId(identifier); } }
@Override public CompletionStage<Resource> get(final IRI identifier) { return mutableData.get(identifier).thenCombine(immutableData.get(identifier), (mutable, immutable) -> { if (MISSING_RESOURCE.equals(mutable) && MISSING_RESOURCE.equals(immutable)) { return MISSING_RESOURCE; } else if (MISSING_RESOURCE.equals(mutable)) { return immutable; } else if (MISSING_RESOURCE.equals(immutable)) { return mutable; } else { return new RetrievableResource(mutable, immutable); } }); }
@Override public CompletionStage<Resource> get(final IRI identifier) { return mutableData.get(identifier).thenCombine(immutableData.get(identifier), (mutable, immutable) -> { if (MISSING_RESOURCE.equals(mutable) && MISSING_RESOURCE.equals(immutable)) { return MISSING_RESOURCE; } else if (MISSING_RESOURCE.equals(mutable)) { return immutable; } else if (MISSING_RESOURCE.equals(immutable)) { return mutable; } else { return new RetrievableResource(mutable, immutable); } }); }