Skip to content

Commit a7c198a

Browse files
committed
Add unit test for validating inherited properties
1 parent 8ec5a4a commit a7c198a

File tree

1 file changed

+58
-3
lines changed

1 file changed

+58
-3
lines changed

tests/CommunityToolkit.Mvvm.UnitTests/Test_ObservableValidator.cs

Lines changed: 58 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -491,7 +491,7 @@ public void Test_ObservableRecipient_ValidationOnNonValidatableProperties(Type t
491491
{
492492
ObservableValidatorBase viewmodel = (ObservableValidatorBase)Activator.CreateInstance(type)!;
493493

494-
viewmodel.ValidateAll();
494+
viewmodel.ValidateAllProperties();
495495
}
496496

497497
// See: https://github.com/CommunityToolkit/WindowsCommunityToolkit/issues/4272
@@ -565,6 +565,50 @@ public void Test_ObservableValidator_WithGenericTypeParameters()
565565
Assert.IsFalse(model.HasErrors);
566566
}
567567

568+
// See https://github.com/CommunityToolkit/dotnet/issues/691
569+
[TestMethod]
570+
public void Test_ObservableValidator_ValidateAllProperties_IncludeInheritedProperties()
571+
{
572+
DerivedModelWithValidatableProperties model = new();
573+
List<DataErrorsChangedEventArgs> events = new();
574+
575+
model.ErrorsChanged += (s, e) => events.Add(e);
576+
577+
model.ValidateAllProperties();
578+
579+
Assert.IsTrue(model.HasErrors);
580+
Assert.IsTrue(events.Count == 2);
581+
582+
Assert.IsTrue(events.Any(e => e.PropertyName == nameof(DerivedModelWithValidatableProperties.Name)));
583+
Assert.IsTrue(events.Any(e => e.PropertyName == nameof(DerivedModelWithValidatableProperties.Number)));
584+
585+
events.Clear();
586+
587+
model.Number = 42;
588+
589+
model.ValidateAllProperties();
590+
591+
Assert.IsTrue(model.HasErrors);
592+
Assert.IsTrue(events.Count == 2);
593+
594+
Assert.IsTrue(events.Any(e => e.PropertyName == nameof(DerivedModelWithValidatableProperties.Name)));
595+
Assert.IsTrue(events.Any(e => e.PropertyName == nameof(DerivedModelWithValidatableProperties.Number)));
596+
597+
Assert.AreEqual(1, model.GetErrors(nameof(DerivedModelWithValidatableProperties.Name)).Count());
598+
Assert.AreEqual(0, model.GetErrors(nameof(DerivedModelWithValidatableProperties.Number)).Count());
599+
600+
events.Clear();
601+
602+
model.Name = "Bob";
603+
model.Number = 80;
604+
605+
model.ValidateAllProperties();
606+
607+
Assert.IsFalse(model.HasErrors);
608+
Assert.IsTrue(events.Count == 1);
609+
610+
Assert.IsTrue(events.Any(e => e.PropertyName == nameof(DerivedModelWithValidatableProperties.Name))); }
611+
568612
public class Person : ObservableValidator
569613
{
570614
private string? name;
@@ -786,9 +830,9 @@ public class ObservableValidatorBase : ObservableValidator
786830
{
787831
public int? MyDummyInt { get; set; } = 0;
788832

789-
public void ValidateAll()
833+
public new void ValidateAllProperties()
790834
{
791-
ValidateAllProperties();
835+
base.ValidateAllProperties();
792836
}
793837
}
794838

@@ -824,6 +868,17 @@ public abstract class AbstractModelWithValidatableProperty : ObservableValidator
824868
public string? Name { get; set; }
825869
}
826870

871+
public class DerivedModelWithValidatableProperties : AbstractModelWithValidatableProperty
872+
{
873+
[Range(10, 1000)]
874+
public int Number { get; set; }
875+
876+
public new void ValidateAllProperties()
877+
{
878+
base.ValidateAllProperties();
879+
}
880+
}
881+
827882
public class GenericPerson<T> : ObservableValidator
828883
{
829884
[Required]

0 commit comments

Comments
 (0)