@@ -4,13 +4,15 @@ import (
4
4
"net/http"
5
5
"sort"
6
6
"testing"
7
+ "time"
7
8
8
9
"github.com/google/uuid"
9
10
"github.com/stretchr/testify/require"
10
11
11
12
"github.com/coder/coder/v2/coderd/audit"
12
13
"github.com/coder/coder/v2/coderd/coderdtest"
13
14
"github.com/coder/coder/v2/coderd/database"
15
+ "github.com/coder/coder/v2/coderd/database/db2sdk"
14
16
"github.com/coder/coder/v2/coderd/rbac"
15
17
"github.com/coder/coder/v2/coderd/util/ptr"
16
18
"github.com/coder/coder/v2/codersdk"
@@ -568,13 +570,19 @@ func TestPatchGroup(t *testing.T) {
568
570
})
569
571
}
570
572
571
- func sortAllGroups (groups []codersdk.Group ) {
573
+ func normalizeAllGroups (groups []codersdk.Group ) {
572
574
for i := range groups {
573
- sortGroupMembers (& groups [i ])
575
+ normalizeGroupMembers (& groups [i ])
574
576
}
575
577
}
576
578
577
- func sortGroupMembers (group * codersdk.Group ) {
579
+ // normalizeGroupMembers removes comparison noise from the group members.
580
+ func normalizeGroupMembers (group * codersdk.Group ) {
581
+ for i := range group .Members {
582
+ group .Members [i ].LastSeenAt = time.Time {}
583
+ group .Members [i ].CreatedAt = time.Time {}
584
+ group .Members [i ].UpdatedAt = time.Time {}
585
+ }
578
586
sort .Slice (group .Members , func (i , j int ) bool {
579
587
return group .Members [i ].ID .String () < group .Members [j ].ID .String ()
580
588
})
@@ -651,8 +659,8 @@ func TestGroup(t *testing.T) {
651
659
652
660
ggroup , err := userAdminClient .Group (ctx , group .ID )
653
661
require .NoError (t , err )
654
- sortGroupMembers (& group )
655
- sortGroupMembers (& ggroup )
662
+ normalizeGroupMembers (& group )
663
+ normalizeGroupMembers (& ggroup )
656
664
657
665
require .Equal (t , group , ggroup )
658
666
})
@@ -813,7 +821,7 @@ func TestGroups(t *testing.T) {
813
821
_ , user2 := coderdtest .CreateAnotherUser (t , client , user .OrganizationID )
814
822
_ , user3 := coderdtest .CreateAnotherUser (t , client , user .OrganizationID )
815
823
_ , user4 := coderdtest .CreateAnotherUser (t , client , user .OrganizationID )
816
- _ , user5 := coderdtest .CreateAnotherUser (t , client , user .OrganizationID )
824
+ user5Client , user5 := coderdtest .CreateAnotherUser (t , client , user .OrganizationID )
817
825
818
826
ctx := testutil .Context (t , testutil .WaitLong )
819
827
group1 , err := userAdminClient .CreateGroup (ctx , user .OrganizationID , codersdk.CreateGroupRequest {
@@ -830,41 +838,64 @@ func TestGroups(t *testing.T) {
830
838
AddUsers : []string {user2 .ID .String (), user3 .ID .String ()},
831
839
})
832
840
require .NoError (t , err )
833
- sortGroupMembers (& group1 )
841
+ normalizeGroupMembers (& group1 )
834
842
835
843
group2 , err = userAdminClient .PatchGroup (ctx , group2 .ID , codersdk.PatchGroupRequest {
836
844
AddUsers : []string {user4 .ID .String (), user5 .ID .String ()},
837
845
})
838
846
require .NoError (t , err )
839
- sortGroupMembers (& group2 )
847
+ normalizeGroupMembers (& group2 )
840
848
841
849
// Fetch everyone group for comparison
842
850
everyoneGroup , err := userAdminClient .Group (ctx , user .OrganizationID )
843
851
require .NoError (t , err )
844
- sortGroupMembers (& everyoneGroup )
852
+ normalizeGroupMembers (& everyoneGroup )
845
853
846
854
groups , err := userAdminClient .Groups (ctx , codersdk.GroupArguments {
847
855
Organization : user .OrganizationID .String (),
848
856
})
849
857
require .NoError (t , err )
850
- sortAllGroups (groups )
858
+ normalizeAllGroups (groups )
851
859
852
860
// 'Everyone' group + 2 custom groups.
853
- require .Len (t , groups , 3 )
854
- require .Contains (t , groups , group1 )
855
- require .Contains (t , groups , group2 )
861
+ require .ElementsMatch (t , []codersdk.Group {
862
+ everyoneGroup ,
863
+ group1 ,
864
+ group2 ,
865
+ }, groups )
856
866
857
867
// Filter by user
858
868
user5Groups , err := userAdminClient .Groups (ctx , codersdk.GroupArguments {
859
869
HasMember : user5 .Username ,
860
870
})
861
871
require .NoError (t , err )
872
+ normalizeAllGroups (user5Groups )
862
873
// Everyone group and group 2
863
- require .ElementsMatch (t , user5Groups , []codersdk.Group {
874
+ require .ElementsMatch (t , []codersdk.Group {
864
875
everyoneGroup ,
865
876
group2 ,
866
- })
877
+ }, user5Groups )
867
878
879
+ // Query from the user's perspective
880
+ user5View , err := user5Client .Groups (ctx , codersdk.GroupArguments {})
881
+ require .NoError (t , err )
882
+ normalizeAllGroups (user5Groups )
883
+
884
+ // Everyone group and group 2
885
+ require .Len (t , user5View , 2 )
886
+ user5ViewIDs := db2sdk .List (user5View , func (g codersdk.Group ) uuid.UUID {
887
+ return g .ID
888
+ })
889
+
890
+ require .ElementsMatch (t , []uuid.UUID {
891
+ everyoneGroup .ID ,
892
+ group2 .ID ,
893
+ }, user5ViewIDs )
894
+ for _ , g := range user5View {
895
+ // Only expect the 1 member, themselves
896
+ require .Len (t , g .Members , 1 )
897
+ require .Equal (t , user5 .ReducedUser .ID , g .Members [0 ].MinimalUser .ID )
898
+ }
868
899
})
869
900
}
870
901
0 commit comments