From d34f47ccff8c3d1a74fa0b6bdcab6c61dfed1b69 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Tue, 4 Aug 2015 15:01:53 +0200 Subject: [PATCH] Add has-closed-milestones to the response headers when upsdate us orders in bulk for sprints --- taiga/projects/userstories/api.py | 6 ++++ tests/integration/test_userstories.py | 45 +++++++++++++++++++++++++-- 2 files changed, 49 insertions(+), 2 deletions(-) diff --git a/taiga/projects/userstories/api.py b/taiga/projects/userstories/api.py index 4f065547..b364a53c 100644 --- a/taiga/projects/userstories/api.py +++ b/taiga/projects/userstories/api.py @@ -226,6 +226,12 @@ class UserStoryViewSet(OCCResourceMixin, HistoryResourceMixin, WatchedResourceMi field=order_field) services.snapshot_userstories_in_bulk(data["bulk_stories"], request.user) + if order_field == "sprint_order": + # NOTE: This is useful according to issue #2851 to update sprints column in the + # browser client when move USs from the backlog to an sprint or between sprints. + has_closed_milestones = project.milestones.filter(closed=True).exists() + self.headers["Taiga-Info-Has-Closed-Milestones"] = has_closed_milestones + return response.NoContent() @list_route(methods=["POST"]) diff --git a/tests/integration/test_userstories.py b/tests/integration/test_userstories.py index c072b76c..d8972da2 100644 --- a/tests/integration/test_userstories.py +++ b/tests/integration/test_userstories.py @@ -7,6 +7,7 @@ from django.core.urlresolvers import reverse from taiga.base.utils import json from taiga.projects.userstories import services, models +from taiga.projects.userstories.serializers import UserStorySerializer from .. import factories as f @@ -107,7 +108,7 @@ def test_api_create_in_bulk_with_status(client): assert response.data[0]["status"] == project.default_us_status.id -def test_api_update_backlog_order_in_bulk(client): +def test_api_update_orders_in_bulk(client): project = f.create_project() f.MembershipFactory.create(project=project, user=project.owner, is_owner=True) us1 = f.create_userstory(project=project) @@ -133,8 +134,48 @@ def test_api_update_backlog_order_in_bulk(client): assert response2.status_code == 204, response2.data assert response3.status_code == 204, response3.data +def test_api_update_orders_in_bulk_to_test_extra_headers(client): + project = f.create_project() + f.MembershipFactory.create(project=project, user=project.owner, is_owner=True) + us1 = f.create_userstory(project=project) + us2 = f.create_userstory(project=project) -from taiga.projects.userstories.serializers import UserStorySerializer + url1 = reverse("userstories-bulk-update-backlog-order") + url2 = reverse("userstories-bulk-update-kanban-order") + url3 = reverse("userstories-bulk-update-sprint-order") + + data = { + "project_id": project.id, + "bulk_stories": [{"us_id": us1.id, "order": 1}, + {"us_id": us2.id, "order": 2}] + } + + client.login(project.owner) + + response1 = client.json.post(url1, json.dumps(data)) + response2 = client.json.post(url2, json.dumps(data)) + response3 = client.json.post(url3, json.dumps(data)) + assert response1.status_code == 204 + assert response1.has_header("Taiga-Info-Has-Closed-Milestones") == False + assert response2.status_code == 204 + assert response2.has_header("Taiga-Info-Has-Closed-Milestones") == False + assert response3.status_code == 204 + assert response3.has_header("Taiga-Info-Has-Closed-Milestones") == True + assert response3["taiga-info-has-closed-milestones"] == "False" + + us1.milestone.closed = True + us1.milestone.save() + + response1 = client.json.post(url1, json.dumps(data)) + response2 = client.json.post(url2, json.dumps(data)) + response3 = client.json.post(url3, json.dumps(data)) + assert response1.status_code == 204 + assert response1.has_header("Taiga-Info-Has-Closed-Milestones") == False + assert response2.status_code == 204 + assert response2.has_header("Taiga-Info-Has-Closed-Milestones") == False + assert response3.status_code == 204 + assert response3.has_header("Taiga-Info-Has-Closed-Milestones") == True + assert response3["taiga-info-has-closed-milestones"] == "True" def test_update_userstory_points(client):