using Bit.Core.AdminConsole.Entities;
using Bit.Core.Repositories;
using Bit.Infrastructure.IntegrationTest.Services;
using Xunit;
namespace Bit.Infrastructure.IntegrationTest.AdminConsole.Migrations;
public class UseMyItemsDataMigrationTests
{
private const string _migrationName = "UseMyItemsDataMigration";
[Theory, DatabaseData(MigrationName = _migrationName)]
public async Task Migration_WithUsePoliciesEnabled_SetsUseMyItemsToTrue(
IOrganizationRepository organizationRepository,
IMigrationTesterService migrationTester)
{
// Arrange
var organization = await SetupOrganization(organizationRepository, usePolicies: true);
// Verify initial state
Assert.True(organization.UsePolicies);
Assert.False(organization.UseMyItems);
// Act
migrationTester.ApplyMigration();
// Assert
var migratedOrganization = await organizationRepository.GetByIdAsync(organization.Id);
Assert.NotNull(migratedOrganization);
Assert.True(migratedOrganization.UsePolicies);
Assert.True(migratedOrganization.UseMyItems);
}
[Theory, DatabaseData(MigrationName = _migrationName)]
public async Task Migration_WithUsePoliciesDisabled_LeavesUseMyItemsFalse(
IOrganizationRepository organizationRepository,
IMigrationTesterService migrationTester)
{
// Arrange
var organization = await SetupOrganization(organizationRepository, usePolicies: false);
// Verify initial state
Assert.False(organization.UsePolicies);
Assert.False(organization.UseMyItems);
// Act
migrationTester.ApplyMigration();
// Assert
var migratedOrganization = await organizationRepository.GetByIdAsync(organization.Id);
Assert.NotNull(migratedOrganization);
Assert.False(migratedOrganization.UsePolicies);
Assert.False(migratedOrganization.UseMyItems);
}
///
/// Helper method to create a test organization with specified UsePolicies value.
/// UseMyItems is always initialized to false to simulate pre-migration state.
///
private static async Task SetupOrganization(
IOrganizationRepository organizationRepository,
bool usePolicies,
string identifier = "test")
{
// CreateTestOrganizationAsync sets UsePolicies = true by default
var organization = await organizationRepository.CreateTestOrganizationAsync(identifier: identifier);
// Override to test both true and false scenarios
organization.UsePolicies = usePolicies;
organization.UseMyItems = false; // Simulate pre-migration state
await organizationRepository.ReplaceAsync(organization);
return organization;
}
}