chore: implement delete organization member (#13589)

Side effects of removing an organization member will orphan their
user resources. These side effects are not addressed here
This commit is contained in:
Steven Masley
2024-06-20 05:06:37 -10:00
committed by GitHub
parent a1ec8ad6e9
commit a1db6d809e
15 changed files with 321 additions and 0 deletions

View File

@ -1,6 +1,7 @@
package coderd_test
import (
"net/http"
"testing"
"github.com/google/uuid"
@ -114,6 +115,63 @@ func TestListMembers(t *testing.T) {
})
}
func TestRemoveMember(t *testing.T) {
t.Parallel()
t.Run("OK", func(t *testing.T) {
t.Parallel()
owner := coderdtest.New(t, nil)
first := coderdtest.CreateFirstUser(t, owner)
orgAdminClient, orgAdmin := coderdtest.CreateAnotherUser(t, owner, first.OrganizationID, rbac.ScopedRoleOrgAdmin(first.OrganizationID))
_, user := coderdtest.CreateAnotherUser(t, owner, first.OrganizationID)
ctx := testutil.Context(t, testutil.WaitMedium)
// Verify the org of 3 members
members, err := orgAdminClient.OrganizationMembers(ctx, first.OrganizationID)
require.NoError(t, err)
require.Len(t, members, 3)
require.ElementsMatch(t,
[]uuid.UUID{first.UserID, user.ID, orgAdmin.ID},
db2sdk.List(members, onlyIDs))
// Delete a member
err = orgAdminClient.DeleteOrganizationMember(ctx, first.OrganizationID, user.Username)
require.NoError(t, err)
members, err = orgAdminClient.OrganizationMembers(ctx, first.OrganizationID)
require.NoError(t, err)
require.Len(t, members, 2)
require.ElementsMatch(t,
[]uuid.UUID{first.UserID, orgAdmin.ID},
db2sdk.List(members, onlyIDs))
})
t.Run("MemberNotInOrg", func(t *testing.T) {
t.Parallel()
owner := coderdtest.New(t, nil)
first := coderdtest.CreateFirstUser(t, owner)
orgAdminClient, _ := coderdtest.CreateAnotherUser(t, owner, first.OrganizationID, rbac.ScopedRoleOrgAdmin(first.OrganizationID))
ctx := testutil.Context(t, testutil.WaitMedium)
// nolint:gocritic // requires owner to make a new org
org, _ := owner.CreateOrganization(ctx, codersdk.CreateOrganizationRequest{
Name: "other",
DisplayName: "",
Description: "",
Icon: "",
})
_, user := coderdtest.CreateAnotherUser(t, owner, org.ID)
// Delete a user that is not in the organization
err := orgAdminClient.DeleteOrganizationMember(ctx, first.OrganizationID, user.Username)
require.Error(t, err)
var apiError *codersdk.Error
require.ErrorAs(t, err, &apiError)
require.Equal(t, http.StatusNotFound, apiError.StatusCode())
})
}
func onlyIDs(u codersdk.OrganizationMemberWithName) uuid.UUID {
return u.UserID
}