using Bit.Core.AdminConsole.Entities; using Bit.Core.AdminConsole.OrganizationFeatures.OrganizationUsers; using Bit.Core.AdminConsole.OrganizationFeatures.OrganizationUsers.Interfaces; using Bit.Core.Context; using Bit.Core.Entities; using Bit.Core.Enums; using Bit.Core.Platform.Push; using Bit.Core.Repositories; using Bit.Core.Services; using Bit.Core.Test.AutoFixture.OrganizationUserFixtures; using Bit.Test.Common.AutoFixture; using Bit.Test.Common.AutoFixture.Attributes; using NSubstitute; using Xunit; namespace Bit.Core.Test.AdminConsole.OrganizationFeatures.OrganizationUsers; [SutProviderCustomize] public class RevokeOrganizationUserCommandTests { [Theory, BitAutoData] public async Task RevokeUser_Success( Organization organization, [OrganizationUser(OrganizationUserStatusType.Confirmed, OrganizationUserType.Owner)] OrganizationUser owner, [OrganizationUser] OrganizationUser organizationUser, SutProvider sutProvider) { RestoreRevokeUser_Setup(organization, owner, organizationUser, sutProvider); await sutProvider.Sut.RevokeUserAsync(organizationUser, owner.Id); await sutProvider.GetDependency() .Received(1) .RevokeAsync(organizationUser.Id); await sutProvider.GetDependency() .Received(1) .LogOrganizationUserEventAsync(organizationUser, EventType.OrganizationUser_Revoked); await sutProvider.GetDependency() .Received(1) .PushSyncOrgKeysAsync(organizationUser.UserId!.Value); } [Theory, BitAutoData] public async Task RevokeUser_WithEventSystemUser_Success( Organization organization, [OrganizationUser] OrganizationUser organizationUser, EventSystemUser eventSystemUser, SutProvider sutProvider) { RestoreRevokeUser_Setup(organization, null, organizationUser, sutProvider); await sutProvider.Sut.RevokeUserAsync(organizationUser, eventSystemUser); await sutProvider.GetDependency() .Received(1) .RevokeAsync(organizationUser.Id); await sutProvider.GetDependency() .Received(1) .LogOrganizationUserEventAsync(organizationUser, EventType.OrganizationUser_Revoked, eventSystemUser); await sutProvider.GetDependency() .Received(1) .PushSyncOrgKeysAsync(organizationUser.UserId!.Value); } private void RestoreRevokeUser_Setup( Organization organization, OrganizationUser? requestingOrganizationUser, OrganizationUser targetOrganizationUser, SutProvider sutProvider) { if (requestingOrganizationUser != null) { requestingOrganizationUser.OrganizationId = organization.Id; } targetOrganizationUser.OrganizationId = organization.Id; sutProvider.GetDependency().OrganizationOwner(organization.Id).Returns(requestingOrganizationUser != null && requestingOrganizationUser.Type is OrganizationUserType.Owner); sutProvider.GetDependency() .HasConfirmedOwnersExceptAsync(organization.Id, Arg.Any>()) .Returns(true); } }