using ZB.MOM.WW.CBDD.Bson; using ZB.MOM.WW.CBDD.Core.Collections; using Xunit; using System.Linq; namespace ZB.MOM.WW.CBDD.Tests; public class VisibilityTests { public class VisibilityEntity { // Should be included /// /// Gets or sets the normal prop. /// public int NormalProp { get; set; } // Should be included (serialization usually writes it) /// /// Gets or sets the private set prop. /// public int PrivateSetProp { get; private set; } // Should be included /// /// Gets or sets the init prop. /// public int InitProp { get; init; } // Fields - typically included in BSON if public, but reflection need GetFields public string PublicField = string.Empty; // Should NOT be included private int _privateField; // Helper to set private /// /// Tests set private. /// /// Value assigned to the private field. public void SetPrivate(int val) => _privateField = val; } /// /// Tests generate schema visibility checks. /// [Fact] public void GenerateSchema_VisibilityChecks() { var schema = BsonSchemaGenerator.FromType(); schema.Fields.ShouldContain(f => f.Name == "normalprop"); schema.Fields.ShouldContain(f => f.Name == "privatesetprop"); schema.Fields.ShouldContain(f => f.Name == "initprop"); // Verify assumption about fields // Current implementation uses GetProperties, so publicfield might be missing. // We will assert current status and then fix if requested/failed. schema.Fields.ShouldContain(f => f.Name == "publicfield"); // This will likely fail currently schema.Fields.ShouldNotContain(f => f.Name == "_privatefield"); } }