public void Max_ForNullableIntegerPropertyWithMaxValueSelector_ValidatesPropertyAccordingly()
        {
            var errorMessage = "Value above max";

            var vm = CreateParent(b => b
                                  .Check(x => x.NullableIntegerProperty)
                                  .Max(x => x.Limit, errorMessage)
                                  );

            vm.Limit = 3;

            vm.SetValue(x => x.NullableIntegerProperty, null);

            ValidationAssert.IsValid(vm);

            vm.SetValue(x => x.NullableIntegerProperty, vm.Limit);

            ValidationAssert.IsValid(vm);

            vm.SetValue(x => x.NullableIntegerProperty, vm.Limit + 1);

            var expectedResult = CreateValidationResult(
                Error(errorMessage).For(vm, x => x.NullableIntegerProperty)
                );

            ValidationAssert.AreEqual(expectedResult, vm.ValidationResult);
        }
        public void IsUnique_WithDuplicateStringProperties_InvalidatesViewModel()
        {
            var error = "Duplicate item";
            var vm    = CreateParent(b => b
                                     .CheckCollection(x => x.Children, x => x.StringProperty)
                                     .IsUnique(StringComparison.CurrentCultureIgnoreCase, error)
                                     );

            var item1 = new ChildVM("Item 1")
            {
                StringProperty = "VAL1"
            };
            var item2 = new ChildVM("Item 2")
            {
                StringProperty = "VAL2"
            };
            var item3 = new ChildVM("Item 3")
            {
                StringProperty = "VAL3"
            };

            vm.Children.Add(item1);
            vm.Children.Add(item2);
            vm.Children.Add(item3);

            ValidationAssert.IsValid(vm);
            item3.StringProperty = "VAL2";

            var expectedResult = CreateValidationResult(
                Error(error).For(item3, x => x.StringProperty),
                Error(error).For(item2, x => x.StringProperty)
                );

            ValidationAssert.AreEqual(expectedResult, vm.ValidationResult);
        }
        public void Max_ForNullableIntegerProperty_ValidatesPropertyAccordingly()
        {
            var errorMessage = "Value above max";
            int max          = 10;
            int aboveMax     = max + 1;

            var vm = CreateParent(b => b
                                  .Check(x => x.NullableIntegerProperty)
                                  .Max(max, errorMessage)
                                  );

            vm.SetValue(x => x.NullableIntegerProperty, null);

            ValidationAssert.IsValid(vm);

            vm.SetValue(x => x.NullableIntegerProperty, max);

            ValidationAssert.IsValid(vm);

            vm.SetValue(x => x.NullableIntegerProperty, aboveMax);

            var expectedResult = CreateValidationResult(
                Error(errorMessage).For(vm, x => x.NullableIntegerProperty)
                );

            ValidationAssert.AreEqual(expectedResult, vm.ValidationResult);
        }
        public void Min_ForNullableIntegerProperty_ValidatesPropertyAccordingly()
        {
            var errorMessage = "Value below min";
            int min          = 10;
            int belowMin     = min - 1;

            var vm = CreateParent(b => b
                                  .Check(x => x.NullableIntegerProperty)
                                  .Min(min, errorMessage)
                                  );

            vm.SetValue(x => x.NullableIntegerProperty, null);

            ValidationAssert.IsValid(vm);

            vm.SetValue(x => x.NullableIntegerProperty, min);

            ValidationAssert.IsValid(vm);

            vm.SetValue(x => x.NullableIntegerProperty, belowMin);

            var expectedResult = CreateValidationResult(
                Error(errorMessage).For(vm, x => x.NullableIntegerProperty)
                );

            ValidationAssert.AreEqual(expectedResult, vm.ValidationResult);
        }
        public void IsUnique_WithDuplicateItemViewModels_InvalidatesDuplicateItems()
        {
            var error = "Duplicate item";
            var vm    = CreateParent(b => b
                                     .CheckCollection(x => x.Children)
                                     .IsUnique(error)
                                     );

            var item1 = new ChildVM()
            {
                IntegerProperty = 1, StringProperty = "Item1"
            };

            vm.Children.Add(item1);

            Assert.IsTrue(vm.IsValid);

            vm.Children.Add(item1);

            var expectedResult = CreateValidationResult(
                Error(error).For(item1),
                Error(error).For(item1)
                );

            ValidationAssert.AreEqual(expectedResult, vm.ValidationResult);
        }
Example #6
0
        private static void AssertBehaviorResults(TestVM vm, ExpectedResults results)
        {
            ValidationAssert.AreEqual(
                results.Properties,
                vm.GetResultFromBehavior(ValidationResultScope.PropertiesOnly)
                );

            ValidationAssert.AreEqual(
                results.ViewModel,
                vm.GetResultFromBehavior(ValidationResultScope.ViewModelValidationsOnly)
                );

            ValidationAssert.AreEqual(
                results.Self,
                vm.GetResultFromBehavior(ValidationResultScope.Self)
                );

            ValidationAssert.AreEqual(
                results.Descenants,
                vm.GetResultFromBehavior(ValidationResultScope.Descendants)
                );

            ValidationAssert.AreEqual(
                results.All,
                vm.GetResultFromBehavior(ValidationResultScope.All)
                );
        }
Example #7
0
        public void Revalidate_ValidationFails_UpdatesValidationState()
        {
            SetPropertyToValidValue();
            SetPropertyToInvalidValue();
            VM.PropertyResultToReturn = InvalidValidationResult;

            RevalidateProperty();
            ValidationAssert.AreEqual(InvalidValidationResult, VM.ValidationResult);
        }
