public void ReturnsDeltaObjectsForNonDefaultValues_WhenClassHasIgnoreOnDefaultAttribute()
            {
                var originalCustomer = new TestCustomerWithIgnoreOnDefaultAttributeOnClass
                {
                    FirstName     = "goodName",
                    LastName      = "neatName",
                    Age           = 432,
                    SomeStuff     = TestEnum.SomethingMore,
                    SomeFlagStuff = TestFlagEnum.SecondThing | TestFlagEnum.ThirdThing,
                    DateOfBirth   = new DateTime(1919, 10, 10),
                    StartDate     = new DateTime(1980, 11, 11)
                };

                var newCustomer = new TestCustomerWithIgnoreOnDefaultAttributeOnClass
                {
                    FirstName = "badName",
                    Age       = 12,
                    SomeStuff = TestEnum.Nothing
                };

                var deltaObjects = DeltaObjectFromObjectGenerator.GetDeltaObjects(originalCustomer, newCustomer);

                Assert.NotNull(deltaObjects);
                Assert.Equal(3, deltaObjects.Count);
                Assert.Equal(newCustomer.FirstName, deltaObjects.First(o =>
                                                                       o.PropertyName == nameof(TestCustomerWithIgnoreOnDefaultAttributeOnClass.FirstName))
                             .NewValue);
                Assert.Equal(newCustomer.Age, deltaObjects.First(o =>
                                                                 o.PropertyName == nameof(TestCustomerWithIgnoreOnDefaultAttributeOnClass.Age))
                             .NewValue);
                Assert.Equal(newCustomer.SomeStuff, deltaObjects.First(o =>
                                                                       o.PropertyName == nameof(TestCustomerWithIgnoreOnDefaultAttributeOnClass.SomeStuff))
                             .NewValue);
            }
            public void DetectsDelta_WhenStringEmptyAndIgnoreOnDefault()
            {
                var originalCustomer = new TestCustomerWithIgnoreOnDefaultAttributeOnClass
                {
                    FirstName = "originalFirstName"
                };

                var newCustomer = new TestCustomerWithIgnoreOnDefaultAttributeOnClass
                {
                    FirstName = string.Empty
                };

                var deltaObjects = DeltaObjectFromObjectGenerator.GetDeltaObjects(originalCustomer, newCustomer);

                Assert.NotNull(deltaObjects);
                Assert.Single(deltaObjects);
                Assert.Equal(string.Empty, deltaObjects[0].NewValue);
                Assert.Equal(ValueConversionStatus.Success, deltaObjects[0].ValueConversionStatus);
            }
            public void IgnoresDefaultValues_WhenClassHasIgnoreOnDefaultAttribute()
            {
                var originalCustomer = new TestCustomerWithIgnoreOnDefaultAttributeOnClass
                {
                    FirstName     = "goodName",
                    LastName      = "neatName",
                    Age           = 432,
                    SomeStuff     = TestEnum.SomethingMore,
                    SomeFlagStuff = TestFlagEnum.SecondThing | TestFlagEnum.ThirdThing,
                    DateOfBirth   = new DateTime(1919, 10, 10),
                    StartDate     = new DateTime(1980, 11, 11)
                };

                var newCustomer = new TestCustomerWithIgnoreOnDefaultAttributeOnClass();

                var deltaObjects = DeltaObjectFromObjectGenerator.GetDeltaObjects(originalCustomer, newCustomer);

                Assert.NotNull(deltaObjects);
                Assert.Empty(deltaObjects);
            }
            public void ReturnsZeroDeltaObjects_WhenPropertyDefaultAndIgnoreOnDefault()
            {
                var originalCustomer = new TestCustomerWithIgnoreOnDefaultAttributeOnClass
                {
                    FirstName = "originalFirstName"
                };

                var newCustomer = new
                {
                    FirstName = default(string)
                };

                var newCustomerJObj = JObject.FromObject(newCustomer);

                var deltaGroup = DeltaObjectFromJObjectGenerator.GetDeltaObjects(originalCustomer, newCustomerJObj);

                Assert.NotNull(deltaGroup);
                Assert.Equal(GroupValueConversionStatus.NoneFailed, deltaGroup.ValueConversionStatus);
                Assert.Empty(deltaGroup.DeltaObjects);
                Assert.Empty(deltaGroup.DeltaObjectsValueConversionFail);
            }
            public void IgnoresDefaultFlagEnum_WhenClassHasIgnoreOnDefaultAttribute()
            {
                var originalCustomer = new TestCustomerWithIgnoreOnDefaultAttributeOnClass
                {
                    SomeFlagStuff = TestFlagEnum.OneThing | TestFlagEnum.SecondThing
                };

                var newCustomer = new
                {
                    SomeNeedlessStupidProperty = "bad things",
                    SomeFlagStuff = TestFlagEnum.OneThing
                };

                var newCustomerJObj = JObject.FromObject(newCustomer);

                var deltaGroup = DeltaObjectFromJObjectGenerator.GetDeltaObjects(originalCustomer, newCustomerJObj);

                Assert.NotNull(deltaGroup);
                Assert.Equal(GroupValueConversionStatus.NoneFailed, deltaGroup.ValueConversionStatus);
                Assert.Empty(deltaGroup.DeltaObjects);
                Assert.Empty(deltaGroup.DeltaObjectsValueConversionFail);
            }