public void ValidateProperties_InvalidProperty_InvalidatesViewModel()
        {
            var propertyValid = true;

            var error = "Some fields are invalid";
            var vm    = CreateChild(b => {
                b.ValidateProperties(error);
                b.Check(x => x.StringProperty).Custom(x => {
                    if (!propertyValid)
                    {
                        x.AddError("Property error");
                    }
                });
            });

            vm.Revalidate();
            ValidationAssert.IsValid(vm);

            propertyValid = false;
            vm.Revalidate();

            var viewModelOnlyResult = vm.GetValidationResult(ValidationResultScope.ViewModelValidationsOnly);

            ValidationAssert.ErrorMessages(viewModelOnlyResult, error);
        }
Example #2
0
        public void OwnerResult_WhenInvalidItemIsInTwoCollections_ContainsItemErrorOnlyOnce()
        {
            var invalidItem = CreateInvalidItem();

            Owner.CollectionOne.Add(invalidItem);
            Owner.CollectionTwo.Add(invalidItem);

            ValidationAssert.ErrorMessages(Owner.ValidationResult, invalidItem.ErrorToReturn);
        }
Example #3
0
        public void OwnerResult_WhenInvalidItemIsInCollectionAndReferencedByProperty_ContainsItemErrorOnlyOnce()
        {
            var invalidItem = CreateInvalidItem();

            Owner.CollectionOne.Add(invalidItem);
            Owner.ItemProperty = invalidItem;

            ValidationAssert.ErrorMessages(Owner.ValidationResult, invalidItem.ErrorToReturn);
        }
        public void SetValue_ViewModelValidationFails_AddsValidationErrorToViewModel()
        {
            var vm = EmployeeVM.Create(WithPropertyAndViewModelValidation);

            ViewModelErrorToReturn = ExpectedViewModelError;
            vm.SetValue(x => x.Name, "New value");

            ValidationAssert.ErrorMessages(vm.ValidationResult, ExpectedViewModelError);
        }
        public void SetValue_PropertyAndViewModelValidationFail_ValidationResultContainsBothErrors()
        {
            var vm = EmployeeVM.Create(WithPropertyAndViewModelValidation);

            NamePropertyErrorToReturn = ExpectedNamePropertyError;
            ViewModelErrorToReturn    = ExpectedViewModelError;
            vm.SetValue(x => x.Name, "New value");

            ValidationAssert.ErrorMessages(vm.ValidationResult, ExpectedNamePropertyError, ExpectedViewModelError);
        }
Example #6
0
        public void OwnerResult_WhenInvalidItemIsInCollectionAndReferencedByPropertyAndPropertyIsSetToNull_StillContainsItemError()
        {
            var invalidItem = CreateInvalidItem();

            Owner.CollectionOne.Add(invalidItem);
            Owner.ItemProperty = invalidItem;

            Owner.ItemProperty = null;

            ValidationAssert.ErrorMessages(Owner.ValidationResult, invalidItem.ErrorToReturn);
        }
Example #7
0
        public void OwnerResult_WhenInvalidItemIsInTwoCollectionAndRemovedFromOne_StillContainsItemError()
        {
            var invalidItem = CreateInvalidItem();

            Owner.CollectionOne.Add(invalidItem);
            Owner.CollectionTwo.Add(invalidItem);

            Owner.CollectionTwo.Remove(invalidItem);

            ValidationAssert.ErrorMessages(Owner.ValidationResult, invalidItem.ErrorToReturn);
        }
        public void HasValue_PropertyHasNoValue_AddsValidationErrorToProperty()
        {
            var error = "Value required";
            var vm    = CreateChild(b => b.Check(x => x.StringProperty).HasValue(error));

            vm.StringProperty = "Valid value";
            ValidationAssert.IsValid(vm);

            vm.StringProperty = String.Empty;
            ValidationAssert.ErrorMessages(vm.ValidationResult, error);
        }
        public void CheckLength_PropertyLengthExceedsMaximumLength_AddsValidationErrorToProperty()
        {
            var error = "Value too long";
            var vm    = CreateChild(b => b.Check(x => x.StringProperty).Length(4, error));

            vm.StringProperty = "1234";
            ValidationAssert.IsValid(vm);

            vm.StringProperty = "12345";
            ValidationAssert.ErrorMessages(vm.ValidationResult, error);
        }
