mirror of
https://github.com/bitwarden/server.git
synced 2024-12-01 13:43:23 +01:00
Bootstrap tests
This commit is contained in:
parent
fcabf942b9
commit
8ffadc09e5
@ -1,9 +1,4 @@
|
|||||||
using Bit.Core.AdminConsole.Entities;
|
using Bit.Core.AdminConsole.Entities;
|
||||||
using Bit.Core.AdminConsole.Enums;
|
|
||||||
using Bit.Core.AdminConsole.Models.Data.Organizations.Policies;
|
|
||||||
using Bit.Core.Entities;
|
|
||||||
using Bit.Core.Enums;
|
|
||||||
using Bit.Core.Models.Data.Organizations.OrganizationUsers;
|
|
||||||
using Bit.Core.Services;
|
using Bit.Core.Services;
|
||||||
|
|
||||||
namespace Bit.Core.AdminConsole.Services;
|
namespace Bit.Core.AdminConsole.Services;
|
||||||
|
@ -0,0 +1,45 @@
|
|||||||
|
using System.Reflection;
|
||||||
|
using AutoFixture;
|
||||||
|
using AutoFixture.Kernel;
|
||||||
|
using Bit.Core.AdminConsole.OrganizationFeatures.Policies;
|
||||||
|
using Bit.Core.AdminConsole.Services.Implementations;
|
||||||
|
using Bit.Test.Common.AutoFixture.Attributes;
|
||||||
|
|
||||||
|
namespace Bit.Core.Test.AdminConsole.AutoFixture;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Override autofixture and set the injected PolicyDefinitions to an empty array.
|
||||||
|
/// This prevents Autofixture from creating duplicate PolicyDefinitions which will throw an error.
|
||||||
|
/// </summary>
|
||||||
|
public class PolicyServicevNextBuilder : ISpecimenBuilder
|
||||||
|
{
|
||||||
|
public object Create(object request, ISpecimenContext context)
|
||||||
|
{
|
||||||
|
var pi = request as ParameterInfo;
|
||||||
|
if (pi == null)
|
||||||
|
return new NoSpecimen();
|
||||||
|
|
||||||
|
if (pi.Member.DeclaringType != typeof(PolicyServicevNext) ||
|
||||||
|
pi.ParameterType != typeof(IEnumerable<IPolicyDefinition>))
|
||||||
|
return new NoSpecimen();
|
||||||
|
|
||||||
|
return Array.Empty<IPolicyDefinition>();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class PolicyServicevNextCustomization : ICustomization
|
||||||
|
{
|
||||||
|
public void Customize(IFixture fixture)
|
||||||
|
{
|
||||||
|
fixture.Customizations.Add(new PolicyServicevNextBuilder());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// A customization for PolicyService that sets the injected PolicyDefinitions to an empty array.
|
||||||
|
/// This prevents Autofixture from creating duplicate PolicyDefinitions which will throw an error.
|
||||||
|
/// </summary>
|
||||||
|
public class PolicyServicevNextCustomizeAttribute : BitCustomizeAttribute
|
||||||
|
{
|
||||||
|
public override ICustomization GetCustomization() => new PolicyServicevNextCustomization();
|
||||||
|
}
|
@ -0,0 +1,72 @@
|
|||||||
|
using Bit.Core.AdminConsole.Entities;
|
||||||
|
using Bit.Core.AdminConsole.Repositories;
|
||||||
|
using Bit.Core.AdminConsole.Services.Implementations;
|
||||||
|
using Bit.Core.Exceptions;
|
||||||
|
using Bit.Core.Models.Data.Organizations;
|
||||||
|
using Bit.Core.Services;
|
||||||
|
using Bit.Core.Test.AdminConsole.AutoFixture;
|
||||||
|
using Bit.Test.Common.AutoFixture;
|
||||||
|
using Bit.Test.Common.AutoFixture.Attributes;
|
||||||
|
using NSubstitute;
|
||||||
|
using Xunit;
|
||||||
|
|
||||||
|
namespace Bit.Core.Test.AdminConsole.Services;
|
||||||
|
|
||||||
|
[SutProviderCustomize]
|
||||||
|
[PolicyServicevNextCustomize]
|
||||||
|
public class PolicyServicevNextTests
|
||||||
|
{
|
||||||
|
[Theory, BitAutoData]
|
||||||
|
public async Task SaveAsync_OrganizationDoesNotExist_ThrowsBadRequest(
|
||||||
|
Policy policy, SutProvider<PolicyServicevNext> sutProvider)
|
||||||
|
{
|
||||||
|
sutProvider.GetDependency<IApplicationCacheService>()
|
||||||
|
.GetOrganizationAbilityAsync(policy.OrganizationId)
|
||||||
|
.Returns((OrganizationAbility)null);
|
||||||
|
|
||||||
|
var badRequestException = await Assert.ThrowsAsync<BadRequestException>(
|
||||||
|
() => sutProvider.Sut.SaveAsync(policy,
|
||||||
|
Substitute.For<IUserService>(),
|
||||||
|
Substitute.For<IOrganizationService>(),
|
||||||
|
Guid.NewGuid()));
|
||||||
|
|
||||||
|
Assert.Contains("Organization not found", badRequestException.Message, StringComparison.OrdinalIgnoreCase);
|
||||||
|
|
||||||
|
await sutProvider.GetDependency<IPolicyRepository>()
|
||||||
|
.DidNotReceiveWithAnyArgs()
|
||||||
|
.UpsertAsync(default);
|
||||||
|
|
||||||
|
await sutProvider.GetDependency<IEventService>()
|
||||||
|
.DidNotReceiveWithAnyArgs()
|
||||||
|
.LogPolicyEventAsync(default, default, default);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Theory, BitAutoData]
|
||||||
|
public async Task SaveAsync_OrganizationCannotUsePolicies_ThrowsBadRequest(
|
||||||
|
Policy policy, SutProvider<PolicyServicevNext> sutProvider)
|
||||||
|
{
|
||||||
|
sutProvider.GetDependency<IApplicationCacheService>()
|
||||||
|
.GetOrganizationAbilityAsync(policy.OrganizationId)
|
||||||
|
.Returns(new OrganizationAbility
|
||||||
|
{
|
||||||
|
Id = policy.OrganizationId,
|
||||||
|
UsePolicies = false
|
||||||
|
});
|
||||||
|
|
||||||
|
var badRequestException = await Assert.ThrowsAsync<BadRequestException>(
|
||||||
|
() => sutProvider.Sut.SaveAsync(policy,
|
||||||
|
Substitute.For<IUserService>(),
|
||||||
|
Substitute.For<IOrganizationService>(),
|
||||||
|
Guid.NewGuid()));
|
||||||
|
|
||||||
|
Assert.Contains("cannot use policies", badRequestException.Message, StringComparison.OrdinalIgnoreCase);
|
||||||
|
|
||||||
|
await sutProvider.GetDependency<IPolicyRepository>()
|
||||||
|
.DidNotReceiveWithAnyArgs()
|
||||||
|
.UpsertAsync(default);
|
||||||
|
|
||||||
|
await sutProvider.GetDependency<IEventService>()
|
||||||
|
.DidNotReceiveWithAnyArgs()
|
||||||
|
.LogPolicyEventAsync(default, default, default);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user