Loading testdata/get_user_admin.json +1 −0 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ "current_sign_in_at": "2012-06-02T06:36:55Z", "note": "DMCA Request: 2018-11-05 | DMCA Violation | Abuse | https://gitlab.zendesk.com/agent/tickets/123", "identities": [{ "provider": "github", "extern_uid": "2435223452345" }], "scim_identities": [{ "extern_uid": "be20d8dcc028677c931e04f387", "group_id": 1, "active": true }], "can_create_group": true, "can_create_project": true, "two_factor_enabled": true, Loading testdata/get_user_with_scim_identities.json 0 → 100644 +17 −0 Original line number Diff line number Diff line { "id": 5, "username": "jane_doe", "email": "jane@example.com", "name": "Jane Doe", "state": "active", "avatar_url": "http://localhost:3000/uploads/user/avatar/5/avatar.jpeg", "web_url": "http://localhost:3000/jane_doe", "created_at": "2023-01-15T10:00:00Z", "identities": [ { "provider": "saml", "extern_uid": "saml-uid-abc123" } ], "scim_identities": [ { "extern_uid": "scim-uid-abc123", "group_id": 10, "active": true }, { "extern_uid": "scim-uid-old456", "group_id": 20, "active": false } ] } users.go +8 −0 Original line number Diff line number Diff line Loading @@ -400,6 +400,7 @@ type User struct { TwoFactorEnabled bool `json:"two_factor_enabled"` Note string `json:"note"` Identities []*UserIdentity `json:"identities"` SCIMIdentities []*SCIMIdentity `json:"scim_identities"` External bool `json:"external"` PrivateProfile bool `json:"private_profile"` SharedRunnersMinutesLimit int64 `json:"shared_runners_minutes_limit"` Loading @@ -417,6 +418,13 @@ type UserIdentity struct { ExternUID string `json:"extern_uid"` } // SCIMIdentity represents a SCIM identity for a user. type SCIMIdentity struct { ExternUID string `json:"extern_uid"` GroupID int64 `json:"group_id"` Active bool `json:"active"` } // UserAvatar represents a GitLab user avatar. // // GitLab API docs: https://docs.gitlab.com/api/users/ Loading users_test.go +44 −0 Original line number Diff line number Diff line Loading @@ -63,6 +63,49 @@ func TestGetUser(t *testing.T) { assert.Equal(t, want, user) } func TestGetUserSCIMIdentities(t *testing.T) { t.Parallel() mux, client := setup(t) // GIVEN a user with multiple SCIM identities (one active, one inactive) mux.HandleFunc("/api/v4/users/5", func(w http.ResponseWriter, r *http.Request) { testMethod(t, r, http.MethodGet) mustWriteHTTPResponse(t, w, "testdata/get_user_with_scim_identities.json") }) // WHEN retrieving the user user, _, err := client.Users.GetUser(5, &GetUserOptions{}) // THEN the SCIM identities are correctly unmarshaled assert.NoError(t, err) assert.NotNil(t, user) assert.Len(t, user.SCIMIdentities, 2) assert.Equal(t, &SCIMIdentity{ExternUID: "scim-uid-abc123", GroupID: 10, Active: true}, user.SCIMIdentities[0]) assert.Equal(t, &SCIMIdentity{ExternUID: "scim-uid-old456", GroupID: 20, Active: false}, user.SCIMIdentities[1]) // AND the regular identities are still correctly unmarshaled assert.Len(t, user.Identities, 1) assert.Equal(t, &UserIdentity{Provider: "saml", ExternUID: "saml-uid-abc123"}, user.Identities[0]) } func TestGetUserNoSCIMIdentities(t *testing.T) { t.Parallel() mux, client := setup(t) // GIVEN a user with no scim_identities field in the response mux.HandleFunc("/api/v4/users/1", func(w http.ResponseWriter, r *http.Request) { testMethod(t, r, http.MethodGet) mustWriteHTTPResponse(t, w, "testdata/get_user.json") }) // WHEN retrieving the user user, _, err := client.Users.GetUser(1, &GetUserOptions{}) // THEN SCIMIdentities is nil (not an empty slice) assert.NoError(t, err) assert.NotNil(t, user) assert.Nil(t, user.SCIMIdentities) } func TestGetUserAdmin(t *testing.T) { t.Parallel() mux, client := setup(t) Loading Loading @@ -115,6 +158,7 @@ func TestGetUserAdmin(t *testing.T) { TwoFactorEnabled: true, Note: "DMCA Request: 2018-11-05 | DMCA Violation | Abuse | https://gitlab.zendesk.com/agent/tickets/123", Identities: []*UserIdentity{{Provider: "github", ExternUID: "2435223452345"}}, SCIMIdentities: []*SCIMIdentity{{ExternUID: "be20d8dcc028677c931e04f387", GroupID: 1, Active: true}}, NamespaceID: 42, } assert.Equal(t, want, user) Loading Loading
testdata/get_user_admin.json +1 −0 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ "current_sign_in_at": "2012-06-02T06:36:55Z", "note": "DMCA Request: 2018-11-05 | DMCA Violation | Abuse | https://gitlab.zendesk.com/agent/tickets/123", "identities": [{ "provider": "github", "extern_uid": "2435223452345" }], "scim_identities": [{ "extern_uid": "be20d8dcc028677c931e04f387", "group_id": 1, "active": true }], "can_create_group": true, "can_create_project": true, "two_factor_enabled": true, Loading
testdata/get_user_with_scim_identities.json 0 → 100644 +17 −0 Original line number Diff line number Diff line { "id": 5, "username": "jane_doe", "email": "jane@example.com", "name": "Jane Doe", "state": "active", "avatar_url": "http://localhost:3000/uploads/user/avatar/5/avatar.jpeg", "web_url": "http://localhost:3000/jane_doe", "created_at": "2023-01-15T10:00:00Z", "identities": [ { "provider": "saml", "extern_uid": "saml-uid-abc123" } ], "scim_identities": [ { "extern_uid": "scim-uid-abc123", "group_id": 10, "active": true }, { "extern_uid": "scim-uid-old456", "group_id": 20, "active": false } ] }
users.go +8 −0 Original line number Diff line number Diff line Loading @@ -400,6 +400,7 @@ type User struct { TwoFactorEnabled bool `json:"two_factor_enabled"` Note string `json:"note"` Identities []*UserIdentity `json:"identities"` SCIMIdentities []*SCIMIdentity `json:"scim_identities"` External bool `json:"external"` PrivateProfile bool `json:"private_profile"` SharedRunnersMinutesLimit int64 `json:"shared_runners_minutes_limit"` Loading @@ -417,6 +418,13 @@ type UserIdentity struct { ExternUID string `json:"extern_uid"` } // SCIMIdentity represents a SCIM identity for a user. type SCIMIdentity struct { ExternUID string `json:"extern_uid"` GroupID int64 `json:"group_id"` Active bool `json:"active"` } // UserAvatar represents a GitLab user avatar. // // GitLab API docs: https://docs.gitlab.com/api/users/ Loading
users_test.go +44 −0 Original line number Diff line number Diff line Loading @@ -63,6 +63,49 @@ func TestGetUser(t *testing.T) { assert.Equal(t, want, user) } func TestGetUserSCIMIdentities(t *testing.T) { t.Parallel() mux, client := setup(t) // GIVEN a user with multiple SCIM identities (one active, one inactive) mux.HandleFunc("/api/v4/users/5", func(w http.ResponseWriter, r *http.Request) { testMethod(t, r, http.MethodGet) mustWriteHTTPResponse(t, w, "testdata/get_user_with_scim_identities.json") }) // WHEN retrieving the user user, _, err := client.Users.GetUser(5, &GetUserOptions{}) // THEN the SCIM identities are correctly unmarshaled assert.NoError(t, err) assert.NotNil(t, user) assert.Len(t, user.SCIMIdentities, 2) assert.Equal(t, &SCIMIdentity{ExternUID: "scim-uid-abc123", GroupID: 10, Active: true}, user.SCIMIdentities[0]) assert.Equal(t, &SCIMIdentity{ExternUID: "scim-uid-old456", GroupID: 20, Active: false}, user.SCIMIdentities[1]) // AND the regular identities are still correctly unmarshaled assert.Len(t, user.Identities, 1) assert.Equal(t, &UserIdentity{Provider: "saml", ExternUID: "saml-uid-abc123"}, user.Identities[0]) } func TestGetUserNoSCIMIdentities(t *testing.T) { t.Parallel() mux, client := setup(t) // GIVEN a user with no scim_identities field in the response mux.HandleFunc("/api/v4/users/1", func(w http.ResponseWriter, r *http.Request) { testMethod(t, r, http.MethodGet) mustWriteHTTPResponse(t, w, "testdata/get_user.json") }) // WHEN retrieving the user user, _, err := client.Users.GetUser(1, &GetUserOptions{}) // THEN SCIMIdentities is nil (not an empty slice) assert.NoError(t, err) assert.NotNil(t, user) assert.Nil(t, user.SCIMIdentities) } func TestGetUserAdmin(t *testing.T) { t.Parallel() mux, client := setup(t) Loading Loading @@ -115,6 +158,7 @@ func TestGetUserAdmin(t *testing.T) { TwoFactorEnabled: true, Note: "DMCA Request: 2018-11-05 | DMCA Violation | Abuse | https://gitlab.zendesk.com/agent/tickets/123", Identities: []*UserIdentity{{Provider: "github", ExternUID: "2435223452345"}}, SCIMIdentities: []*SCIMIdentity{{ExternUID: "be20d8dcc028677c931e04f387", GroupID: 1, Active: true}}, NamespaceID: 42, } assert.Equal(t, want, user) Loading