mirror of
https://github.com/bitwarden/server.git
synced 2025-07-04 01:22:50 -05:00
Enable testing of ASP.net MVC controllers
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.
This commit is contained in:
38
test/Api.Test/AutoFixture/ControllerCustomization.cs
Normal file
38
test/Api.Test/AutoFixture/ControllerCustomization.cs
Normal file
@ -0,0 +1,38 @@
|
||||
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);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user