changeset 5047:99f090563f5f

changeset status: fix common case where a reviewer did not yet review anything When a reviewer did not yet make any review, its status for the changeset is None, causing the code to crash. The unit tests also did not cover this case.
author Thomas De Schampheleire <thomas.de.schampheleire@gmail.com>
date Mon, 20 Apr 2015 17:02:42 +0200
parents 7e5a0c784880
children b13a1062ea9c
files kallithea/model/changeset_status.py kallithea/tests/models/test_changeset_status.py
diffstat 2 files changed, 12 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/kallithea/model/changeset_status.py	Mon Apr 20 22:52:23 2015 +0200
+++ b/kallithea/model/changeset_status.py	Mon Apr 20 17:02:42 2015 +0200
@@ -75,10 +75,10 @@
         if not statuses:
             return ChangesetStatus.STATUS_UNDER_REVIEW
 
-        if all(st.status == ChangesetStatus.STATUS_APPROVED for st in statuses):
+        if all(st and st.status == ChangesetStatus.STATUS_APPROVED for st in statuses):
             return ChangesetStatus.STATUS_APPROVED
 
-        if any(st.status == ChangesetStatus.STATUS_REJECTED for st in statuses):
+        if any(st and st.status == ChangesetStatus.STATUS_REJECTED for st in statuses):
             return ChangesetStatus.STATUS_REJECTED
 
         return ChangesetStatus.STATUS_UNDER_REVIEW
--- a/kallithea/tests/models/test_changeset_status.py	Mon Apr 20 22:52:23 2015 +0200
+++ b/kallithea/tests/models/test_changeset_status.py	Mon Apr 20 17:02:42 2015 +0200
@@ -32,6 +32,16 @@
         ('reject_underreview', STATUS_REJECTED, [S(STATUS_REJECTED), S(STATUS_UNDER_REVIEW)]),
         ('reject_notreviewed', STATUS_REJECTED, [S(STATUS_REJECTED), S(STATUS_NOT_REVIEWED)]),
         ('notreviewed', STATUS_UNDER_REVIEW, [S(STATUS_NOT_REVIEWED)]),
+        ('approve_none', STATUS_UNDER_REVIEW, [S(STATUS_APPROVED), None]),
+        ('approve2_none', STATUS_UNDER_REVIEW, [S(STATUS_APPROVED), S(STATUS_APPROVED), None]),
+        ('approve_reject_none', STATUS_REJECTED, [S(STATUS_APPROVED), S(STATUS_REJECTED), None]),
+        ('approve_underreview_none', STATUS_UNDER_REVIEW, [S(STATUS_APPROVED), S(STATUS_UNDER_REVIEW), None]),
+        ('approve_notreviewed_none', STATUS_UNDER_REVIEW, [S(STATUS_APPROVED), S(STATUS_NOT_REVIEWED), None]),
+        ('underreview_none', STATUS_UNDER_REVIEW, [S(STATUS_UNDER_REVIEW), S(STATUS_UNDER_REVIEW), None]),
+        ('reject_none', STATUS_REJECTED, [S(STATUS_REJECTED), None]),
+        ('reject_underreview_none', STATUS_REJECTED, [S(STATUS_REJECTED), S(STATUS_UNDER_REVIEW), None]),
+        ('reject_notreviewed_none', STATUS_REJECTED, [S(STATUS_REJECTED), S(STATUS_NOT_REVIEWED), None]),
+        ('notreviewed_none', STATUS_UNDER_REVIEW, [S(STATUS_NOT_REVIEWED), None]),
     ])
     def test_result(self, name, expected_result, statuses):
         result = self.m._calculate_status(statuses)