From 058195d6709affbf5948d653d3da1c1467b27a8b Mon Sep 17 00:00:00 2001 From: Alejandro Alonso Date: Tue, 18 Nov 2014 10:16:18 +0100 Subject: [PATCH 1/2] User story points are undefined if the task points are undefined --- taiga/projects/userstories/models.py | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/taiga/projects/userstories/models.py b/taiga/projects/userstories/models.py index f9688380..54458b3c 100644 --- a/taiga/projects/userstories/models.py +++ b/taiga/projects/userstories/models.py @@ -126,9 +126,15 @@ class UserStory(OCCModelMixin, WatchedModelMixin, BlockedMixin, TaggedMixin, mod return self.role_points def get_total_points(self): + not_null_role_points = self.role_points.select_related("points").\ + exclude(points__value__isnull=True) + + #If we only have None values the sum should be None + if not not_null_role_points: + return None + total = 0.0 - for rp in self.role_points.select_related("points"): - if rp.points.value: - total += rp.points.value + for rp in not_null_role_points: + total += rp.points.value return total From 7b498924e72256b400a1b2da286cdcbb3b3548b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jes=C3=BAs=20Espino?= Date: Tue, 18 Nov 2014 13:32:32 +0100 Subject: [PATCH 2/2] Add tests to bug #1553 resolution --- tests/integration/test_userstories.py | 31 +++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/tests/integration/test_userstories.py b/tests/integration/test_userstories.py index 8fbb33ab..83c35c65 100644 --- a/tests/integration/test_userstories.py +++ b/tests/integration/test_userstories.py @@ -200,3 +200,34 @@ def test_archived_filter(client): data = {"is_archived": 1} response = client.get(url, data) assert len(json.loads(response.content)) == 1 + +def test_get_total_points(client): + project = f.ProjectFactory.create() + + role1 = f.RoleFactory.create(project=project) + role2 = f.RoleFactory.create(project=project) + + points1 = f.PointsFactory.create(project=project, value=None) + points2 = f.PointsFactory.create(project=project, value=1) + points3 = f.PointsFactory.create(project=project, value=2) + + us_with_points = f.UserStoryFactory.create(project=project) + us_with_points.role_points.all().delete() + f.RolePointsFactory.create(user_story=us_with_points, role=role1, points=points2) + f.RolePointsFactory.create(user_story=us_with_points, role=role2, points=points3) + + assert us_with_points.get_total_points() == 3.0 + + us_without_points = f.UserStoryFactory.create(project=project) + us_without_points.role_points.all().delete() + f.RolePointsFactory.create(user_story=us_without_points, role=role1, points=points1) + f.RolePointsFactory.create(user_story=us_without_points, role=role2, points=points1) + + assert us_without_points.get_total_points() is None + + us_mixed = f.UserStoryFactory.create(project=project) + us_mixed.role_points.all().delete() + f.RolePointsFactory.create(user_story=us_mixed, role=role1, points=points1) + f.RolePointsFactory.create(user_story=us_mixed, role=role2, points=points2) + + assert us_mixed.get_total_points() == 1.0