private void Calculate()
        {
            DataModelValidatorResult validationResult = GetValidationResult();

            if (validationResult != DataModelValidatorResult.ValidResult)
            {
                LogValidationResultMessages(validationResult);
                return;
            }

            try
            {
                IBalancedFieldLengthCalculationModuleFactory factory           = BalancedFieldLengthCalculationModuleFactory.Instance;
                IBalancedFieldLengthCalculationModule        calculationModule = factory.CreateModule();
                BalancedFieldLengthOutput output = calculationModule.Calculate(calculation);

                OutputViewModel = new OutputViewModel(output);
                MessageWindowViewModel.AddMessage(new MessageContext(MessageType.Info, Resources.MainViewModel_Calculate_Calculation_completed));
            }
            catch (Exception e) when(e is CreateKernelDataException || e is KernelCalculationException)
            {
                MessageWindowViewModel.AddMessage(new MessageContext(MessageType.Error, e.Message));
                MessageWindowViewModel.AddMessage(new MessageContext(MessageType.Error, Resources.MainViewModel_Calculate_Calculation_failed));
            }
        }
예제 #2
0
        public void ValidResult_Always_ReturnsExpectedValidationRuleResult()
        {
            // Call
            DataModelValidatorResult result = DataModelValidatorResult.ValidResult;

            // Assert
            Assert.That(result.IsValid, Is.True);
            Assert.That(result.ValidationMessages, Is.Empty);
        }
        private void LogValidationResultMessages(DataModelValidatorResult validationResult)
        {
            foreach (string validationMessage in validationResult.ValidationMessages)
            {
                MessageWindowViewModel.AddMessage(new MessageContext(MessageType.Error, validationMessage));
            }

            MessageWindowViewModel.AddMessage(new MessageContext(MessageType.Error, Resources.MainViewModel_Calculate_Calculation_failed));
        }
예제 #4
0
        public void CreateInvalidResult_MessagesNull_ThrowsArgumentNullException()
        {
            // Call
            TestDelegate call = () => DataModelValidatorResult.CreateInvalidResult(null);

            // Assert
            Assert.That(call, Throws.ArgumentNullException
                        .With.Property(nameof(ArgumentNullException.ParamName))
                        .EqualTo("messages"));
        }
예제 #5
0
        public void Validate_WithTwoInvalidModels_ExecutesAllRulesAndReturnsInvalidResult()
        {
            // Setup
            var validationRuleOne = Substitute.For <IDataModelValidationRule>();

            validationRuleOne.Execute().Returns(ValidationRuleResult.ValidResult);

            const string validationErrorOne       = "Validation Error One";
            var          invalidValidationRuleOne = Substitute.For <IDataModelValidationRule>();

            invalidValidationRuleOne.Execute().Returns(ValidationRuleResult.CreateInvalidResult(validationErrorOne));

            var invalidProviderOne = Substitute.For <IDataModelRuleProvider>();

            invalidProviderOne.GetDataModelValidationRules().Returns(new[]
            {
                validationRuleOne,
                invalidValidationRuleOne
            });

            var validationRuleTwo = Substitute.For <IDataModelValidationRule>();

            validationRuleTwo.Execute().Returns(ValidationRuleResult.ValidResult);

            const string validationErrorTwo       = "Validation Error Two";
            var          invalidValidationRuleTwo = Substitute.For <IDataModelValidationRule>();

            invalidValidationRuleTwo.Execute().Returns(ValidationRuleResult.CreateInvalidResult(validationErrorTwo));

            var invalidProviderTwo = Substitute.For <IDataModelRuleProvider>();

            invalidProviderTwo.GetDataModelValidationRules().Returns(new[]
            {
                validationRuleTwo,
                invalidValidationRuleTwo
            });

            IDataModelRuleProvider[] models =
            {
                invalidProviderOne,
                invalidProviderTwo
            };

            // Call
            DataModelValidatorResult result = DataModelValidator.Validate(models);

            // Assert
            Assert.That(result.IsValid, Is.False);
            CollectionAssert.AreEquivalent(new[]
            {
                validationErrorOne,
                validationErrorTwo
            }, result.ValidationMessages);
        }
예제 #6
0
        public void CreateInvalidResult_WithValidMessage_ReturnsExpectedValidationRuleResult()
        {
            // Setup
            IEnumerable <string> messages = Enumerable.Empty <string>();

            // Call
            var result = DataModelValidatorResult.CreateInvalidResult(messages);

            // Assert
            Assert.That(result.IsValid, Is.False);
            Assert.That(result.ValidationMessages, Is.SameAs(messages));
        }
예제 #7
0
        public void Validate_WithOneValidAndOneInvalidDataModel_ExecutesAllRulesAndReturnsInvalidResult()
        {
            // Setup
            var validationRuleOne = Substitute.For <IDataModelValidationRule>();

            validationRuleOne.Execute().Returns(ValidationRuleResult.ValidResult);

            var validProvider = Substitute.For <IDataModelRuleProvider>();

            validProvider.GetDataModelValidationRules().Returns(new[]
            {
                validationRuleOne
            });

            var validationRuleTwo = Substitute.For <IDataModelValidationRule>();

            validationRuleTwo.Execute().Returns(ValidationRuleResult.ValidResult);

            const string validationError       = "Validation Error";
            var          invalidValidationRule = Substitute.For <IDataModelValidationRule>();

            invalidValidationRule.Execute().Returns(ValidationRuleResult.CreateInvalidResult(validationError));

            var invalidProvider = Substitute.For <IDataModelRuleProvider>();

            invalidProvider.GetDataModelValidationRules().Returns(new[]
            {
                validationRuleTwo,
                invalidValidationRule
            });

            IDataModelRuleProvider[] models =
            {
                validProvider,
                invalidProvider
            };

            // Call
            DataModelValidatorResult result = DataModelValidator.Validate(models);

            // Assert
            Assert.That(result.IsValid, Is.False);
            CollectionAssert.AreEqual(new[]
            {
                validationError
            }, result.ValidationMessages);
        }
예제 #8
0
        public void Validate_WithValidDataModels_ThenExecutesAllRulesAndReturnsValidResult()
        {
            // Setup
            var validationRuleOne = Substitute.For <IDataModelValidationRule>();

            validationRuleOne.Execute().Returns(ValidationRuleResult.ValidResult);

            var validProviderOne = Substitute.For <IDataModelRuleProvider>();

            validProviderOne.GetDataModelValidationRules().Returns(new[]
            {
                validationRuleOne
            });

            var validationRuleTwo = Substitute.For <IDataModelValidationRule>();

            validationRuleTwo.Execute().Returns(ValidationRuleResult.ValidResult);

            var validProviderTwo = Substitute.For <IDataModelRuleProvider>();

            validProviderTwo.GetDataModelValidationRules().Returns(new[]
            {
                validationRuleTwo
            });

            IDataModelRuleProvider[] models =
            {
                validProviderOne,
                validProviderTwo
            };

            // Call
            DataModelValidatorResult result = DataModelValidator.Validate(models);

            // Assert
            Assert.That(result.IsValid, Is.True);
            Assert.That(result.ValidationMessages, Is.Empty);

            validProviderOne.Received(1).GetDataModelValidationRules();
            validationRuleOne.Received(1).Execute();

            validProviderTwo.Received(1).GetDataModelValidationRules();
            validationRuleTwo.Received(1).Execute();
        }