From 26e4941c56d039d1b659c62cf76ccdcd7c1c38f6 Mon Sep 17 00:00:00 2001 From: Alejandro Alonso Date: Tue, 3 Nov 2015 12:00:55 +0100 Subject: [PATCH] Fixing closed_points stats --- taiga/projects/services/stats.py | 10 +++++----- tests/integration/test_stats.py | 17 ++++++++++++----- 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/taiga/projects/services/stats.py b/taiga/projects/services/stats.py index 255bd36b..727db6cf 100644 --- a/taiga/projects/services/stats.py +++ b/taiga/projects/services/stats.py @@ -225,16 +225,16 @@ def get_stats_for_project(project): get(id=project.id) points = project.calculated_points - - closed_points = sum(RolePoints.objects.filter(user_story__project=project).filter( - Q(user_story__milestone__closed=True) | - (Q(user_story__milestone__isnull=True) & Q(user_story__is_closed=True)) + closed_points = sum(points["closed"].values()) + closed_points_from_closed_milestones = sum(RolePoints.objects.filter( + Q(user_story__project=project) & Q(user_story__milestone__closed=True) ).exclude(points__value__isnull=True).values_list("points__value", flat=True)) closed_milestones = project.milestones.filter(closed=True).count() speed = 0 + if closed_milestones != 0: - speed = closed_points / closed_milestones + speed = closed_points_from_closed_milestones / closed_milestones project_stats = { 'name': project.name, diff --git a/tests/integration/test_stats.py b/tests/integration/test_stats.py index 374985c3..11038330 100644 --- a/tests/integration/test_stats.py +++ b/tests/integration/test_stats.py @@ -59,16 +59,19 @@ def data(): user_story__project=m.project, user_story__status=m.open_status, user_story__milestone=None) - # 5 and 6 are in the same milestone + # 5 and 6 are in closed milestones m.role_points5 = f.RolePointsFactory(role=m.project.roles.all()[0], points=m.points5, user_story__project=m.project, - user_story__status=m.open_status) + user_story__status=m.open_status, + user_story__milestone__closed=True, + user_story__milestone__project=m.project) m.role_points6 = f.RolePointsFactory(role=m.project.roles.all()[0], points=m.points6, user_story__project=m.project, user_story__status=m.open_status, - user_story__milestone=m.role_points5.user_story.milestone) + user_story__milestone__closed=True, + user_story__milestone__project=m.project) m.user_story1 = m.role_points1.user_story m.user_story2 = m.role_points2.user_story @@ -106,13 +109,17 @@ def test_project_closed_points(client, data): data.user_story4.is_closed = True data.user_story4.save() assert data.project.closed_points == {data.role1.pk: 14, data.role2.pk: 1} - #User story5 milestone isn't closed + data.user_story5.is_closed = True data.user_story5.save() assert data.project.closed_points == {data.role1.pk: 30, data.role2.pk: 1} + data.user_story6.is_closed = True + data.user_story6.save() + assert data.project.closed_points == {data.role1.pk: 62, data.role2.pk: 1} project_stats = get_stats_for_project(data.project) - assert project_stats["closed_points"] == 15 + assert project_stats["closed_points"] == 63 + assert project_stats["speed"] == 24 def test_project_assigned_points(client, data):