Example #10
0
        public void RevalidateLoadedDescendants_RevalidatesOnlyLoadedDescendants()
        {
            VM.Revalidate(ValidationScope.SelfAndLoadedDescendants);

            Assert.IsFalse(VM.IsLoaded(x => x.UnloadedChild));

            ValidationAssert.ErrorMessages(
                VM.ValidationResult,
                LoadedChildError,
                LoadedGrandChildError
                );
        }
Example #11
0
        public void GetValueOfUnloadedChild_WhenRevalidateLoadedDescendantsWasCalledBefore_ValidatesChild()
        {
            VM.Revalidate(ValidationScope.SelfAndLoadedDescendants);
            VM.GetValue(x => x.UnloadedChild);

            ValidationAssert.ErrorMessages(
                VM.ValidationResult,
                LoadedChildError,
                LoadedGrandChildError,
                UnloadedChildError
                );
        }
Example #12
0
        public void OwnerResult_WhenPopulatedCollectionPropertyIsLoadedAndReturnsNewInvalidViewModel_ContainsError()
        {
            // This IsValid call is important, otherwise the bug that is tested here isn't triggered!
            ValidationAssert.IsValid(Owner);

            var invalidChild = CreateInvalidItem();

            Owner.PopulatedCollectionPropertyItemToReturn = invalidChild;
            Owner.Load(x => x.PopulatedCollection);

            ValidationAssert.ErrorMessages(Owner.ValidationResult, invalidChild.ErrorToReturn);
        }
Example #13
0
        public void RevalidateAllDescendants_LoadsAndValidatesAllDescendants()
        {
            VM.Revalidate(ValidationScope.SelfAndAllDescendants);

            Assert.IsTrue(VM.IsLoaded(x => x.UnloadedChild));

            ValidationAssert.ErrorMessages(
                VM.ValidationResult,
                LoadedChildError,
                LoadedGrandChildError,
                UnloadedChildError,
                UnloadedGrandChildError
                );
        }
        public void RegexValidation_RegexPatternMatches_InvalidatesViewModel()
        {
            var error = "Invalid number";
            var vm    = CreateChild(b => b
                                    .Check(x => x.StringProperty)
                                    .RegexValidation(@"\d+", error)
                                    );

            vm.StringProperty = "1234";
            ValidationAssert.IsValid(vm);

            vm.StringProperty = "AnInvalidNumber";
            ValidationAssert.ErrorMessages(vm.ValidationResult, error);
        }
        public void Refresh_OfViewModelProperty_RevalidatesPropertyValue()
        {
            ParameterizedTest
            .TestCase("InstanceProperty", new Func <RootVMDescriptor, IVMPropertyDescriptor>(x => x.InstanceProperty))
            .TestCase("MappedProperty", x => x.WrapperProperty)
            .TestCase("DelegateProperty", x => x.DelegateProperty)
            .Run(propertySelector => {
                var property                  = propertySelector(VM.Descriptor);
                var expectedError             = "Validation error";
                VM.ValidationErrors[property] = expectedError;

                VM.Refresh(propertySelector);
                ValidationAssert.ErrorMessages(VM.GetValidationResult(property), expectedError);
            });
        }
