From c8e05c17f24acc6849407aeef8ea2808f75ec96c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jes=C3=BAs=20Espino?= Date: Tue, 23 Jun 2015 21:23:54 +0200 Subject: [PATCH] [Backport] Allow default status, priority, severity and type in issues and tasks --- .../migrations/0005_auto_20150623_1923.py | 38 +++++++++++++++++++ taiga/projects/issues/models.py | 8 ++-- .../migrations/0006_auto_20150623_1923.py | 20 ++++++++++ taiga/projects/tasks/models.py | 2 +- tests/integration/test_issues.py | 25 ++++++++++++ tests/integration/test_tasks.py | 17 +++++++++ tests/integration/test_userstories.py | 17 +++++++++ 7 files changed, 122 insertions(+), 5 deletions(-) create mode 100644 taiga/projects/issues/migrations/0005_auto_20150623_1923.py create mode 100644 taiga/projects/tasks/migrations/0006_auto_20150623_1923.py diff --git a/taiga/projects/issues/migrations/0005_auto_20150623_1923.py b/taiga/projects/issues/migrations/0005_auto_20150623_1923.py new file mode 100644 index 00000000..f97057cd --- /dev/null +++ b/taiga/projects/issues/migrations/0005_auto_20150623_1923.py @@ -0,0 +1,38 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('issues', '0004_auto_20150114_0954'), + ] + + operations = [ + migrations.AlterField( + model_name='issue', + name='priority', + field=models.ForeignKey(blank=True, null=True, to='projects.Priority', related_name='issues', verbose_name='priority'), + preserve_default=True, + ), + migrations.AlterField( + model_name='issue', + name='severity', + field=models.ForeignKey(blank=True, null=True, to='projects.Severity', related_name='issues', verbose_name='severity'), + preserve_default=True, + ), + migrations.AlterField( + model_name='issue', + name='status', + field=models.ForeignKey(blank=True, null=True, to='projects.IssueStatus', related_name='issues', verbose_name='status'), + preserve_default=True, + ), + migrations.AlterField( + model_name='issue', + name='type', + field=models.ForeignKey(blank=True, null=True, to='projects.IssueType', related_name='issues', verbose_name='type'), + preserve_default=True, + ), + ] diff --git a/taiga/projects/issues/models.py b/taiga/projects/issues/models.py index 397e03db..943509b3 100644 --- a/taiga/projects/issues/models.py +++ b/taiga/projects/issues/models.py @@ -36,13 +36,13 @@ class Issue(OCCModelMixin, WatchedModelMixin, BlockedMixin, TaggedMixin, models. verbose_name=_("ref")) owner = models.ForeignKey(settings.AUTH_USER_MODEL, null=True, blank=True, default=None, related_name="owned_issues", verbose_name=_("owner")) - status = models.ForeignKey("projects.IssueStatus", null=False, blank=False, + status = models.ForeignKey("projects.IssueStatus", null=True, blank=True, related_name="issues", verbose_name=_("status")) - severity = models.ForeignKey("projects.Severity", null=False, blank=False, + severity = models.ForeignKey("projects.Severity", null=True, blank=True, related_name="issues", verbose_name=_("severity")) - priority = models.ForeignKey("projects.Priority", null=False, blank=False, + priority = models.ForeignKey("projects.Priority", null=True, blank=True, related_name="issues", verbose_name=_("priority")) - type = models.ForeignKey("projects.IssueType", null=False, blank=False, + type = models.ForeignKey("projects.IssueType", null=True, blank=True, related_name="issues", verbose_name=_("type")) milestone = models.ForeignKey("milestones.Milestone", null=True, blank=True, default=None, related_name="issues", diff --git a/taiga/projects/tasks/migrations/0006_auto_20150623_1923.py b/taiga/projects/tasks/migrations/0006_auto_20150623_1923.py new file mode 100644 index 00000000..077fefe8 --- /dev/null +++ b/taiga/projects/tasks/migrations/0006_auto_20150623_1923.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('tasks', '0005_auto_20150114_0954'), + ] + + operations = [ + migrations.AlterField( + model_name='task', + name='status', + field=models.ForeignKey(blank=True, null=True, to='projects.TaskStatus', related_name='tasks', verbose_name='status'), + preserve_default=True, + ), + ] diff --git a/taiga/projects/tasks/models.py b/taiga/projects/tasks/models.py index 01cfca3e..37176fab 100644 --- a/taiga/projects/tasks/models.py +++ b/taiga/projects/tasks/models.py @@ -35,7 +35,7 @@ class Task(OCCModelMixin, WatchedModelMixin, BlockedMixin, TaggedMixin, models.M verbose_name=_("ref")) owner = models.ForeignKey(settings.AUTH_USER_MODEL, null=True, blank=True, default=None, related_name="owned_tasks", verbose_name=_("owner")) - status = models.ForeignKey("projects.TaskStatus", null=False, blank=False, + status = models.ForeignKey("projects.TaskStatus", null=True, blank=True, related_name="tasks", verbose_name=_("status")) project = models.ForeignKey("projects.Project", null=False, blank=False, related_name="tasks", verbose_name=_("project")) diff --git a/tests/integration/test_issues.py b/tests/integration/test_issues.py index 43ac01e0..a3aa9db0 100644 --- a/tests/integration/test_issues.py +++ b/tests/integration/test_issues.py @@ -46,6 +46,31 @@ def test_update_issues_order_in_bulk(): model=models.Issue) +def test_create_issue_without_status(client): + user = f.UserFactory.create() + project = f.ProjectFactory.create(owner=user) + status = f.IssueStatusFactory.create(project=project) + priority = f.PriorityFactory.create(project=project) + severity = f.SeverityFactory.create(project=project) + type = f.IssueTypeFactory.create(project=project) + project.default_issue_status = status + project.default_priority = priority + project.default_severity = severity + project.default_issue_type = type + project.save() + f.MembershipFactory.create(project=project, user=user, is_owner=True) + url = reverse("issues-list") + + data = {"subject": "Test user story", "project": project.id} + client.login(user) + response = client.json.post(url, json.dumps(data)) + assert response.status_code == 201 + assert response.data['status'] == project.default_issue_status.id + assert response.data['severity'] == project.default_severity.id + assert response.data['priority'] == project.default_priority.id + assert response.data['type'] == project.default_issue_type.id + + def test_api_create_issues_in_bulk(client): project = f.create_project() f.MembershipFactory(project=project, user=project.owner, is_owner=True) diff --git a/tests/integration/test_tasks.py b/tests/integration/test_tasks.py index 6f8d3206..61d1954a 100644 --- a/tests/integration/test_tasks.py +++ b/tests/integration/test_tasks.py @@ -36,6 +36,23 @@ Task #2 db.save_in_bulk.assert_called_once_with(tasks, None, None) +def test_create_task_without_status(client): + user = f.UserFactory.create() + project = f.ProjectFactory.create(owner=user) + status = f.TaskStatusFactory.create(project=project) + project.default_task_status = status + project.save() + + f.MembershipFactory.create(project=project, user=user, is_owner=True) + url = reverse("tasks-list") + + data = {"subject": "Test user story", "project": project.id} + client.login(user) + response = client.json.post(url, json.dumps(data)) + assert response.status_code == 201 + assert response.data['status'] == project.default_task_status.id + + def test_api_update_task_tags(client): task = f.create_task() f.MembershipFactory.create(project=task.project, user=task.owner, is_owner=True) diff --git a/tests/integration/test_userstories.py b/tests/integration/test_userstories.py index 9819d413..add9a606 100644 --- a/tests/integration/test_userstories.py +++ b/tests/integration/test_userstories.py @@ -45,6 +45,23 @@ def test_update_userstories_order_in_bulk(): model=models.UserStory) +def test_create_userstory_without_status(client): + user = f.UserFactory.create() + project = f.ProjectFactory.create(owner=user) + status = f.UserStoryStatusFactory.create(project=project) + project.default_us_status = status + project.save() + + f.MembershipFactory.create(project=project, user=user, is_owner=True) + url = reverse("userstories-list") + + data = {"subject": "Test user story", "project": project.id} + client.login(user) + response = client.json.post(url, json.dumps(data)) + assert response.status_code == 201 + assert response.data['status'] == project.default_us_status.id + + def test_api_delete_userstory(client): us = f.UserStoryFactory.create() f.MembershipFactory.create(project=us.project, user=us.owner, is_owner=True)