Skip to content

Commit 535ba04

Browse files
committed
Testing of fallback method
1 parent f34f170 commit 535ba04

File tree

3 files changed

+151
-8
lines changed

3 files changed

+151
-8
lines changed

access-grant/src/main/java/com/inrupt/client/accessgrant/AccessGrantClient.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -404,17 +404,20 @@ public <T extends AccessCredential> CompletionStage<CredentialResult<T>> query(f
404404
<T extends AccessCredential> CredentialResult<T> processResults(final List<T> items,
405405
final CredentialFilter<T> filter) {
406406
final int pageCount = Utils.ceilDiv(items.size(), filter.getPageSize());
407-
final int page = Math.max(pageCount, filter.getPage().map(Utils::convertPage).orElse(1));
407+
final int page = Math.min(pageCount, filter.getPage().map(Utils::convertPage).orElse(1));
408408
if (pageCount > 1) {
409409
final CredentialFilter<T> first = CredentialFilter.newBuilder(filter)
410410
.page(Utils.convertPage(1)).build(filter.getCredentialType());
411411
final CredentialFilter<T> last = CredentialFilter.newBuilder(filter)
412412
.page(Utils.convertPage(pageCount)).build(filter.getCredentialType());
413413
final CredentialFilter<T> prev = page > 1 ? CredentialFilter.newBuilder(filter)
414414
.page(Utils.convertPage(page - 1)).build(filter.getCredentialType()) : null;
415-
final CredentialFilter<T> next = page < pageCount - 1 ? CredentialFilter.newBuilder(filter)
415+
final CredentialFilter<T> next = page <= pageCount - 1 ? CredentialFilter.newBuilder(filter)
416416
.page(Utils.convertPage(page + 1)).build(filter.getCredentialType()) : null;
417-
return new CredentialResult<>(items, first, prev, next, last);
417+
418+
final int offset = (page - 1) * filter.getPageSize();
419+
final int limit = filter.getPageSize();
420+
return new CredentialResult<>(items.subList(offset, offset + limit), first, prev, next, last);
418421
} else {
419422
return new CredentialResult<>(items, null, null, null, null);
420423
}

access-grant/src/test/java/com/inrupt/client/accessgrant/AccessGrantClientTest.java

Lines changed: 55 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -490,7 +490,7 @@ void testQueryPageFilter() {
490490
}
491491

492492
@Test
493-
void testQueryAltPageFilter() {
493+
void testQueryAltPage1Filter() {
494494
final Map<String, Object> claims = new HashMap<>();
495495
claims.put("webid", WEBID);
496496
claims.put("sub", SUB);
@@ -500,12 +500,62 @@ void testQueryAltPageFilter() {
500500
final AccessGrantClient client = altAgClient.session(OpenIdSession.ofIdToken(token));
501501

502502
final URI resource = URI.create("https://storage.example/e973cc3d-5c28-4a10-98c5-e40079289358/");
503-
final CredentialFilter<AccessGrant> filter = CredentialFilter.newBuilder().page("1").pageSize(5)
503+
final CredentialFilter<AccessGrant> filter = CredentialFilter.newBuilder().page("1").pageSize(2)
504504
.resource(resource).build(AccessGrant.class);
505505

506506
final CredentialResult<AccessGrant> results = client.query(filter).toCompletableFuture().join();
507507

508-
assertEquals(1, results.getItems().size());
508+
assertEquals(2, results.getItems().size());
509+
assertEquals("/access-grant-1", results.getItems().get(0).getIdentifier().getPath());
510+
assertEquals("/access-grant-2", results.getItems().get(1).getIdentifier().getPath());
511+
assertEquals(Optional.of("1"), results.firstPage().flatMap(CredentialFilter::getPage));
512+
assertEquals(Optional.of("2"), results.lastPage().flatMap(CredentialFilter::getPage));
513+
assertEquals(Optional.of("2"), results.nextPage().flatMap(CredentialFilter::getPage));
514+
assertEquals(Optional.empty(), results.prevPage());
515+
}
516+
517+
@Test
518+
void testQueryAltPage2Filter() {
519+
final Map<String, Object> claims = new HashMap<>();
520+
claims.put("webid", WEBID);
521+
claims.put("sub", SUB);
522+
claims.put("iss", ISS);
523+
claims.put("azp", AZP);
524+
final String token = generateIdToken(claims);
525+
final AccessGrantClient client = altAgClient.session(OpenIdSession.ofIdToken(token));
526+
527+
final URI resource = URI.create("https://storage.example/e973cc3d-5c28-4a10-98c5-e40079289358/");
528+
final CredentialFilter<AccessGrant> filter = CredentialFilter.newBuilder().page("2").pageSize(2)
529+
.resource(resource).build(AccessGrant.class);
530+
531+
final CredentialResult<AccessGrant> results = client.query(filter).toCompletableFuture().join();
532+
533+
assertEquals(2, results.getItems().size());
534+
assertEquals("/access-grant-3", results.getItems().get(0).getIdentifier().getPath());
535+
assertEquals("/access-grant-4", results.getItems().get(1).getIdentifier().getPath());
536+
assertEquals(Optional.of("1"), results.firstPage().flatMap(CredentialFilter::getPage));
537+
assertEquals(Optional.of("2"), results.lastPage().flatMap(CredentialFilter::getPage));
538+
assertEquals(Optional.of("1"), results.prevPage().flatMap(CredentialFilter::getPage));
539+
assertEquals(Optional.empty(), results.nextPage());
540+
}
541+
542+
@Test
543+
void testQueryAltPageFilterSingleton() {
544+
final Map<String, Object> claims = new HashMap<>();
545+
claims.put("webid", WEBID);
546+
claims.put("sub", SUB);
547+
claims.put("iss", ISS);
548+
claims.put("azp", AZP);
549+
final String token = generateIdToken(claims);
550+
final AccessGrantClient client = altAgClient.session(OpenIdSession.ofIdToken(token));
551+
552+
final URI resource = URI.create("https://storage.example/e973cc3d-5c28-4a10-98c5-e40079289358/");
553+
final CredentialFilter<AccessGrant> filter = CredentialFilter.newBuilder().page("1")
554+
.resource(resource).build(AccessGrant.class);
555+
556+
final CredentialResult<AccessGrant> results = client.query(filter).toCompletableFuture().join();
557+
558+
assertEquals(4, results.getItems().size());
509559
assertEquals("/access-grant-1", results.getItems().get(0).getIdentifier().getPath());
510560
assertEquals(Optional.empty(), results.prevPage());
511561
assertEquals(Optional.empty(), results.nextPage());
@@ -526,7 +576,7 @@ void testQueryGrant() {
526576
final URI resource = URI.create("https://storage.example/e973cc3d-5c28-4a10-98c5-e40079289358/a/b/c");
527577
final List<AccessGrant> grants = client.query(resource, null, null, null, "Read", AccessGrant.class)
528578
.toCompletableFuture().join();
529-
assertEquals(1, grants.size());
579+
assertEquals(4, grants.size());
530580
}
531581

532582
@Test
@@ -543,7 +593,7 @@ void testQueryGrantBuilder() {
543593
final AccessCredentialQuery<AccessGrant> query = AccessCredentialQuery.newBuilder()
544594
.resource(resource).mode("Read").build(AccessGrant.class);
545595
final List<AccessGrant> grants = client.query(query).toCompletableFuture().join();
546-
assertEquals(1, grants.size());
596+
assertEquals(4, grants.size());
547597
}
548598

549599
@Test

access-grant/src/test/resources/query_response1.json

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,96 @@
2929
"proofValue":"nIeQF44XVik7onnAbdkbp8xxJ2C8JoTw6-VtCkAzxuWYRFsSfYpft5MuAJaivyeKDmaK82Lj_YsME2xgL2WIBQ",
3030
"type":"Ed25519Signature2020",
3131
"verificationMethod":"https://accessgrant.example/key/1e332728-4af5-46e4-a5db-4f7b89e3f378"}
32+
}, {
33+
"@context":[
34+
"https://www.w3.org/2018/credentials/v1",
35+
"https://w3id.org/security/suites/ed25519-2020/v1",
36+
"https://w3id.org/vc-revocation-list-2020/v1",
37+
"https://schema.inrupt.com/credentials/v1.jsonld"],
38+
"id":"{{baseUrl}}/access-grant-2",
39+
"type":["VerifiableCredential","SolidAccessGrant"],
40+
"issuer":"{{baseUrl}}",
41+
"expirationDate":"2022-08-27T12:00:00Z",
42+
"issuanceDate":"2022-08-25T20:34:05.153Z",
43+
"credentialStatus":{
44+
"id":"https://accessgrant.example/status/CVAM#2832",
45+
"revocationListCredential":"https://accessgrant.example/status/CVAM",
46+
"revocationListIndex":"2832",
47+
"type":"RevocationList2020Status"},
48+
"credentialSubject":{
49+
"id":"https://id.example/grantor",
50+
"providedConsent":{
51+
"mode":["Read"],
52+
"hasStatus":"https://w3id.org/GConsent#ConsentStatusExplicitlyGiven",
53+
"isProvidedTo":"https://id.example/grantee",
54+
"forPurpose":["https://purpose.example/Purpose1"],
55+
"forPersonalData":["https://storage.example/e973cc3d-5c28-4a10-98c5-e40079289358/"]}},
56+
"proof":{
57+
"created":"2022-08-25T20:34:05.236Z",
58+
"proofPurpose":"assertionMethod",
59+
"proofValue":"nIeQF44XVik7onnAbdkbp8xxJ2C8JoTw6-VtCkAzxuWYRFsSfYpft5MuAJaivyeKDmaK82Lj_YsME2xgL2WIBQ",
60+
"type":"Ed25519Signature2020",
61+
"verificationMethod":"https://accessgrant.example/key/1e332728-4af5-46e4-a5db-4f7b89e3f378"}
62+
}, {
63+
"@context":[
64+
"https://www.w3.org/2018/credentials/v1",
65+
"https://w3id.org/security/suites/ed25519-2020/v1",
66+
"https://w3id.org/vc-revocation-list-2020/v1",
67+
"https://schema.inrupt.com/credentials/v1.jsonld"],
68+
"id":"{{baseUrl}}/access-grant-3",
69+
"type":["VerifiableCredential","SolidAccessGrant"],
70+
"issuer":"{{baseUrl}}",
71+
"expirationDate":"2022-08-27T12:00:00Z",
72+
"issuanceDate":"2022-08-25T20:34:05.153Z",
73+
"credentialStatus":{
74+
"id":"https://accessgrant.example/status/CVAM#2832",
75+
"revocationListCredential":"https://accessgrant.example/status/CVAM",
76+
"revocationListIndex":"2832",
77+
"type":"RevocationList2020Status"},
78+
"credentialSubject":{
79+
"id":"https://id.example/grantor",
80+
"providedConsent":{
81+
"mode":["Read"],
82+
"hasStatus":"https://w3id.org/GConsent#ConsentStatusExplicitlyGiven",
83+
"isProvidedTo":"https://id.example/grantee",
84+
"forPurpose":["https://purpose.example/Purpose1"],
85+
"forPersonalData":["https://storage.example/e973cc3d-5c28-4a10-98c5-e40079289358/"]}},
86+
"proof":{
87+
"created":"2022-08-25T20:34:05.236Z",
88+
"proofPurpose":"assertionMethod",
89+
"proofValue":"nIeQF44XVik7onnAbdkbp8xxJ2C8JoTw6-VtCkAzxuWYRFsSfYpft5MuAJaivyeKDmaK82Lj_YsME2xgL2WIBQ",
90+
"type":"Ed25519Signature2020",
91+
"verificationMethod":"https://accessgrant.example/key/1e332728-4af5-46e4-a5db-4f7b89e3f378"}
92+
}, {
93+
"@context":[
94+
"https://www.w3.org/2018/credentials/v1",
95+
"https://w3id.org/security/suites/ed25519-2020/v1",
96+
"https://w3id.org/vc-revocation-list-2020/v1",
97+
"https://schema.inrupt.com/credentials/v1.jsonld"],
98+
"id":"{{baseUrl}}/access-grant-4",
99+
"type":["VerifiableCredential","SolidAccessGrant"],
100+
"issuer":"{{baseUrl}}",
101+
"expirationDate":"2022-08-27T12:00:00Z",
102+
"issuanceDate":"2022-08-25T20:34:05.153Z",
103+
"credentialStatus":{
104+
"id":"https://accessgrant.example/status/CVAM#2832",
105+
"revocationListCredential":"https://accessgrant.example/status/CVAM",
106+
"revocationListIndex":"2832",
107+
"type":"RevocationList2020Status"},
108+
"credentialSubject":{
109+
"id":"https://id.example/grantor",
110+
"providedConsent":{
111+
"mode":["Read"],
112+
"hasStatus":"https://w3id.org/GConsent#ConsentStatusExplicitlyGiven",
113+
"isProvidedTo":"https://id.example/grantee",
114+
"forPurpose":["https://purpose.example/Purpose1"],
115+
"forPersonalData":["https://storage.example/e973cc3d-5c28-4a10-98c5-e40079289358/"]}},
116+
"proof":{
117+
"created":"2022-08-25T20:34:05.236Z",
118+
"proofPurpose":"assertionMethod",
119+
"proofValue":"nIeQF44XVik7onnAbdkbp8xxJ2C8JoTw6-VtCkAzxuWYRFsSfYpft5MuAJaivyeKDmaK82Lj_YsME2xgL2WIBQ",
120+
"type":"Ed25519Signature2020",
121+
"verificationMethod":"https://accessgrant.example/key/1e332728-4af5-46e4-a5db-4f7b89e3f378"}
32122
}]
33123
}
34124

0 commit comments

Comments
 (0)