private void AssertLtrObjectProperty <TObj, TProperty>(TObj expected, LtrObject actual, Expression <Func <TObj, TProperty> > propertyExpr)
        {
            var propertyName  = ((MemberExpression)propertyExpr.Body).Member.Name;
            var expectedValue = propertyExpr.Compile().Invoke(expected);
            var actualPV      = Assert.Single(actual.Properties.Where(p => p.PropertyName == propertyName));

            Assert.Equal(expectedValue?.ToString(), actualPV.Value);
        }
        public void ShouldCreateLtrObject(IIdentityObject obj)
        {
            // Arrange & Act
            var sut = new LtrObject(obj);

            // Assert
            Assert.Equal(obj.Id, sut.ObjectId);
            Assert.Equal(obj.GetType().FullName, sut.LogObjectClass);
        }
        public void ShouldSkipNonSerializedProperties(TestIdentityObject obj)
        {
            // Arrange
            var sut = new LtrObject(obj);

            // Act
            sut.SetValues(obj);

            // Assert
            Assert.Null(sut[nameof(obj.NonSerializedProperty)]);
            Assert.Null(sut[nameof(obj.Id)]);
        }
        public void ShouldAddProperties(TestIdentityObject obj)
        {
            // Arrange
            var sut = new LtrObject(obj);

            // Act
            sut.SetValues(obj);

            // Assert
            Assert.Equal(obj.StringProperty, sut[nameof(obj.StringProperty)].Value);
            Assert.Equal(obj.IntProperty.ToString(), sut[nameof(obj.IntProperty)].Value);
            Assert.Null(sut[nameof(obj.NullProperty)].Value);
        }
 private void AssertLtrObject(Team expected, LtrObject actual)
 {
     this.AssertLtrObjectProperty(expected, actual, t => t.Name);
     this.AssertLtrObjectProperty(expected, actual, t => t.Code);
 }