diff --git a/taiga/projects/api.py b/taiga/projects/api.py index c2abb326..8d36ed25 100644 --- a/taiga/projects/api.py +++ b/taiga/projects/api.py @@ -602,7 +602,7 @@ class UserStoryDueDateViewSet(BlockedByProjectMixin, ModelCrudViewSet): def pre_delete(self, obj): if obj.by_default: raise exc.BadRequest( - _("You can't delete user story by default due date")) + _("You can't delete user story due date by default")) @list_route(methods=["POST"]) def create_default(self, request, **kwargs): @@ -676,6 +676,11 @@ class TaskDueDateViewSet(BlockedByProjectMixin, ModelCrudViewSet): with advisory_lock("task-due-date-creation-{}".format(project_id)): return super().create(request, *args, **kwargs) + def pre_delete(self, obj): + if obj.by_default: + raise exc.BadRequest( + _("You can't delete task due date by default")) + @list_route(methods=["POST"]) def create_default(self, request, **kwargs): context = { @@ -812,6 +817,11 @@ class IssueDueDateViewSet(BlockedByProjectMixin, ModelCrudViewSet): with advisory_lock("issue-due-date-creation-{}".format(project_id)): return super().create(request, *args, **kwargs) + def pre_delete(self, obj): + if obj.by_default: + raise exc.BadRequest( + _("You can't delete issue due date by default")) + @list_route(methods=["POST"]) def create_default(self, request, **kwargs): context = { diff --git a/tests/integration/test_projects.py b/tests/integration/test_projects.py index 45f21941..cc0e896a 100644 --- a/tests/integration/test_projects.py +++ b/tests/integration/test_projects.py @@ -2341,34 +2341,8 @@ def test_prevent_create_us_default_due_dates_when_already_exists(client): assert project.us_duedates.count() == 1 -def test_create_issue_default_due_dates(client): - project = f.create_project() - - issue_duedates = [{ - "name": 'Default', - "slug": 'default', - "by_default": True, - 'color': '#0000', - 'days_to_due': None, - 'order': 0, - }] - creation_template = project.creation_template - creation_template.issue_duedates = issue_duedates - creation_template.save() - - f.MembershipFactory(user=project.owner, project=project, is_admin=True) - url = reverse('issue-due-dates-create-default') - data = {"project_id": project.pk} - client.login(project.owner) - - response = client.json.post(url, json.dumps(data)) - - assert response.status_code == 200 - assert project.issue_duedates.count() == 1 - - -def test_prevent_create_issue_default_due_dates_when_already_exists(client): - issue_duedates = [{ +def test_prevent_delete_us_default_due_dates(client): + us_duedates = [{ "name": 'Default', "slug": 'default', "by_default": True, @@ -2377,18 +2351,17 @@ def test_prevent_create_issue_default_due_dates_when_already_exists(client): 'order': 0, }] f.ProjectTemplateFactory.create( - slug=settings.DEFAULT_PROJECT_TEMPLATE, issue_duedates=issue_duedates) + slug=settings.DEFAULT_PROJECT_TEMPLATE, us_duedates=us_duedates) project = f.create_project() f.MembershipFactory(user=project.owner, project=project, is_admin=True) - url = reverse('issue-due-dates-create-default') - data = {"project_id": project.pk} + url = reverse('userstory-due-dates-detail', kwargs={"pk": 1}) client.login(project.owner) - response = client.json.post(url, json.dumps(data)) + response = client.json.delete(url) assert response.status_code == 400 - assert project.issue_duedates.count() == 1 + assert project.us_duedates.count() == 1 def test_create_task_default_due_dates(client): @@ -2439,3 +2412,99 @@ def test_prevent_create_task_default_due_dates_when_already_exists(client): assert response.status_code == 400 assert project.task_duedates.count() == 1 + + +def test_prevent_delete_task_default_due_dates(client): + task_duedates = [{ + "name": 'Default', + "slug": 'default', + "by_default": True, + 'color': '#0000', + 'days_to_due': None, + 'order': 0, + }] + f.ProjectTemplateFactory.create( + slug=settings.DEFAULT_PROJECT_TEMPLATE, task_duedates=task_duedates) + project = f.create_project() + + f.MembershipFactory(user=project.owner, project=project, is_admin=True) + url = reverse('task-due-dates-detail', kwargs={"pk": 1}) + client.login(project.owner) + + response = client.json.delete(url) + + assert response.status_code == 400 + assert project.task_duedates.count() == 1 + + +def test_create_issue_default_due_dates(client): + project = f.create_project() + + issue_duedates = [{ + "name": 'Default', + "slug": 'default', + "by_default": True, + 'color': '#0000', + 'days_to_due': None, + 'order': 0, + }] + creation_template = project.creation_template + creation_template.issue_duedates = issue_duedates + creation_template.save() + + f.MembershipFactory(user=project.owner, project=project, is_admin=True) + url = reverse('issue-due-dates-create-default') + data = {"project_id": project.pk} + client.login(project.owner) + + response = client.json.post(url, json.dumps(data)) + + assert response.status_code == 200 + assert project.issue_duedates.count() == 1 + + +def test_prevent_create_issue_default_due_dates_when_already_exists(client): + issue_duedates = [{ + "name": 'Default', + "slug": 'default', + "by_default": True, + 'color': '#0000', + 'days_to_due': None, + 'order': 0, + }] + f.ProjectTemplateFactory.create( + slug=settings.DEFAULT_PROJECT_TEMPLATE, issue_duedates=issue_duedates) + project = f.create_project() + + f.MembershipFactory(user=project.owner, project=project, is_admin=True) + url = reverse('issue-due-dates-create-default') + data = {"project_id": project.pk} + client.login(project.owner) + + response = client.json.post(url, json.dumps(data)) + + assert response.status_code == 400 + assert project.issue_duedates.count() == 1 + + +def test_prevent_delete_issue_default_due_dates(client): + issue_duedates = [{ + "name": 'Default', + "slug": 'default', + "by_default": True, + 'color': '#0000', + 'days_to_due': None, + 'order': 0, + }] + f.ProjectTemplateFactory.create( + slug=settings.DEFAULT_PROJECT_TEMPLATE, issue_duedates=issue_duedates) + project = f.create_project() + + f.MembershipFactory(user=project.owner, project=project, is_admin=True) + url = reverse('issue-due-dates-detail', kwargs={"pk": 1}) + client.login(project.owner) + + response = client.json.delete(url) + + assert response.status_code == 400 + assert project.issue_duedates.count() == 1