@@ -562,6 +562,48 @@ void testQueryGrantAgentBuilder() {
562562 assertEquals (1 , grants .size ());
563563 }
564564
565+ @ Test
566+ void testQueryGrantModesPurposesBuilder () {
567+ final Map <String , Object > claims = new HashMap <>();
568+ claims .put ("webid" , WEBID );
569+ claims .put ("sub" , SUB );
570+ claims .put ("iss" , ISS );
571+ claims .put ("azp" , AZP );
572+ final String token = generateIdToken (claims );
573+ final AccessGrantClient client = agClient .session (OpenIdSession .ofIdToken (token ));
574+
575+ final AccessCredentialQuery <AccessGrant > query = AccessCredentialQuery .newBuilder ()
576+ .resource (URI .create ("https://storage.example/" ))
577+ .mode ("Read" ).mode ("Write" ).purpose (URI .create ("https://id.example/Purpose8" ))
578+ .purpose (URI .create ("https://id.example/Purpose9" )).build (AccessGrant .class );
579+ final List <AccessGrant > grants = client .query (query ).toCompletableFuture ().join ();
580+ assertEquals (1 , grants .size ());
581+ }
582+
583+ @ Test
584+ void testQueryGrantModesPurposesNoMatchBuilder () {
585+ final Map <String , Object > claims = new HashMap <>();
586+ claims .put ("webid" , WEBID );
587+ claims .put ("sub" , SUB );
588+ claims .put ("iss" , ISS );
589+ claims .put ("azp" , AZP );
590+ final String token = generateIdToken (claims );
591+ final AccessGrantClient client = agClient .session (OpenIdSession .ofIdToken (token ));
592+
593+ final AccessCredentialQuery <AccessGrant > query1 = AccessCredentialQuery .newBuilder ()
594+ .resource (URI .create ("https://storage.example/" ))
595+ .mode ("Read" ).mode (null ).purpose (URI .create ("https://id.example/Purpose8" ))
596+ .purpose (URI .create ("https://id.example/Purpose9" )).purpose (null ).build (AccessGrant .class );
597+ final List <AccessGrant > grants1 = client .query (query1 ).toCompletableFuture ().join ();
598+ assertEquals (0 , grants1 .size ());
599+
600+ final AccessCredentialQuery <AccessGrant > query2 = AccessCredentialQuery .newBuilder ()
601+ .resource (URI .create ("https://storage.example/" )).mode ("Read" ).mode ("Write" )
602+ .purpose (URI .create ("https://id.example/Purpose9" )).build (AccessGrant .class );
603+ final List <AccessGrant > grants2 = client .query (query2 ).toCompletableFuture ().join ();
604+ assertEquals (0 , grants2 .size ());
605+ }
606+
565607 @ Test
566608 void testQueryRequestAgent () {
567609 final Map <String , Object > claims = new HashMap <>();
@@ -659,16 +701,6 @@ void testQueryDenialBuilder() {
659701 assertEquals (1 , grants .size ());
660702 }
661703
662- @ Test
663- void testQueryInvalidTypeBuilder () {
664- final URI uri = URI .create ("https://storage.example/f1759e6d-4dda-4401-be61-d90d070a5474/a/b/c" );
665- final AccessCredentialQuery .Builder builder = AccessCredentialQuery .newBuilder ()
666- .resource (uri ).mode ("Read" );
667-
668- assertThrows (AccessGrantException .class , () -> builder .build (AccessCredential .class ));
669- }
670-
671-
672704 @ Test
673705 void testQueryInvalidType () {
674706 final Map <String , Object > claims = new HashMap <>();
@@ -684,7 +716,6 @@ void testQueryInvalidType() {
684716 client .query (uri , null , null , null , "Read" , AccessCredential .class ));
685717 }
686718
687-
688719 @ Test
689720 void testQueryInvalidAuth () {
690721 final CompletionException err = assertThrows (CompletionException .class ,
0 commit comments