public void TestExecuteAsyncWithNullValidatorsCollectionExceptionShouldBeRaised()
        {
            // arrange
            var target = new HierarchicalValidatorExecutor<FakeValidationTargetModel>();

            // act
            var result = target.ExecuteAsync(new FakeValidationTargetModel(), null).Result;

            // expected exception
        }
        public void TestExecuteAsyncWithNullModelExceptionShouldBeRaised()
        {
            // arrange
            var target = new HierarchicalValidatorExecutor<FakeValidationTargetModel>();

            // act
            var result = target.ExecuteAsync(null, Enumerable.Empty<ValidatorContainer<FakeValidationTargetModel>>()).Result;

            // expected exception
        }
        public void TestExecuteSuncWithTwoInvalidValidatorWithDifferentPriorityOneValidatorShouldBeFailed()
        {
            var fakeModel = new FakeValidationTargetModel();
            var failedValidatorId = Guid.NewGuid();
            var firstMockValidator = ValidatorExecutorTestHelper.CreateMockValidator(false, Guid.NewGuid());
            var secondMockValidator = ValidatorExecutorTestHelper.CreateMockValidator(false, failedValidatorId);
            var validators = new List<ValidatorContainer<FakeValidationTargetModel>>
            {
                ValidatorExecutorTestHelper.CreateValidatorContainer(firstMockValidator.Object, 1),
                ValidatorExecutorTestHelper.CreateValidatorContainer(secondMockValidator.Object, 0)
            };

            var target = new HierarchicalValidatorExecutor<FakeValidationTargetModel>();

            IEnumerable<ValidationResult> validationResults = target.Execute(fakeModel, validators);

            Assert.IsNotNull(validationResults);
            var failedValidator = validationResults.FirstOrDefault();
            Assert.IsNotNull(failedValidator);
            Assert.IsFalse(failedValidator.IsValid());
            Assert.AreEqual(failedValidatorId, failedValidator.Id);
            secondMockValidator.Verify();
            firstMockValidator.Verify(x => x.Validate(It.IsAny<FakeValidationTargetModel>()), Times.Never);
        }
        public void TestExecuteSuncWithValidValidatorShouldBeSucceed()
        {
            var fakeModel = new FakeValidationTargetModel();
            var mockValidator = ValidatorExecutorTestHelper.CreateMockValidator(true, Guid.NewGuid());
            
            var validators = new List<ValidatorContainer<FakeValidationTargetModel>>
            {
                ValidatorExecutorTestHelper.CreateValidatorContainer(mockValidator.Object, 0)
            };

            var target = new HierarchicalValidatorExecutor<FakeValidationTargetModel>();

            IEnumerable<ValidationResult> validationResults = target.Execute(fakeModel, validators);

            Assert.IsNotNull(validationResults);
            var failedValidatorTask = validationResults.SingleOrDefault();
            Assert.IsNotNull(failedValidatorTask);
            var failedValidator = failedValidatorTask;
            Assert.IsNotNull(failedValidator);
            Assert.IsTrue(failedValidator.IsValid());
            mockValidator.Verify();
        }