mozreview: don't render filediff buttons on drafts (bug 1234161); r?smacleod draft
authorMauro Doglio <mdoglio@mozilla.com>
Mon, 21 Dec 2015 11:16:46 +0100
changeset 6645 c23340ad3419f6da9dc730ffe273f1ff1882e66e
parent 6415 52c3507f958fc55dce1d78c308fc21af810ecf35
push id503
push usermdoglio@mozilla.com
push dateThu, 07 Jan 2016 18:58:19 +0000
reviewerssmacleod
bugs1234161
mozreview: don't render filediff buttons on drafts (bug 1234161); r?smacleod
pylib/mozreview/mozreview/fields.py
pylib/mozreview/mozreview/tests/test-filediffreviewer-buttons-on-drafts.py
--- a/pylib/mozreview/mozreview/fields.py
+++ b/pylib/mozreview/mozreview/fields.py
@@ -302,17 +302,18 @@ class FileDiffReviewerField(BaseReviewRe
 
     def as_html(self):
         user = self.request.user
         file_diff_reviewer_list = []
         reviewer_ids = self.review_request_details.target_people.values_list(
             'id', flat=True
         )
 
-        if user.is_authenticated():
+        if (user.is_authenticated() and
+                isinstance(self.review_request_details, ReviewRequest)):
             diffsets = self.review_request_details.get_diffsets()
             # Merge all the FileDiffs together
             files = sum([list(diff.files.all()) for diff in diffsets], [])
 
             for item in files:
                 file_diff_reviewer, _ = FileDiffReviewer.objects.get_or_create(
                     reviewer_id=user.id,
                     file_diff_id=item.id
new file mode 100644
--- /dev/null
+++ b/pylib/mozreview/mozreview/tests/test-filediffreviewer-buttons-on-drafts.py
@@ -0,0 +1,73 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+from __future__ import absolute_import, unicode_literals
+
+import selenium.webdriver.support.expected_conditions as EC
+from selenium.common.exceptions import TimeoutException
+from selenium.webdriver import ActionChains
+from selenium.webdriver.common.by import By
+from selenium.webdriver.support.wait import WebDriverWait
+
+from vcttesting.unittest import MozReviewWebDriverTest
+
+
+class FileDiffReviewerDraftTest(MozReviewWebDriverTest):
+    @classmethod
+    def setUpClass(cls):
+        MozReviewWebDriverTest.setUpClass()
+
+        try:
+            self = cls('run')
+            self.create_users([
+                ('jsmith@example.com', 'password1', 'Jeremy Smith [:jsmith]'),
+                ('mjane@example.com', 'password2', 'Mary Jane [:mary]'),
+                ('jdoe@example.com', 'password3', 'John Doe [:jdoe]'),
+            ])
+
+            self.create_ldap(b'mjane@example.com',
+                             b'mjane', 2001, b'Mary Jane')
+
+            bb = self.user_bugzilla('mjane@example.com')
+            bb.create_bug('TestProduct', 'TestComponent', 'First Bug')
+
+            lr = self.create_basic_repo('mjane@example.com', 'mjane')
+            lr.write('foo', 'first change')
+            lr.run(['commit', '-m', 'Bug 1 - Test try;r=jsmith'])
+            lr.run(['push'])
+            lr.write('foo', 'second change')
+            lr.run(['commit', '-m', 'second change;r=jsmith'])
+            lr.run(['push'])
+        except Exception:
+            MozReviewWebDriverTest.tearDownClass()
+            raise
+
+    def _element_is_present(self, selector, timeout=10):
+        try:
+            WebDriverWait(self.browser, timeout).until(
+                EC.presence_of_element_located(selector))
+            return True
+        except TimeoutException:
+            return False
+
+    def test_filediffreviewer_buttons_on_draft(self):
+        """A draft review request shouldn't have a filediff review button"""
+
+        self.reviewboard_login('mjane@example.com', 'password2')
+        self.load_rburl('r/1/diff/1/')
+
+        self.assertTrue(
+            self._element_is_present((By.CLASS_NAME, 'diff-file-btn'))
+        )
+
+        self.load_rburl('r/1/')
+        self.assign_reviewer(0, 'jdoe')
+        WebDriverWait(self.browser, 10).until(
+            EC.visibility_of_element_located((By.ID, 'draft-banner')))
+
+        self.load_rburl('r/1/diff/1/')
+
+        self.assertFalse(
+            self._element_is_present((By.CLASS_NAME, 'diff-file-btn'))
+        )