Merge pull request #1082 from migonzalvar/ref/apply_order_updates

Do not include items which does not change
remotes/origin/3.4.0rc
Alejandro 2018-03-15 14:07:45 +01:00 committed by GitHub
commit c2e6721934
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 21 additions and 7 deletions

View File

@ -24,7 +24,7 @@ from taiga.projects import models
from contextlib import suppress from contextlib import suppress
def apply_order_updates(base_orders: dict, new_orders: dict): def apply_order_updates(base_orders: dict, new_orders: dict, *, remove_equal_original=False):
""" """
`base_orders` must be a dict containing all the elements that can be affected by `base_orders` must be a dict containing all the elements that can be affected by
order modifications. order modifications.
@ -36,6 +36,7 @@ def apply_order_updates(base_orders: dict, new_orders: dict):
The elements where no order update is needed will be removed. The elements where no order update is needed will be removed.
""" """
updated_order_ids = set() updated_order_ids = set()
original_orders = {k:v for k,v in base_orders.items()}
# Remove the elements from new_orders non existint in base_orders # Remove the elements from new_orders non existint in base_orders
invalid_keys = new_orders.keys() - base_orders.keys() invalid_keys = new_orders.keys() - base_orders.keys()
@ -68,6 +69,11 @@ def apply_order_updates(base_orders: dict, new_orders: dict):
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 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): def update_projects_order_in_bulk(bulk_data: list, field: str, user):
""" """

View File

@ -94,7 +94,7 @@ def update_userstories_order_in_bulk(bulk_data: list, field: str, project: objec
us_orders = {us.id: getattr(us, field) for us in user_stories} us_orders = {us.id: getattr(us, field) for us in user_stories}
new_us_orders = {e["us_id"]: e["order"] for e in bulk_data} new_us_orders = {e["us_id"]: e["order"] for e in bulk_data}
apply_order_updates(us_orders, new_us_orders) apply_order_updates(us_orders, new_us_orders, remove_equal_original=True)
user_story_ids = us_orders.keys() user_story_ids = us_orders.keys()
events.emit_event_for_ids(ids=user_story_ids, events.emit_event_for_ids(ids=user_story_ids,

View File

@ -60,11 +60,11 @@ def test_update_userstories_order_in_bulk():
project = f.ProjectFactory.create() project = f.ProjectFactory.create()
us1 = f.UserStoryFactory.create(project=project, backlog_order=1) us1 = f.UserStoryFactory.create(project=project, backlog_order=1)
us2 = f.UserStoryFactory.create(project=project, backlog_order=2) us2 = f.UserStoryFactory.create(project=project, backlog_order=2)
data = [{"us_id": us1.id, "order": 1}, {"us_id": us2.id, "order": 2}] data = [{"us_id": us1.id, "order": 2}, {"us_id": us2.id, "order": 1}]
with mock.patch("taiga.projects.userstories.services.db") as db: with mock.patch("taiga.projects.userstories.services.db") as db:
services.update_userstories_order_in_bulk(data, "backlog_order", project) services.update_userstories_order_in_bulk(data, "backlog_order", project)
db.update_attr_in_bulk_for_ids.assert_called_once_with({us1.id: 1, us2.id: 2}, db.update_attr_in_bulk_for_ids.assert_called_once_with({us2.id: 1, us1.id: 2},
"backlog_order", "backlog_order",
models.UserStory) models.UserStory)
@ -264,17 +264,14 @@ def test_api_update_orders_in_bulk_invalid_status(client):
response = client.json.post(url1, json.dumps(data)) response = client.json.post(url1, json.dumps(data))
assert response.status_code == 400, response.data assert response.status_code == 400, response.data
assert "status_id" in response.data assert "status_id" in response.data
assert "bulk_stories" in response.data
response = client.json.post(url2, json.dumps(data)) response = client.json.post(url2, json.dumps(data))
assert response.status_code == 400, response.data assert response.status_code == 400, response.data
assert "status_id" in response.data assert "status_id" in response.data
assert "bulk_stories" in response.data
response = client.json.post(url3, json.dumps(data)) response = client.json.post(url3, json.dumps(data))
assert response.status_code == 400, response.data assert response.status_code == 400, response.data
assert "status_id" in response.data assert "status_id" in response.data
assert "bulk_stories" in response.data
def test_api_update_orders_in_bulk_invalid_milestione(client): def test_api_update_orders_in_bulk_invalid_milestione(client):

View File

@ -186,3 +186,14 @@ def test_apply_order_invalid_new_order():
"e": 5, "e": 5,
"f": 6 "f": 6
} }
def test_apply_order_not_include_noop():
orders = {
"a": 1,
}
new_orders = {
"a": 1,
}
apply_order_updates(orders, new_orders, remove_equal_original=True)
assert orders == {}