mirror of
https://github.com/bitwarden/server.git
synced 2024-11-28 13:15:12 +01:00
f2180aa7b7
* Add HasVerifiedDomainsAsync method to IOrganizationDomainService * Add GetManagedUserIdsByOrganizationIdAsync method to IOrganizationUserRepository and the corresponding queries * Fix case on the sproc OrganizationUser_ReadManagedIdsByOrganizationId parameter * Update the EF query to use the Email from the User table * dotnet format * Fix IOrganizationDomainService.HasVerifiedDomainsAsync by checking that domains have been Verified and add unit tests * Rename IOrganizationUserRepository.GetManagedUserIdsByOrganizationAsync * Fix domain queries * Add OrganizationUserRepository integration tests * Add summary to IOrganizationDomainService.HasVerifiedDomainsAsync * chore: Rename IOrganizationUserRepository.GetManagedUserIdsByOrganizationAsync to GetManyIdsManagedByOrganizationIdAsync * Add IsManagedByAnyOrganizationAsync method to IUserRepository * Add integration tests for UserRepository.IsManagedByAnyOrganizationAsync * Refactor to IUserService.IsManagedByAnyOrganizationAsync and IOrganizationService.GetUsersOrganizationManagementStatusAsync * chore: Refactor IsManagedByAnyOrganizationAsync method in UserService * Refactor IOrganizationService.GetUsersOrganizationManagementStatusAsync to return IDictionary<Guid, bool> * Extract IOrganizationService.GetUsersOrganizationManagementStatusAsync into a query * Update comments in OrganizationDomainService to use proper capitalization * Move OrganizationDomainService to AdminConsole ownership and update namespace * feat: Add support for organization domains in enterprise plans * feat: Add HasOrganizationDomains property to OrganizationAbility class * refactor: Update GetOrganizationUsersManagementStatusQuery to use IApplicationCacheService * Remove HasOrganizationDomains and use UseSso to check if Organization can have Verified Domains * Refactor UserService.IsManagedByAnyOrganizationAsync to simply check the UseSso flag * Add TODO comment for replacing 'UseSso' organization ability on user verified domain checks * Bump date on migration script * Add indexes to OrganizationDomain table * Bump script migration date; Remove WITH ONLINE = ON from data migration.
129 lines
4.7 KiB
C#
129 lines
4.7 KiB
C#
using Bit.Core.AdminConsole.Services.Implementations;
|
|
using Bit.Core.Entities;
|
|
using Bit.Core.Enums;
|
|
using Bit.Core.Repositories;
|
|
using Bit.Core.Services;
|
|
using Bit.Test.Common.AutoFixture;
|
|
using Bit.Test.Common.AutoFixture.Attributes;
|
|
using NSubstitute;
|
|
using Xunit;
|
|
|
|
namespace Bit.Core.Test.AdminConsole.Services;
|
|
|
|
[SutProviderCustomize]
|
|
public class OrganizationDomainServiceTests
|
|
{
|
|
|
|
[Theory, BitAutoData]
|
|
public async Task ValidateOrganizationsDomainAsync_CallsDnsResolverServiceAndReplace(SutProvider<OrganizationDomainService> sutProvider)
|
|
{
|
|
var domains = new List<OrganizationDomain>
|
|
{
|
|
new()
|
|
{
|
|
Id = Guid.NewGuid(),
|
|
OrganizationId = Guid.NewGuid(),
|
|
CreationDate = DateTime.UtcNow,
|
|
DomainName = "test.com",
|
|
Txt = "btw+12345",
|
|
},
|
|
new()
|
|
{
|
|
Id = Guid.NewGuid(),
|
|
OrganizationId = Guid.NewGuid(),
|
|
CreationDate = DateTime.UtcNow,
|
|
DomainName = "test2.com",
|
|
Txt = "btw+6789"
|
|
}
|
|
};
|
|
sutProvider.GetDependency<IOrganizationDomainRepository>().GetManyByNextRunDateAsync(default)
|
|
.ReturnsForAnyArgs(domains);
|
|
|
|
await sutProvider.Sut.ValidateOrganizationsDomainAsync();
|
|
|
|
await sutProvider.GetDependency<IDnsResolverService>().ReceivedWithAnyArgs(2)
|
|
.ResolveAsync(default, default);
|
|
await sutProvider.GetDependency<IOrganizationDomainRepository>().ReceivedWithAnyArgs(2)
|
|
.ReplaceAsync(default);
|
|
await sutProvider.GetDependency<IEventService>().ReceivedWithAnyArgs(2)
|
|
.LogOrganizationDomainEventAsync(default, EventType.OrganizationDomain_NotVerified,
|
|
EventSystemUser.DomainVerification);
|
|
}
|
|
|
|
[Theory, BitAutoData]
|
|
public async Task OrganizationDomainMaintenanceAsync_CallsDeleteExpiredAsync_WhenExpiredDomainsExist(
|
|
SutProvider<OrganizationDomainService> sutProvider)
|
|
{
|
|
var expiredDomains = new List<OrganizationDomain>
|
|
{
|
|
new()
|
|
{
|
|
Id = Guid.NewGuid(),
|
|
OrganizationId = Guid.NewGuid(),
|
|
CreationDate = DateTime.UtcNow,
|
|
DomainName = "test.com",
|
|
Txt = "btw+12345",
|
|
},
|
|
new()
|
|
{
|
|
Id = Guid.NewGuid(),
|
|
OrganizationId = Guid.NewGuid(),
|
|
CreationDate = DateTime.UtcNow,
|
|
DomainName = "test2.com",
|
|
Txt = "btw+6789"
|
|
}
|
|
};
|
|
sutProvider.GetDependency<IOrganizationDomainRepository>().GetExpiredOrganizationDomainsAsync()
|
|
.Returns(expiredDomains);
|
|
|
|
await sutProvider.Sut.OrganizationDomainMaintenanceAsync();
|
|
|
|
await sutProvider.GetDependency<IOrganizationDomainRepository>().ReceivedWithAnyArgs(1)
|
|
.DeleteExpiredAsync(7);
|
|
}
|
|
|
|
[Theory, BitAutoData]
|
|
public async Task HasVerifiedDomainsAsync_WithVerifiedDomain_ReturnsTrue(
|
|
OrganizationDomain organizationDomain,
|
|
SutProvider<OrganizationDomainService> sutProvider)
|
|
{
|
|
organizationDomain.SetVerifiedDate(); // Set the verified date to make it verified
|
|
|
|
sutProvider.GetDependency<IOrganizationDomainRepository>()
|
|
.GetDomainsByOrganizationIdAsync(organizationDomain.OrganizationId)
|
|
.Returns(new List<OrganizationDomain> { organizationDomain });
|
|
|
|
var result = await sutProvider.Sut.HasVerifiedDomainsAsync(organizationDomain.OrganizationId);
|
|
|
|
Assert.True(result);
|
|
}
|
|
|
|
[Theory, BitAutoData]
|
|
public async Task HasVerifiedDomainsAsync_WithoutVerifiedDomain_ReturnsFalse(
|
|
OrganizationDomain organizationDomain,
|
|
SutProvider<OrganizationDomainService> sutProvider)
|
|
{
|
|
sutProvider.GetDependency<IOrganizationDomainRepository>()
|
|
.GetDomainsByOrganizationIdAsync(organizationDomain.OrganizationId)
|
|
.Returns(new List<OrganizationDomain> { organizationDomain });
|
|
|
|
var result = await sutProvider.Sut.HasVerifiedDomainsAsync(organizationDomain.OrganizationId);
|
|
|
|
Assert.False(result);
|
|
}
|
|
|
|
[Theory, BitAutoData]
|
|
public async Task HasVerifiedDomainsAsync_WithoutOrganizationDomains_ReturnsFalse(
|
|
Guid organizationId,
|
|
SutProvider<OrganizationDomainService> sutProvider)
|
|
{
|
|
sutProvider.GetDependency<IOrganizationDomainRepository>()
|
|
.GetDomainsByOrganizationIdAsync(organizationId)
|
|
.Returns(new List<OrganizationDomain>());
|
|
|
|
var result = await sutProvider.Sut.HasVerifiedDomainsAsync(organizationId);
|
|
|
|
Assert.False(result);
|
|
}
|
|
}
|