@@ -67,12 +67,14 @@ class AccessGrantClientTest {
6767
6868 private static final MockAccessGrantServer mockServer = new MockAccessGrantServer ();
6969 private static AccessGrantClient agClient ;
70+ private static AccessGrantClient altAgClient ;
7071 private static URI baseUri ;
7172
7273 @ BeforeAll
7374 static void setup () {
7475 baseUri = URI .create (mockServer .start ());
7576 agClient = new AccessGrantClient (baseUri );
77+ altAgClient = new AccessGrantClient (URIBuilder .newBuilder (baseUri ).path ("alternative" ).build ());
7678 }
7779
7880 @ AfterAll
@@ -390,6 +392,202 @@ void testGrantAccessNoAuth() {
390392 assertInstanceOf (AccessGrantException .class , err .getCause ());
391393 }
392394
395+ @ Test
396+ void testQueryGrantFilter () {
397+ final Map <String , Object > claims = new HashMap <>();
398+ claims .put ("webid" , WEBID );
399+ claims .put ("sub" , SUB );
400+ claims .put ("iss" , ISS );
401+ claims .put ("azp" , AZP );
402+ final String token = generateIdToken (claims );
403+ final AccessGrantClient client = agClient .session (OpenIdSession .ofIdToken (token ));
404+
405+ final URI resource = URI .create ("https://storage.example/e973cc3d-5c28-4a10-98c5-e40079289358/a/b/c" );
406+
407+ final CredentialFilter <AccessGrant > filter = CredentialFilter .newBuilder ().build (AccessGrant .class );
408+
409+ final CredentialResult <AccessGrant > results = client .query (filter ).toCompletableFuture ().join ();
410+
411+ assertEquals (1 , results .getItems ().size ());
412+ assertEquals ("/access-grant-1" , results .getItems ().get (0 ).getIdentifier ().getPath ());
413+ }
414+
415+ @ Test
416+ void testQueryRequestFilter () {
417+ final Map <String , Object > claims = new HashMap <>();
418+ claims .put ("webid" , WEBID );
419+ claims .put ("sub" , SUB );
420+ claims .put ("iss" , ISS );
421+ claims .put ("azp" , AZP );
422+ final String token = generateIdToken (claims );
423+ final AccessGrantClient client = agClient .session (OpenIdSession .ofIdToken (token ));
424+
425+ final URI resource = URI .create ("https://storage.example/e973cc3d-5c28-4a10-98c5-e40079289358/a/b/c" );
426+
427+ final CredentialFilter <AccessRequest > filter = CredentialFilter .newBuilder ().build (AccessRequest .class );
428+
429+ final CredentialResult <AccessRequest > results = client .query (filter ).toCompletableFuture ().join ();
430+
431+ assertEquals (1 , results .getItems ().size ());
432+ assertEquals ("https://accessgrant.test/credential/d604c858-209a-4bb6-a7f8-2f52c9617cab" ,
433+ results .getItems ().get (0 ).getIdentifier ().toString ());
434+ }
435+
436+ @ Test
437+ void testQueryDenialFilter () {
438+ final Map <String , Object > claims = new HashMap <>();
439+ claims .put ("webid" , WEBID );
440+ claims .put ("sub" , SUB );
441+ claims .put ("iss" , ISS );
442+ claims .put ("azp" , AZP );
443+ final String token = generateIdToken (claims );
444+ final AccessGrantClient client = agClient .session (OpenIdSession .ofIdToken (token ));
445+
446+ final URI resource = URI .create ("https://storage.example/e973cc3d-5c28-4a10-98c5-e40079289358/a/b/c" );
447+
448+ final CredentialFilter <AccessDenial > filter = CredentialFilter .newBuilder ().build (AccessDenial .class );
449+
450+ final CredentialResult <AccessDenial > results = client .query (filter ).toCompletableFuture ().join ();
451+
452+ assertEquals (1 , results .getItems ().size ());
453+ assertEquals ("https://accessgrant.test/credential/fc2dbcd9-81d4-4fa4-8fd4-239e16dd83ab" ,
454+ results .getItems ().get (0 ).getIdentifier ().toString ());
455+ }
456+
457+ @ Test
458+ void testQueryPageFilter () {
459+ final Map <String , Object > claims = new HashMap <>();
460+ claims .put ("webid" , WEBID );
461+ claims .put ("sub" , SUB );
462+ claims .put ("iss" , ISS );
463+ claims .put ("azp" , AZP );
464+ final String token = generateIdToken (claims );
465+ final AccessGrantClient client = agClient .session (OpenIdSession .ofIdToken (token ));
466+
467+ final URI resource = URI .create ("https://storage.example/e973cc3d-5c28-4a10-98c5-e40079289358/a/b/c" );
468+
469+ final CredentialFilter <AccessRequest > filter = CredentialFilter .newBuilder ().page ("1" ).pageSize (5 )
470+ .build (AccessRequest .class );
471+
472+ final CredentialResult <AccessRequest > results = client .query (filter ).toCompletableFuture ().join ();
473+
474+ assertEquals (5 , results .getItems ().size ());
475+ assertEquals ("https://accessgrant.test/credential/d604c858-209a-4bb6-a7f8-2f52c9617cab" ,
476+ results .getItems ().get (0 ).getIdentifier ().toString ());
477+ assertEquals ("https://accessgrant.test/credential/52049498-fc2e-45be-be79-703a39086574" ,
478+ results .getItems ().get (1 ).getIdentifier ().toString ());
479+ assertEquals ("https://accessgrant.test/credential/a0a73677-d139-48e4-8e62-0ae63925bd2b" ,
480+ results .getItems ().get (2 ).getIdentifier ().toString ());
481+ assertEquals ("https://accessgrant.test/credential/3869d6d9-3b3e-4c77-b842-6c938367e3b5" ,
482+ results .getItems ().get (3 ).getIdentifier ().toString ());
483+ assertEquals ("https://accessgrant.test/credential/3f61667a-4569-43f3-854e-1832f898049e" ,
484+ results .getItems ().get (4 ).getIdentifier ().toString ());
485+ assertEquals (Optional .empty (), results .prevPage ());
486+ assertEquals (Optional .of ("1" ), results .firstPage ().flatMap (CredentialFilter ::getPage ));
487+ assertEquals (Optional .of ("2" ), results .nextPage ().flatMap (CredentialFilter ::getPage ));
488+ assertEquals (Optional .of ("3" ), results .lastPage ().flatMap (CredentialFilter ::getPage ));
489+
490+ }
491+
492+ @ Test
493+ void testQueryAltPage1Filter () {
494+ final Map <String , Object > claims = new HashMap <>();
495+ claims .put ("webid" , WEBID );
496+ claims .put ("sub" , SUB );
497+ claims .put ("iss" , ISS );
498+ claims .put ("azp" , AZP );
499+ final String token = generateIdToken (claims );
500+ final AccessGrantClient client = altAgClient .session (OpenIdSession .ofIdToken (token ));
501+
502+ final URI resource = URI .create ("https://storage.example/e973cc3d-5c28-4a10-98c5-e40079289358/" );
503+ final CredentialFilter <AccessGrant > filter = CredentialFilter .newBuilder ().page ("1" ).pageSize (2 )
504+ .resource (resource ).build (AccessGrant .class );
505+
506+ final CredentialResult <AccessGrant > results = client .query (filter ).toCompletableFuture ().join ();
507+
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 testQueryAltPageFilter () {
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 ().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-1" , results .getItems ().get (0 ).getIdentifier ().getPath ());
535+ assertEquals ("/access-grant-2" , 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 ("2" ), results .nextPage ().flatMap (CredentialFilter ::getPage ));
539+ assertEquals (Optional .empty (), results .prevPage ());
540+ }
541+
542+ @ Test
543+ void testQueryAltPage2Filter () {
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 ("2" ).pageSize (2 )
554+ .resource (resource ).build (AccessGrant .class );
555+
556+ final CredentialResult <AccessGrant > results = client .query (filter ).toCompletableFuture ().join ();
557+
558+ assertEquals (2 , results .getItems ().size ());
559+ assertEquals ("/access-grant-3" , results .getItems ().get (0 ).getIdentifier ().getPath ());
560+ assertEquals ("/access-grant-4" , results .getItems ().get (1 ).getIdentifier ().getPath ());
561+ assertEquals (Optional .of ("1" ), results .firstPage ().flatMap (CredentialFilter ::getPage ));
562+ assertEquals (Optional .of ("2" ), results .lastPage ().flatMap (CredentialFilter ::getPage ));
563+ assertEquals (Optional .of ("1" ), results .prevPage ().flatMap (CredentialFilter ::getPage ));
564+ assertEquals (Optional .empty (), results .nextPage ());
565+ }
566+
567+ @ Test
568+ void testQueryAltPageFilterSingleton () {
569+ final Map <String , Object > claims = new HashMap <>();
570+ claims .put ("webid" , WEBID );
571+ claims .put ("sub" , SUB );
572+ claims .put ("iss" , ISS );
573+ claims .put ("azp" , AZP );
574+ final String token = generateIdToken (claims );
575+ final AccessGrantClient client = altAgClient .session (OpenIdSession .ofIdToken (token ));
576+
577+ final URI resource = URI .create ("https://storage.example/e973cc3d-5c28-4a10-98c5-e40079289358/" );
578+ final CredentialFilter <AccessGrant > filter = CredentialFilter .newBuilder ().page ("1" )
579+ .resource (resource ).build (AccessGrant .class );
580+
581+ final CredentialResult <AccessGrant > results = client .query (filter ).toCompletableFuture ().join ();
582+
583+ assertEquals (4 , results .getItems ().size ());
584+ assertEquals ("/access-grant-1" , results .getItems ().get (0 ).getIdentifier ().getPath ());
585+ assertEquals (Optional .empty (), results .prevPage ());
586+ assertEquals (Optional .empty (), results .nextPage ());
587+ assertEquals (Optional .empty (), results .firstPage ());
588+ assertEquals (Optional .empty (), results .lastPage ());
589+ }
590+
393591 @ Test
394592 void testQueryGrant () {
395593 final Map <String , Object > claims = new HashMap <>();
@@ -403,7 +601,7 @@ void testQueryGrant() {
403601 final URI resource = URI .create ("https://storage.example/e973cc3d-5c28-4a10-98c5-e40079289358/a/b/c" );
404602 final List <AccessGrant > grants = client .query (resource , null , null , null , "Read" , AccessGrant .class )
405603 .toCompletableFuture ().join ();
406- assertEquals (1 , grants .size ());
604+ assertEquals (4 , grants .size ());
407605 }
408606
409607 @ Test
@@ -420,7 +618,7 @@ void testQueryGrantBuilder() {
420618 final AccessCredentialQuery <AccessGrant > query = AccessCredentialQuery .newBuilder ()
421619 .resource (resource ).mode ("Read" ).build (AccessGrant .class );
422620 final List <AccessGrant > grants = client .query (query ).toCompletableFuture ().join ();
423- assertEquals (1 , grants .size ());
621+ assertEquals (4 , grants .size ());
424622 }
425623
426624 @ Test
0 commit comments