1
0
mirror of https://github.com/bitwarden/server.git synced 2024-12-01 13:43:23 +01:00

Bootstrap tests

This commit is contained in:
Thomas Rittson 2024-10-04 13:47:24 +10:00
parent fcabf942b9
commit 8ffadc09e5
No known key found for this signature in database
GPG Key ID: CDDDA03861C35E27
3 changed files with 117 additions and 5 deletions

View File

@ -1,9 +1,4 @@
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;
namespace Bit.Core.AdminConsole.Services;

View File

@ -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();
}

View File

@ -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);
}
}