Skip to content

Commit

Permalink
Merge 3cfaa6d into 40ace1a
Browse files Browse the repository at this point in the history
  • Loading branch information
roryprimrose committed Jun 6, 2020
2 parents 40ace1a + 3cfaa6d commit cc3ba9a
Show file tree
Hide file tree
Showing 15 changed files with 1,348 additions and 1,379 deletions.
526 changes: 520 additions & 6 deletions ModelBuilder.UnitTests/BuildActions/BuildCapabilityTests.cs

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
using System.Reflection;
using FluentAssertions;
using ModelBuilder.BuildActions;
using ModelBuilder.CreationRules;
using ModelBuilder.UnitTests.Models;
using NSubstitute;
using Xunit;
Expand Down Expand Up @@ -213,30 +214,39 @@ public void BuildForTypeThrowsExceptionWithNullType()
}

[Fact]
public void GetBuildCapabilityForParameterReturnsNullWhenBuildChainDoesNotContainMatchingType()
public void GetBuildCapabilityForParameterReturnsCapabilityWhenBuildChainContainsMatchingType()
{
var buildConfiguration = new BuildConfiguration();
var buildChain = new BuildHistory();
var parameterInfo = typeof(Person).GetConstructors()
.First(x => x.GetParameters().FirstOrDefault()?.Name == "firstName").GetParameters().First();
var buildConfiguration = new BuildConfiguration();
var buildChain = new BuildHistory();

buildChain.Push(Guid.NewGuid());
buildChain.Push(Guid.NewGuid().ToString());
buildChain.Push(DateTimeOffset.UtcNow);

var sut = new CircularReferenceBuildAction();

var actual = sut.GetBuildCapability(buildConfiguration, buildChain, parameterInfo);
var actual = sut.GetBuildCapability(buildConfiguration, buildChain, parameterInfo)!;

actual.Should().BeNull();
actual.Should().NotBeNull();
actual.SupportsCreate.Should().BeTrue();
actual.SupportsPopulate.Should().BeFalse();
actual.AutoDetectConstructor.Should().BeFalse();
actual.AutoPopulate.Should().BeFalse();
actual.ImplementedByType.Should().BeAssignableTo<IBuildCapability>();
}

[Fact]
public void GetBuildCapabilityForParameterReturnsNullWhenBuildChainIsEmpty()
public void GetBuildCapabilityForParameterReturnsNullWhenBuildChainDoesNotContainMatchingType()
{
var buildConfiguration = new BuildConfiguration();
var buildChain = new BuildHistory();
var parameterInfo = typeof(Person).GetConstructors()
.First(x => x.GetParameters().FirstOrDefault()?.Name == "firstName").GetParameters().First();

buildChain.Push(Guid.NewGuid());

var sut = new CircularReferenceBuildAction();

var actual = sut.GetBuildCapability(buildConfiguration, buildChain, parameterInfo);
Expand All @@ -245,27 +255,18 @@ public void GetBuildCapabilityForParameterReturnsNullWhenBuildChainIsEmpty()
}

[Fact]
public void GetBuildCapabilityForParameterReturnsCapabilityWhenBuildChainContainsMatchingType()
public void GetBuildCapabilityForParameterReturnsNullWhenBuildChainIsEmpty()
{
var parameterInfo = typeof(Person).GetConstructors()
.First(x => x.GetParameters().FirstOrDefault()?.Name == "firstName").GetParameters().First();
var buildConfiguration = new BuildConfiguration();
var buildChain = new BuildHistory();

buildChain.Push(Guid.NewGuid());
buildChain.Push(Guid.NewGuid().ToString());
buildChain.Push(DateTimeOffset.UtcNow);
var parameterInfo = typeof(Person).GetConstructors()
.First(x => x.GetParameters().FirstOrDefault()?.Name == "firstName").GetParameters().First();

var sut = new CircularReferenceBuildAction();

var actual = sut.GetBuildCapability(buildConfiguration, buildChain, parameterInfo)!;
var actual = sut.GetBuildCapability(buildConfiguration, buildChain, parameterInfo);

actual.Should().NotBeNull();
actual.SupportsCreate.Should().BeTrue();
actual.SupportsPopulate.Should().BeFalse();
actual.AutoDetectConstructor.Should().BeFalse();
actual.AutoPopulate.Should().BeFalse();
actual.ImplementedByType.Should().Be<CircularReferenceBuildAction>();
actual.Should().BeNull();
}

[Fact]
Expand Down Expand Up @@ -296,28 +297,37 @@ public void GetBuildCapabilityForParameterThrowsExceptionWithNullType()
}

[Fact]
public void GetBuildCapabilityForPropertyReturnsNullWhenBuildChainDoesNotContainMatchingType()
public void GetBuildCapabilityForPropertyReturnsCapabilityWhenBuildChainContainsMatchingType()
{
var buildConfiguration = new BuildConfiguration();
var buildChain = new BuildHistory();
var propertyInfo = typeof(Person).GetProperty(nameof(Person.FirstName))!;

buildChain.Push(Guid.NewGuid());
buildChain.Push(Guid.NewGuid().ToString());
buildChain.Push(DateTimeOffset.UtcNow);

var sut = new CircularReferenceBuildAction();

var actual = sut.GetBuildCapability(buildConfiguration, buildChain, propertyInfo);

actual.Should().BeNull();
actual.Should().NotBeNull();
actual!.SupportsCreate.Should().BeTrue();
actual.SupportsPopulate.Should().BeFalse();
actual.AutoDetectConstructor.Should().BeFalse();
actual.AutoPopulate.Should().BeFalse();
actual.ImplementedByType.Should().BeAssignableTo<IBuildCapability>();
}

