public void changeTrackingService_hasTransientEntities_should_be_false_after_rejectChanges()
        {
            var svc = new ChangeTrackingService();
            var p = new Person( svc, true );
            svc.RejectChanges();

            svc.HasTransientEntities.Should().Be.False();
        }
        public void after_suspend_cannot_call_RejectChanges()
        {
            ChangeTrackingService svc = new ChangeTrackingService();

            Person p = new Person( svc );
            p.Name = "Mauro";

            svc.Suspend();
            svc.RejectChanges();
        }
        public void after_rejectChanges_service_canRedo_is_false()
        {
            ChangeTrackingService svc = new ChangeTrackingService();

            Person p = new Person( svc );
            p.Name = "Mauro";
            svc.RejectChanges();

            Assert.IsFalse( svc.CanRedo );
        }
        public void after_rejectChanges_entity_is_no_more_changed()
        {
            EntityTrackingStates expected = EntityTrackingStates.None;

            ChangeTrackingService svc = new ChangeTrackingService();

            Person p = new Person( svc );
            p.Name = "Mauro";

            svc.RejectChanges();

            EntityTrackingStates actual = svc.GetEntityState( p );
            Assert.AreEqual<EntityTrackingStates>( expected, actual );
        }
        public void entity_registeredAsTransient_without_autoRemove_on_RejectChanges_is_no_more_transient()
        {
            ChangeTrackingService svc = new ChangeTrackingService();
            EntityTrackingStates expected = EntityTrackingStates.None;

            Person p = new Person( svc, false );
            svc.RegisterTransient( p, false );
            svc.RejectChanges();

            EntityTrackingStates actual = svc.GetEntityState( p );

            Assert.AreEqual<EntityTrackingStates>( expected, actual );
        }
        public void unchangedTransientEntity_service_RejectChanges_entity_is_not_transient()
        {
            ChangeTrackingService svc = new ChangeTrackingService();

            Person p = new Person( svc );

            svc.RejectChanges();

            var list = svc.GetEntities( EntityTrackingStates.IsTransient, false );
            var persons = list.OfType<Person>();

            Assert.IsFalse( persons.Contains( p ) );
        }
        public void service_on_rejectChanges_with_nothing_to_do_not_raise_trackingServiceStateChanged_event()
        {
            Int32 expected = 0;
            Int32 actual = 0;

            ChangeTrackingService svc = new ChangeTrackingService();
            Person p = new Person( svc, false );

            svc.TrackingServiceStateChanged += ( sender, args ) => { actual++; };
            svc.RejectChanges();

            Assert.AreEqual<Int32>( expected, actual );
        }
        public void service_on_rejectChanges_raise_trackingServiceStateChanged_event_once_even_if_there_are_more_changes()
        {
            Int32 expected = 1;
            Int32 actual = 0;

            ChangeTrackingService svc = new ChangeTrackingService();
            Person p = new Person( svc );
            p.Name = "M";
            p.Name = "Ma";
            p.Name = "Mau";
            p.Name = "Maur";
            p.Name = "Mauro";

            svc.TrackingServiceStateChanged += ( sender, args ) => { actual++; };
            svc.RejectChanges();

            Assert.AreEqual<Int32>( expected, actual );
        }
        public void service_with_changes_and_transientEntities_on_rejectChanges_raise_trackingServiceStateChanged_event()
        {
            Int32 expected = 1;
            Int32 actual = 0;

            ChangeTrackingService svc = new ChangeTrackingService();
            Person p = new Person( svc );
            p.Name = "Mauro";

            svc.TrackingServiceStateChanged += ( sender, args ) => { actual++; };
            svc.RejectChanges();

            Assert.AreEqual<Int32>( expected, actual );
        }
        public void after_rejectChanges_service_canRedo_is_false()
        {
            IChangeTrackingService svc = new ChangeTrackingService();

            PersonCollection p = new PersonCollection( svc );
            p.Add( new Person( null, false ) );

            svc.RejectChanges();

            Assert.IsFalse( svc.CanRedo );
        }