diff --git a/e2e/console/user_test.go b/e2e/console/user_test.go index 5fa150eae..88a1d1a54 100644 --- a/e2e/console/user_test.go +++ b/e2e/console/user_test.go @@ -196,6 +196,94 @@ func TestUser_RemoveUser(t *testing.T) { assert.Equal(t, userID, mutationResult.RemoveUser.DeletedProfileID) } +func TestUser_RemoveOwner(t *testing.T) { + t.Parallel() + owner := testutil.NewClient(t, testutil.RoleOwner) + + // Create another owner to remove + _ = testutil.NewClientInOrg(t, testutil.RoleOwner, owner) + + // Get the profiles + query := ` + query($id: ID!) { + node(id: $id) { + ... on Organization { + profiles(first: 50) { + edges { + node { + id + identity { + id + } + membership { + role + } + } + } + } + } + } + } + ` + + var result struct { + Node struct { + Profiles struct { + Edges []struct { + Node struct { + ID string `json:"id"` + Identity struct { + ID string `json:"id"` + } `json:"identity"` + Membership struct { + Role string `json:"role"` + } `json:"membership"` + } `json:"node"` + } `json:"edges"` + } `json:"profiles"` + } `json:"node"` + } + + err := owner.ExecuteConnect(query, map[string]any{ + "id": owner.GetOrganizationID().String(), + }, &result) + require.NoError(t, err) + + // Find the other owner (not the calling owner) + var targetProfileID string + for _, edge := range result.Node.Profiles.Edges { + if edge.Node.Membership.Role == "OWNER" && edge.Node.Identity.ID != owner.GetUserID().String() { + targetProfileID = edge.Node.ID + break + } + } + require.NotEmpty(t, targetProfileID, "Should find another owner to remove") + + mutation := ` + mutation($input: RemoveUserInput!) { + removeUser(input: $input) { + deletedProfileId + } + } + ` + + var mutationResult struct { + RemoveUser struct { + DeletedProfileID string `json:"deletedProfileId"` + } `json:"removeUser"` + } + + err = owner.ExecuteConnect(mutation, map[string]any{ + "input": map[string]any{ + "organizationId": owner.GetOrganizationID().String(), + "profileId": targetProfileID, + }, + }, &mutationResult) + require.NoError(t, err) + + assert.Equal(t, targetProfileID, mutationResult.RemoveUser.DeletedProfileID) +} + func TestUser_List(t *testing.T) { t.Parallel() owner := testutil.NewClient(t, testutil.RoleOwner) diff --git a/pkg/coredata/membership_profile.go b/pkg/coredata/membership_profile.go index 3f35e74cf..2f1d80f7a 100644 --- a/pkg/coredata/membership_profile.go +++ b/pkg/coredata/membership_profile.go @@ -1121,7 +1121,7 @@ FROM iam_membership_profiles p INNER JOIN iam_memberships m ON m.identity_id = p.identity_id AND m.organization_id = p.organization_id WHERE - %s + p.%s AND p.organization_id = @organization_id AND p.state = @state AND m.role = @role