public void GetBuildCapabilityForParameterReturnsCapabilityFromAction() { var parameterInfo = typeof(Person).GetConstructors() .First(x => x.GetParameters().FirstOrDefault()?.Name == "firstName").GetParameters().First(); var firstCapability = Substitute.For <IBuildCapability>(); var secondCapability = Substitute.For <IBuildCapability>(); var firstAction = Substitute.For <IBuildAction>(); var secondAction = Substitute.For <IBuildAction>(); var buildConfiguration = Substitute.For <IBuildConfiguration>(); var buildChain = Substitute.For <IBuildChain>(); var executeStrategy = Substitute.For <IExecuteStrategy>(); executeStrategy.Configuration.Returns(buildConfiguration); executeStrategy.BuildChain.Returns(buildChain); secondCapability.SupportsCreate.Returns(true); secondCapability.SupportsPopulate.Returns(true); secondCapability.AutoPopulate.Returns(true); firstAction.Priority.Returns(int.MaxValue); firstAction.GetBuildCapability(buildConfiguration, buildChain, parameterInfo).Returns(firstCapability); secondAction.Priority.Returns(int.MinValue); secondAction.GetBuildCapability(buildConfiguration, buildChain, parameterInfo).Returns(secondCapability); var actions = new List <IBuildAction> { firstAction, secondAction }; var sut = new BuildProcessor(actions); var actual = sut.GetBuildCapability(executeStrategy, BuildRequirement.Create, parameterInfo); actual.Should().BeEquivalentTo(secondCapability); }
public void GetBuildCapabilityForTypeReturnsCapabilityFromActionWithHighestPriority() { var type = typeof(Person); var firstCapability = Substitute.For <IBuildCapability>(); var secondCapability = Substitute.For <IBuildCapability>(); var firstAction = Substitute.For <IBuildAction>(); var secondAction = Substitute.For <IBuildAction>(); var buildConfiguration = Substitute.For <IBuildConfiguration>(); var buildChain = Substitute.For <IBuildChain>(); var executeStrategy = Substitute.For <IExecuteStrategy>(); firstCapability.SupportsCreate.Returns(true); secondCapability.SupportsCreate.Returns(true); secondCapability.SupportsPopulate.Returns(true); secondCapability.AutoPopulate.Returns(true); executeStrategy.BuildChain.Returns(buildChain); executeStrategy.Configuration.Returns(buildConfiguration); firstAction.Priority.Returns(int.MinValue); firstAction.GetBuildCapability(buildConfiguration, buildChain, type).Returns(firstCapability); secondAction.Priority.Returns(int.MaxValue); secondAction.GetBuildCapability(buildConfiguration, buildChain, type).Returns(secondCapability); var actions = new List <IBuildAction> { firstAction, secondAction }; var sut = new BuildProcessor(actions); var actual = sut.GetBuildCapability(executeStrategy, BuildRequirement.Create, type); actual.Should().BeEquivalentTo(secondCapability); }
public void GetBuildCapabilityForParameterReturnsBuildCapabilityWhenSupported(BuildRequirement requirement, bool canCreate, bool canPopulate, bool capabilityExists) { var parameterInfo = typeof(Person).GetConstructors() .First(x => x.GetParameters().FirstOrDefault()?.Name == "firstName").GetParameters().First(); var capability = Substitute.For <IBuildCapability>(); var buildAction = Substitute.For <IBuildAction>(); var buildConfiguration = Substitute.For <IBuildConfiguration>(); var buildChain = Substitute.For <IBuildChain>(); var executeStrategy = Substitute.For <IExecuteStrategy>(); capability.SupportsCreate.Returns(canCreate); capability.SupportsPopulate.Returns(canPopulate); executeStrategy.Configuration.Returns(buildConfiguration); executeStrategy.BuildChain.Returns(buildChain); buildAction.GetBuildCapability(buildConfiguration, buildChain, parameterInfo).Returns(capability); var actions = new List <IBuildAction> { buildAction }; var sut = new BuildProcessor(actions); if (capabilityExists) { var actual = sut.GetBuildCapability(executeStrategy, requirement, parameterInfo); actual.Should().Be(capability); } else { Action action = () => sut.GetBuildCapability(executeStrategy, requirement, parameterInfo); action.Should().Throw <BuildException>(); } }
public void GetBuildCapabilityForTypeReturnsBuildCapability(BuildRequirement requirement, bool canCreate, bool canPopulate, bool planExists) { var type = typeof(Person); var capability = Substitute.For <IBuildCapability>(); var buildAction = Substitute.For <IBuildAction>(); var buildConfiguration = Substitute.For <IBuildConfiguration>(); var buildChain = Substitute.For <IBuildChain>(); var executeStrategy = Substitute.For <IExecuteStrategy>(); capability.SupportsCreate.Returns(canCreate); capability.SupportsPopulate.Returns(canPopulate); executeStrategy.Configuration.Returns(buildConfiguration); executeStrategy.BuildChain.Returns(buildChain); buildAction.GetBuildCapability(buildConfiguration, buildChain, type).Returns(capability); var actions = new List <IBuildAction> { buildAction }; var sut = new BuildProcessor(actions); if (planExists) { var actual = sut.GetBuildCapability(executeStrategy, requirement, type); actual.Should().Be(capability); } else { Action action = () => sut.GetBuildCapability(executeStrategy, requirement, type); action.Should().Throw <BuildException>(); } }
public void GetBuildCapabilityForTypeThrowsExceptionWithNullType() { var actions = Array.Empty <IBuildAction>(); var buildConfiguration = Substitute.For <IBuildConfiguration>(); var buildChain = Substitute.For <IBuildChain>(); var executeStrategy = Substitute.For <IExecuteStrategy>(); executeStrategy.Configuration.Returns(buildConfiguration); executeStrategy.BuildChain.Returns(buildChain); var sut = new BuildProcessor(actions); Action action = () => sut.GetBuildCapability(executeStrategy, BuildRequirement.Create, (Type)null !); action.Should().Throw <ArgumentNullException>(); }