AutoMoqDataAttributeVersions Uses Autofixture and Xunit Data Theory attribute.
public class AutoMoqDataAttribute : AutoDataAttribute
{
public AutoMoqDataAttribute()
: base(new Fixture()
.Customize(new AutoMoqCustomization()))
{
}
}
public class AutoMoqControllerDataAttribute : AutoDataAttribute
{
public AutoMoqControllerDataAttribute()
: base(new Fixture()
.Customize(new AutoMoqControllerCustomization()))
{
}
}
public class AutoMoqControllerCustomization : CompositeCustomization
{
public AutoMoqControllerCustomization()
: base(new AutoMoqCustomization(),
new MoqControllerCustomization(),
new SitecoreCustomization())
{
}
private class MoqControllerCustomization : ICustomization
{
public void Customize(IFixture fixture)
{
var builder = new MockHttpContextFixture();
//remove the display attribute to avoid errors testing controller
fixture.Customize<ControllerContext>(c => c
.Without(x => x.DisplayMode)
.With(cc => cc.HttpContext, builder.Build()));
}
}
private class SitecoreCustomization : ICustomization
{
public void Customize(IFixture fixture)
{
fixture.Customizations.Add(new SitecoreItemSpecimenBuilder());
fixture.Customizations.Add(new SitecoreCustomItemSpecimenBuilder());
fixture.Customizations.Add(new SitecoreItemIDSpecimenBuilder());
fixture.Customizations.Add(new SitecoreItemStringIDSpecimenBuilder());
fixture.Customizations.Add(new SitecoreMediaItemSpecimenBuilder());
fixture.Customizations.Add(new SitecoreLinkItemSpecimenBuilder());
}
private class SitecoreMediaItemSpecimenBuilder : ISpecimenBuilder
{
public object Create(object request,
ISpecimenContext context)
{
var pi = request as ParameterInfo;
if (pi == null)
{
return new NoSpecimen(request);
}
if (pi.ParameterType != typeof(MediaItem))
{
return new NoSpecimen(request);
}
return null;
}
}
private class SitecoreLinkItemSpecimenBuilder : ISpecimenBuilder
{
public object Create(object request,
ISpecimenContext context)
{
var pi = request as ParameterInfo;
if (pi == null)
{
return new NoSpecimen(request);
}
if (pi.ParameterType != typeof(MediaItem))
{
return new NoSpecimen(request);
}
return null;
}
}
private class SitecoreItemSpecimenBuilder : ISpecimenBuilder
{
public object Create(object request,
ISpecimenContext context)
{
var pi = request as ParameterInfo;
if (pi == null)
{
return new NoSpecimen(request);
}
if (pi.ParameterType != typeof(Item))
{
return new NoSpecimen(request);
}
return new Item(new ID(Guid.NewGuid()),
new ItemData(new ItemDefinition(new ID(Guid.NewGuid()),
"itemname",
new ID(Guid.NewGuid())
,new ID(Guid.NewGuid())), Language.Current, new Sitecore.Data.Version(1), new FieldList())
,new Database("master")
);
}
}
private class SitecoreCustomItemSpecimenBuilder : ISpecimenBuilder
{
public object Create(object request,
ISpecimenContext context)
{
var pi = request as ParameterInfo;
if (pi == null)
{
return new NoSpecimen(request);
}
if (pi.ParameterType != typeof(CustomItemBase))
{
return new NoSpecimen(request);
}
return null;
}
}
private class SitecoreItemStringIDSpecimenBuilder : ISpecimenBuilder
{
public object Create(object request,
ISpecimenContext context)
{
var pi = request as ParameterInfo;
if (pi == null)
{
return new NoSpecimen(request);
}
if (pi.ParameterType != typeof(string)
|| pi.Name == "id")
{
return new NoSpecimen(request);
}
return string.Format("{{{0}}}", Guid.NewGuid());
}
}
private class SitecoreItemIDSpecimenBuilder : ISpecimenBuilder
{
public object Create(object request,
ISpecimenContext context)
{
var pi = request as ParameterInfo;
if (pi == null)
{
return new NoSpecimen(request);
}
if (pi.ParameterType != typeof(ID))
{
return new NoSpecimen(request);
}
return new ID(Guid.NewGuid());
}
}
}
}