fix: Fix apply_order_updates algorithm
With this commit changes detection is improved. It fixes a regression
introduced by be66c3270c
.
remotes/origin/3.4.0rc
parent
cd4cd177b4
commit
d94e444b57
|
@ -42,11 +42,6 @@ def apply_order_updates(base_orders: dict, new_orders: dict, *, remove_equal_ori
|
||||||
invalid_keys = new_orders.keys() - base_orders.keys()
|
invalid_keys = new_orders.keys() - base_orders.keys()
|
||||||
[new_orders.pop(id, None) for id in invalid_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
|
# 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 = [(k, v) for k, v in new_orders.items()]
|
||||||
sorted_new_orders = sorted(sorted_new_orders, key=lambda e: e[1])
|
sorted_new_orders = sorted(sorted_new_orders, key=lambda e: e[1])
|
||||||
|
@ -74,6 +69,11 @@ 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]
|
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]
|
[base_orders.pop(id, None) for id in removing_keys]
|
||||||
|
|
||||||
|
# Remove the elements that remains the same
|
||||||
|
if remove_equal_original:
|
||||||
|
common_keys = base_orders.keys() & original_orders.keys()
|
||||||
|
[base_orders.pop(id, None) for id in common_keys if original_orders[id] == base_orders[id]]
|
||||||
|
|
||||||
|
|
||||||
def update_projects_order_in_bulk(bulk_data: list, field: str, user):
|
def update_projects_order_in_bulk(bulk_data: list, field: str, user):
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -199,16 +199,82 @@ def test_apply_order_not_include_noop():
|
||||||
assert orders == {}
|
assert orders == {}
|
||||||
|
|
||||||
|
|
||||||
def test_apply_order_does_no_generate_holes():
|
def test_apply_order_put_it_first():
|
||||||
orders = {
|
orders = {
|
||||||
"a": 0,
|
"a": 0,
|
||||||
"b": 2,
|
"b": 1,
|
||||||
"c": 1,
|
"c": 2,
|
||||||
"z": 99,
|
"z": 99,
|
||||||
}
|
}
|
||||||
new_orders = {
|
new_orders = {
|
||||||
"c": 1,
|
"z": 0,
|
||||||
"z": 99,
|
|
||||||
}
|
}
|
||||||
apply_order_updates(orders, new_orders, remove_equal_original=True)
|
apply_order_updates(orders, new_orders, remove_equal_original=True)
|
||||||
assert orders == {}
|
assert orders == {
|
||||||
|
"z": 0,
|
||||||
|
"a": 1,
|
||||||
|
"b": 2,
|
||||||
|
"c": 3,
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def test_apply_order_put_it_first_with_tie():
|
||||||
|
orders = {
|
||||||
|
"a": 0,
|
||||||
|
"b": 0,
|
||||||
|
"c": 0,
|
||||||
|
"d": 1,
|
||||||
|
"z": 99,
|
||||||
|
}
|
||||||
|
new_orders = {
|
||||||
|
"z": 0,
|
||||||
|
}
|
||||||
|
apply_order_updates(orders, new_orders, remove_equal_original=True)
|
||||||
|
assert orders == {
|
||||||
|
"z": 0,
|
||||||
|
"a": 1,
|
||||||
|
"b": 1,
|
||||||
|
"c": 1,
|
||||||
|
"d": 2,
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def test_apply_order_refresh():
|
||||||
|
orders = {
|
||||||
|
"a": 0,
|
||||||
|
"b": 0,
|
||||||
|
"c": 0,
|
||||||
|
"d": 1,
|
||||||
|
"w": 99,
|
||||||
|
"z": 0,
|
||||||
|
}
|
||||||
|
new_orders = {
|
||||||
|
"z": 0,
|
||||||
|
}
|
||||||
|
apply_order_updates(orders, new_orders, remove_equal_original=True)
|
||||||
|
assert orders == {
|
||||||
|
"a": 1,
|
||||||
|
"b": 1,
|
||||||
|
"c": 1,
|
||||||
|
"d": 2,
|
||||||
|
"w": 100,
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def test_apply_order_maintain_new_values():
|
||||||
|
orders = {
|
||||||
|
"a": 1,
|
||||||
|
"b": 2,
|
||||||
|
"c": 3,
|
||||||
|
"d": 4,
|
||||||
|
"e": 7,
|
||||||
|
"f": 6,
|
||||||
|
"g": 7,
|
||||||
|
}
|
||||||
|
new_orders = {
|
||||||
|
"e": 7,
|
||||||
|
"g": 8,
|
||||||
|
}
|
||||||
|
expected = {"g": 8}
|
||||||
|
apply_order_updates(orders, new_orders, remove_equal_original=True)
|
||||||
|
assert expected == orders
|
||||||
|
|
Loading…
Reference in New Issue