public RequireValidationSampleViewModel()
        {
            this.GetPropertyMetadata(() => Text)
            .AddCascadeChangeNotifications(() => Sample);

            this.SetInitialPropertyValue(() => MergeErrors, true)
            .OnChanged(pvc =>
            {
                ValidationService.MergeValidationErrors = MergeErrors;
                ResetValidation();
                Validate(ValidationBehavior.TriggerValidationErrorsOnFailure);
            });

            ValidationService = new DataAnnotationValidationService <RequireValidationSampleViewModel>(this)
            {
                MergeValidationErrors = MergeErrors
            }.AddRule
            (
                property: o => o.Text,
                rule: ctx =>
            {
                return(ctx.Entity.Text == "foo"
                        ? ctx.Succeeded()
                        : ctx.Failed("must be equal to 'foo'"));
            }
            );
        }
Пример #2
0
        public void AbstractViewModel_When_merge_errors_changes_it_should_not_fail()
        {
            var sut = new SampleTestViewModel();
            var svc = new DataAnnotationValidationService <SampleTestViewModel>(sut);

            sut.ValidateUsing(svc, forceIsValidationEnabledTo: true);

            sut.Validate();
            svc.MergeValidationErrors = !svc.MergeValidationErrors;
        }
Пример #3
0
        public void AbstractViewModel_it_should_be_possible_to_change_a_validatable_property_in_the_validated_event()
        {
            var sut = new SampleTestViewModel();
            var svc = DataAnnotationValidationService.CreateFor(sut);

            sut.ValidateUsing(svc, forceIsValidationEnabledTo: true);
            sut.Validated += (s, e) =>
            {
                sut.AnotherOne = "fail";
            };

            sut.NotNullNotEmpty = "a value";
        }
Пример #4
0
        public void AbstractViewModel_it_should_be_possible_to_change_a_validatable_property_at_custom_validation_time()
        {
            var sut = new SampleTestViewModelWithValidationCallback();
            var svc = DataAnnotationValidationService.CreateFor(sut);

            sut.ValidateUsing(svc, forceIsValidationEnabledTo: true);
            sut.Test_OnValidate = ctx =>
            {
                sut.AnotherOne = "fail";
            };

            sut.NotNullNotEmpty = "a value";
        }
        protected override IValidationService GetValidationService()
        {
            var svc = new DataAnnotationValidationService <RequireValidationSampleViewModel>(this)
            {
                MergeValidationErrors = this.MergeErrors
            }.AddRule
            (
                property: () => this.Text,
                error: ctx => "must be equal to 'foo'",
                rule: ctx => ctx.Entity.Text == "foo"
            );

            return(svc);
        }
Пример #6
0
        public void AbstractViewModel_When_ValidateProperty_with_Trigger_berhavior_ErrorsChanged_event_should_be_raised()
        {
            List <String> raised   = new List <string>();
            var           propName = "NotNullNotEmpty";

            var sut = new SampleTestViewModel();
            var svc = new DataAnnotationValidationService <SampleTestViewModel>(sut);

            sut.ValidateUsing(svc, forceIsValidationEnabledTo: true);
            sut.ErrorsChanged += (s, e) => raised.Add(e.PropertyName);

            sut.Test_ValidateProperty(propName, ValidationBehavior.TriggerValidationErrorsOnFailure);

            Assert.IsTrue(raised.Contains(propName));
        }
Пример #7
0
        public void AbstractViewModel_When_ValidateProperty_PropertyChanged_event_should_not_be_raised()
        {
            List <String> raised   = new List <string>();
            var           propName = "NotNullNotEmpty";

            var sut = new SampleTestViewModel();
            var svc = new DataAnnotationValidationService <SampleTestViewModel>(sut);

            sut.ValidateUsing(svc, forceIsValidationEnabledTo: true);
            sut.PropertyChanged += (s, e) => raised.Add(e.PropertyName);

            sut.Test_ValidateProperty(propName);

            Assert.IsFalse(raised.Contains(propName));
        }
Пример #8
0
        public void AbstractMementoViewModel_When_Validate_and_Validation_is_suspended_Validated_event_should_not_be_raised()
        {
            Boolean raised = false;

            var sut = new SampleTestViewModel();
            var svc = new DataAnnotationValidationService <SampleTestViewModel>(sut);

            sut.ValidateUsing(svc, forceIsValidationEnabledTo: true);
            sut.Validated += (s, e) => raised = true;

            using (svc.SuspendValidation())  //so that we can change a property without triggering the validation process
            {
                sut.Validate();
            }

            Assert.IsFalse(raised);
        }
Пример #9
0
        public void AbstractViewModel_When_ValidateProperty_and_Validation_is_suspended_Validated_event_should_not_be_raised()
        {
            Boolean raised   = false;
            var     propName = "NotNullNotEmpty";

            var sut = new SampleTestViewModel();
            var svc = new DataAnnotationValidationService <SampleTestViewModel>(sut);

            sut.ValidateUsing(svc, forceIsValidationEnabledTo: true);
            sut.Validated += (s, e) => raised = true;

            using (svc.SuspendValidation())  //so that we can change a property without triggering the validation process
            {
                sut.Test_ValidateProperty(propName, ValidationBehavior.TriggerValidationErrorsOnFailure);
            }

            Assert.IsFalse(raised);
        }
Пример #10
0
        public void AbstractMementoViewModel_it_should_be_possible_to_change_a_validatable_property_in_a_custom_validation_rule()
        {
            var sut = new SampleTestViewModel();
            var svc = DataAnnotationValidationService.CreateFor(sut);

            svc.AddRule(
                property: () => sut.NotNullNotEmpty,
                error: ctx => "error",
                rule: ctx =>
            {
                sut.AnotherOne = "fail";

                return(true);
            });

            sut.ValidateUsing(svc, forceIsValidationEnabledTo: true);

            sut.NotNullNotEmpty = "a value";
        }
Пример #11
0
        public void AbstractViewModel_When_ValidateProperty_with_Trigger_berhavior_PropertyChanged_event_should_be_raised_if_the_status_of_errors_changes()
        {
            List <String> raised   = new List <string>();
            var           propName = "NotNullNotEmpty";

            var sut = new SampleTestViewModel();
            var svc = new DataAnnotationValidationService <SampleTestViewModel>(sut);

            sut.ValidateUsing(svc, forceIsValidationEnabledTo: true);
            sut.PropertyChanged += (s, e) => raised.Add(e.PropertyName);

            sut.Test_ValidateProperty(propName, ValidationBehavior.TriggerValidationErrorsOnFailure);

            using (svc.SuspendValidation())           //so that we can change a property without triggering the validation process
            {
                sut.NotNullNotEmpty = "qwertyqwerty"; //this raises 1 PropertyChanged
            }

            sut.Test_ValidateProperty(propName, ValidationBehavior.TriggerValidationErrorsOnFailure);

            Assert.AreEqual(3, raised.Count(p => p == propName));
        }