1
0
mirror of https://github.com/bitwarden/server synced 2026-02-08 20:50:13 +00:00

test: update integration test to validate only confirmed users are updated as well as proper deletion of emergency access

This commit is contained in:
Ike Kottlowski
2026-01-29 21:39:55 -05:00
parent 3a58115acf
commit b15141547e
2 changed files with 17 additions and 8 deletions

View File

@@ -150,8 +150,8 @@ public class EmergencyAccessRepository : Repository<Core.Auth.Entities.Emergency
using var scope = ServiceScopeFactory.CreateScope();
var dbContext = GetDatabaseContext(scope);
var entitiesToRemove = from ea in dbContext.EmergencyAccesses
where emergencyAccessIds.Contains(ea.Id)
select ea;
where emergencyAccessIds.Contains(ea.Id)
select ea;
var granteeIds = entitiesToRemove
.Where(ea => ea.Status == EmergencyAccessStatusType.Confirmed)

View File

@@ -69,7 +69,7 @@ public class EmergencyAccessRepositoriesTests
SecurityStamp = "stamp",
});
var granteeUser2 = await userRepository.CreateAsync(new User
var invitedGranteeUser2 = await userRepository.CreateAsync(new User
{
Name = "Test Grantee User 2",
Email = $"test+grantee{Guid.NewGuid()}@email.com",
@@ -77,6 +77,9 @@ public class EmergencyAccessRepositoriesTests
SecurityStamp = "stamp",
});
// The inmemory datetime has a precision issue, so we need to refresh the user to get the stored AccountRevisionDate
invitedGranteeUser2 = await userRepository.GetByIdAsync(invitedGranteeUser2.Id);
var granteeUser3 = await userRepository.CreateAsync(new User
{
Name = "Test Grantee User 3",
@@ -95,7 +98,7 @@ public class EmergencyAccessRepositoriesTests
var invitedEmergencyAccess = await emergencyAccessRepository.CreateAsync(new EmergencyAccess
{
GrantorId = grantorUser.Id,
GranteeId = granteeUser2.Id,
GranteeId = invitedGranteeUser2.Id,
Status = EmergencyAccessStatusType.Invited,
});
@@ -106,6 +109,7 @@ public class EmergencyAccessRepositoriesTests
Status = EmergencyAccessStatusType.Accepted,
});
// Act
await emergencyAccessRepository.DeleteManyAsync([confirmedEmergencyAccess.Id, invitedEmergencyAccess.Id, acceptedEmergencyAccess.Id]);
@@ -115,15 +119,20 @@ public class EmergencyAccessRepositoriesTests
Assert.Empty(grantorEmergencyAccess);
// ensure Grantee records deleted
foreach (User grantee in (List<User>)[confirmedGranteeUser1, granteeUser2, granteeUser3])
foreach (var grantee in (List<User>)[confirmedGranteeUser1, invitedGranteeUser2, granteeUser3])
{
var granteeEmergencyAccess = await emergencyAccessRepository.GetManyDetailsByGranteeIdAsync(grantee.Id);
Assert.Empty(granteeEmergencyAccess);
}
// Only the Status.Confirmed grantee's AccountRevisionDate should be updated
var updatedGrantee = await userRepository.GetByIdAsync(confirmedGranteeUser1.Id);
Assert.NotNull(updatedGrantee);
Assert.NotEqual(updatedGrantee.AccountRevisionDate, confirmedGranteeUser1.AccountRevisionDate);
var updatedConfirmedGrantee = await userRepository.GetByIdAsync(confirmedGranteeUser1.Id);
Assert.NotNull(updatedConfirmedGrantee);
Assert.NotEqual(updatedConfirmedGrantee.AccountRevisionDate, confirmedGranteeUser1.AccountRevisionDate);
// Invited user should not have an updated AccountRevisionDate
var updatedInvitedGrantee = await userRepository.GetByIdAsync(invitedGranteeUser2.Id);
Assert.NotNull(updatedInvitedGrantee);
Assert.Equal(updatedInvitedGrantee.AccountRevisionDate, invitedGranteeUser2.AccountRevisionDate);
}
}