Example #8
0
        public void Join_WhenResultsContainSameErrorInstance_FiltersDuplicateErrors()
        {
            var error  = CreateValidationError();
            var s1     = CreateValidationResult(error);
            var s2     = CreateValidationResult(error);
            var joined = ValidationResult.Join(s1, s2);

            ValidationAssert.AreEqual(new ValidationResult(error), joined);
        }
Example #9
0
        public void Join_WhenResultsContainEqualErrors_DoesNotFiltersErrors()
        {
            var firstEqualError  = CreateValidationError("Equal error");
            var secondEqualError = CreateValidationError("Equal error");

            Assert.AreEqual(firstEqualError, secondEqualError, "Assumption failed");

            var s1 = CreateValidationResult(firstEqualError);
            var s2 = CreateValidationResult(secondEqualError);

            var joined   = ValidationResult.Join(s1, s2);
            var expected = new ValidationResult(new[] { firstEqualError, secondEqualError });

            ValidationAssert.AreEqual(expected, joined);
        }
        public void Revalidate_WhenDescendantAddsValidationError_AddsErrorToAncestorValidationResult()
        {
            Results.SetupFailing().PropertyValidation
            .Targeting(Child, x => x.ChildProperty)
            .On(Child);

            Results.SetupFailing().ViewModelValidation
            .Targeting(Child)
            .On(Child);

            Child.Revalidate(x => x.ChildProperty);

            Results.VerifySetupValidationResults();

            var expectedAncestorResult = new ValidationResult(
                Results.ValidatorSetups.SelectMany(x => x.Result.Errors)
                );

            ValidationAssert.AreEqual(expectedAncestorResult, Grandparent.ValidationResult);
        }
        public void Min_ForIntegerPropertyWithMinValueSelector_ValidatesPropertyAccordingly()
        {
            var errorMessage = "Value below min";

            var vm = CreateParent(b => b
                                  .Check(x => x.IntegerProperty)
                                  .Min(x => x.Limit, errorMessage)
                                  );

            vm.Limit = 3;
            vm.SetValue(x => x.IntegerProperty, vm.Limit);

            ValidationAssert.IsValid(vm);

            vm.SetValue(x => x.IntegerProperty, vm.Limit - 1);

            var expectedResult = CreateValidationResult(
                Error(errorMessage).For(vm, x => x.IntegerProperty)
                );

            ValidationAssert.AreEqual(expectedResult, vm.ValidationResult);
        }
        public void IsUnique_WithCustomDuplicateEqualityComparer_InvalidatesViewModel()
        {
            var error = "Duplicate item";
            var vm    = CreateParent(b => b
                                     .CheckCollection(x => x.Children)
                                     .IsUnique(new CustomChildVMComparer(), error)
                                     );

            var item1 = new ChildVM()
            {
                IntegerProperty = 1, StringProperty = "Item1"
            };
            var item2 = new ChildVM()
            {
                IntegerProperty = 2, StringProperty = "Item2"
            };
            var item3 = new ChildVM()
            {
                IntegerProperty = 3, StringProperty = "Item3"
            };

            vm.Children.Add(item1);
            vm.Children.Add(item2);
            vm.Children.Add(item3);

            Assert.IsTrue(vm.IsValid);

            item2.IntegerProperty = 1;
            item2.StringProperty  = "Item1";

            var expectedResult = CreateValidationResult(
                Error(error).For(item2),
                Error(error).For(item1)
                );

            ValidationAssert.AreEqual(expectedResult, vm.ValidationResult);
        }
        public void IsUnique_WithDuplicateIntegerProperties_InvalidatesViewModel()
        {
            var error = "Duplicate item";
            var vm    = CreateParent(b => b
                                     .CheckCollection(x => x.Children, x => x.IntegerProperty)
                                     .IsUnique(error)
                                     );

            var item1 = new ChildVM()
            {
                IntegerProperty = 1
            };
            var item2 = new ChildVM()
            {
                IntegerProperty = 2
            };
            var item3 = new ChildVM()
            {
                IntegerProperty = 3
            };

            vm.Children.Add(item1);
            vm.Children.Add(item2);
            vm.Children.Add(item3);

            Assert.IsTrue(vm.IsValid);

            item2.IntegerProperty = 1;

            var expectedResult = CreateValidationResult(
                Error(error).For(item2, x => x.IntegerProperty),
                Error(error).For(item1, x => x.IntegerProperty)
                );

            ValidationAssert.AreEqual(expectedResult, vm.ValidationResult);
        }
        public void ValueInRange_ForNullableIntergerProperty_ValidatesPropertyAccordingly()
        {
            var errorMessage    = "Value not in range";
            int min             = 1;
            int max             = 10;
            int valueOutOfRange = max + 1;

            var vm = CreateParent(b => b
                                  .Check(x => x.NullableIntegerProperty)
                                  .ValueInRange(min, max, errorMessage)
                                  );

            vm.SetValue(x => x.NullableIntegerProperty, null);

            ValidationAssert.IsValid(vm);

            vm.SetValue(x => x.NullableIntegerProperty, valueOutOfRange);

            var expectedResult = CreateValidationResult(
                Error(errorMessage).For(vm, x => x.NullableIntegerProperty)
                );

            ValidationAssert.AreEqual(expectedResult, vm.ValidationResult);
        }