mirror of
https://github.com/coder/coder.git
synced 2025-07-06 15:41:45 +00:00
chore: improve error message on adding existing org_member (#13621)
This commit is contained in:
@ -6197,6 +6197,20 @@ func (q *FakeQuerier) InsertOrganizationMember(_ context.Context, arg database.I
|
||||
q.mutex.Lock()
|
||||
defer q.mutex.Unlock()
|
||||
|
||||
if slices.IndexFunc(q.data.organizationMembers, func(member database.OrganizationMember) bool {
|
||||
return member.OrganizationID == arg.OrganizationID && member.UserID == arg.UserID
|
||||
}) >= 0 {
|
||||
// Error pulled from a live db error
|
||||
return database.OrganizationMember{}, &pq.Error{
|
||||
Severity: "ERROR",
|
||||
Code: "23505",
|
||||
Message: "duplicate key value violates unique constraint \"organization_members_pkey\"",
|
||||
Detail: "Key (organization_id, user_id)=(f7de1f4e-5833-4410-a28d-0a105f96003f, 36052a80-4a7f-4998-a7ca-44cefa608d3e) already exists.",
|
||||
Table: "organization_members",
|
||||
Constraint: "organization_members_pkey",
|
||||
}
|
||||
}
|
||||
|
||||
//nolint:gosimple
|
||||
organizationMember := database.OrganizationMember{
|
||||
OrganizationID: arg.OrganizationID,
|
||||
|
@ -43,6 +43,12 @@ func (api *API) postOrganizationMember(rw http.ResponseWriter, r *http.Request)
|
||||
httpapi.ResourceNotFound(rw)
|
||||
return
|
||||
}
|
||||
if database.IsUniqueViolation(err, database.UniqueOrganizationMembersPkey) {
|
||||
httpapi.Write(ctx, rw, http.StatusBadRequest, codersdk.Response{
|
||||
Message: "Organization member already exists in this organization",
|
||||
})
|
||||
return
|
||||
}
|
||||
if err != nil {
|
||||
httpapi.InternalServerError(rw, err)
|
||||
return
|
||||
|
@ -50,6 +50,19 @@ func TestAddMember(t *testing.T) {
|
||||
db2sdk.List(members, onlyIDs))
|
||||
})
|
||||
|
||||
t.Run("AlreadyMember", func(t *testing.T) {
|
||||
t.Parallel()
|
||||
owner := coderdtest.New(t, nil)
|
||||
first := coderdtest.CreateFirstUser(t, owner)
|
||||
_, user := coderdtest.CreateAnotherUser(t, owner, first.OrganizationID)
|
||||
|
||||
ctx := testutil.Context(t, testutil.WaitMedium)
|
||||
// Add user to org, even though they already exist
|
||||
// nolint:gocritic // must be an owner to see the user
|
||||
_, err := owner.PostOrganizationMember(ctx, first.OrganizationID, user.Username)
|
||||
require.ErrorContains(t, err, "already exists")
|
||||
})
|
||||
|
||||
t.Run("UserNotExists", func(t *testing.T) {
|
||||
t.Parallel()
|
||||
owner := coderdtest.New(t, nil)
|
||||
|
Reference in New Issue
Block a user