diff --git a/src/Infrastructure.Dapper/Auth/Repositories/EmergencyAccessRepository.cs b/src/Infrastructure.Dapper/Auth/Repositories/EmergencyAccessRepository.cs index 890cfc4e50..f7dd17784e 100644 --- a/src/Infrastructure.Dapper/Auth/Repositories/EmergencyAccessRepository.cs +++ b/src/Infrastructure.Dapper/Auth/Repositories/EmergencyAccessRepository.cs @@ -156,8 +156,8 @@ public class EmergencyAccessRepository : Repository, IEme { using var connection = new SqlConnection(ConnectionString); await connection.ExecuteAsync( - "[dbo].[EmergencyAccess_DeleteMany]", - new { EmergencyAccessIds = emergencyAccessIds }, + "[dbo].[EmergencyAccess_DeleteManyById]", + new { EmergencyAccessIds = emergencyAccessIds.ToGuidIdArrayTVP() }, commandType: CommandType.StoredProcedure); } } diff --git a/test/Infrastructure.IntegrationTest/Auth/Repositories/EmergencyAccessRepositoryTests.cs b/test/Infrastructure.IntegrationTest/Auth/Repositories/EmergencyAccessRepositoryTests.cs index 0f6d12537f..a91a983aa9 100644 --- a/test/Infrastructure.IntegrationTest/Auth/Repositories/EmergencyAccessRepositoryTests.cs +++ b/test/Infrastructure.IntegrationTest/Auth/Repositories/EmergencyAccessRepositoryTests.cs @@ -42,4 +42,75 @@ public class EmergencyAccessRepositoriesTests Assert.NotNull(updatedGrantee); Assert.NotEqual(updatedGrantee.AccountRevisionDate, granteeUser.AccountRevisionDate); } + + /// + /// Creates 3 Emergency Access records all connected to a single grantor, but separate grantees. + /// All 3 records are then deleted in a single call to DeleteManyAsync. + /// + [DatabaseTheory, DatabaseData] + public async Task DeleteManyAsync_DeletesMultipleGranteeRecords( + IUserRepository userRepository, + IEmergencyAccessRepository emergencyAccessRepository) + { + // Arrange + var grantorUser = await userRepository.CreateAsync(new User + { + Name = "Test Grantor User", + Email = $"test+grantor{Guid.NewGuid()}@email.com", + ApiKey = "TEST", + SecurityStamp = "stamp", + }); + + var granteeUser1 = await userRepository.CreateAsync(new User + { + Name = "Test Grantee User 1", + Email = $"test+grantee{Guid.NewGuid()}@email.com", + ApiKey = "TEST", + SecurityStamp = "stamp", + }); + + var granteeUser2 = await userRepository.CreateAsync(new User + { + Name = "Test Grantee User 2", + Email = $"test+grantee{Guid.NewGuid()}@email.com", + ApiKey = "TEST", + SecurityStamp = "stamp", + }); + + var granteeUser3 = await userRepository.CreateAsync(new User + { + Name = "Test Grantee User 3", + Email = $"test+grantee{Guid.NewGuid()}@email.com", + ApiKey = "TEST", + SecurityStamp = "stamp", + }); + + var confirmedEmergencyAccess = await emergencyAccessRepository.CreateAsync(new EmergencyAccess + { + GrantorId = grantorUser.Id, + GranteeId = granteeUser1.Id, + Status = EmergencyAccessStatusType.Confirmed, + }); + + var invitedEmergencyAccess = await emergencyAccessRepository.CreateAsync(new EmergencyAccess + { + GrantorId = grantorUser.Id, + GranteeId = granteeUser2.Id, + Status = EmergencyAccessStatusType.Invited, + }); + + var acceptedEmergencyAccess = await emergencyAccessRepository.CreateAsync(new EmergencyAccess + { + GrantorId = grantorUser.Id, + GranteeId = granteeUser3.Id, + Status = EmergencyAccessStatusType.Accepted, + }); + + // Act + await emergencyAccessRepository.DeleteManyAsync([confirmedEmergencyAccess.Id, invitedEmergencyAccess.Id, acceptedEmergencyAccess.Id]); + + // Assert + var emergencyAccess = await emergencyAccessRepository.GetManyDetailsByGrantorIdAsync(grantorUser.Id); + Assert.Empty(emergencyAccess); + } }