@@ -527,6 +527,7 @@ func TestReadCustomRoles(t *testing.T) {
527
527
sqlDB := testSQLDB (t )
528
528
err := migrations .Up (sqlDB )
529
529
require .NoError (t , err )
530
+
530
531
db := database .New (sqlDB )
531
532
ctx := testutil .Context (t , testutil .WaitLong )
532
533
@@ -536,28 +537,44 @@ func TestReadCustomRoles(t *testing.T) {
536
537
orgIDs [i ] = uuid .New ()
537
538
}
538
539
539
- roles := make ([]database.CustomRole , 0 )
540
+ allRoles := make ([]database.CustomRole , 0 )
541
+ siteRoles := make ([]database.CustomRole , 0 )
542
+ orgRoles := make ([]database.CustomRole , 0 )
540
543
for i := 0 ; i < 15 ; i ++ {
541
- orgID := uuid.NullUUID {}
542
-
543
- orgID = uuid.NullUUID {
544
+ orgID := uuid.NullUUID {
544
545
UUID : orgIDs [i % len (orgIDs )],
545
546
Valid : true ,
546
547
}
548
+ if i % 4 == 0 {
549
+ // Some should be site wide
550
+ orgID = uuid.NullUUID {}
551
+ }
547
552
548
553
role , err := db .UpsertCustomRole (ctx , database.UpsertCustomRoleParams {
549
554
Name : fmt .Sprintf ("role-%d" , i ),
550
555
OrganizationID : orgID ,
551
556
})
552
557
require .NoError (t , err )
553
- roles = append (roles , role )
558
+ allRoles = append (allRoles , role )
559
+ if orgID .Valid {
560
+ orgRoles = append (orgRoles , role )
561
+ } else {
562
+ siteRoles = append (siteRoles , role )
563
+ }
554
564
}
555
565
556
566
// normalizedRoleName allows for the simple ElementsMatch to work properly.
557
567
normalizedRoleName := func (role database.CustomRole ) string {
558
568
return role .Name + ":" + role .OrganizationID .UUID .String ()
559
569
}
560
570
571
+ roleToLookup := func (role database.CustomRole ) database.NameOrganizationPair {
572
+ return database.NameOrganizationPair {
573
+ Name : role .Name ,
574
+ OrganizationID : role .OrganizationID .UUID ,
575
+ }
576
+ }
577
+
561
578
testCases := []struct {
562
579
Name string
563
580
Params database.CustomRolesParams
@@ -598,17 +615,108 @@ func TestReadCustomRoles(t *testing.T) {
598
615
},
599
616
},
600
617
{
601
- Name : "SpecificRole" ,
618
+ Name : "SpecificOrgRole" ,
619
+ Params : database.CustomRolesParams {
620
+ LookupRoles : []database.NameOrganizationPair {
621
+ {
622
+ Name : orgRoles [0 ].Name ,
623
+ OrganizationID : orgRoles [0 ].OrganizationID .UUID ,
624
+ },
625
+ },
626
+ },
627
+ Match : func (role database.CustomRole ) bool {
628
+ return role .Name == orgRoles [0 ].Name && role .OrganizationID .UUID == orgRoles [0 ].OrganizationID .UUID
629
+ },
630
+ },
631
+ {
632
+ Name : "SpecificSiteRole" ,
633
+ Params : database.CustomRolesParams {
634
+ LookupRoles : []database.NameOrganizationPair {
635
+ {
636
+ Name : siteRoles [0 ].Name ,
637
+ OrganizationID : siteRoles [0 ].OrganizationID .UUID ,
638
+ },
639
+ },
640
+ },
641
+ Match : func (role database.CustomRole ) bool {
642
+ return role .Name == siteRoles [0 ].Name && role .OrganizationID .UUID == siteRoles [0 ].OrganizationID .UUID
643
+ },
644
+ },
645
+ {
646
+ Name : "FewSpecificRoles" ,
647
+ Params : database.CustomRolesParams {
648
+ LookupRoles : []database.NameOrganizationPair {
649
+ {
650
+ Name : orgRoles [0 ].Name ,
651
+ OrganizationID : orgRoles [0 ].OrganizationID .UUID ,
652
+ },
653
+ {
654
+ Name : orgRoles [1 ].Name ,
655
+ OrganizationID : orgRoles [1 ].OrganizationID .UUID ,
656
+ },
657
+ {
658
+ Name : siteRoles [0 ].Name ,
659
+ OrganizationID : siteRoles [0 ].OrganizationID .UUID ,
660
+ },
661
+ },
662
+ },
663
+ Match : func (role database.CustomRole ) bool {
664
+ return (role .Name == orgRoles [0 ].Name && role .OrganizationID .UUID == orgRoles [0 ].OrganizationID .UUID ) ||
665
+ (role .Name == orgRoles [1 ].Name && role .OrganizationID .UUID == orgRoles [1 ].OrganizationID .UUID ) ||
666
+ (role .Name == siteRoles [0 ].Name && role .OrganizationID .UUID == siteRoles [0 ].OrganizationID .UUID )
667
+ },
668
+ },
669
+ {
670
+ Name : "AllRolesByLookup" ,
671
+ Params : database.CustomRolesParams {
672
+ LookupRoles : db2sdk .List (allRoles , roleToLookup ),
673
+ },
674
+ Match : func (role database.CustomRole ) bool {
675
+ return true
676
+ },
677
+ },
678
+ {
679
+ Name : "NotExists" ,
602
680
Params : database.CustomRolesParams {
603
681
LookupRoles : []database.NameOrganizationPair {
604
682
{
605
- Name : roles [0 ].Name ,
606
- OrganizationID : roles [0 ].OrganizationID .UUID ,
683
+ Name : "not-exists" ,
684
+ OrganizationID : uuid .New (),
685
+ },
686
+ {
687
+ Name : "not-exists" ,
688
+ OrganizationID : uuid .Nil ,
689
+ },
690
+ },
691
+ },
692
+ Match : func (role database.CustomRole ) bool {
693
+ return false
694
+ },
695
+ },
696
+ {
697
+ Name : "Mixed" ,
698
+ Params : database.CustomRolesParams {
699
+ LookupRoles : []database.NameOrganizationPair {
700
+ {
701
+ Name : "not-exists" ,
702
+ OrganizationID : uuid .New (),
703
+ },
704
+ {
705
+ Name : "not-exists" ,
706
+ OrganizationID : uuid .Nil ,
707
+ },
708
+ {
709
+ Name : orgRoles [0 ].Name ,
710
+ OrganizationID : orgRoles [0 ].OrganizationID .UUID ,
711
+ },
712
+ {
713
+ Name : siteRoles [0 ].Name ,
607
714
},
608
715
},
609
716
},
610
717
Match : func (role database.CustomRole ) bool {
611
- return role .Name == roles [0 ].Name && role .OrganizationID .UUID == roles [0 ].OrganizationID .UUID
718
+ return (role .Name == orgRoles [0 ].Name && role .OrganizationID .UUID == orgRoles [0 ].OrganizationID .UUID ) ||
719
+ (role .Name == siteRoles [0 ].Name && role .OrganizationID .UUID == siteRoles [0 ].OrganizationID .UUID )
612
720
},
613
721
},
614
722
}
@@ -619,12 +727,11 @@ func TestReadCustomRoles(t *testing.T) {
619
727
t .Run (tc .Name , func (t * testing.T ) {
620
728
t .Parallel ()
621
729
622
- t .Log (tc .Params )
623
730
ctx := testutil .Context (t , testutil .WaitLong )
624
731
found , err := db .CustomRoles (ctx , tc .Params )
625
732
require .NoError (t , err )
626
733
filtered := make ([]database.CustomRole , 0 )
627
- for _ , role := range roles {
734
+ for _ , role := range allRoles {
628
735
if tc .Match (role ) {
629
736
filtered = append (filtered , role )
630
737
}
0 commit comments