Files
server/test/Infrastructure.IntegrationTest/AdminConsole/Repositories/OrganizationUserRepository/GetManyConfirmedAcceptedDetailsByUserAsyncTests.cs
Jared McCannon 94f2bc3bf9 [PM-25056] - Deadlock testing fix (#7478)
* This wraps the delete method in a retry loop in order to protect the delete calls when cleaning up test data.

* Removing database test clean up as these databases should be ephemeral
2026-04-20 09:42:45 -05:00

133 lines
5.5 KiB
C#

using Bit.Core.Enums;
using Bit.Core.Repositories;
using Xunit;
namespace Bit.Infrastructure.IntegrationTest.AdminConsole.Repositories.OrganizationUserRepository;
public class GetManyConfirmedAcceptedDetailsByUserAsyncTests
{
[Theory, DatabaseData]
public async Task ReturnsDetails_WhenUserIsConfirmed(
IUserRepository userRepository,
IOrganizationRepository organizationRepository,
IOrganizationUserRepository organizationUserRepository)
{
// Arrange
var user = await userRepository.CreateTestUserAsync();
var organization = await organizationRepository.CreateTestOrganizationAsync();
await organizationUserRepository.CreateConfirmedTestOrganizationUserAsync(organization, user);
// Act
var results = await organizationUserRepository.GetManyConfirmedAcceptedDetailsByUserAsync(user.Id);
// Assert
Assert.Single(results);
var result = results.Single();
Assert.Equal(organization.Id, result.OrganizationId);
Assert.Equal(user.Id, result.UserId);
Assert.Equal(OrganizationUserStatusType.Confirmed, result.Status);
}
[Theory, DatabaseData]
public async Task ReturnsDetails_WhenUserIsAccepted(
IUserRepository userRepository,
IOrganizationRepository organizationRepository,
IOrganizationUserRepository organizationUserRepository)
{
// Arrange
var user = await userRepository.CreateTestUserAsync();
var organization = await organizationRepository.CreateTestOrganizationAsync();
await organizationUserRepository.CreateAcceptedTestOrganizationUserAsync(organization, user);
// Act
var results = await organizationUserRepository.GetManyConfirmedAcceptedDetailsByUserAsync(user.Id);
// Assert
Assert.Single(results);
var result = results.Single();
Assert.Equal(organization.Id, result.OrganizationId);
Assert.Equal(user.Id, result.UserId);
Assert.Equal(OrganizationUserStatusType.Accepted, result.Status);
}
[Theory, DatabaseData]
public async Task ReturnsDetailsAcrossMultipleOrganizations_WhenUserIsConfirmedOrAccepted(
IUserRepository userRepository,
IOrganizationRepository organizationRepository,
IOrganizationUserRepository organizationUserRepository)
{
// Arrange
var user = await userRepository.CreateTestUserAsync();
var confirmedOrg = await organizationRepository.CreateTestOrganizationAsync();
await organizationUserRepository.CreateConfirmedTestOrganizationUserAsync(confirmedOrg, user);
var acceptedOrg = await organizationRepository.CreateTestOrganizationAsync();
await organizationUserRepository.CreateAcceptedTestOrganizationUserAsync(acceptedOrg, user);
// Act
var results = await organizationUserRepository.GetManyConfirmedAcceptedDetailsByUserAsync(user.Id);
// Assert
Assert.Equal(2, results.Count);
Assert.Contains(results, r => r.OrganizationId == confirmedOrg.Id && r.Status == OrganizationUserStatusType.Confirmed);
Assert.Contains(results, r => r.OrganizationId == acceptedOrg.Id && r.Status == OrganizationUserStatusType.Accepted);
}
[Theory, DatabaseData]
public async Task DoesNotReturnDetails_WhenUserIsInvited(
IUserRepository userRepository,
IOrganizationRepository organizationRepository,
IOrganizationUserRepository organizationUserRepository)
{
// Arrange
var user = await userRepository.CreateTestUserAsync();
var organization = await organizationRepository.CreateTestOrganizationAsync();
await organizationUserRepository.CreateTestOrganizationUserInviteAsync(organization);
// Act
var results = await organizationUserRepository.GetManyConfirmedAcceptedDetailsByUserAsync(user.Id);
// Assert
Assert.DoesNotContain(results, r => r.OrganizationId == organization.Id);
}
[Theory, DatabaseData]
public async Task DoesNotReturnDetails_WhenUserIsRevoked(
IUserRepository userRepository,
IOrganizationRepository organizationRepository,
IOrganizationUserRepository organizationUserRepository)
{
// Arrange
var user = await userRepository.CreateTestUserAsync();
var organization = await organizationRepository.CreateTestOrganizationAsync();
await organizationUserRepository.CreateRevokedTestOrganizationUserAsync(organization, user);
// Act
var results = await organizationUserRepository.GetManyConfirmedAcceptedDetailsByUserAsync(user.Id);
// Assert
Assert.DoesNotContain(results, r => r.OrganizationId == organization.Id);
}
[Theory, DatabaseData]
public async Task DoesNotReturnDetails_ForOtherUsers(
IUserRepository userRepository,
IOrganizationRepository organizationRepository,
IOrganizationUserRepository organizationUserRepository)
{
// Arrange
var targetUser = await userRepository.CreateTestUserAsync();
var otherUser = await userRepository.CreateTestUserAsync();
var organization = await organizationRepository.CreateTestOrganizationAsync();
await organizationUserRepository.CreateConfirmedTestOrganizationUserAsync(organization, otherUser);
// Act
var results = await organizationUserRepository.GetManyConfirmedAcceptedDetailsByUserAsync(targetUser.Id);
// Assert
Assert.DoesNotContain(results, r => r.OrganizationId == organization.Id);
}
}