public void AddMutation_Adds_Published()
        {
            // Arrange
            var obj1 = new TestItem {
                Name = "Test", Age = 1, CreationDate = DateTime.Now
            };
            var obj2 = new TestItem {
                Name = "Test", Age = 2, CreationDate = DateTime.Now
            };

            var request = new PublishRequest();

            // Act
            request.AddMutation(obj1, obj2);

            // Assert
            var model = JsonConvert.DeserializeObject <MutationModel <TestItem> >(request.Message);

            Assert.True(DateTime.UtcNow >= model.Published);
            Assert.True(model.Published != default(DateTime));
        }
        public void AddMutation_Adds_EventType()
        {
            // Arrange
            var obj1 = new TestItem {
                Name = "Test", Age = 1, CreationDate = DateTime.Now
            };
            var obj2 = new TestItem {
                Name = "Test", Age = 2, CreationDate = DateTime.Now
            };
            var eventType = "order-service.order";

            var request = new PublishRequest();

            // Act
            request.AddMutation(obj1, obj2, eventType);

            // Assert
            var model = JsonConvert.DeserializeObject <MutationModel <TestItem> >(request.Message);

            Assert.Equal(eventType, model.EventType);
        }
        public void NestedItemChanged()
        {
            var obj1 = new TestItem {
                Name = "Test", Age = 10, CreationDate = DateTime.Today, Address = new TestAddress {
                    AddressRow1 = "B"
                }
            };
            var obj2 = new TestItem {
                Name = "Test", Age = 10, CreationDate = DateTime.Today, Address = new TestAddress {
                    AddressRow1 = "C"
                }
            };

            var model = new MutationModel <TestItem> {
                OldImage = obj1, NewImage = obj2
            };
            var diff = model.Diff();

            Assert.Equal(2, diff.Count);
            Assert.Contains(diff, p => p == "Address");
            Assert.Contains(diff, p => p == "Address.AddressRow1");
        }
        public void NestedDictionaryContentChanged()
        {
            var obj1 = new TestItem {
                Name = "Test", Age = 10, CreationDate = DateTime.Today, Address = new TestAddress {
                    AddressRow1 = "B"
                }
            };
            var obj2 = new TestItem {
                Name = "Test", Age = 10, CreationDate = DateTime.Today, Address = new TestAddress {
                    AddressRow1 = "C"
                }
            };

            var fixture         = new Fixture();
            var minisDictionary = new Dictionary <string, TestMiniItem>();

            fixture.CreateMany <KeyValuePair <string, TestMiniItem> >().ToList().ForEach(kvp => minisDictionary.Add(kvp.Key, kvp.Value));

            var minisDictionary2 = new Dictionary <string, TestMiniItem>();

            fixture.CreateMany <KeyValuePair <string, TestMiniItem> >().ToList().ForEach(kvp => minisDictionary2.Add(kvp.Key, kvp.Value));

            obj1.MinisDictionary = minisDictionary;
            obj2.MinisDictionary = minisDictionary2;

            var model = new MutationModel <TestItem> {
                OldImage = obj1, NewImage = obj2
            };
            var diff = model.Diff();

            Assert.Equal(5, diff.Count);
            Assert.Contains(diff, p => p == "Address");
            Assert.Contains(diff, p => p == "Address.AddressRow1");
            Assert.Contains(diff, p => p == "MinisDictionary");
            Assert.Contains(diff, p => p == "MinisDictionary.Id");
            Assert.Contains(diff, p => p == "MinisDictionary.Message");
        }