Merge pull request #422 from taigaio/issue/2851/closed_sprints_problems
Add has-closed-milestones to the response headers when upsdate us orders in bulk for sprintsremotes/origin/enhancement/email-actions
commit
0f91545c16
|
@ -226,6 +226,12 @@ class UserStoryViewSet(OCCResourceMixin, HistoryResourceMixin, WatchedResourceMi
|
||||||
field=order_field)
|
field=order_field)
|
||||||
services.snapshot_userstories_in_bulk(data["bulk_stories"], request.user)
|
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()
|
return response.NoContent()
|
||||||
|
|
||||||
@list_route(methods=["POST"])
|
@list_route(methods=["POST"])
|
||||||
|
|
|
@ -7,6 +7,7 @@ from django.core.urlresolvers import reverse
|
||||||
|
|
||||||
from taiga.base.utils import json
|
from taiga.base.utils import json
|
||||||
from taiga.projects.userstories import services, models
|
from taiga.projects.userstories import services, models
|
||||||
|
from taiga.projects.userstories.serializers import UserStorySerializer
|
||||||
|
|
||||||
from .. import factories as f
|
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
|
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()
|
project = f.create_project()
|
||||||
f.MembershipFactory.create(project=project, user=project.owner, is_owner=True)
|
f.MembershipFactory.create(project=project, user=project.owner, is_owner=True)
|
||||||
us1 = f.create_userstory(project=project)
|
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 response2.status_code == 204, response2.data
|
||||||
assert response3.status_code == 204, response3.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):
|
def test_update_userstory_points(client):
|
||||||
|
|
Loading…
Reference in New Issue