[Backport] Allow default status, priority, severity and type in issues and tasks

remotes/origin/logger
Jesús Espino 2015-06-23 21:23:54 +02:00 committed by David Barragán Merino
parent 5f9f70ab20
commit c8e05c17f2
7 changed files with 122 additions and 5 deletions

View File

@ -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,
),
]

View File

@ -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",

View File

@ -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,
),
]

View File

@ -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"))

View File

@ -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)

View File

@ -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)

View File

@ -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)