Skip to content

Commit afd31be

Browse files
committed
Add tests for find and compaction
1 parent 30c4227 commit afd31be

File tree

2 files changed

+54
-15
lines changed

2 files changed

+54
-15
lines changed

acp/src/main/java/com/inrupt/client/acp/AccessControlResource.java

Lines changed: 12 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import java.util.function.Consumer;
3333
import java.util.stream.Collectors;
3434

35+
import org.apache.commons.rdf.api.BlankNodeOrIRI;
3536
import org.apache.commons.rdf.api.Dataset;
3637
import org.apache.commons.rdf.api.Graph;
3738
import org.apache.commons.rdf.api.IRI;
@@ -43,7 +44,7 @@
4344
*/
4445
public class AccessControlResource extends RDFSource {
4546

46-
private static final URI SOLID_ACCESS_GRANT = URI.create("http://www.w3.org/ns/solid/vc#SolidAccessGrant");
47+
public static final URI SOLID_ACCESS_GRANT = URI.create("http://www.w3.org/ns/solid/vc#SolidAccessGrant");
4748

4849
/**
4950
* Create a new Access Control Resource.
@@ -85,28 +86,24 @@ public void compact() {
8586
final var accessControls = stream(null, null, asIRI(RDF.type), asIRI(ACP.AccessControl))
8687
.map(Quad::getSubject).toList();
8788
for (final var accessControl : accessControls) {
88-
if (!contains(null, null, null, accessControl)) {
89-
for (final var quad : stream(null, accessControl, null, null).toList()) {
90-
remove(quad);
91-
}
92-
}
89+
removeUnusedStatements(accessControl);
9390
}
9491

9592
final var policies = stream(null, null, asIRI(RDF.type), asIRI(ACP.Policy)).map(Quad::getSubject).toList();
9693
for (final var policy : policies) {
97-
if (!contains(null, null, null, policy)) {
98-
for (final var quad : stream(null, policy, null, null).toList()) {
99-
remove(quad);
100-
}
101-
}
94+
removeUnusedStatements(policy);
10295
}
10396

10497
final var matchers = stream(null, null, asIRI(RDF.type), asIRI(ACP.Matcher)).map(Quad::getSubject).toList();
10598
for (final var matcher : matchers) {
106-
if (!contains(null, null, null, matcher)) {
107-
for (final var quad : stream(null, matcher, null, null).toList()) {
108-
remove(quad);
109-
}
99+
removeUnusedStatements(matcher);
100+
}
101+
}
102+
103+
<T extends BlankNodeOrIRI> void removeUnusedStatements(final T resource) {
104+
if (!contains(null, null, null, resource)) {
105+
for (final var quad : stream(null, resource, null, null).toList()) {
106+
remove(quad);
110107
}
111108
}
112109
}

acp/src/test/java/com/inrupt/client/acp/AccessControlResourceTest.java

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929

3030
import java.io.IOException;
3131
import java.net.URI;
32+
import java.util.Set;
3233

3334
import org.apache.commons.rdf.api.RDF;
3435
import org.junit.jupiter.api.AfterAll;
@@ -179,6 +180,47 @@ void buildAcr() {
179180
assertEquals(10, acr.size());
180181
}
181182

183+
@Test
184+
void testAcrFindPolicies() {
185+
final var uri = mockHttpServer.acr2();
186+
try (final AccessControlResource acr = client.read(uri, AccessControlResource.class)) {
187+
assertEquals(1, acr.find(AccessControlResource.MatcherType.VC,
188+
AccessControlResource.SOLID_ACCESS_GRANT, Set.of(ACL.Read)).size());
189+
190+
assertEquals(0, acr.find(AccessControlResource.MatcherType.VC,
191+
AccessControlResource.SOLID_ACCESS_GRANT, Set.of(ACL.Read, ACL.Write)).size());
192+
193+
assertEquals(0, acr.find(AccessControlResource.MatcherType.AGENT,
194+
URI.create("https://bot.example/id"), Set.of(ACL.Read, ACL.Write)).size());
195+
196+
assertEquals(1, acr.find(AccessControlResource.MatcherType.AGENT,
197+
URI.create("https://bot.example/id"), Set.of(ACL.Read)).size());
198+
}
199+
}
200+
201+
@Test
202+
void testAcr1RemoveAccessControl() {
203+
final var uri = mockHttpServer.acr2();
204+
try (final AccessControlResource acr = client.read(uri, AccessControlResource.class)) {
205+
assertEquals(2, acr.accessControl().size());
206+
assertEquals(3, acr.memberAccessControl().size());
207+
208+
// Check dataset size
209+
assertEquals(29, acr.size());
210+
211+
acr.accessControl().stream().findFirst().ifPresent(acr.accessControl()::remove);
212+
213+
// Check dataset size
214+
assertEquals(28, acr.size());
215+
acr.compact();
216+
assertEquals(28, acr.size());
217+
218+
assertEquals(1, acr.accessControl().size());
219+
assertEquals(3, acr.memberAccessControl().size());
220+
221+
}
222+
}
223+
182224
@Test
183225
void testAcr1RemoveValues() {
184226
final var uri = mockHttpServer.acr2();

0 commit comments

Comments
 (0)