From 5b2e5b30b2b5a14d9419075478b63a566f9d83bc Mon Sep 17 00:00:00 2001 From: Jimmy Vo Date: Mon, 10 Feb 2025 15:02:13 -0500 Subject: [PATCH] [PM-15621] Fix test setups --- ...teManagedOrganizationUserAccountCommand.cs | 25 +---- ...agedOrganizationUserAccountCommandTests.cs | 97 +++++++++---------- 2 files changed, 51 insertions(+), 71 deletions(-) diff --git a/src/Core/AdminConsole/OrganizationFeatures/OrganizationUsers/DeleteManagedOrganizationUserAccountCommand.cs b/src/Core/AdminConsole/OrganizationFeatures/OrganizationUsers/DeleteManagedOrganizationUserAccountCommand.cs index 94afd2fecf..7d96ec531c 100644 --- a/src/Core/AdminConsole/OrganizationFeatures/OrganizationUsers/DeleteManagedOrganizationUserAccountCommand.cs +++ b/src/Core/AdminConsole/OrganizationFeatures/OrganizationUsers/DeleteManagedOrganizationUserAccountCommand.cs @@ -63,8 +63,6 @@ public class DeleteManagedOrganizationUserAccountCommand : IDeleteManagedOrganiz var orgUsers = await _organizationUserRepository.GetManyAsync(orgUserIds); var users = await GetUsersAsync(orgUsers); var managementStatus = await _getOrganizationUsersManagementStatusQuery.GetUsersOrganizationManagementStatusAsync(organizationId, orgUserIds); - var hasOtherConfirmedOwners = await _hasConfirmedOwnersExceptQuery.HasConfirmedOwnersExceptAsync(organizationId, orgUserIds, includeProvider: true); - var userDeletionResults = new List<(Guid OrganizationUserId, OrganizationUser? orgUser, User? user, string? ErrorMessage)>(); foreach (var orgUserId in orgUserIds) @@ -87,7 +85,7 @@ public class DeleteManagedOrganizationUserAccountCommand : IDeleteManagedOrganiz throw new NotFoundException("Member not found."); } - await ValidateDeleteUserAsync(organizationId, orgUser, user, deletingUserId, managementStatus, hasOtherConfirmedOwners); + await ValidateAsync(organizationId, orgUser, user, deletingUserId, managementStatus); await CancelPremiumAsync(user); @@ -115,17 +113,14 @@ public class DeleteManagedOrganizationUserAccountCommand : IDeleteManagedOrganiz .Select(orgUser => orgUser.UserId!.Value) .ToList(); - var users = await _userRepository.GetManyAsync(userIds); - - return users; + return await _userRepository.GetManyAsync(userIds); } - private async Task ValidateAsync(Guid organizationId, OrganizationUser orgUser, User user, Guid? deletingUserId, IDictionary managementStatus, bool hasOtherConfirmedOwners) + private async Task ValidateAsync(Guid organizationId, OrganizationUser orgUser, User user, Guid? deletingUserId, IDictionary managementStatus) { EnsureUserStatusIsNotInvited(orgUser); PreventSelfDeletion(orgUser, deletingUserId); EnsureUserIsManagedByOrganization(orgUser, managementStatus); - PreventOrganizationSoleOwnerDeletion(orgUser, hasOtherConfirmedOwners); await EnsureOnlyOwnersCanDeleteOwnersAsync(organizationId, orgUser, deletingUserId); await EnsureUserIsNotSoleOrganizationOwnerAsync(user); @@ -163,19 +158,6 @@ public class DeleteManagedOrganizationUserAccountCommand : IDeleteManagedOrganiz } } - private static void PreventOrganizationSoleOwnerDeletion(OrganizationUser orgUser, bool hasOtherConfirmedOwners) - { - if (orgUser.Type != OrganizationUserType.Owner) - { - return; - } - - if (!hasOtherConfirmedOwners) - { - throw new BadRequestException("Organization must have at least one confirmed owner."); - } - } - private static void EnsureUserIsManagedByOrganization(OrganizationUser orgUser, IDictionary managementStatus) { if (!managementStatus.TryGetValue(orgUser.Id, out var isManaged) || !isManaged) @@ -234,7 +216,6 @@ public class DeleteManagedOrganizationUserAccountCommand : IDeleteManagedOrganiz private async Task DeleteManyAsync(IEnumerable users) { - await _userRepository.DeleteManyAsync(users); foreach (var user in users) { diff --git a/test/Core.Test/AdminConsole/OrganizationFeatures/OrganizationUsers/DeleteManagedOrganizationUserAccountCommandTests.cs b/test/Core.Test/AdminConsole/OrganizationFeatures/OrganizationUsers/DeleteManagedOrganizationUserAccountCommandTests.cs index b82353f619..d4eadd5062 100644 --- a/test/Core.Test/AdminConsole/OrganizationFeatures/OrganizationUsers/DeleteManagedOrganizationUserAccountCommandTests.cs +++ b/test/Core.Test/AdminConsole/OrganizationFeatures/OrganizationUsers/DeleteManagedOrganizationUserAccountCommandTests.cs @@ -68,8 +68,12 @@ public class DeleteManagedOrganizationUserAccountCommandTests // Assert Assert.Single(result); - Assert.Equal(orgUserId, result.First().Item1); - Assert.Contains("Member not found.", result.First().Item2); + + var userId = result.First().Item1; + var errorMessage = result.First().Item2; + + Assert.Equal(orgUserId, userId); + Assert.Contains("Member not found.", errorMessage); await sutProvider.GetDependency() .DidNotReceiveWithAnyArgs() .DeleteManyAsync(default); @@ -99,8 +103,12 @@ public class DeleteManagedOrganizationUserAccountCommandTests // Assert Assert.Single(result); - Assert.Equal(orgUser.Id, result.First().Item1); - Assert.Contains("You cannot delete yourself.", result.First().Item2); + + var userId = result.First().Item1; + var errorMessage = result.First().Item2; + + Assert.Equal(orgUser.Id, userId); + Assert.Contains("You cannot delete yourself.", errorMessage); await sutProvider.GetDependency().Received(0).DeleteAsync(Arg.Any()); await sutProvider.GetDependency().Received(0) .LogOrganizationUserEventsAsync(Arg.Any>()); @@ -110,22 +118,29 @@ public class DeleteManagedOrganizationUserAccountCommandTests [BitAutoData] public async Task DeleteManyUsersAsync_WhenUserIsInvited_ReturnsErrorMessage( SutProvider sutProvider, + User user, [OrganizationUser(OrganizationUserStatusType.Invited, OrganizationUserType.User)] OrganizationUser orgUser) { // Arrange - orgUser.UserId = null; + orgUser.UserId = user.Id; sutProvider.GetDependency() .GetManyAsync(Arg.Any>()) .Returns(new List { orgUser }); + sutProvider.GetDependency() + .GetManyAsync(Arg.Is>(input => input.Contains(user.Id))) + .Returns(new[] { user }); + // Act var result = await sutProvider.Sut.DeleteManyUsersAsync(orgUser.OrganizationId, new[] { orgUser.Id }, null); // Assert Assert.Single(result); - Assert.Equal(orgUser.Id, result.First().Item1); - Assert.Contains("You cannot delete a member with Invited status.", result.First().Item2); + var userId = result.First().Item1; + var errorMessage = result.First().Item2; + Assert.Equal(orgUser.Id, userId); + Assert.Contains("You cannot delete a member with Invited status.", errorMessage); await sutProvider.GetDependency().Received(0).DeleteAsync(Arg.Any()); await sutProvider.GetDependency().Received(0) .LogOrganizationUserEventsAsync(Arg.Any>()); @@ -153,49 +168,22 @@ public class DeleteManagedOrganizationUserAccountCommandTests .OrganizationOwner(orgUser.OrganizationId) .Returns(false); - var result = await sutProvider.Sut.DeleteManyUsersAsync(orgUser.OrganizationId, new[] { orgUser.Id }, deletingUserId); + sutProvider.GetDependency() + .GetUsersOrganizationManagementStatusAsync(Arg.Any(), Arg.Any>()) + .Returns(new Dictionary { { orgUser.Id, true } }); - Assert.Single(result); - Assert.Equal(orgUser.Id, result.First().Item1); - Assert.Contains("Only owners can delete other owners.", result.First().Item2); - await sutProvider.GetDependency().Received(0).DeleteAsync(Arg.Any()); - await sutProvider.GetDependency().Received(0) - .LogOrganizationUserEventsAsync(Arg.Any>()); - } - - [Theory] - [BitAutoData] - public async Task DeleteManyUsersAsync_WhenDeletingLastOwner_ReturnsErrorMessage( - SutProvider sutProvider, User user, - [OrganizationUser(OrganizationUserStatusType.Confirmed, OrganizationUserType.Owner)] OrganizationUser orgUser, - Guid deletingUserId) - { - // Arrange - orgUser.UserId = user.Id; - - sutProvider.GetDependency() - .GetManyAsync(Arg.Any>()) - .Returns(new List { orgUser }); - - sutProvider.GetDependency() - .GetManyAsync(Arg.Is>(i => i.Contains(user.Id))) - .Returns(new[] { user }); - - sutProvider.GetDependency() - .OrganizationOwner(orgUser.OrganizationId) - .Returns(true); - - sutProvider.GetDependency() - .HasConfirmedOwnersExceptAsync(orgUser.OrganizationId, Arg.Any>(), Arg.Any()) - .Returns(false); // Act var result = await sutProvider.Sut.DeleteManyUsersAsync(orgUser.OrganizationId, new[] { orgUser.Id }, deletingUserId); // Assert Assert.Single(result); - Assert.Equal(orgUser.Id, result.First().Item1); - Assert.Contains("Organization must have at least one confirmed owner.", result.First().Item2); + + var userId = result.First().Item1; + var errorMessage = result.First().Item2; + Assert.Equal(orgUser.Id, userId); + Assert.Contains("Only owners can delete other owners.", errorMessage); + await sutProvider.GetDependency().Received(0).DeleteAsync(Arg.Any()); await sutProvider.GetDependency().Received(0) .LogOrganizationUserEventsAsync(Arg.Any>()); @@ -227,8 +215,12 @@ public class DeleteManagedOrganizationUserAccountCommandTests // Assert Assert.Single(result); - Assert.Equal(orgUser.Id, result.First().Item1); - Assert.Contains("Member is not managed by the organization.", result.First().Item2); + + var userId = result.First().Item1; + var errorMessage = result.First().Item2; + + Assert.Equal(orgUser.Id, userId); + Assert.Contains("Member is not managed by the organization.", errorMessage); await sutProvider.GetDependency().Received(0).DeleteAsync(Arg.Any()); await sutProvider.GetDependency().Received(0) .LogOrganizationUserEventsAsync(Arg.Any>()); @@ -247,7 +239,9 @@ public class DeleteManagedOrganizationUserAccountCommandTests orgUser1.UserId = user1.Id; orgUser2.UserId = null; orgUser3.UserId = user3.Id; - orgUser1.OrganizationId = orgUser2.OrganizationId = orgUser3.OrganizationId = organizationId; + orgUser1.OrganizationId = organizationId; + orgUser2.OrganizationId = organizationId; + orgUser3.OrganizationId = organizationId; sutProvider.GetDependency() .GetManyAsync(Arg.Any>()) @@ -266,9 +260,14 @@ public class DeleteManagedOrganizationUserAccountCommandTests // Assert Assert.Equal(3, results.Count()); - Assert.Empty(results.First(r => r.Item1 == orgUser1.Id).Item2); - Assert.Equal("You cannot delete a member with Invited status.", results.First(r => r.Item1 == orgUser2.Id).Item2); - Assert.Equal("Member is not managed by the organization.", results.First(r => r.Item1 == orgUser3.Id).Item2); + + var orgUser1ErrorMessage = results.First(r => r.Item1 == orgUser1.Id).Item2; + var orgUser2ErrorMessage = results.First(r => r.Item1 == orgUser2.Id).Item2; + var orgUser3ErrorMessage = results.First(r => r.Item1 == orgUser3.Id).Item2; + + Assert.Empty(orgUser1ErrorMessage); + Assert.Equal("Member not found.", orgUser2ErrorMessage); + Assert.Equal("Member is not managed by the organization.", orgUser3ErrorMessage); await sutProvider.GetDependency().Received(1).LogOrganizationUserEventsAsync( Arg.Is>(events =>