Beispiel #1
0
        public void Circular_Reference_Should_Be_Same_Reference()
        {
            InventoryUpdate update = GetObjectGraph();

            var trackable = update.AsTrackable();

            trackable.Should().BeSameAs(trackable.LinkedInventoryUpdate.LinkedToInventoryUpdate);
            trackable.LinkedInventoryUpdate.Should().BeSameAs(trackable.LinkedInventoryUpdate.LinkedToInventoryUpdate.LinkedInventoryUpdate);
        }
Beispiel #2
0
        public void RejectChanges_On_Circular_Reference_Should_Not_Throw_OverflowException()
        {
            InventoryUpdate update = GetObjectGraph();

            var trackable = update.AsTrackable();

            trackable.InventoryUpdateId = 3;

            trackable.Invoking(t => t.CastToIChangeTrackable().RejectChanges()).Should().NotThrow <OverflowException>();
        }
Beispiel #3
0
        public void BeginEdit_On_Circular_Reference_Should_Not_Throw_OverflowException()
        {
            var update0 = new InventoryUpdate
            {
                InventoryUpdateId = 0
            };
            var update1 = new InventoryUpdate
            {
                InventoryUpdateId       = 1,
                LinkedToInventoryUpdate = update0
            };

            update0.LinkedInventoryUpdate = update1;

            var trackable = update0.AsTrackable();

            trackable.Invoking(t => ((System.ComponentModel.IEditableObject)t).BeginEdit()).Should().NotThrow <OverflowException>();
        }
        public void PropertyChanged_On_Circular_Reference_Should_Not_Throw_OverflowException()
        {
            var update0 = new InventoryUpdate
            {
                InventoryUpdateId = 0
            };
            var update1 = new InventoryUpdate
            {
                InventoryUpdateId       = 1,
                LinkedToInventoryUpdate = update0
            };

            update0.LinkedInventoryUpdate = update1;

            var trackable = update0.AsTrackable();

            //read these properties to force event wire up
            _ = trackable.LinkedInventoryUpdate.LinkedToInventoryUpdate;
            trackable.InventoryUpdateId = 3;
        }
Beispiel #5
0
        private static InventoryUpdate GetObjectGraph()
        {
            var update0 = new InventoryUpdate
            {
                InventoryUpdateId = 0,
                UpdateInfos       = new List <UpdateInfo>
                {
                    new UpdateInfo
                    {
                        UpdateInfoId = 1
                    }
                }
            };

            update0.UpdateInfos[0].InventoryUpdate = update0;
            var update1 = new InventoryUpdate
            {
                InventoryUpdateId       = 1,
                LinkedToInventoryUpdate = update0
            };

            update0.LinkedInventoryUpdate = update1;
            return(update0);
        }
Beispiel #6
0
        public void When_Setting_All_Back_Status_IsChanged_Should_Be_False()
        {
            var update0 = new InventoryUpdate
            {
                InventoryUpdateId = 0
            };

            var update1 = new InventoryUpdate
            {
                InventoryUpdateId         = 1,
                LinkedToInventoryUpdateId = update0.InventoryUpdateId,
                LinkedToInventoryUpdate   = update0
            };

            update0.LinkedInventoryUpdate = update1;

            var update3 = new InventoryUpdate
            {
                InventoryUpdateId         = 3,
                LinkedToInventoryUpdateId = update1.InventoryUpdateId,
                LinkedToInventoryUpdate   = update1
            };

            update1.LinkedInventoryUpdate = update3;

            var update2 = new InventoryUpdate
            {
                InventoryUpdateId = 2
            };

            IList <InventoryUpdate> updates = new List <InventoryUpdate>
            {
                update0,
                update1,
                update3,
                update2
            };

            IList <InventoryUpdate> trackableUpdates = updates.AsTrackable();

            List <InventoryUpdate> updatesToLink           = trackableUpdates.OrderBy(iu => iu.InventoryUpdateId).ToList();
            InventoryUpdate        linkedToInventoryUpdate = null;

            foreach (InventoryUpdate inventoryUpdate in updatesToLink)
            {
                inventoryUpdate.LinkedToInventoryUpdateId = linkedToInventoryUpdate?.InventoryUpdateId;
                inventoryUpdate.LinkedToInventoryUpdate   = linkedToInventoryUpdate;
                inventoryUpdate.LinkedInventoryUpdate     = null;
                if (linkedToInventoryUpdate != null)
                {
                    linkedToInventoryUpdate.LinkedInventoryUpdate = inventoryUpdate;
                }
                linkedToInventoryUpdate = inventoryUpdate;
            }

            InventoryUpdate inventoryUpdateToUnlink = trackableUpdates[3];

            linkedToInventoryUpdate = inventoryUpdateToUnlink.LinkedToInventoryUpdate;
            InventoryUpdate linkedInventoryUpdate = inventoryUpdateToUnlink.LinkedInventoryUpdate;

            inventoryUpdateToUnlink.LinkedToInventoryUpdateId = null;
            inventoryUpdateToUnlink.LinkedToInventoryUpdate   = null;
            inventoryUpdateToUnlink.LinkedInventoryUpdate     = null;

            if (linkedToInventoryUpdate != null)
            {
                linkedToInventoryUpdate.LinkedInventoryUpdate = linkedInventoryUpdate;
            }
            if (linkedInventoryUpdate != null)
            {
                linkedInventoryUpdate.LinkedToInventoryUpdateId = linkedToInventoryUpdate?.InventoryUpdateId;
                linkedInventoryUpdate.LinkedToInventoryUpdate   = linkedToInventoryUpdate;
            }

            trackableUpdates.CastToIChangeTrackableCollection().IsChanged.Should().BeFalse();
            trackableUpdates[0].CastToIChangeTrackable().IsChanged.Should().BeFalse();
            trackableUpdates[1].CastToIChangeTrackable().IsChanged.Should().BeFalse();
            trackableUpdates[2].CastToIChangeTrackable().IsChanged.Should().BeFalse();
            trackableUpdates[3].CastToIChangeTrackable().IsChanged.Should().BeFalse();
        }