From c47f85c62a9c4047f2df70d43b03083c943c6ca8 Mon Sep 17 00:00:00 2001 From: Jimmy Vo Date: Mon, 10 Feb 2025 17:44:24 -0500 Subject: [PATCH] [PM-15621] Add test coverage for edge cases. --- ...agedOrganizationUserAccountCommandTests.cs | 94 +++++++++++++++++++ 1 file changed, 94 insertions(+) diff --git a/test/Core.Test/AdminConsole/OrganizationFeatures/OrganizationUsers/DeleteManagedOrganizationUserAccountCommandTests.cs b/test/Core.Test/AdminConsole/OrganizationFeatures/OrganizationUsers/DeleteManagedOrganizationUserAccountCommandTests.cs index d4eadd5062..032911628b 100644 --- a/test/Core.Test/AdminConsole/OrganizationFeatures/OrganizationUsers/DeleteManagedOrganizationUserAccountCommandTests.cs +++ b/test/Core.Test/AdminConsole/OrganizationFeatures/OrganizationUsers/DeleteManagedOrganizationUserAccountCommandTests.cs @@ -1,5 +1,6 @@ using Bit.Core.AdminConsole.OrganizationFeatures.OrganizationUsers; using Bit.Core.AdminConsole.OrganizationFeatures.OrganizationUsers.Interfaces; +using Bit.Core.AdminConsole.Repositories; using Bit.Core.Context; using Bit.Core.Entities; using Bit.Core.Enums; @@ -226,6 +227,99 @@ public class DeleteManagedOrganizationUserAccountCommandTests .LogOrganizationUserEventsAsync(Arg.Any>()); } + + [Theory] + [BitAutoData] + public async Task DeleteManyUsersAsync_WhenUserIsASoleOwner_ReturnsErrorMessage( + SutProvider sutProvider, User user, + [OrganizationUser(OrganizationUserStatusType.Confirmed, OrganizationUserType.User)] OrganizationUser orgUser) + { + // Arrange + orgUser.UserId = user.Id; + + sutProvider.GetDependency() + .GetManyAsync(Arg.Any>()) + .Returns(new List { orgUser }); + + sutProvider.GetDependency() + .GetManyAsync(Arg.Is>(ids => ids.Contains(orgUser.UserId.Value))) + .Returns(new[] { user }); + + sutProvider.GetDependency() + .GetUsersOrganizationManagementStatusAsync(Arg.Any(), Arg.Any>()) + .Returns(new Dictionary { { orgUser.Id, true } }); + + const int onlyOwnerCount = 1; + + sutProvider.GetDependency() + .GetCountByOnlyOwnerAsync(Arg.Is(id => id == user.Id)) + .Returns(onlyOwnerCount); + + // Act + var result = await sutProvider.Sut.DeleteManyUsersAsync(orgUser.OrganizationId, new[] { orgUser.Id }, null); + + // Assert + Assert.Single(result); + + var userId = result.First().Item1; + var errorMessage = result.First().Item2; + + Assert.Equal(orgUser.Id, userId); + Assert.Contains("Cannot delete this user because it is the sole owner of at least one organization. Please delete these organizations or upgrade another user.", errorMessage); + await sutProvider.GetDependency().Received(0).DeleteAsync(Arg.Any()); + await sutProvider.GetDependency().Received(0) + .LogOrganizationUserEventsAsync(Arg.Any>()); + } + + [Theory] + [BitAutoData] + public async Task DeleteManyUsersAsync_WhenUserIsASoleProvider_ReturnsErrorMessage( + SutProvider sutProvider, User user, + [OrganizationUser(OrganizationUserStatusType.Confirmed, OrganizationUserType.User)] OrganizationUser orgUser) + { + // Arrange + orgUser.UserId = user.Id; + + sutProvider.GetDependency() + .GetManyAsync(Arg.Any>()) + .Returns(new List { orgUser }); + + sutProvider.GetDependency() + .GetManyAsync(Arg.Is>(ids => ids.Contains(orgUser.UserId.Value))) + .Returns(new[] { user }); + + sutProvider.GetDependency() + .GetUsersOrganizationManagementStatusAsync(Arg.Any(), Arg.Any>()) + .Returns(new Dictionary { { orgUser.Id, true } }); + + const int onlyOwnerCount = 0; + + sutProvider.GetDependency() + .GetCountByOnlyOwnerAsync(Arg.Is(id => id == user.Id)) + .Returns(onlyOwnerCount); + + const int onlyOwnerProviderCount = 1; + + sutProvider.GetDependency() + .GetCountByOnlyOwnerAsync(Arg.Is(id => id == user.Id)) + .Returns(onlyOwnerProviderCount); + + // Act + var result = await sutProvider.Sut.DeleteManyUsersAsync(orgUser.OrganizationId, new[] { orgUser.Id }, null); + + // Assert + Assert.Single(result); + + var userId = result.First().Item1; + var errorMessage = result.First().Item2; + + Assert.Equal(orgUser.Id, userId); + Assert.Contains("Cannot delete this user because it is the sole owner of at least one provider. Please delete these providers or upgrade another user.", errorMessage); + await sutProvider.GetDependency().Received(0).DeleteAsync(Arg.Any()); + await sutProvider.GetDependency().Received(0) + .LogOrganizationUserEventsAsync(Arg.Any>()); + } + [Theory] [BitAutoData] public async Task DeleteManyUsersAsync_MixedValidAndInvalidUsers_ReturnsAppropriateResults(