public void ValidateAddsErrorIfFlowIsEmpty()
        {
            // Arrange
            var x = new Flow();
            var actions = new CalculatorActionDefinitionProvider().Get;

            // Act
            var errors = x.Validate(actions);

            // Assert
            Assert.IsNotNull(errors);
            Assert.AreEqual(1, errors.Count);
            Assert.IsTrue(errors[0].Message.Contains("Nothing to do"));
        }
        public void ValidateAddsErrorIfNumberOfInputParametersIsLessThanExpected()
        {
            // Arrange
            var x = new Flow();
            var step = new Step(null, "DoArithmetic");
            var prm = new Parameter("int", step.Id, 0);
            step.AddParameter(prm);
            x.Add(step);
            var actions = new CalculatorActionDefinitionProvider().Get;

            // Act
            var errors = x.Validate(actions);

            // Assert
            Assert.IsNotNull(errors);
            Assert.AreEqual(1, errors.Count);
            Assert.IsTrue(errors[0].Message.Contains("Number of input parameters"));
        }
        public void ValidateAddsErrorIfParameterTypeIsDifferent()
        {
            // Arrange
            var x = new Flow();
            var step1 = new Step("1", "GetIntFromUI");
            var step2 = new Step("2", "PrintInt", new List<Parameter> { new Parameter("string", step1.Id, 0) });
            x.Add(step1);
            x.Add(step2);
            var actions = new CalculatorActionDefinitionProvider().Get;

            // Act
            var errors = x.Validate(actions);

            // Assert
            Assert.IsNotNull(errors);
            Assert.AreEqual(2, errors.Count);
            Assert.IsTrue(errors[0].Message.Contains("parameter is of type"));
            Assert.IsTrue(errors[0].Message.Contains("while action needs"));
        }
        public void ValidateAddsErrorIfParameterWasNotPreviouslyPublished()
        {
            // Arrange
            var x = new Flow();
            var step = new Step(null, "PrintInt");
            var prm = new Parameter("int", step.Id, 0);
            step.AddParameter(prm);
            x.Add(step);
            var actions = new CalculatorActionDefinitionProvider().Get;

            // Act
            var errors = x.Validate(actions);

            // Assert
            Assert.IsNotNull(errors);
            Assert.AreEqual(1, errors.Count);
            Assert.IsTrue(errors[0].Message.Contains("has not been previously published"));
        }
        public void ValidateProducesNoErrorIfFlowIsOk()
        {
            // Arrange
            var actions = new CalculatorActionDefinitionProvider().Get;
            var flow = CreateValidFlow();

            // Act
            var errors = flow.Validate(actions);

            // Assert
            Assert.IsNotNull(errors);
            Assert.AreEqual(0, errors.Count);
        }
        public void ValidateAddsErrorIfStepNameIsNull()
        {
            // Arrange
            var x = new Flow();
            var step = new Step(null, "GetIntFromUI");
            step.Name = null;
            x.Add(step);
            var actions = new CalculatorActionDefinitionProvider().Get;

            // Act
            var errors = x.Validate(actions);

            // Assert
            Assert.IsNotNull(errors);
            Assert.AreEqual(1, errors.Count);
            Assert.IsTrue(errors[0].Message.Contains("is not named"));
        }
        public void ValidateAddsErrorIfStepIsNull()
        {
            // Arrange
            var step = new Step("name", "action");
            var x = new Flow { step };
            x[0] = null;
            var actions = new CalculatorActionDefinitionProvider().Get;

            // Act

            // Assert
            Assert.Throws(typeof (ArgumentNullException), () => x.Validate(actions));
        }
        public void ValidateAddsErrorIfStepActionIsUnknown()
        {
            // Arrange
            var x = new Flow();
            var step = new Step(null, "UnknownAction");
            x.Add(step);
            var actions = new CalculatorActionDefinitionProvider().Get;

            // Act
            var errors = x.Validate(actions);

            // Assert
            Assert.IsNotNull(errors);
            Assert.AreEqual(1, errors.Count);
            Assert.IsTrue(errors[0].Message.Contains("Unknown action"));
        }