mozreview: add default reviewers the first time we add a diffset (
bug 1239524); r?smacleod
The web UI enforces the requirement that a review request have
reviewers. This behavior is different from the web API, which doesn't
enforce this requirement.
As part of converting to the batch submission API, we failed to carry
over the setting of default reviewers from DiffResource.create() from
the Review Board Web API. This commit fixes that.
--- a/pylib/mozreview/mozreview/resources/batch_review_request.py
+++ b/pylib/mozreview/mozreview/resources/batch_review_request.py
@@ -564,16 +564,22 @@ def update_review_request_draft_diffset(
draft = ReviewRequestDraft.create(rr)
discarded_diffset = None
if draft.diffset and draft.diffset != diffset:
discarded_diffset = draft.diffset
draft.diffset = diffset
+
+ # Only add default reviewers if this is the first time a diffset has
+ # been added.
+ if rr.diffset_history.diffsets.count() == 0:
+ draft.add_default_reviewers()
+
draft.save()
if discarded_diffset:
discarded_diffset.delete()
return draft
new file mode 100644
--- /dev/null
+++ b/pylib/mozreview/mozreview/tests/test-publish-no-reviewer.py
@@ -0,0 +1,68 @@
+# 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 time
+
+from selenium.webdriver.common.by import (
+ By,
+)
+from selenium.webdriver.common.keys import (
+ Keys,
+)
+import selenium.webdriver.support.expected_conditions as EC
+from selenium.webdriver.support.wait import (
+ WebDriverWait,
+)
+
+from vcttesting.unittest import (
+ MozReviewWebDriverTest,
+)
+
+
+class PublishNoReviewerTest(MozReviewWebDriverTest):
+ @classmethod
+ def setUpClass(cls):
+ MozReviewWebDriverTest.setUpClass()
+
+ try:
+ self = cls('run')
+ self.create_users([
+ ('jsmoth@example.com', 'password1', 'Jeremy Smith [:jsmith]'),
+ ('mjane@example.com', 'password2', 'Mary Jane [:mary]'),
+ ])
+
+ self.create_ldap(b'mjane@example.com', b'mjane', 2001,
+ b'Mary Jane', scm_level=3)
+
+ mjb = self.user_bugzilla('mjane@example.com')
+ mjb.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 publish; r?jsmith'])
+ lr.run(['push'])
+ except Exception:
+ MozReviewWebDriverTest.tearDownClass()
+ raise
+
+ def test_publish_no_reviewers(self):
+ self.reviewboard_login('mjane@example.com', 'password2')
+ self.load_rburl('r/1')
+ self.wait_for_reviewers_to_load()
+
+ ac = self.prepare_edit_reviewers(0)
+ ac.send_keys(Keys.BACKSPACE)
+ ac.send_keys(Keys.RETURN)
+
+ # TODO need a better method to wait for XHR saving the draft.
+ time.sleep(1)
+
+ publish_button = WebDriverWait(self.browser, 3).until(
+ EC.visibility_of_element_located((By.ID, 'btn-draft-publish')))
+ publish_button.click()
+
+ WebDriverWait(self.browser, 10).until(
+ EC.invisibility_of_element_located((By.ID, 'draft-banner')))