mirror of
https://github.com/bitwarden/server.git
synced 2024-12-12 15:26:48 +01:00
d08e9359af
Controller properties have all kinds of validations in the background. In general, we don't user properties on our Controllers, so the easiest way to allow for Autofixture-based testing of our Controllers is to just omit setting all properties on them.
39 lines
1.3 KiB
C#
39 lines
1.3 KiB
C#
using AutoFixture;
|
|
using Microsoft.AspNetCore.Mvc.ModelBinding;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
using Bit.Api.Controllers;
|
|
using AutoFixture.Kernel;
|
|
using System;
|
|
using Bit.Test.Common.AutoFixture;
|
|
using Org.BouncyCastle.Security;
|
|
|
|
namespace Bit.Api.Test.AutoFixture
|
|
{
|
|
/// <summary>
|
|
/// Disables setting of Auto Properties on the Controller to avoid ASP.net initialization errors. Still sets constructor dependencies.
|
|
/// </summary>
|
|
/// <param name="fixture"></param>
|
|
public class ControllerCustomization : ICustomization
|
|
{
|
|
private readonly Type _controllerType;
|
|
public ControllerCustomization(Type controllerType)
|
|
{
|
|
if (!controllerType.IsAssignableTo(typeof(Controller)))
|
|
{
|
|
throw new InvalidParameterException($"{nameof(controllerType)} must derive from {typeof(Controller).Name}");
|
|
}
|
|
|
|
_controllerType = controllerType;
|
|
}
|
|
|
|
public void Customize(IFixture fixture)
|
|
{
|
|
fixture.Customizations.Add(new BuilderWithoutAutoProperties(_controllerType));
|
|
}
|
|
}
|
|
public class ControllerCustomization<T> : ICustomization where T : Controller
|
|
{
|
|
public void Customize(IFixture fixture) => new ControllerCustomization(typeof(T)).Customize(fixture);
|
|
}
|
|
}
|