@@ -466,6 +466,70 @@ func fileFromStrings(t *testing.T, strings []string) *os.File {
466
466
return file
467
467
}
468
468
469
+ func TestBuildRelationshipsFilter (t * testing.T ) {
470
+ tests := []struct {
471
+ name string
472
+ args []string
473
+ expected * v1.RelationshipFilter
474
+ }{
475
+ {
476
+ name : "resource type" ,
477
+ args : []string {"res" },
478
+ expected : & v1.RelationshipFilter {ResourceType : "res" },
479
+ },
480
+ {
481
+ name : "resource type, resource ID" ,
482
+ args : []string {"res:123" },
483
+ expected : & v1.RelationshipFilter {ResourceType : "res" , OptionalResourceId : "123" },
484
+ },
485
+ {
486
+ name : "resource type, resource ID, relation" ,
487
+ args : []string {"res:123" , "view" },
488
+ expected : & v1.RelationshipFilter {ResourceType : "res" , OptionalResourceId : "123" , OptionalRelation : "view" },
489
+ },
490
+ {
491
+ name : "resource type, resource ID, relation, subject type" ,
492
+ args : []string {"res:123" , "view" , "sub" },
493
+ expected : & v1.RelationshipFilter {
494
+ ResourceType : "res" ,
495
+ OptionalResourceId : "123" ,
496
+ OptionalRelation : "view" ,
497
+ OptionalSubjectFilter : & v1.SubjectFilter {SubjectType : "sub" },
498
+ },
499
+ },
500
+ {
501
+ name : "resource type, resource ID, relation, subject type, subject ID" ,
502
+ args : []string {"res:123" , "view" , "sub:321" },
503
+ expected : & v1.RelationshipFilter {
504
+ ResourceType : "res" ,
505
+ OptionalResourceId : "123" ,
506
+ OptionalRelation : "view" ,
507
+ OptionalSubjectFilter : & v1.SubjectFilter {SubjectType : "sub" , OptionalSubjectId : "321" },
508
+ },
509
+ },
510
+ }
511
+ for _ , tt := range tests {
512
+ tt := tt
513
+ t .Run (tt .name , func (t * testing.T ) {
514
+ t .Parallel ()
515
+
516
+ cmd := & cobra.Command {}
517
+ cmd .Flags ().String ("subject-filter" , "" , "" )
518
+
519
+ filter , err := buildRelationshipsFilter (cmd , tt .args )
520
+ require .NoError (t , err )
521
+ require .Equal (t , tt .expected .ResourceType , filter .ResourceType , "resource types do not match" )
522
+ require .Equal (t , tt .expected .OptionalResourceId , filter .OptionalResourceId , "resource IDs do not match" )
523
+ require .Equal (t , tt .expected .OptionalRelation , filter .OptionalRelation , "relations do not match" )
524
+
525
+ if tt .expected .OptionalSubjectFilter != nil {
526
+ require .Equal (t , tt .expected .OptionalSubjectFilter .SubjectType , filter .OptionalSubjectFilter .SubjectType , "subject types do not match" )
527
+ require .Equal (t , tt .expected .OptionalSubjectFilter .OptionalSubjectId , filter .OptionalSubjectFilter .OptionalSubjectId , "subject IDs do not match" )
528
+ }
529
+ })
530
+ }
531
+ }
532
+
469
533
type mockClient struct {
470
534
v1.SchemaServiceClient
471
535
v1.PermissionsServiceClient
0 commit comments