private ViewModelWithValidatorExecutor CreateViewModelWithExecutorResult(ValidationResult result, params IViewModel[] parents)
        {
            var vm = new ViewModelWithValidatorExecutor(parents);

            vm.Behavior.AddValidator(CreateValidator(result));
            return(vm);
        }
        public void Validate_CallsAddedValidatorWithCorrectArgs()
        {
            var vm = new ViewModelWithValidatorExecutor();

            var validator = CreateValidator();
            var request   = CreateRequest();

            vm.Behavior.AddValidator(validator);

            vm.Behavior.Validate(vm.GetContext(), request);
            Assert.AreEqual(1, validator.Invocations, "Validator was not called.");
            DomainAssert.AreEqual(request, validator.LastRequest);
        }
        public void Validate_CallsParentWithExtendedPath()
        {
            var parentVM = new ViewModelWithValidatorExecutor();
            var vm       = new ViewModelWithValidatorExecutor(parents: parentVM);

            var validator = CreateValidator();

            parentVM.Behavior.AddValidator(validator);

            var originalPath = Path.Empty;

            vm.Behavior.Validate(vm.GetContext(), CreateRequest(originalPath));

            var expectedPath = originalPath.Prepend(parentVM);

            Assert.AreEqual(1, validator.Invocations, "Parent was not called.");
            DomainAssert.AreEqual(expectedPath, validator.LastRequest.TargetPath);
        }