1
0
mirror of https://github.com/bitwarden/server.git synced 2025-02-20 02:31:30 +01:00

update tests

This commit is contained in:
Thomas Avery 2024-10-25 11:03:12 -05:00
parent 4d6ae5741f
commit 23d9e3f4e5
No known key found for this signature in database
GPG Key ID: 44A02A0410B0F429
3 changed files with 43 additions and 18 deletions

View File

@ -19,6 +19,7 @@ public class AccountsKeyManagementControllerTests : IClassFixture<ApiApplication
private readonly HttpClient _client; private readonly HttpClient _client;
private readonly IEmergencyAccessRepository _emergencyAccessRepository; private readonly IEmergencyAccessRepository _emergencyAccessRepository;
private readonly IOrganizationUserRepository _organizationUserRepository;
private readonly ApiApplicationFactory _factory; private readonly ApiApplicationFactory _factory;
private readonly LoginHelper _loginHelper; private readonly LoginHelper _loginHelper;
private readonly IUserRepository _userRepository; private readonly IUserRepository _userRepository;
@ -33,6 +34,7 @@ public class AccountsKeyManagementControllerTests : IClassFixture<ApiApplication
_loginHelper = new LoginHelper(_factory, _client); _loginHelper = new LoginHelper(_factory, _client);
_userRepository = _factory.GetService<IUserRepository>(); _userRepository = _factory.GetService<IUserRepository>();
_emergencyAccessRepository = _factory.GetService<IEmergencyAccessRepository>(); _emergencyAccessRepository = _factory.GetService<IEmergencyAccessRepository>();
_organizationUserRepository = _factory.GetService<IOrganizationUserRepository>();
} }
public async Task InitializeAsync() public async Task InitializeAsync()
@ -80,24 +82,30 @@ public class AccountsKeyManagementControllerTests : IClassFixture<ApiApplication
} }
[Theory] [Theory]
[BitAutoData(true, true)] [BitAutoData(OrganizationUserStatusType.Confirmed, EmergencyAccessStatusType.Confirmed)]
[BitAutoData(true, false)] [BitAutoData(OrganizationUserStatusType.Confirmed, EmergencyAccessStatusType.RecoveryApproved)]
[BitAutoData(false, true)] [BitAutoData(OrganizationUserStatusType.Confirmed, EmergencyAccessStatusType.RecoveryInitiated)]
[BitAutoData(OrganizationUserStatusType.Revoked, EmergencyAccessStatusType.Confirmed)]
[BitAutoData(OrganizationUserStatusType.Revoked, EmergencyAccessStatusType.RecoveryApproved)]
[BitAutoData(OrganizationUserStatusType.Revoked, EmergencyAccessStatusType.RecoveryInitiated)]
[BitAutoData(OrganizationUserStatusType.Confirmed, null)]
[BitAutoData(OrganizationUserStatusType.Revoked, null)]
[BitAutoData(OrganizationUserStatusType.Invited, EmergencyAccessStatusType.Confirmed)]
[BitAutoData(OrganizationUserStatusType.Invited, EmergencyAccessStatusType.RecoveryApproved)]
[BitAutoData(OrganizationUserStatusType.Invited, EmergencyAccessStatusType.RecoveryInitiated)]
public async Task RegenerateKeysAsync_UserInOrgOrHasDesignatedEmergencyAccess_ThrowsBadRequest( public async Task RegenerateKeysAsync_UserInOrgOrHasDesignatedEmergencyAccess_ThrowsBadRequest(
bool inOrganization, OrganizationUserStatusType organizationUserStatus,
bool hasDesignatedEmergencyAccess, EmergencyAccessStatusType? emergencyAccessStatus,
KeyRegenerationRequestModel request) KeyRegenerationRequestModel request)
{ {
if (inOrganization) if (organizationUserStatus is OrganizationUserStatusType.Confirmed or OrganizationUserStatusType.Revoked)
{ {
await OrganizationTestHelpers.SignUpAsync(_factory, await CreateOrganizationUserAsync(organizationUserStatus);
PlanType.EnterpriseAnnually, _ownerEmail, passwordManagerSeats: 10,
paymentMethod: PaymentMethodType.Card);
} }
if (hasDesignatedEmergencyAccess) if (emergencyAccessStatus != null)
{ {
await CreateDesignatedEmergencyAccessAsync(); await CreateDesignatedEmergencyAccessAsync(emergencyAccessStatus.Value);
} }
await _loginHelper.LoginAsync(_ownerEmail); await _loginHelper.LoginAsync(_ownerEmail);
@ -124,7 +132,16 @@ public class AccountsKeyManagementControllerTests : IClassFixture<ApiApplication
Assert.Equal(request.UserKeyEncryptedUserPrivateKey, user.PrivateKey); Assert.Equal(request.UserKeyEncryptedUserPrivateKey, user.PrivateKey);
} }
private async Task CreateDesignatedEmergencyAccessAsync() private async Task CreateOrganizationUserAsync(OrganizationUserStatusType organizationUserStatus)
{
var (_, organizationUser) = await OrganizationTestHelpers.SignUpAsync(_factory,
PlanType.EnterpriseAnnually, _ownerEmail, passwordManagerSeats: 10,
paymentMethod: PaymentMethodType.Card);
organizationUser.Status = organizationUserStatus;
await _organizationUserRepository.ReplaceAsync(organizationUser);
}
private async Task CreateDesignatedEmergencyAccessAsync(EmergencyAccessStatusType emergencyAccessStatus)
{ {
var tempEmail = $"integration-test{Guid.NewGuid()}@bitwarden.com"; var tempEmail = $"integration-test{Guid.NewGuid()}@bitwarden.com";
await _factory.LoginWithNewAccount(tempEmail); await _factory.LoginWithNewAccount(tempEmail);
@ -136,7 +153,7 @@ public class AccountsKeyManagementControllerTests : IClassFixture<ApiApplication
GrantorId = tempUser!.Id, GrantorId = tempUser!.Id,
GranteeId = user!.Id, GranteeId = user!.Id,
KeyEncrypted = _mockEncryptedString, KeyEncrypted = _mockEncryptedString,
Status = EmergencyAccessStatusType.Confirmed, Status = emergencyAccessStatus,
Type = EmergencyAccessType.View, Type = EmergencyAccessType.View,
WaitTimeDays = 10, WaitTimeDays = 10,
CreationDate = DateTime.UtcNow, CreationDate = DateTime.UtcNow,

View File

@ -69,11 +69,15 @@ public class AccountsKeyManagementControllerTests
[Theory] [Theory]
[BitAutoData] [BitAutoData]
public async Task RegenerateKeysAsync_Success(SutProvider<AccountsKeyManagementController> sutProvider, public async Task RegenerateKeysAsync_Success(SutProvider<AccountsKeyManagementController> sutProvider,
KeyRegenerationRequestModel data, User user) KeyRegenerationRequestModel data, User user, ICollection<OrganizationUser> orgUsers,
ICollection<EmergencyAccessDetails> accessDetails)
{ {
sutProvider.GetDependency<IFeatureService>().IsEnabled(Arg.Is(FeatureFlagKeys.PrivateKeyRegeneration)) sutProvider.GetDependency<IFeatureService>().IsEnabled(Arg.Is(FeatureFlagKeys.PrivateKeyRegeneration))
.Returns(true); .Returns(true);
sutProvider.GetDependency<IUserService>().GetUserByPrincipalAsync(Arg.Any<ClaimsPrincipal>()).Returns(user); sutProvider.GetDependency<IUserService>().GetUserByPrincipalAsync(Arg.Any<ClaimsPrincipal>()).Returns(user);
sutProvider.GetDependency<IOrganizationUserRepository>().GetManyByUserAsync(Arg.Is(user.Id)).Returns(orgUsers);
sutProvider.GetDependency<IEmergencyAccessRepository>().GetManyDetailsByGranteeIdAsync(Arg.Is(user.Id))
.Returns(accessDetails);
await sutProvider.Sut.RegenerateKeysAsync(data); await sutProvider.Sut.RegenerateKeysAsync(data);
@ -81,9 +85,12 @@ public class AccountsKeyManagementControllerTests
.GetManyByUserAsync(Arg.Is(user.Id)); .GetManyByUserAsync(Arg.Is(user.Id));
await sutProvider.GetDependency<IEmergencyAccessRepository>().Received(1) await sutProvider.GetDependency<IEmergencyAccessRepository>().Received(1)
.GetManyDetailsByGranteeIdAsync(Arg.Is(user.Id)); .GetManyDetailsByGranteeIdAsync(Arg.Is(user.Id));
await sutProvider.GetDependency<IRegenerateUserAsymmetricKeysCommand>().ReceivedWithAnyArgs(1) await sutProvider.GetDependency<IRegenerateUserAsymmetricKeysCommand>().Received(1)
.RegenerateKeysAsync(Arg.Any<UserAsymmetricKeys>(), .RegenerateKeysAsync(
Arg.Any<ICollection<OrganizationUser>>(), Arg.Is<UserAsymmetricKeys>(u =>
Arg.Any<ICollection<EmergencyAccessDetails>>()); u.UserId == user.Id && u.PublicKey == data.UserPublicKey &&
u.UserKeyEncryptedPrivateKey == data.UserKeyEncryptedUserPrivateKey),
Arg.Is(orgUsers),
Arg.Is(accessDetails));
} }
} }

View File

@ -56,6 +56,7 @@ public class RegenerateUserAsymmetricKeysCommandTests
[BitAutoData(false, true, false)] [BitAutoData(false, true, false)]
[BitAutoData(false, true, true)] [BitAutoData(false, true, true)]
[BitAutoData(true, false, false)] [BitAutoData(true, false, false)]
[BitAutoData(true, false, true)]
[BitAutoData(true, true, false)] [BitAutoData(true, true, false)]
[BitAutoData(true, true, true)] [BitAutoData(true, true, true)]
public async Task RegenerateKeysAsync_UserIdMisMatch_NotFoundException( public async Task RegenerateKeysAsync_UserIdMisMatch_NotFoundException(