mirror of
https://github.com/bitwarden/server.git
synced 2025-03-12 13:29:14 +01:00
[pm-17804] Fix deferred execution issue in EF CreateManyAsync (#5425)
* Add failing repository tests * test * clean up comments --------- Co-authored-by: Thomas Rittson <trittson@bitwarden.com>
This commit is contained in:
parent
4c5bf495f3
commit
546b5a0849
@ -46,6 +46,7 @@ public class OrganizationUserRepository : Repository<Core.Entities.OrganizationU
|
||||
|
||||
public async Task<ICollection<Guid>> CreateManyAsync(IEnumerable<Core.Entities.OrganizationUser> organizationUsers)
|
||||
{
|
||||
organizationUsers = organizationUsers.ToList();
|
||||
if (!organizationUsers.Any())
|
||||
{
|
||||
return new List<Guid>();
|
||||
|
@ -2,6 +2,7 @@
|
||||
using Bit.Core.Entities;
|
||||
using Bit.Core.Enums;
|
||||
using Bit.Core.Repositories;
|
||||
using Bit.Core.Utilities;
|
||||
using Xunit;
|
||||
|
||||
namespace Bit.Infrastructure.IntegrationTest.AdminConsole.Repositories;
|
||||
@ -354,4 +355,73 @@ public class OrganizationUserRepositoryTests
|
||||
Assert.Single(responseModel);
|
||||
Assert.Equal(orgUser1.Id, responseModel.Single().Id);
|
||||
}
|
||||
|
||||
[DatabaseTheory, DatabaseData]
|
||||
public async Task CreateManyAsync_NoId_Works(IOrganizationRepository organizationRepository,
|
||||
IUserRepository userRepository,
|
||||
IOrganizationUserRepository organizationUserRepository)
|
||||
{
|
||||
// Arrange
|
||||
var user1 = await userRepository.CreateTestUserAsync("user1");
|
||||
var user2 = await userRepository.CreateTestUserAsync("user2");
|
||||
var user3 = await userRepository.CreateTestUserAsync("user3");
|
||||
List<User> users = [user1, user2, user3];
|
||||
|
||||
var org = await organizationRepository.CreateAsync(new Organization
|
||||
{
|
||||
Name = $"test-{Guid.NewGuid()}",
|
||||
BillingEmail = "billing@example.com", // TODO: EF does not enforce this being NOT NULL
|
||||
Plan = "Test", // TODO: EF does not enforce this being NOT NULl
|
||||
});
|
||||
|
||||
var orgUsers = users.Select(u => new OrganizationUser
|
||||
{
|
||||
OrganizationId = org.Id,
|
||||
UserId = u.Id,
|
||||
Status = OrganizationUserStatusType.Confirmed,
|
||||
Type = OrganizationUserType.Owner
|
||||
});
|
||||
|
||||
var createdOrgUserIds = await organizationUserRepository.CreateManyAsync(orgUsers);
|
||||
|
||||
var readOrgUsers = await organizationUserRepository.GetManyByOrganizationAsync(org.Id, null);
|
||||
var readOrgUserIds = readOrgUsers.Select(ou => ou.Id);
|
||||
|
||||
Assert.Equal(createdOrgUserIds.ToHashSet(), readOrgUserIds.ToHashSet());
|
||||
}
|
||||
|
||||
[DatabaseTheory, DatabaseData]
|
||||
public async Task CreateManyAsync_WithId_Works(IOrganizationRepository organizationRepository,
|
||||
IUserRepository userRepository,
|
||||
IOrganizationUserRepository organizationUserRepository)
|
||||
{
|
||||
// Arrange
|
||||
var user1 = await userRepository.CreateTestUserAsync("user1");
|
||||
var user2 = await userRepository.CreateTestUserAsync("user2");
|
||||
var user3 = await userRepository.CreateTestUserAsync("user3");
|
||||
List<User> users = [user1, user2, user3];
|
||||
|
||||
var org = await organizationRepository.CreateAsync(new Organization
|
||||
{
|
||||
Name = $"test-{Guid.NewGuid()}",
|
||||
BillingEmail = "billing@example.com", // TODO: EF does not enforce this being NOT NULL
|
||||
Plan = "Test", // TODO: EF does not enforce this being NOT NULl
|
||||
});
|
||||
|
||||
var orgUsers = users.Select(u => new OrganizationUser
|
||||
{
|
||||
Id = CoreHelpers.GenerateComb(), // generate ID ahead of time
|
||||
OrganizationId = org.Id,
|
||||
UserId = u.Id,
|
||||
Status = OrganizationUserStatusType.Confirmed,
|
||||
Type = OrganizationUserType.Owner
|
||||
});
|
||||
|
||||
var createdOrgUserIds = await organizationUserRepository.CreateManyAsync(orgUsers);
|
||||
|
||||
var readOrgUsers = await organizationUserRepository.GetManyByOrganizationAsync(org.Id, null);
|
||||
var readOrgUserIds = readOrgUsers.Select(ou => ou.Id);
|
||||
|
||||
Assert.Equal(createdOrgUserIds.ToHashSet(), readOrgUserIds.ToHashSet());
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user