From 55bb555e2fe074cae6e863aafa524876da1837c3 Mon Sep 17 00:00:00 2001 From: Andrew Scott Date: Thu, 2 Nov 2023 16:13:39 -0700 Subject: [PATCH] fix: prevent conflation of Symbol and Reflection TypeViewModel instances --- .../Tests/Security/PropertySecurityTests.cs | 6 +++--- src/IntelliTect.Coalesce/TypeDefinition/TypeViewModel.cs | 5 ++++- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/IntelliTect.Coalesce.Tests/Tests/Security/PropertySecurityTests.cs b/src/IntelliTect.Coalesce.Tests/Tests/Security/PropertySecurityTests.cs index 35a064830..297e72190 100644 --- a/src/IntelliTect.Coalesce.Tests/Tests/Security/PropertySecurityTests.cs +++ b/src/IntelliTect.Coalesce.Tests/Tests/Security/PropertySecurityTests.cs @@ -77,7 +77,7 @@ public void UsageOfEntityWithInternalDbSet_IsTreatedLikeExternalType(ClassViewMo } [Theory] - [ClassViewModelData(typeof(ComplexModel))] + [ReflectionClassViewModelData(typeof(ComplexModel))] public void IncludeChildren_IncludesNonSuppressedMembers(ClassViewModelData data) { ClassViewModel vm = data; @@ -95,8 +95,8 @@ public void IncludeChildren_IncludesNonSuppressedMembers(ClassViewModelData data } [Theory] - [ClassViewModelData(typeof(ComplexModel), nameof(ComplexModel.NoAutoIncludeReferenceNavigation))] - [ClassViewModelData(typeof(ComplexModel), nameof(ComplexModel.NoAutoIncludeByClassReferenceNavigation))] + [ReflectionClassViewModelData(typeof(ComplexModel), nameof(ComplexModel.NoAutoIncludeReferenceNavigation))] + [ReflectionClassViewModelData(typeof(ComplexModel), nameof(ComplexModel.NoAutoIncludeByClassReferenceNavigation))] public void IncludeChildren_DoesNotIncludedOptedOutMember(ClassViewModelData data, string propName) { ClassViewModel vm = data; diff --git a/src/IntelliTect.Coalesce/TypeDefinition/TypeViewModel.cs b/src/IntelliTect.Coalesce/TypeDefinition/TypeViewModel.cs index f752a60cd..c6e3ff3e3 100644 --- a/src/IntelliTect.Coalesce/TypeDefinition/TypeViewModel.cs +++ b/src/IntelliTect.Coalesce/TypeDefinition/TypeViewModel.cs @@ -418,7 +418,10 @@ public override bool Equals(object? obj) { if (!(obj is TypeViewModel that)) return false; - return this.VerboseFullyQualifiedName == that.VerboseFullyQualifiedName; + return + this.VerboseFullyQualifiedName == that.VerboseFullyQualifiedName && + // Ensure we don't conflate reflection and symbol types together: + this.GetType() == that.GetType(); } public override int GetHashCode() => VerboseFullyQualifiedName.GetHashCode();