using Domain; using System.Reflection; namespace Db.Tests; /// The domain stayed clean: Client/Order do NOT derive from and expose no -typed member; asserted from the persistence side, where both are visible. public class DomainStaysPlainTests { private const BindingFlags AllMembers = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static; // The leak is gone: no DbBase in the base chain, no DbContext-typed member (reflection). [Theory] [InlineData(typeof(Client))] [InlineData(typeof(Order))] public void Domain_objects_are_plain__no_DbBase_no_DbContext_member(Type type) { // Not DbBase, and not a derived type either (walk the base chain): for (var t = type; t is not null && t != typeof(object); t = t.BaseType) Assert.NotSame(typeof(DbBase), t); // No DbContext-typed member, public or private: foreach (var p in type.GetProperties(AllMembers)) Assert.True(p.PropertyType != typeof(DbContext), $"{type.Name}.{p.Name} leaks a DbContext-typed property"); foreach (var f in type.GetFields(AllMembers)) Assert.True(f.FieldType != typeof(DbContext), $"{type.Name}.{f.Name} leaks a DbContext-typed field"); } }