From d8b8c1655bd28acb6e3ade75cdbac0c0af752692 Mon Sep 17 00:00:00 2001 From: Miguel Gonzalez Date: Wed, 14 Mar 2018 13:26:01 +0100 Subject: [PATCH 1/8] Remove wrong check about status Do not validate is target status is the current one. --- taiga/projects/userstories/validators.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/taiga/projects/userstories/validators.py b/taiga/projects/userstories/validators.py index 0ebdcc4b..7388782b 100644 --- a/taiga/projects/userstories/validators.py +++ b/taiga/projects/userstories/validators.py @@ -125,8 +125,6 @@ class UpdateUserStoriesOrderBulkValidator(ProjectExistsValidator, validators.Val def validate_bulk_stories(self, attrs, source): filters = {"project__id": attrs["project_id"]} - if "status_id" in attrs: - filters["status__id"] = attrs["status_id"] if "milestone_id" in attrs: filters["milestone__id"] = attrs["milestone_id"] From bae2881ed65c968198492514df6c1f127dd89d98 Mon Sep 17 00:00:00 2001 From: Miguel Gonzalez Date: Wed, 14 Mar 2018 14:42:11 +0100 Subject: [PATCH 2/8] Do not include items which does not change --- taiga/projects/services/bulk_update_order.py | 5 +++++ tests/unit/test_order_updates.py | 15 +++++++++++---- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/taiga/projects/services/bulk_update_order.py b/taiga/projects/services/bulk_update_order.py index 093c97e8..4f201927 100644 --- a/taiga/projects/services/bulk_update_order.py +++ b/taiga/projects/services/bulk_update_order.py @@ -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. """ 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 invalid_keys = new_orders.keys() - base_orders.keys() @@ -68,6 +69,10 @@ 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] [base_orders.pop(id, None) for id in removing_keys] + # Remove elements that are equal to the 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 3609ff01..b0fdae5b 100644 --- a/tests/unit/test_order_updates.py +++ b/tests/unit/test_order_updates.py @@ -155,8 +155,6 @@ def test_apply_order_updates_multiple_elements_duplicated_orders(): } apply_order_updates(orders, new_orders) assert orders == { - "c": 3, - "d": 3, "a": 4, "e": 5, "f": 6 @@ -180,9 +178,18 @@ def test_apply_order_invalid_new_order(): } apply_order_updates(orders, new_orders) assert orders == { - "c": 3, - "d": 3, "a": 4, "e": 5, "f": 6 } + + +def test_apply_order_not_include_noop(): + orders = { + "a": 1, + } + new_orders = { + "a": 1, + } + apply_order_updates(orders, new_orders) + assert orders == {} From 804b09f6a0c8d3fa4bcb7c5887b84741eb77b052 Mon Sep 17 00:00:00 2001 From: Miguel Gonzalez Date: Thu, 15 Mar 2018 09:46:03 +0100 Subject: [PATCH 3/8] Fix test (1/) --- tests/integration/test_userstories.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/integration/test_userstories.py b/tests/integration/test_userstories.py index 37c2682d..ceb38672 100644 --- a/tests/integration/test_userstories.py +++ b/tests/integration/test_userstories.py @@ -60,11 +60,11 @@ def test_update_userstories_order_in_bulk(): project = f.ProjectFactory.create() us1 = f.UserStoryFactory.create(project=project, backlog_order=1) 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: 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", models.UserStory) From fab4364cc0dbc9242e4edc82b0e1f764d75ea2fd Mon Sep 17 00:00:00 2001 From: Miguel Gonzalez Date: Thu, 15 Mar 2018 09:46:03 +0100 Subject: [PATCH 4/8] Fix test (2/) --- tests/integration/test_userstories.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/tests/integration/test_userstories.py b/tests/integration/test_userstories.py index ceb38672..35c7acdf 100644 --- a/tests/integration/test_userstories.py +++ b/tests/integration/test_userstories.py @@ -264,17 +264,14 @@ def test_api_update_orders_in_bulk_invalid_status(client): response = client.json.post(url1, json.dumps(data)) assert response.status_code == 400, response.data assert "status_id" in response.data - assert "bulk_stories" in response.data response = client.json.post(url2, json.dumps(data)) assert response.status_code == 400, response.data assert "status_id" in response.data - assert "bulk_stories" in response.data response = client.json.post(url3, json.dumps(data)) assert response.status_code == 400, response.data assert "status_id" in response.data - assert "bulk_stories" in response.data def test_api_update_orders_in_bulk_invalid_milestione(client): From 46558ea63d844881572f8d2f9349741128d3fd0a Mon Sep 17 00:00:00 2001 From: Miguel Gonzalez Date: Thu, 15 Mar 2018 11:35:31 +0100 Subject: [PATCH 5/8] Remove equal original optionally --- taiga/projects/services/bulk_update_order.py | 7 ++++--- taiga/projects/userstories/services.py | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/taiga/projects/services/bulk_update_order.py b/taiga/projects/services/bulk_update_order.py index 4f201927..8420068d 100644 --- a/taiga/projects/services/bulk_update_order.py +++ b/taiga/projects/services/bulk_update_order.py @@ -24,7 +24,7 @@ from taiga.projects import models 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 order modifications. @@ -70,8 +70,9 @@ def apply_order_updates(base_orders: dict, new_orders: dict): [base_orders.pop(id, None) for id in removing_keys] # Remove elements that are equal to the 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]] + 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/taiga/projects/userstories/services.py b/taiga/projects/userstories/services.py index 7295a208..7f9dff20 100644 --- a/taiga/projects/userstories/services.py +++ b/taiga/projects/userstories/services.py @@ -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} 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() events.emit_event_for_ids(ids=user_story_ids, From 0ea9ebe449c231c857370b3a9eedf2561addbebb Mon Sep 17 00:00:00 2001 From: Miguel Gonzalez Date: Thu, 15 Mar 2018 11:53:39 +0100 Subject: [PATCH 6/8] Fix unit test --- tests/unit/test_order_updates.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/tests/unit/test_order_updates.py b/tests/unit/test_order_updates.py index b0fdae5b..a2f873fe 100644 --- a/tests/unit/test_order_updates.py +++ b/tests/unit/test_order_updates.py @@ -155,6 +155,8 @@ def test_apply_order_updates_multiple_elements_duplicated_orders(): } apply_order_updates(orders, new_orders) assert orders == { + "c": 3, + "d": 3, "a": 4, "e": 5, "f": 6 @@ -178,6 +180,8 @@ def test_apply_order_invalid_new_order(): } apply_order_updates(orders, new_orders) assert orders == { + "c": 3, + "d": 3, "a": 4, "e": 5, "f": 6 @@ -191,5 +195,5 @@ def test_apply_order_not_include_noop(): new_orders = { "a": 1, } - apply_order_updates(orders, new_orders) + apply_order_updates(orders, new_orders, remove_equal_original=True) assert orders == {} From 04440446464f2a8d6cf5938ec702c47078cec0c3 Mon Sep 17 00:00:00 2001 From: Miguel Gonzalez Date: Thu, 15 Mar 2018 09:46:03 +0100 Subject: [PATCH 7/8] Fix test (2/) --- tests/integration/test_userstories.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/tests/integration/test_userstories.py b/tests/integration/test_userstories.py index 37c2682d..f622971c 100644 --- a/tests/integration/test_userstories.py +++ b/tests/integration/test_userstories.py @@ -264,17 +264,14 @@ def test_api_update_orders_in_bulk_invalid_status(client): response = client.json.post(url1, json.dumps(data)) assert response.status_code == 400, response.data assert "status_id" in response.data - assert "bulk_stories" in response.data response = client.json.post(url2, json.dumps(data)) assert response.status_code == 400, response.data assert "status_id" in response.data - assert "bulk_stories" in response.data response = client.json.post(url3, json.dumps(data)) assert response.status_code == 400, response.data assert "status_id" in response.data - assert "bulk_stories" in response.data def test_api_update_orders_in_bulk_invalid_milestione(client): From cab876485d7cb43dfa2976129cc418ed2bf5c84d Mon Sep 17 00:00:00 2001 From: Miguel Gonzalez Date: Thu, 15 Mar 2018 15:27:07 +0100 Subject: [PATCH 8/8] Update change log --- CHANGELOG.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3c8f000e..55b03e29 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ -# Changelog # +# Changelog +## 3.2.2 (2018-03-15) + +### Misc + +- Minor bug fixes. ## 3.2.0 Betula nana (2018-03-07)