Example #16
0
        public void OwnerResult_WhenDelegatedViewModelPropertyIsRefreshedAndReturnsNewInvalidViewModel_ContainsError()
        {
            Owner.DelegatedPropertyResultToReturn = new ItemVM();
            Owner.Load(x => x.DelegatedProperty);
            ValidationAssert.IsValid(Owner);

            var invalidChild = CreateInvalidItem();

            Owner.DelegatedPropertyResultToReturn = invalidChild;
            ValidationAssert.IsValid(Owner);

            Owner.Refresh(x => x.DelegatedProperty);
            Assert.IsFalse(Owner.DelegatedProperty.IsValid);

            ValidationAssert.ErrorMessages(Owner.ValidationResult, invalidChild.ErrorToReturn);
        }
        public void SetValue_ToNewChild_RevalidatesOldAndNewChild()
        {
            var vm       = new ParentVM();
            var oldChild = new ChildVM();
            var newChild = new ChildVM();

            vm.SetValue(x => x.Child, oldChild);

            oldChild.ChildPropertyErrorMessage = "Old validation error";
            newChild.ChildPropertyErrorMessage = "New validation error";

            vm.SetValue(x => x.Child, newChild);

            ValidationAssert.ErrorMessages(oldChild.ValidationResult, oldChild.ChildPropertyErrorMessage);
            ValidationAssert.ErrorMessages(newChild.ValidationResult, newChild.ChildPropertyErrorMessage);
        }
        public void SetValue_RemovesValidationErrorsOfAncestorValidatorsFromOldChild()
        {
            string parentErrorMessage = "Parent error";

            var vm       = new ParentVM();
            var oldChild = new ChildVM();
            var newChild = new ChildVM();

            vm.ChildPropertyErrorMessage = parentErrorMessage;

            vm.SetValue(x => x.Child, oldChild);
            ValidationAssert.ErrorMessages(oldChild.ValidationResult, parentErrorMessage);

            vm.SetValue(x => x.Child, newChild);

            ValidationAssert.IsValid(oldChild);
        }
        public void ViewModelValidationDefinedOnParent_IsPerformedIfChildOnlyCallsEnableParentValidation()
        {
            var error = "Parent added error";

            var parent = EmployeeVM.Create(b => {
                b.ValidateDescendant(x => x.SelectedProject)
                .CheckViewModel(args => args.AddError(error));
            });

            var child = ProjectVM.Create(b => {
                b.EnableParentViewModelValidation();
            });

            parent.SetValue(x => x.SelectedProject, child);

            parent.Revalidate(ValidationScope.SelfAndAllDescendants);
            ValidationAssert.ErrorMessages(child.ValidationResult, error);
        }
        public void RefreshContainer_WhenItemIsAddedToSoureCollection_RevalidatesSelectionOfItemVMWhenLoaded()
        {
            Employee   emp   = new Employee();
            EmployeeVM empVM = new EmployeeVM();

            empVM.InitializeFrom(emp);

            empVM.Load(x => x.Projects);

            emp.AddProjekt();

            empVM.RefreshContainer(x => x.Projects);

            ProjectVM projectVM = empVM.GetValue(x => x.Projects).Single();

            projectVM.Load(x => x.Department);

            ValidationAssert.ErrorMessages(projectVM.GetValidationResult(ValidationResultScope.All), ProjectVM.ValidationError);
        }
        [TestMethod] // regression test
        public void SetValue_WhenOldAndNewChildGetInvalid_ParentResultContainsOnlyErrorOfNewChild()
        {
            var parent = new ParentVM();

            var oldChild = new ChildVM();
            var newChild = new ChildVM();

            parent.SetValue(x => x.Child, oldChild);

            oldChild.ChildPropertyErrorMessage = "Old validation error";
            newChild.ChildPropertyErrorMessage = "New validation error";
            parent.SetValue(x => x.Child, newChild);

            ValidationAssert.ErrorMessages(
                parent.ValidationResult,
                ParentVM.ChildInvalidMessage,
                newChild.ChildPropertyErrorMessage
                );
        }
        public void Min_ExecutedSecondTime_ReturnsUpdatedErrorMessage()
        {
            int min          = 10;
            int currentValue = 100;

            var vm = CreateParent(b => b.Check(x => x.IntegerProperty).Min(x => min));

            vm.SetValue(x => x.IntegerProperty, currentValue);

            min = currentValue + 1;
            vm.Revalidate();

            min = currentValue + 2;
            vm.Revalidate();

            ValidationAssert.ErrorMessages(
                vm.ValidationResult,
                Localized.ValidationMin.FormatWith(min)
                );
        }
        public void PropagateChildErrors_WithInvalidChildren_ParentHasError()
        {
            var error = "Child records are invalid";

            var validItem   = new ChildVM();
            var invalidItem = new ChildVM();

            var childDescriptor = CreateChildDescriptor(b => b.CheckViewModel(args => {
                if (args.Target == invalidItem)
                {
                    args.AddError("Item error");
                }
            }));

            ParentVM vm = CreateParent(b => b.PropagateChildErrors(error), childDescriptor);

            vm.Children.Add(validItem);
            ValidationAssert.IsValid(vm.ValidationResult);

            vm.Children.Add(invalidItem);
            var actualParentValidationState = vm.GetValidationResult(ValidationResultScope.Self);

            ValidationAssert.ErrorMessages(actualParentValidationState, error);
        }