From c260a4dd22b3145180ecc3c891b7e6f0610efef7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lex=20Hermida?= Date: Tue, 8 Jan 2019 16:23:20 +0100 Subject: [PATCH] Upgrade calculate milestone is closed --- taiga/projects/milestones/services.py | 8 +- tests/integration/test_milestones.py | 1 + tests/unit/test_milestones.py | 126 ++++++++++++++++++++++++++ 3 files changed, 133 insertions(+), 2 deletions(-) create mode 100644 tests/unit/test_milestones.py diff --git a/taiga/projects/milestones/services.py b/taiga/projects/milestones/services.py index 396787d3..c56a7333 100644 --- a/taiga/projects/milestones/services.py +++ b/taiga/projects/milestones/services.py @@ -30,11 +30,15 @@ def calculate_milestone_is_closed(milestone): [task.status is not None and task.status.is_closed for task in milestone.tasks.all()]) and all( [user_story.is_closed for user_story in milestone.user_stories.all()]) + issues_check = milestone.issues.all().count() > 0 and all( - [issue.is_closed for issue in milestone.issues.all()]) - tasks_check = milestone.tasks.all().count() > 0 and all( + [issue.is_closed for issue in milestone.issues.all()]) and all( [task.is_closed for task in milestone.tasks.all()]) + tasks_check = milestone.tasks.all().count() > 0 and all( + [task.is_closed for task in milestone.tasks.all()]) and all( + [issue.is_closed for issue in milestone.issues.all()]) + return uss_check or issues_check or tasks_check diff --git a/tests/integration/test_milestones.py b/tests/integration/test_milestones.py index 39d4a853..2b15be7e 100644 --- a/tests/integration/test_milestones.py +++ b/tests/integration/test_milestones.py @@ -369,6 +369,7 @@ def test_api_move_issues_to_another_sprint_close_previous(client): status=closed_status) issue2 = f.create_issue(project=project, milestone=milestone1) + assert project.milestones.get(id=milestone1.id).closed is False assert project.milestones.get(id=milestone1.id).issues.count() == 2 url = reverse("milestones-move-issues-to-sprint", kwargs={"pk": milestone1.pk}) diff --git a/tests/unit/test_milestones.py b/tests/unit/test_milestones.py new file mode 100644 index 00000000..e7c3d50f --- /dev/null +++ b/tests/unit/test_milestones.py @@ -0,0 +1,126 @@ +import pytest + +from .. import factories as f +from taiga.projects.milestones import services + + +pytestmark = pytest.mark.django_db + + +def test_issues_not_closed(): + 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_issue(project=project, milestone=milestone1) + + assert not services.calculate_milestone_is_closed(milestone1) + + +def test_issues_closed(): + 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) + + assert services.calculate_milestone_is_closed(milestone1) + + +def test_stay_open_with_issues_but_closed_tasks(): + project = f.ProjectFactory() + f.MembershipFactory.create(project=project, user=project.owner, + is_admin=True) + milestone1 = f.MilestoneFactory.create(project=project) + + tasks_closed_status = f.TaskStatusFactory.create(project=project, + is_closed=True) + f.create_task(project=project, milestone=milestone1, + taskboard_order=1, status=tasks_closed_status) + f.create_issue(project=project, milestone=milestone1) + + assert not services.calculate_milestone_is_closed(milestone1) + + +def test_tasks_not_closed(): + 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) + f.create_task(project=project, milestone=milestone1) + + assert not services.calculate_milestone_is_closed(milestone1) + + +def test_tasks_closed(): + 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) + + assert services.calculate_milestone_is_closed(milestone1) + + +def test_stay_open_with_tasks_but_closed_issues(): + project = f.ProjectFactory() + f.MembershipFactory.create(project=project, user=project.owner, + is_admin=True) + milestone1 = f.MilestoneFactory.create(project=project) + + issue_closed_status = f.IssueStatusFactory.create(project=project, + is_closed=True) + f.create_issue(project=project, milestone=milestone1, + status=issue_closed_status) + f.create_task(project=project, milestone=milestone1) + + assert not services.calculate_milestone_is_closed(milestone1) + + +def test_uss_not_closed(): + project = f.ProjectFactory() + f.MembershipFactory.create(project=project, user=project.owner, + is_admin=True) + milestone1 = f.MilestoneFactory.create(project=project) + + closed_status = f.UserStoryStatusFactory.create(project=project, + is_closed=True) + f.create_userstory(project=project, milestone=milestone1, + status=closed_status) + f.create_userstory(project=project, milestone=milestone1) + + assert not services.calculate_milestone_is_closed(milestone1) + + +def test_uss_closed(): + project = f.ProjectFactory() + f.MembershipFactory.create(project=project, user=project.owner, + is_admin=True) + milestone1 = f.MilestoneFactory.create(project=project) + + closed_status = f.UserStoryStatusFactory.create(project=project, + is_closed=True) + f.create_userstory(project=project, milestone=milestone1, + sprint_order=1, status=closed_status, + is_closed=True) + + assert services.calculate_milestone_is_closed(milestone1) +