Beispiel #1
0
        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);
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        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>();
            }
        }
Beispiel #4
0
        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>();
            }
        }
Beispiel #5
0
        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>();
        }