private void Move(int defaultIndex, int targetIndex, int targetOrder, Movement movement)
        {
            var originItem = _collection[defaultIndex];
            var targetItem = _collection[targetIndex];

            if (movement == Movement.Up)
            {
                _collection.MoveUp(originItem);
            }
            else
            {
                _collection.MoveDown(originItem);
            }

            var changedItems = _collection.FlushModifications();

            Assert.AreEqual(targetOrder, originItem.SortOrder);

            if (defaultIndex != targetIndex)
            {
                Assert.True(changedItems.Contains(originItem), "Changed items does not contain the origin item");
                Assert.True(changedItems.Contains(targetItem), "Changed items does not contain the target item");
            }

            if (defaultIndex == targetIndex)
            {
                Assert.True(!changedItems.Any());
            }

            var itemIndex = _collection.IndexOf(originItem);

            Assert.AreEqual(targetIndex, itemIndex, "Item is not at the right position!");
        }