Skip to content

Commit

Permalink
Merge 63728e9 into 0983265
Browse files Browse the repository at this point in the history
  • Loading branch information
roryprimrose committed Mar 16, 2020
2 parents 0983265 + 63728e9 commit 5633136
Show file tree
Hide file tree
Showing 230 changed files with 18,334 additions and 13,164 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ jobs:
run: dotnet build -c Release --no-restore

- name: Test
run: dotnet test -c Release --no-build /p:CollectCoverage=true /p:CoverletOutput="$GITHUB_WORKSPACE/coverage/" /p:MergeWith="$GITHUB_WORKSPACE/coverage/coverage.json" /p:CoverletOutputFormat="lcov%2cjson" -m:1
run: dotnet test -c Release --no-build /p:CollectCoverage=true /p:Exclude="[*.*Tests]*" /p:CoverletOutput="$GITHUB_WORKSPACE/coverage/" /p:MergeWith="$GITHUB_WORKSPACE/coverage/coverage.json" /p:CoverletOutputFormat="lcov%2cjson" -m:1

- name: Coveralls
uses: coverallsapp/github-action@master
Expand Down
276 changes: 28 additions & 248 deletions ModelBuilder.Synchronous.UnitTests/ScenarioTests.cs
Original file line number Diff line number Diff line change
@@ -1,289 +1,69 @@
namespace ModelBuilder.Synchronous.UnitTests
{
using System;
using System.Collections.Generic;
using System.Reflection;
using FluentAssertions;
using ModelBuilder.UnitTests;
using ModelBuilder.UnitTests.Models;
using NSubstitute;
using Xunit;

public class ScenarioTests
{
[Fact]
public void BuildStrategyThrowsExceptionWithNullStrategyTest()
public void CanCreateEnumValue()
{
Action action = () => Model.BuildStrategy = null;
var actual = Model.Create<SimpleEnum>();

action.Should().Throw<ArgumentNullException>();
Enum.IsDefined(typeof(SimpleEnum), actual).Should().BeTrue();
}

[Fact]
public void CanAssignBuildStrategyTest()
public void CanCreateGuidValue()
{
var strategy = Substitute.For<IBuildStrategy>();
var actual = Model.Create<Guid>();

try
{
Model.BuildStrategy = strategy;

var actual = Model.BuildStrategy;

actual.Should().BeSameAs(strategy);
}
finally
{
Model.BuildStrategy = Model.DefaultBuildStrategy;
}
}

[Fact]
public void CanAssignNewBuildStrategyTest()
{
var buildStrategy = Substitute.For<IBuildStrategy>();

try
{
Model.BuildStrategy = buildStrategy;

var actual = Model.BuildStrategy;

actual.Should().BeSameAs(buildStrategy);
}
finally
{
Model.BuildStrategy = Model.DefaultBuildStrategy;
}
}

[Fact]
public void CreateTUsesBuildStrategyToCreateInstanceTest()
{
var value = Guid.NewGuid();

var build = Substitute.For<IBuildStrategy>();
var generator = Substitute.For<IValueGenerator>();
var generators = new List<IValueGenerator>
{
generator
}.AsReadOnly();

build.ValueGenerators.Returns(generators);
generator.IsSupported(typeof(Guid), null, Arg.Any<IBuildChain>()).Returns(true);
generator.Generate(typeof(Guid), null, Arg.Any<IExecuteStrategy>()).Returns(value);

try
{
Model.BuildStrategy = build;

var actual = Model.Create<Guid>();

actual.Should().Be(value);
}
finally
{
Model.BuildStrategy = Model.DefaultBuildStrategy;
}
}

[Fact]
public void CreateTUsesBuildStrategyToCreateInstanceWithParametersTest()
{
var value = Guid.NewGuid();
var expected = new ReadOnlyModel(value);

var build = Substitute.For<IBuildStrategy>();
var creator = Substitute.For<ITypeCreator>();
var creators = new List<ITypeCreator>
{
creator
}.AsReadOnly();

build.TypeCreators.Returns(creators);
creator.CanCreate(typeof(ReadOnlyModel), null, Arg.Any<IBuildChain>()).Returns(true);
creator.CanPopulate(typeof(ReadOnlyModel), null, Arg.Any<IBuildChain>()).Returns(true);
creator.Create(typeof(ReadOnlyModel), null, Arg.Any<IExecuteStrategy>(), value).Returns(expected);
creator.Populate(expected, Arg.Any<IExecuteStrategy>()).Returns(expected);

try
{
Model.BuildStrategy = build;

var actual = Model.Create<ReadOnlyModel>(value);

actual.Value.Should().Be(value);
}
finally
{
Model.BuildStrategy = Model.DefaultBuildStrategy;
}
actual.Should().NotBeEmpty();
}

[Fact]
public void CreateUsesBuildStrategyToCreateInstanceTest()
public void CanCreateInstance()
{
var value = Guid.NewGuid();

var build = Substitute.For<IBuildStrategy>();
var generator = Substitute.For<IValueGenerator>();
var generators = new List<IValueGenerator>
{
generator
}.AsReadOnly();

build.ValueGenerators.Returns(generators);
generator.IsSupported(typeof(Guid), null, Arg.Any<IBuildChain>()).Returns(true);
generator.Generate(typeof(Guid), null, Arg.Any<IExecuteStrategy>()).Returns(value);

try
{
Model.BuildStrategy = build;

var actual = Model.Create(typeof(Guid));

actual.Should().Be(value);
}
finally
{
Model.BuildStrategy = Model.DefaultBuildStrategy;
}
var actual = Model.Create<Address>();

actual.AddressLine1.Should().NotBeNullOrWhiteSpace();
actual.City.Should().NotBeNullOrWhiteSpace();
actual.Country.Should().NotBeNullOrWhiteSpace();
actual.Postcode.Should().NotBeNullOrWhiteSpace();
actual.State.Should().NotBeNullOrWhiteSpace();
actual.Suburb.Should().NotBeNullOrWhiteSpace();
actual.TimeZone.Should().NotBeNullOrWhiteSpace();
}

[Fact]
public void CreateUsesBuildStrategyToCreateInstanceWithParametersTest()
public void CanCreateInstanceWithEnumerableProperty()
{
var value = Guid.NewGuid();
var expected = new ReadOnlyModel(value);
var actual = Model.Create<Company>();

var build = Substitute.For<IBuildStrategy>();
var creator = Substitute.For<ITypeCreator>();
var creators = new List<ITypeCreator>
{
creator
}.AsReadOnly();

build.TypeCreators.Returns(creators);
creator.CanCreate(typeof(ReadOnlyModel), null, Arg.Any<IBuildChain>()).Returns(true);
creator.Create(typeof(ReadOnlyModel), null, Arg.Any<IExecuteStrategy>(), value).Returns(expected);
creator.Populate(expected, Arg.Any<IExecuteStrategy>()).Returns(expected);

try
{
Model.BuildStrategy = build;

var actual = (ReadOnlyModel) Model.Create(typeof(ReadOnlyModel), value);

actual.Value.Should().Be(value);
}
finally
{
Model.BuildStrategy = Model.DefaultBuildStrategy;
}
actual.Address.Should().NotBeNullOrWhiteSpace();
actual.Name.Should().NotBeNullOrWhiteSpace();
actual.Staff.Should().NotBeEmpty();
}

[Fact]
public void ForReturnsDefaultExecuteStrategyWithDefaultBuildStrategyConfigurationTest()
public void CanCreateInstanceWithParameters()
{
var build = Substitute.For<IBuildStrategy>();
var generator = Substitute.For<IValueGenerator>();
var generators = new List<IValueGenerator>
{
generator
}.AsReadOnly();
var creator = Substitute.For<ITypeCreator>();
var creators = new List<ITypeCreator>
{
creator
}.AsReadOnly();
var ignoreRules = new List<IgnoreRule>().AsReadOnly();
var resolver = Substitute.For<IConstructorResolver>();

build.ValueGenerators.Returns(generators);
build.TypeCreators.Returns(creators);
build.IgnoreRules.Returns(ignoreRules);
build.ConstructorResolver.Returns(resolver);

try
{
Model.BuildStrategy = build;
var actual = Model.Create<ReadOnlyModel>();

var actual = Model.UsingExecuteStrategy<DefaultExecuteStrategy<ReadOnlyModel>>();

actual.Configuration.Should().Be(build);
}
finally
{
Model.BuildStrategy = Model.DefaultBuildStrategy;
}
actual.Value.Should().NotBeEmpty();
}

[Fact]
public void PopulateUsesBuildStrategyToPopulateInstanceTest()
public void CanPopulateExistingInstance()
{
var value = Guid.NewGuid();
var expected = new SlimModel();

var build = Substitute.For<IBuildStrategy>();
var creator = Substitute.For<ITypeCreator>();
var propertyResolver = Substitute.For<IPropertyResolver>();

var creators = new List<ITypeCreator>
{
creator
}.AsReadOnly();
var generator = Substitute.For<IValueGenerator>();
var generators = new List<IValueGenerator>
{
generator
}.AsReadOnly();

build.PropertyResolver.Returns(propertyResolver);
build.TypeCreators.Returns(creators);
build.ValueGenerators.Returns(generators);
propertyResolver.CanPopulate(Arg.Any<PropertyInfo>()).Returns(true);
propertyResolver.ShouldPopulateProperty(
Arg.Any<IBuildConfiguration>(),
Arg.Any<object>(),
Arg.Any<PropertyInfo>(),
Arg.Any<object[]>()).Returns(true);
creator.CanPopulate(typeof(SlimModel), null, Arg.Any<IBuildChain>()).Returns(true);
creator.Populate(expected, Arg.Any<IExecuteStrategy>()).Returns(expected);
creator.AutoPopulate.Returns(true);
generator.IsSupported(typeof(Guid), "Value", Arg.Any<IBuildChain>()).Returns(true);
generator.Generate(typeof(Guid), "Value", Arg.Any<IExecuteStrategy>()).Returns(value);

try
{
Model.BuildStrategy = build;

var actual = Model.Populate(expected);

actual.Should().Be(expected);
}
finally
{
Model.BuildStrategy = Model.DefaultBuildStrategy;
}
}

[Fact]
public void WithReturnsNewExecuteStrategyUsingBuilderStrategyTest()
{
var buildStrategy = Substitute.For<IBuildStrategy>();

try
{
Model.BuildStrategy = buildStrategy;

var actual = Model.UsingExecuteStrategy<NullExecuteStrategy>();
var actual = Model.Populate(expected);

actual.Should().BeOfType<NullExecuteStrategy>();
}
finally
{
Model.BuildStrategy = Model.DefaultBuildStrategy;
}
actual.Should().BeSameAs(expected);
actual.Value.Should().NotBeEmpty();
}
}
}
Loading

0 comments on commit 5633136

Please sign in to comment.