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); }
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>(); }
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; }
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); }
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(); }