Fix calculate_milestone_is_closed and add tests
parent
0c0e09819a
commit
0434e8b78b
|
@ -26,18 +26,17 @@ from taiga.projects.userstories.models import UserStory
|
||||||
|
|
||||||
|
|
||||||
def calculate_milestone_is_closed(milestone):
|
def calculate_milestone_is_closed(milestone):
|
||||||
uss_check = milestone.user_stories.all().count() > 0 and all(
|
all_us_closed = all([user_story.is_closed for user_story in milestone.user_stories.all()])
|
||||||
[task.status is not None and task.status.is_closed for task in
|
all_tasks_closed = all([task.status is not None and task.status.is_closed for task in
|
||||||
milestone.tasks.all()]) and all(
|
milestone.tasks.all()])
|
||||||
[user_story.is_closed for user_story in milestone.user_stories.all()])
|
all_issues_closed = all([issue.is_closed for issue in milestone.issues.all()])
|
||||||
|
|
||||||
issues_check = milestone.issues.all().count() > 0 and all(
|
uss_check = milestone.user_stories.all().count() > 0 \
|
||||||
[issue.is_closed for issue in milestone.issues.all()]) and all(
|
and all_tasks_closed and all_us_closed and all_issues_closed
|
||||||
[task.is_closed for task in milestone.tasks.all()])
|
issues_check = milestone.issues.all().count() > 0 and all_issues_closed \
|
||||||
|
and all_tasks_closed and all_us_closed
|
||||||
tasks_check = milestone.tasks.all().count() > 0 and all(
|
tasks_check = milestone.tasks.all().count() > 0 and all_tasks_closed \
|
||||||
[task.is_closed for task in milestone.tasks.all()]) and all(
|
and all_issues_closed and all_us_closed
|
||||||
[issue.is_closed for issue in milestone.issues.all()])
|
|
||||||
|
|
||||||
return uss_check or issues_check or tasks_check
|
return uss_check or issues_check or tasks_check
|
||||||
|
|
||||||
|
|
|
@ -307,8 +307,9 @@ def test_api_move_tasks_to_another_sprint_close_previous(client):
|
||||||
closed_status = f.TaskStatusFactory.create(project=project, is_closed=True)
|
closed_status = f.TaskStatusFactory.create(project=project, is_closed=True)
|
||||||
|
|
||||||
task1 = f.create_task(project=project, milestone=milestone1, taskboard_order=1,
|
task1 = f.create_task(project=project, milestone=milestone1, taskboard_order=1,
|
||||||
status=closed_status)
|
status=closed_status, user_story=None)
|
||||||
task2 = f.create_task(project=project, milestone=milestone1, taskboard_order=2)
|
task2 = f.create_task(project=project, milestone=milestone1, taskboard_order=2,
|
||||||
|
user_story=None)
|
||||||
|
|
||||||
assert project.milestones.get(id=milestone1.id).tasks.count() == 2
|
assert project.milestones.get(id=milestone1.id).tasks.count() == 2
|
||||||
assert not milestone1.closed
|
assert not milestone1.closed
|
||||||
|
|
|
@ -3,7 +3,6 @@ import pytest
|
||||||
from .. import factories as f
|
from .. import factories as f
|
||||||
from taiga.projects.milestones import services
|
from taiga.projects.milestones import services
|
||||||
|
|
||||||
|
|
||||||
pytestmark = pytest.mark.django_db
|
pytestmark = pytest.mark.django_db
|
||||||
|
|
||||||
|
|
||||||
|
@ -51,6 +50,54 @@ def test_stay_open_with_issues_but_closed_tasks():
|
||||||
assert not services.calculate_milestone_is_closed(milestone1)
|
assert not services.calculate_milestone_is_closed(milestone1)
|
||||||
|
|
||||||
|
|
||||||
|
def test_stay_open_with_issues_but_closed_uss():
|
||||||
|
project = f.ProjectFactory()
|
||||||
|
f.MembershipFactory.create(project=project, user=project.owner,
|
||||||
|
is_admin=True)
|
||||||
|
milestone1 = f.MilestoneFactory.create(project=project)
|
||||||
|
|
||||||
|
us_closed_status = f.UserStoryStatusFactory.create(project=project,
|
||||||
|
is_closed=True)
|
||||||
|
f.create_userstory(project=project, milestone=milestone1,
|
||||||
|
status=us_closed_status, is_closed=True)
|
||||||
|
|
||||||
|
f.create_issue(project=project, milestone=milestone1)
|
||||||
|
|
||||||
|
assert not services.calculate_milestone_is_closed(milestone1)
|
||||||
|
|
||||||
|
|
||||||
|
def test_stay_open_with_closed_issues_but_open_uss():
|
||||||
|
project = f.ProjectFactory()
|
||||||
|
f.MembershipFactory.create(project=project, user=project.owner,
|
||||||
|
is_admin=True)
|
||||||
|
milestone1 = f.MilestoneFactory.create(project=project)
|
||||||
|
|
||||||
|
closed_status = f.IssueStatusFactory.create(project=project,
|
||||||
|
is_closed=True)
|
||||||
|
f.create_issue(project=project, milestone=milestone1,
|
||||||
|
status=closed_status)
|
||||||
|
|
||||||
|
f.create_userstory(project=project, milestone=milestone1)
|
||||||
|
|
||||||
|
assert not services.calculate_milestone_is_closed(milestone1)
|
||||||
|
|
||||||
|
|
||||||
|
def test_stay_open_with_closed_issues_but_open_tasks():
|
||||||
|
project = f.ProjectFactory()
|
||||||
|
f.MembershipFactory.create(project=project, user=project.owner,
|
||||||
|
is_admin=True)
|
||||||
|
milestone1 = f.MilestoneFactory.create(project=project)
|
||||||
|
|
||||||
|
closed_status = f.IssueStatusFactory.create(project=project,
|
||||||
|
is_closed=True)
|
||||||
|
f.create_issue(project=project, milestone=milestone1,
|
||||||
|
status=closed_status)
|
||||||
|
|
||||||
|
f.create_task(project=project, milestone=milestone1)
|
||||||
|
|
||||||
|
assert not services.calculate_milestone_is_closed(milestone1)
|
||||||
|
|
||||||
|
|
||||||
def test_tasks_not_closed():
|
def test_tasks_not_closed():
|
||||||
project = f.ProjectFactory()
|
project = f.ProjectFactory()
|
||||||
f.MembershipFactory.create(project=project, user=project.owner,
|
f.MembershipFactory.create(project=project, user=project.owner,
|
||||||
|
@ -75,7 +122,7 @@ def test_tasks_closed():
|
||||||
closed_status = f.TaskStatusFactory.create(project=project,
|
closed_status = f.TaskStatusFactory.create(project=project,
|
||||||
is_closed=True)
|
is_closed=True)
|
||||||
f.create_task(project=project, milestone=milestone1,
|
f.create_task(project=project, milestone=milestone1,
|
||||||
status=closed_status)
|
status=closed_status, user_story=None)
|
||||||
|
|
||||||
assert services.calculate_milestone_is_closed(milestone1)
|
assert services.calculate_milestone_is_closed(milestone1)
|
||||||
|
|
||||||
|
@ -95,6 +142,51 @@ def test_stay_open_with_tasks_but_closed_issues():
|
||||||
assert not services.calculate_milestone_is_closed(milestone1)
|
assert not services.calculate_milestone_is_closed(milestone1)
|
||||||
|
|
||||||
|
|
||||||
|
def test_stay_open_with_tasks_but_closed_uss():
|
||||||
|
project = f.ProjectFactory()
|
||||||
|
f.MembershipFactory.create(project=project, user=project.owner,
|
||||||
|
is_admin=True)
|
||||||
|
milestone1 = f.MilestoneFactory.create(project=project)
|
||||||
|
us_closed_status = f.UserStoryStatusFactory.create(project=project,
|
||||||
|
is_closed=True)
|
||||||
|
f.create_userstory(project=project, milestone=milestone1,
|
||||||
|
status=us_closed_status, is_closed=True)
|
||||||
|
|
||||||
|
f.create_task(project=project, milestone=milestone1, user_story=None)
|
||||||
|
|
||||||
|
assert not services.calculate_milestone_is_closed(milestone1)
|
||||||
|
|
||||||
|
|
||||||
|
def test_stay_open_with_closed_tasks_but_open_uss():
|
||||||
|
project = f.ProjectFactory()
|
||||||
|
f.MembershipFactory.create(project=project, user=project.owner,
|
||||||
|
is_admin=True)
|
||||||
|
milestone1 = f.MilestoneFactory.create(project=project)
|
||||||
|
closed_status = f.TaskStatusFactory.create(project=project,
|
||||||
|
is_closed=True)
|
||||||
|
f.create_task(project=project, milestone=milestone1,
|
||||||
|
status=closed_status, user_story=None)
|
||||||
|
|
||||||
|
f.create_userstory(project=project, milestone=milestone1)
|
||||||
|
|
||||||
|
assert not services.calculate_milestone_is_closed(milestone1)
|
||||||
|
|
||||||
|
|
||||||
|
def test_stay_open_with_closed_tasks_but_open_issues():
|
||||||
|
project = f.ProjectFactory()
|
||||||
|
f.MembershipFactory.create(project=project, user=project.owner,
|
||||||
|
is_admin=True)
|
||||||
|
milestone1 = f.MilestoneFactory.create(project=project)
|
||||||
|
closed_status = f.TaskStatusFactory.create(project=project,
|
||||||
|
is_closed=True)
|
||||||
|
f.create_task(project=project, milestone=milestone1,
|
||||||
|
status=closed_status, user_story=None)
|
||||||
|
|
||||||
|
f.create_issue(project=project, milestone=milestone1)
|
||||||
|
|
||||||
|
assert not services.calculate_milestone_is_closed(milestone1)
|
||||||
|
|
||||||
|
|
||||||
def test_uss_not_closed():
|
def test_uss_not_closed():
|
||||||
project = f.ProjectFactory()
|
project = f.ProjectFactory()
|
||||||
f.MembershipFactory.create(project=project, user=project.owner,
|
f.MembershipFactory.create(project=project, user=project.owner,
|
||||||
|
@ -104,7 +196,7 @@ def test_uss_not_closed():
|
||||||
closed_status = f.UserStoryStatusFactory.create(project=project,
|
closed_status = f.UserStoryStatusFactory.create(project=project,
|
||||||
is_closed=True)
|
is_closed=True)
|
||||||
f.create_userstory(project=project, milestone=milestone1,
|
f.create_userstory(project=project, milestone=milestone1,
|
||||||
status=closed_status)
|
status=closed_status, is_closed=True)
|
||||||
f.create_userstory(project=project, milestone=milestone1)
|
f.create_userstory(project=project, milestone=milestone1)
|
||||||
|
|
||||||
assert not services.calculate_milestone_is_closed(milestone1)
|
assert not services.calculate_milestone_is_closed(milestone1)
|
||||||
|
@ -124,3 +216,53 @@ def test_uss_closed():
|
||||||
|
|
||||||
assert services.calculate_milestone_is_closed(milestone1)
|
assert services.calculate_milestone_is_closed(milestone1)
|
||||||
|
|
||||||
|
|
||||||
|
def test_stay_open_with_uss_but_closed_tasks_and_us():
|
||||||
|
project = f.ProjectFactory()
|
||||||
|
f.MembershipFactory.create(project=project, user=project.owner,
|
||||||
|
is_admin=True)
|
||||||
|
milestone1 = f.MilestoneFactory.create(project=project)
|
||||||
|
|
||||||
|
us_closed_status = f.UserStoryStatusFactory.create(project=project,
|
||||||
|
is_closed=True)
|
||||||
|
us = f.create_userstory(project=project, milestone=milestone1,
|
||||||
|
status=us_closed_status, is_closed=True)
|
||||||
|
|
||||||
|
task_closed_status = f.TaskStatusFactory.create(project=project,
|
||||||
|
is_closed=True)
|
||||||
|
f.create_task(project=project, milestone=milestone1, user_story=us,
|
||||||
|
status=task_closed_status)
|
||||||
|
|
||||||
|
f.create_userstory(project=project, milestone=milestone1)
|
||||||
|
|
||||||
|
assert not services.calculate_milestone_is_closed(milestone1)
|
||||||
|
|
||||||
|
|
||||||
|
def test_stay_open_with_uss_but_closed_tasks():
|
||||||
|
project = f.ProjectFactory()
|
||||||
|
f.MembershipFactory.create(project=project, user=project.owner,
|
||||||
|
is_admin=True)
|
||||||
|
milestone1 = f.MilestoneFactory.create(project=project)
|
||||||
|
|
||||||
|
closed_status = f.TaskStatusFactory.create(project=project,
|
||||||
|
is_closed=True)
|
||||||
|
f.create_task(project=project, milestone=milestone1,
|
||||||
|
status=closed_status, user_story=None)
|
||||||
|
f.create_userstory(project=project, milestone=milestone1)
|
||||||
|
|
||||||
|
assert not services.calculate_milestone_is_closed(milestone1)
|
||||||
|
|
||||||
|
|
||||||
|
def test_stay_open_with_uss_but_closed_issues():
|
||||||
|
project = f.ProjectFactory()
|
||||||
|
f.MembershipFactory.create(project=project, user=project.owner,
|
||||||
|
is_admin=True)
|
||||||
|
milestone1 = f.MilestoneFactory.create(project=project)
|
||||||
|
|
||||||
|
closed_status = f.IssueStatusFactory.create(project=project,
|
||||||
|
is_closed=True)
|
||||||
|
f.create_issue(project=project, milestone=milestone1,
|
||||||
|
status=closed_status)
|
||||||
|
f.create_userstory(project=project, milestone=milestone1)
|
||||||
|
|
||||||
|
assert not services.calculate_milestone_is_closed(milestone1)
|
||||||
|
|
Loading…
Reference in New Issue