diff --git a/taiga/projects/services/bulk_update_order.py b/taiga/projects/services/bulk_update_order.py index 8420068d..d851ac7e 100644 --- a/taiga/projects/services/bulk_update_order.py +++ b/taiga/projects/services/bulk_update_order.py @@ -42,6 +42,11 @@ def apply_order_updates(base_orders: dict, new_orders: dict, *, remove_equal_ori invalid_keys = new_orders.keys() - base_orders.keys() [new_orders.pop(id, None) for id in invalid_keys] + # Remove the elements from new_orders contained in base_orders + if remove_equal_original: + common_keys = base_orders.keys() & new_orders.keys() + [new_orders.pop(id, None) for id in common_keys if new_orders[id] == base_orders[id]] + # We will apply the multiple order changes by the new position order sorted_new_orders = [(k, v) for k, v in new_orders.items()] sorted_new_orders = sorted(sorted_new_orders, key=lambda e: e[1]) @@ -69,11 +74,6 @@ def apply_order_updates(base_orders: dict, new_orders: dict, *, remove_equal_ori removing_keys = [id for id in base_orders if id not in updated_order_ids] [base_orders.pop(id, None) for id in removing_keys] - # Remove elements that are equal to the original - if remove_equal_original: - common_keys = original_orders.keys() & base_orders.keys() - [base_orders.pop(id, None) for id in common_keys if base_orders[id] == original_orders[id]] - def update_projects_order_in_bulk(bulk_data: list, field: str, user): """ diff --git a/tests/unit/test_order_updates.py b/tests/unit/test_order_updates.py index a2f873fe..1e640e14 100644 --- a/tests/unit/test_order_updates.py +++ b/tests/unit/test_order_updates.py @@ -197,3 +197,18 @@ def test_apply_order_not_include_noop(): } apply_order_updates(orders, new_orders, remove_equal_original=True) assert orders == {} + + +def test_apply_order_does_no_generate_holes(): + orders = { + "a": 0, + "b": 2, + "c": 1, + "z": 99, + } + new_orders = { + "c": 1, + "z": 99, + } + apply_order_updates(orders, new_orders, remove_equal_original=True) + assert orders == {}