changeset 6267:69ee6a249f55

pullrequests: show warning when updating PR and the reviewer list has changed since the form load
author Mads Kiilerich <madski@unity3d.com>
date Mon, 24 Oct 2016 15:18:51 +0200
parents 6744baed1e96
children aa0560cfca9b
files kallithea/controllers/pullrequests.py kallithea/model/forms.py kallithea/templates/pullrequests/pullrequest_show.html kallithea/tests/functional/test_pullrequests.py
diffstat 4 files changed, 23 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/kallithea/controllers/pullrequests.py	Mon Oct 24 15:18:51 2016 +0200
+++ b/kallithea/controllers/pullrequests.py	Mon Oct 24 15:18:51 2016 +0200
@@ -504,6 +504,19 @@
         _form = PullRequestPostForm()().to_python(request.POST)
         reviewer_ids = set(int(s) for s in _form['review_members'])
 
+        org_reviewer_ids = set(int(s) for s in _form['org_review_members'])
+        current_reviewer_ids = set(prr.user_id for prr in pull_request.reviewers)
+        other_added = [User.get(u) for u in current_reviewer_ids - org_reviewer_ids]
+        other_removed = [User.get(u) for u in org_reviewer_ids - current_reviewer_ids]
+        if other_added:
+            h.flash(_('Meanwhile, the following reviewers have been added: %s') %
+                    (', '.join(u.username for u in other_added)),
+                    category='warning')
+        if other_removed:
+            h.flash(_('Meanwhile, the following reviewers have been removed: %s') %
+                    (', '.join(u.username for u in other_removed)),
+                    category='warning')
+
         if _form['updaterev']:
             return self.create_new_iteration(pull_request,
                                       _form['updaterev'],
--- a/kallithea/model/forms.py	Mon Oct 24 15:18:51 2016 +0200
+++ b/kallithea/model/forms.py	Mon Oct 24 15:18:51 2016 +0200
@@ -538,6 +538,7 @@
 
         pullrequest_title = v.UnicodeString(strip=True, required=True)
         pullrequest_desc = v.UnicodeString(strip=True, required=False)
+        org_review_members = v.Set()
         review_members = v.Set()
         updaterev = v.UnicodeString(strip=True, required=False, if_missing=None)
         owner = All(v.UnicodeString(strip=True, required=True),
--- a/kallithea/templates/pullrequests/pullrequest_show.html	Mon Oct 24 15:18:51 2016 +0200
+++ b/kallithea/templates/pullrequests/pullrequest_show.html	Mon Oct 24 15:18:51 2016 +0200
@@ -225,6 +225,9 @@
         <div id="reviewers" style="padding:0px 0px 5px 10px">
           ## members goes here !
           <div>
+            %for member,status in c.pull_request_reviewers:
+              <input type="hidden" value="${member.user_id}" name="org_review_members" />
+            %endfor
             <ul id="review_members">
             %for member,status in c.pull_request_reviewers:
               ## WARNING: the HTML below is duplicate with
--- a/kallithea/tests/functional/test_pullrequests.py	Mon Oct 24 15:18:51 2016 +0200
+++ b/kallithea/tests/functional/test_pullrequests.py	Mon Oct 24 15:18:51 2016 +0200
@@ -37,6 +37,7 @@
         self.log_user()
         regular_user = User.get_by_username(TEST_USER_REGULAR_LOGIN)
         regular_user2 = User.get_by_username(TEST_USER_REGULAR2_LOGIN)
+        admin_user = User.get_by_username(TEST_USER_ADMIN_LOGIN)
 
         # create initial PR
         response = self.app.post(url(controller='pullrequests', action='create',
@@ -80,14 +81,18 @@
                                   'pullrequest_desc': 'description',
                                   'owner': TEST_USER_ADMIN_LOGIN,
                                   '_authentication_token': self.authentication_token(),
-                                  'review_members': [regular_user2.user_id],
+                                  'org_review_members': [admin_user.user_id], # fake - just to get some 'meanwhile' warning ... but it is also added ...
+                                  'review_members': [regular_user2.user_id, admin_user.user_id],
                                  },
                                  status=302)
         assert response.location == 'http://localhost/%s/pull-request/%s/_/Title' % (HG_REPO, pull_request2_id)
         response = response.follow()
         # verify reviewers were added / removed
+        response.mustcontain('Meanwhile, the following reviewers have been added: test_regular')
+        response.mustcontain('Meanwhile, the following reviewers have been removed: test_admin')
         response.mustcontain(no='<input type="hidden" value="%s" name="review_members" />' % regular_user.user_id)
         response.mustcontain('<input type="hidden" value="%s" name="review_members" />' % regular_user2.user_id)
+        response.mustcontain('<input type="hidden" value="%s" name="review_members" />' % admin_user.user_id)
 
     def test_update_with_invalid_reviewer(self):
         invalid_user_id = 99999