@@ -1121,40 +1121,82 @@ func TestGitlabClient_GetTeamNamesForUser(t *testing.T) {
1121
1121
userSuccess , err := os .ReadFile ("testdata/gitlab-user-success.json" )
1122
1122
Ok (t , err )
1123
1123
1124
- configuredGroups := []string {"someorg/group1" , "someorg/group2" , "someorg/group3" , "someorg/group4" }
1125
- testServer := httptest .NewServer (
1126
- http .HandlerFunc (func (w http.ResponseWriter , r * http.Request ) {
1127
- switch r .RequestURI {
1128
- case "/api/v4/users?username=testuser" :
1129
- w .WriteHeader (http .StatusOK )
1130
- w .Write (userSuccess ) // nolint: errcheck
1131
- case "/api/v4/groups/someorg%2Fgroup1/members/123" , "/api/v4/groups/someorg%2Fgroup2/members/123" :
1132
- w .WriteHeader (http .StatusOK )
1133
- w .Write (groupMembershipSuccess ) // nolint: errcheck
1134
- case "/api/v4/groups/someorg%2Fgroup3/members/123" :
1135
- http .Error (w , "forbidden" , http .StatusForbidden )
1136
- case "/api/v4/groups/someorg%2Fgroup4/members/123" :
1137
- http .Error (w , "not found" , http .StatusNotFound )
1138
- default :
1139
- t .Errorf ("got unexpected request at %q" , r .RequestURI )
1140
- http .Error (w , "not found" , http .StatusNotFound )
1141
- }
1142
- }))
1143
- internalClient , err := gitlab .NewClient ("token" , gitlab .WithBaseURL (testServer .URL ))
1124
+ userEmpty , err := os .ReadFile ("testdata/gitlab-user-none.json" )
1144
1125
Ok (t , err )
1145
- client := & GitlabClient {
1146
- Client : internalClient ,
1147
- Version : nil ,
1148
- ConfiguredGroups : configuredGroups ,
1126
+
1127
+ multipleUsers , err := os .ReadFile ("testdata/gitlab-user-multiple.json" )
1128
+ Ok (t , err )
1129
+
1130
+ configuredGroups := []string {"someorg/group1" , "someorg/group2" , "someorg/group3" , "someorg/group4" }
1131
+
1132
+ cases := []struct {
1133
+ userName string
1134
+ expErr string
1135
+ expTeams []string
1136
+ }{
1137
+ {
1138
+ userName : "testuser" ,
1139
+ expTeams : []string {"someorg/group1" , "someorg/group2" },
1140
+ },
1141
+ {
1142
+ userName : "none" ,
1143
+ expErr : "GET /users returned no user" ,
1144
+ },
1145
+ {
1146
+ userName : "multiuser" ,
1147
+ expErr : "GET /users returned more than 1 user" ,
1148
+ },
1149
1149
}
1150
+ for _ , c := range cases {
1151
+ t .Run (c .userName , func (t * testing.T ) {
1152
+
1153
+ testServer := httptest .NewServer (
1154
+ http .HandlerFunc (func (w http.ResponseWriter , r * http.Request ) {
1155
+ switch r .RequestURI {
1156
+ case "/api/v4/users?username=testuser" :
1157
+ w .WriteHeader (http .StatusOK )
1158
+ w .Write (userSuccess ) // nolint: errcheck
1159
+ case "/api/v4/users?username=none" :
1160
+ w .WriteHeader (http .StatusOK )
1161
+ w .Write (userEmpty ) // nolint: errcheck
1162
+ case "/api/v4/users?username=multiuser" :
1163
+ w .WriteHeader (http .StatusOK )
1164
+ w .Write (multipleUsers ) // nolint: errcheck
1165
+ case "/api/v4/groups/someorg%2Fgroup1/members/123" , "/api/v4/groups/someorg%2Fgroup2/members/123" :
1166
+ w .WriteHeader (http .StatusOK )
1167
+ w .Write (groupMembershipSuccess ) // nolint: errcheck
1168
+ case "/api/v4/groups/someorg%2Fgroup3/members/123" :
1169
+ http .Error (w , "forbidden" , http .StatusForbidden )
1170
+ case "/api/v4/groups/someorg%2Fgroup4/members/123" :
1171
+ http .Error (w , "not found" , http .StatusNotFound )
1172
+ default :
1173
+ t .Errorf ("got unexpected request at %q" , r .RequestURI )
1174
+ http .Error (w , "not found" , http .StatusNotFound )
1175
+ }
1176
+ }))
1177
+ internalClient , err := gitlab .NewClient ("token" , gitlab .WithBaseURL (testServer .URL ))
1178
+ Ok (t , err )
1179
+ client := & GitlabClient {
1180
+ Client : internalClient ,
1181
+ Version : nil ,
1182
+ ConfiguredGroups : configuredGroups ,
1183
+ }
1184
+
1185
+ teams , err := client .GetTeamNamesForUser (
1186
+ logger ,
1187
+ models.Repo {
1188
+ Owner : "someorg" ,
1189
+ }, models.User {
1190
+ Username : c .userName ,
1191
+ })
1192
+ if c .expErr == "" {
1193
+ Ok (t , err )
1194
+ Equals (t , c .expTeams , teams )
1195
+ } else {
1196
+ ErrContains (t , c .expErr , err )
1197
+
1198
+ }
1150
1199
1151
- teams , err := client .GetTeamNamesForUser (
1152
- logger ,
1153
- models.Repo {
1154
- Owner : "someorg" ,
1155
- }, models.User {
1156
- Username : "testuser" ,
1157
1200
})
1158
- Ok (t , err )
1159
- Equals (t , []string {"someorg/group1" , "someorg/group2" }, teams )
1201
+ }
1160
1202
}
0 commit comments