From 3572cc422b5beac01cfc8256f469f622f9fa5087 Mon Sep 17 00:00:00 2001 From: jrmccannon Date: Wed, 26 Nov 2025 09:06:01 -0600 Subject: [PATCH] Fixed tests in validator and added new ones for provider addition --- ...yConfirmOrganizationUsersValidatorTests.cs | 142 +++++++++++++++++- 1 file changed, 139 insertions(+), 3 deletions(-) diff --git a/test/Core.Test/AdminConsole/OrganizationFeatures/OrganizationUsers/AutoConfirmUsers/AutomaticallyConfirmOrganizationUsersValidatorTests.cs b/test/Core.Test/AdminConsole/OrganizationFeatures/OrganizationUsers/AutoConfirmUsers/AutomaticallyConfirmOrganizationUsersValidatorTests.cs index eb377a8d08..80befea213 100644 --- a/test/Core.Test/AdminConsole/OrganizationFeatures/OrganizationUsers/AutoConfirmUsers/AutomaticallyConfirmOrganizationUsersValidatorTests.cs +++ b/test/Core.Test/AdminConsole/OrganizationFeatures/OrganizationUsers/AutoConfirmUsers/AutomaticallyConfirmOrganizationUsersValidatorTests.cs @@ -5,6 +5,7 @@ using Bit.Core.AdminConsole.Models.Data.Organizations.Policies; using Bit.Core.AdminConsole.OrganizationFeatures.OrganizationUsers.AutoConfirmUser; using Bit.Core.AdminConsole.OrganizationFeatures.OrganizationUsers.DeleteClaimedAccount; using Bit.Core.AdminConsole.OrganizationFeatures.Policies; +using Bit.Core.AdminConsole.OrganizationFeatures.Policies.Enforcement.AutoConfirm; using Bit.Core.AdminConsole.OrganizationFeatures.Policies.PolicyRequirements; using Bit.Core.AdminConsole.Repositories; using Bit.Core.Auth.UserFeatures.TwoFactorAuth.Interfaces; @@ -12,6 +13,7 @@ using Bit.Core.Billing.Enums; using Bit.Core.Entities; using Bit.Core.Enums; using Bit.Core.Repositories; +using Bit.Core.Services; using Bit.Core.Test.AdminConsole.AutoFixture; using Bit.Core.Test.AutoFixture.OrganizationFixtures; using Bit.Core.Test.AutoFixture.OrganizationUserFixtures; @@ -19,6 +21,7 @@ using Bit.Test.Common.AutoFixture; using Bit.Test.Common.AutoFixture.Attributes; using NSubstitute; using Xunit; +using static Bit.Core.AdminConsole.Utilities.v2.Validation.ValidationResultHelpers; namespace Bit.Core.Test.AdminConsole.OrganizationFeatures.OrganizationUsers.AutoConfirmUsers; @@ -411,11 +414,13 @@ public class AutomaticallyConfirmOrganizationUsersValidatorTests [OrganizationUser(OrganizationUserStatusType.Accepted)] OrganizationUser organizationUser, OrganizationUser otherOrgUser, Guid userId, - [Policy(PolicyType.AutomaticUserConfirmation)] Policy autoConfirmPolicy) + [Policy(PolicyType.AutomaticUserConfirmation)] Policy autoConfirmPolicy, + User user) { // Arrange organizationUser.UserId = userId; organizationUser.OrganizationId = organization.Id; + user.Id = userId; var request = new AutomaticallyConfirmOrganizationUserValidationRequest { @@ -446,10 +451,21 @@ public class AutomaticallyConfirmOrganizationUsersValidatorTests .GetManyByUserAsync(userId) .Returns([organizationUser, otherOrgUser]); + sutProvider.GetDependency() + .GetUserByIdAsync(userId) + .Returns(user); + sutProvider.GetDependency() .GetAsync(userId) .Returns(new SingleOrganizationPolicyRequirement([singleOrgPolicyDetails])); + sutProvider.GetDependency() + .IsCompliantAsync(Arg.Any()) + .Returns(Task.FromResult( + Invalid( + null!, + new OrganizationEnforcesSingleOrgPolicy()))); + // Act var result = await sutProvider.Sut.ValidateAsync(request); @@ -466,11 +482,13 @@ public class AutomaticallyConfirmOrganizationUsersValidatorTests [OrganizationUser(OrganizationUserStatusType.Accepted)] OrganizationUser organizationUser, OrganizationUser otherOrgUser, Guid userId, - [Policy(PolicyType.AutomaticUserConfirmation)] Policy autoConfirmPolicy) + [Policy(PolicyType.AutomaticUserConfirmation)] Policy autoConfirmPolicy, + User user) { // Arrange organizationUser.UserId = userId; organizationUser.OrganizationId = organization.Id; + user.Id = userId; var request = new AutomaticallyConfirmOrganizationUserValidationRequest { @@ -502,10 +520,21 @@ public class AutomaticallyConfirmOrganizationUsersValidatorTests .GetManyByUserAsync(userId) .Returns([organizationUser, otherOrgUser]); + sutProvider.GetDependency() + .GetUserByIdAsync(userId) + .Returns(user); + sutProvider.GetDependency() .GetAsync(userId) .Returns(new SingleOrganizationPolicyRequirement([singleOrgPolicyDetails])); + sutProvider.GetDependency() + .IsCompliantAsync(Arg.Any()) + .Returns(Task.FromResult( + Invalid( + null!, + new OtherOrganizationEnforcesSingleOrgPolicy()))); + // Act var result = await sutProvider.Sut.ValidateAsync(request); @@ -565,13 +594,15 @@ public class AutomaticallyConfirmOrganizationUsersValidatorTests [OrganizationUser(OrganizationUserStatusType.Accepted)] OrganizationUser organizationUser, OrganizationUser otherOrgUser, Guid userId, - Policy autoConfirmPolicy) + Policy autoConfirmPolicy, + User user) { // Arrange organizationUser.UserId = userId; organizationUser.OrganizationId = organization.Id; autoConfirmPolicy.Type = PolicyType.AutomaticUserConfirmation; autoConfirmPolicy.Enabled = true; + user.Id = userId; var request = new AutomaticallyConfirmOrganizationUserValidationRequest { @@ -596,10 +627,19 @@ public class AutomaticallyConfirmOrganizationUsersValidatorTests .GetManyByUserAsync(userId) .Returns([organizationUser, otherOrgUser]); + sutProvider.GetDependency() + .GetUserByIdAsync(userId) + .Returns(user); + sutProvider.GetDependency() .GetAsync(userId) .Returns(new SingleOrganizationPolicyRequirement([])); + sutProvider.GetDependency() + .IsCompliantAsync(Arg.Any()) + .Returns(Task.FromResult( + Valid(null!))); + // Act var result = await sutProvider.Sut.ValidateAsync(request); @@ -693,4 +733,100 @@ public class AutomaticallyConfirmOrganizationUsersValidatorTests Assert.True(result.IsError); Assert.IsType(result.AsError); } + + [Theory] + [BitAutoData] + public async Task ValidateAsync_WithProviderUser_ReturnsProviderUsersCannotJoinError( + SutProvider sutProvider, + [Organization(useAutomaticUserConfirmation: true)] Organization organization, + [OrganizationUser(OrganizationUserStatusType.Accepted)] OrganizationUser organizationUser, + Guid userId, + [Policy(PolicyType.AutomaticUserConfirmation)] Policy autoConfirmPolicy, + Core.AdminConsole.Entities.Provider.ProviderUser providerUser) + { + // Arrange + organizationUser.UserId = userId; + organizationUser.OrganizationId = organization.Id; + + var request = new AutomaticallyConfirmOrganizationUserValidationRequest + { + PerformedBy = Substitute.For(), + DefaultUserCollectionName = "test-collection", + OrganizationUser = organizationUser, + OrganizationUserId = organizationUser.Id, + Organization = organization, + OrganizationId = organization.Id, + Key = "test-key" + }; + + sutProvider.GetDependency() + .GetByOrganizationIdTypeAsync(organization.Id, PolicyType.AutomaticUserConfirmation) + .Returns(autoConfirmPolicy); + + sutProvider.GetDependency() + .TwoFactorIsEnabledAsync(Arg.Any>()) + .Returns([(userId, true)]); + + sutProvider.GetDependency() + .GetManyByUserAsync(userId) + .Returns([organizationUser]); + + sutProvider.GetDependency() + .GetManyByUserAsync(userId) + .Returns([providerUser]); + + // Act + var result = await sutProvider.Sut.ValidateAsync(request); + + // Assert + Assert.True(result.IsError); + Assert.IsType(result.AsError); + } + + [Theory] + [BitAutoData] + public async Task ValidateAsync_WithNonProviderUser_ReturnsValidResult( + SutProvider sutProvider, + [Organization(useAutomaticUserConfirmation: true)] Organization organization, + [OrganizationUser(OrganizationUserStatusType.Accepted)] OrganizationUser organizationUser, + Guid userId, + [Policy(PolicyType.AutomaticUserConfirmation)] Policy autoConfirmPolicy) + { + // Arrange + organizationUser.UserId = userId; + organizationUser.OrganizationId = organization.Id; + + var request = new AutomaticallyConfirmOrganizationUserValidationRequest + { + PerformedBy = Substitute.For(), + DefaultUserCollectionName = "test-collection", + OrganizationUser = organizationUser, + OrganizationUserId = organizationUser.Id, + Organization = organization, + OrganizationId = organization.Id, + Key = "test-key" + }; + + sutProvider.GetDependency() + .GetByOrganizationIdTypeAsync(organization.Id, PolicyType.AutomaticUserConfirmation) + .Returns(autoConfirmPolicy); + + sutProvider.GetDependency() + .TwoFactorIsEnabledAsync(Arg.Any>()) + .Returns([(userId, true)]); + + sutProvider.GetDependency() + .GetManyByUserAsync(userId) + .Returns([organizationUser]); + + sutProvider.GetDependency() + .GetManyByUserAsync(userId) + .Returns([]); + + // Act + var result = await sutProvider.Sut.ValidateAsync(request); + + // Assert + Assert.True(result.IsValid); + } }