public void TryGetReplacedValue_Extracts_The_Oldest_Value()
        {
            // arrange
            var entity = TestHelper.CreateEntityWithId <Artist>(1);
            var propertyChangeTracker = new PropertyChangeTracker(entity);

            propertyChangeTracker.AddPropertyChangedItem <Artist>(x => x.Name, "T1", "T2");
            propertyChangeTracker.AddPropertyChangedItem <Artist>(x => x.Name, "T2", "T3");

            // act
            string value;

            propertyChangeTracker.TryGetReplacedValue <Artist, string>(x => x.Name, out value);

            // assert
            Assert.Equal("T1", value);
        }
        public void HasChanged_Returns_True_For_Newly_Created_Entity_ForeignKey()
        {
            // arrange
            var entity = TestHelper.CreateEntityWithId <Artist>(1);
            var propertyChangeTracker = new PropertyChangeTracker(entity);

            propertyChangeTracker.AddPropertyChangedItem <Artist>(x => x.FK_AnotherArtist_ID, 0, 0);

            // act
            var result = propertyChangeTracker.HasChanged <Artist>(x => x.FK_AnotherArtist_ID);

            // assert
            Assert.True(result);
        }
        public void HasChanged_Works()
        {
            // arrange
            var entity = TestHelper.CreateEntityWithId <Artist>(1);
            var propertyChangeTracker = new PropertyChangeTracker(entity);

            propertyChangeTracker.AddPropertyChangedItem <Artist>(x => x.Name, "OldValue", "NewValue");

            // act
            var result = propertyChangeTracker.HasChanged <Artist>(x => x.Name);

            // assert
            Assert.True(result);
        }
        public void HasChanged_Should_Not_Track_Property_Changes_With_The_Same_NewValue_As_The_Old_Value()
        {
            // arrange
            var entity = TestHelper.CreateEntityWithId <Artist>(1);
            var propertyChangeTracker = new PropertyChangeTracker(entity);

            propertyChangeTracker.AddPropertyChangedItem <Artist>(x => x.Name, "TestValue", "TestValue");

            // act
            var result = propertyChangeTracker.HasChanged <Artist>(x => x.Name);

            // assert
            Assert.False(result);
        }
        public void GetChangedProperties_Works()
        {
            // arrange
            var entity = TestHelper.CreateEntityWithId <Artist>(1);
            var propertyChangeTracker = new PropertyChangeTracker(entity);

            propertyChangeTracker.AddPropertyChangedItem <Artist>(x => x.Name, "OldValue", "NewValue");

            // act
            var result = propertyChangeTracker.GetChangedProperties();

            // asset
            Assert.Equal("Name", result.First());
        }
        public void Clear_Any_Changes_Are_Discarded()
        {
            // arrange
            var entity = TestHelper.CreateEntityWithId <Artist>(1);
            var propertyChangeTracker = new PropertyChangeTracker(entity);

            propertyChangeTracker.AddPropertyChangedItem <Artist>(x => x.Name, "OldValue", "NewValue");

            // act
            propertyChangeTracker.Clear();

            // asset
            Assert.False(propertyChangeTracker.HasChanges);
        }
        public void AddPropertyChangedItem_Does_Nothing_When_Tracking_Is_Disabled()
        {
            // arrange
            var entity = TestHelper.CreateEntityWithId <Artist>(1);
            var propertyChangeTracker = new PropertyChangeTracker(entity);

            propertyChangeTracker.DisableChangeTracking = true;
            propertyChangeTracker.AddPropertyChangedItem <Artist>(x => x.Name, "OldValue", "NewValue");

            // act
            var result = propertyChangeTracker.HasChanged <Artist>(x => x.Name);

            // asset
            Assert.False(result);
        }