[Fact]
public void GetBuildCapabilityForPropertyReturnsNullWhenBuildChainIsEmpty()
public void GetBuildCapabilityForPropertyReturnsNullWhenBuildChainDoesNotContainMatchingType()
{
var buildConfiguration = new BuildConfiguration();
var buildChain = new BuildHistory();
var propertyInfo = typeof(Person).GetProperty(nameof(Person.FirstName))!;

buildChain.Push(Guid.NewGuid());

var sut = new CircularReferenceBuildAction();

var actual = sut.GetBuildCapability(buildConfiguration, buildChain, propertyInfo);
Expand All @@ -326,26 +336,17 @@ public void GetBuildCapabilityForPropertyReturnsNullWhenBuildChainIsEmpty()
}

[Fact]
public void GetBuildCapabilityForPropertyReturnsCapabilityWhenBuildChainContainsMatchingType()
public void GetBuildCapabilityForPropertyReturnsNullWhenBuildChainIsEmpty()
{
var buildConfiguration = new BuildConfiguration();
var buildChain = new BuildHistory();
var propertyInfo = typeof(Person).GetProperty(nameof(Person.FirstName))!;

buildChain.Push(Guid.NewGuid());
buildChain.Push(Guid.NewGuid().ToString());
buildChain.Push(DateTimeOffset.UtcNow);

var sut = new CircularReferenceBuildAction();

var actual = sut.GetBuildCapability(buildConfiguration, buildChain, propertyInfo);

actual.Should().NotBeNull();
actual!.SupportsCreate.Should().BeTrue();
actual.SupportsPopulate.Should().BeFalse();
actual.AutoDetectConstructor.Should().BeFalse();
actual.AutoPopulate.Should().BeFalse();
actual.ImplementedByType.Should().Be<CircularReferenceBuildAction>();
actual.Should().BeNull();
}

[Fact]
Expand Down Expand Up @@ -375,28 +376,37 @@ public void GetBuildCapabilityForPropertyThrowsExceptionWithNullType()
}

[Fact]
public void GetBuildCapabilityForTypeReturnsNullWhenBuildChainDoesNotContainMatchingType()
public void GetBuildCapabilityForTypeReturnsCapabilityWhenBuildChainContainsMatchingType()
{
var buildConfiguration = new BuildConfiguration();
var buildChain = new BuildHistory();
var type = typeof(string);

buildChain.Push(Guid.NewGuid());
buildChain.Push(Guid.NewGuid().ToString());
buildChain.Push(DateTimeOffset.UtcNow);

var sut = new CircularReferenceBuildAction();

var actual = sut.GetBuildCapability(buildConfiguration, buildChain, type);

actual.Should().BeNull();
actual.Should().NotBeNull();
actual!.SupportsCreate.Should().BeTrue();
actual.SupportsPopulate.Should().BeFalse();
actual.AutoDetectConstructor.Should().BeFalse();
actual.AutoPopulate.Should().BeFalse();
actual.ImplementedByType.Should().BeAssignableTo<IBuildCapability>();
}

[Fact]
public void GetBuildCapabilityForTypeReturnsNullWhenBuildChainIsEmpty()
public void GetBuildCapabilityForTypeReturnsNullWhenBuildChainDoesNotContainMatchingType()
{
var buildConfiguration = new BuildConfiguration();
var buildChain = new BuildHistory();
var type = typeof(string);

buildChain.Push(Guid.NewGuid());

var sut = new CircularReferenceBuildAction();

var actual = sut.GetBuildCapability(buildConfiguration, buildChain, type);
Expand All @@ -405,26 +415,17 @@ public void GetBuildCapabilityForTypeReturnsNullWhenBuildChainIsEmpty()
}

[Fact]
public void GetBuildCapabilityForTypeReturnsCapabilityWhenBuildChainContainsMatchingType()
public void GetBuildCapabilityForTypeReturnsNullWhenBuildChainIsEmpty()
{
var buildConfiguration = new BuildConfiguration();
var buildChain = new BuildHistory();
var type = typeof(string);

buildChain.Push(Guid.NewGuid());
buildChain.Push(Guid.NewGuid().ToString());
buildChain.Push(DateTimeOffset.UtcNow);

var sut = new CircularReferenceBuildAction();

var actual = sut.GetBuildCapability(buildConfiguration, buildChain, type);

actual.Should().NotBeNull();
actual!.SupportsCreate.Should().BeTrue();
actual.SupportsPopulate.Should().BeFalse();
actual.AutoDetectConstructor.Should().BeFalse();
actual.AutoPopulate.Should().BeFalse();
actual.ImplementedByType.Should().Be<CircularReferenceBuildAction>();
actual.Should().BeNull();
}

[Fact]
Expand Down Expand Up @@ -453,6 +454,29 @@ public void GetBuildCapabilityForTypeThrowsExceptionWithNullType()
action.Should().Throw<ArgumentNullException>();
}

[Fact]
public void GetBuildCapabilityReturnsCapabilityWithoutPopulateSupport()
{
var value = new Person();
var buildConfiguration = new BuildConfiguration();
var buildChain = new BuildHistory();
var type = typeof(string);

buildChain.Push(Guid.NewGuid());
buildChain.Push(Guid.NewGuid().ToString());
buildChain.Push(DateTimeOffset.UtcNow);

var executeStrategy = Substitute.For<IExecuteStrategy>();

var sut = new CircularReferenceBuildAction();

var actual = sut.GetBuildCapability(buildConfiguration, buildChain, type)!;

Action action = () => actual.Populate(executeStrategy, value);

action.Should().Throw<NotSupportedException>();
}

[Fact]
public void PopulateThrowsException()
{
Expand Down

0 comments on commit cc3ba9a

Please sign in to comment.