public void FindDifferences_works_nothingIsIgnoredWhenIgnoreFuncsAreNull()
        {
            var oldState = new SimpleVictim
            {
                Property1 = "Old prop1",
                Property2 = "Old prop2",
                field1    = "Old field1",
                field2    = "Old field2"
            };

            var newState = new SimpleVictim
            {
                Property1 = "New prop1",
                Property2 = "New prop2",
                field1    = "New field1",
                field2    = "New field2"
            };

            worker.FindDifferences
            (
                oldState,
                newState,
                stateChanges,
                3,
                null,
                null
            );

            Assert.Equal(4, stateChanges.Changes.Count);

            Assert.Contains(stateChanges.Changes, x => x.OldValue.Equals("Old field1") && x.NewValue.Equals("New field1"));
            Assert.Contains(stateChanges.Changes, x => x.OldValue.Equals("Old field2") && x.NewValue.Equals("New field2"));
            Assert.Contains(stateChanges.Changes, x => x.OldValue.Equals("Old prop1") && x.NewValue.Equals("New prop1"));
            Assert.Contains(stateChanges.Changes, x => x.OldValue.Equals("Old prop2") && x.NewValue.Equals("New prop2"));
        }
        public void FindDifferences_works_withIgnoredProperty()
        {
            var oldState = new SimpleVictim
            {
                Property1 = "Old prop1",
                Property2 = "Old prop2",
                field1    = "Old field1",
                field2    = "Old field2"
            };

            var newState = new SimpleVictim
            {
                Property1 = "New prop1",
                Property2 = "New prop2",
                field1    = "New field1",
                field2    = "New field2"
            };

            worker.FindDifferences
            (
                oldState,
                newState,
                stateChanges,
                3,
                (field, context) => false,
                (prop, context) => prop.Name.Equals("Property1")
            );

            Assert.Equal(3, stateChanges.Changes.Count);

            Assert.Contains(stateChanges.Changes, x => x.OldValue.Equals("Old field1") && x.NewValue.Equals("New field1"));
            Assert.Contains(stateChanges.Changes, x => x.OldValue.Equals("Old field2") && x.NewValue.Equals("New field2"));
            Assert.Contains(stateChanges.Changes, x => x.OldValue.Equals("Old prop2") && x.NewValue.Equals("New prop2"));
        }
        public void FindDifferences_works_nothingIsIgnoredWhenIgnoreFuncsAreNull()
        {
            var oldState = new SimpleVictim
            {
                Property1 = "Old prop1",
                Property2 = "Old prop2",
                field1    = "Old field1",
                field2    = "Old field2"
            };

            var newState = new SimpleVictim
            {
                Property1 = "New prop1",
                Property2 = "New prop2",
                field1    = "New field1",
                field2    = "New field2"
            };

            worker.FindDifferences
            (
                oldState,
                newState,
                stateChanges,
                3,
                null,
                null
            );

            Assert.Equal(4, stateChanges.Changes.Count);

            var sorted = stateChanges.Changes.OrderBy(x => x.Breadcrumb).ToList();

            Assert.Equal("Old field1", sorted[0].OldValue);
            Assert.Equal("New field1", sorted[0].NewValue);

            Assert.Equal("Old field2", sorted[1].OldValue);
            Assert.Equal("New field2", sorted[1].NewValue);

            Assert.Equal("Old prop1", sorted[2].OldValue);
            Assert.Equal("New prop1", sorted[2].NewValue);

            Assert.Equal("Old prop2", sorted[3].OldValue);
            Assert.Equal("New prop2", sorted[3].NewValue);
        }
        public void FindDifferences_works_withIgnoredProperty()
        {
            var oldState = new SimpleVictim
            {
                Property1 = "Old prop1",
                Property2 = "Old prop2",
                field1    = "Old field1",
                field2    = "Old field2"
            };

            var newState = new SimpleVictim
            {
                Property1 = "New prop1",
                Property2 = "New prop2",
                field1    = "New field1",
                field2    = "New field2"
            };

            worker.FindDifferences
            (
                oldState,
                newState,
                stateChanges,
                3,
                (field, context) => false,
                (prop, context) => prop.Name.Equals("Property1")
            );

            Assert.Equal(3, stateChanges.Changes.Count);

            var sorted = stateChanges.Changes.OrderBy(x => x.Breadcrumb).ToList();

            Assert.Equal("Old field1", sorted[0].OldValue);
            Assert.Equal("New field1", sorted[0].NewValue);

            Assert.Equal("Old field2", sorted[1].OldValue);
            Assert.Equal("New field2", sorted[1].NewValue);

            Assert.Equal("Old prop2", sorted[2].OldValue);
            Assert.Equal("New prop2", sorted[2].NewValue);
        }