[Backport] Allow default status, priority, severity and type in issues and tasks
parent
5f9f70ab20
commit
c8e05c17f2
|
@ -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,
|
||||||
|
),
|
||||||
|
]
|
|
@ -36,13 +36,13 @@ class Issue(OCCModelMixin, WatchedModelMixin, BlockedMixin, TaggedMixin, models.
|
||||||
verbose_name=_("ref"))
|
verbose_name=_("ref"))
|
||||||
owner = models.ForeignKey(settings.AUTH_USER_MODEL, null=True, blank=True, default=None,
|
owner = models.ForeignKey(settings.AUTH_USER_MODEL, null=True, blank=True, default=None,
|
||||||
related_name="owned_issues", verbose_name=_("owner"))
|
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"))
|
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"))
|
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"))
|
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"))
|
related_name="issues", verbose_name=_("type"))
|
||||||
milestone = models.ForeignKey("milestones.Milestone", null=True, blank=True,
|
milestone = models.ForeignKey("milestones.Milestone", null=True, blank=True,
|
||||||
default=None, related_name="issues",
|
default=None, related_name="issues",
|
||||||
|
|
|
@ -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,
|
||||||
|
),
|
||||||
|
]
|
|
@ -35,7 +35,7 @@ class Task(OCCModelMixin, WatchedModelMixin, BlockedMixin, TaggedMixin, models.M
|
||||||
verbose_name=_("ref"))
|
verbose_name=_("ref"))
|
||||||
owner = models.ForeignKey(settings.AUTH_USER_MODEL, null=True, blank=True, default=None,
|
owner = models.ForeignKey(settings.AUTH_USER_MODEL, null=True, blank=True, default=None,
|
||||||
related_name="owned_tasks", verbose_name=_("owner"))
|
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"))
|
related_name="tasks", verbose_name=_("status"))
|
||||||
project = models.ForeignKey("projects.Project", null=False, blank=False,
|
project = models.ForeignKey("projects.Project", null=False, blank=False,
|
||||||
related_name="tasks", verbose_name=_("project"))
|
related_name="tasks", verbose_name=_("project"))
|
||||||
|
|
|
@ -46,6 +46,31 @@ def test_update_issues_order_in_bulk():
|
||||||
model=models.Issue)
|
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):
|
def test_api_create_issues_in_bulk(client):
|
||||||
project = f.create_project()
|
project = f.create_project()
|
||||||
f.MembershipFactory(project=project, user=project.owner, is_owner=True)
|
f.MembershipFactory(project=project, user=project.owner, is_owner=True)
|
||||||
|
|
|
@ -36,6 +36,23 @@ Task #2
|
||||||
db.save_in_bulk.assert_called_once_with(tasks, None, None)
|
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):
|
def test_api_update_task_tags(client):
|
||||||
task = f.create_task()
|
task = f.create_task()
|
||||||
f.MembershipFactory.create(project=task.project, user=task.owner, is_owner=True)
|
f.MembershipFactory.create(project=task.project, user=task.owner, is_owner=True)
|
||||||
|
|
|
@ -45,6 +45,23 @@ def test_update_userstories_order_in_bulk():
|
||||||
model=models.UserStory)
|
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):
|
def test_api_delete_userstory(client):
|
||||||
us = f.UserStoryFactory.create()
|
us = f.UserStoryFactory.create()
|
||||||
f.MembershipFactory.create(project=us.project, user=us.owner, is_owner=True)
|
f.MembershipFactory.create(project=us.project, user=us.owner, is_owner=True)
|
||||||
|
|
Loading…
Reference in New Issue