testing: Add indicator of review drafts to summary (bug 1161230) r=smacleod
authorbyron jones <glob@mozilla.com>
Mon, 11 Apr 2016 14:25:45 +0800
changeset 8708 c28006880d979f56e94dea3d0b4a2eb2985c1e82
parent 8705 35bb71e25f28eaa869a4dd4f59c85854f513bb80
child 8709 e16074ff71c882ff448e4efb6519df68cc158485
push id969
push userbjones@mozilla.com
push dateThu, 30 Jun 2016 05:50:38 +0000
reviewerssmacleod
bugs1161230
testing: Add indicator of review drafts to summary (bug 1161230) r=smacleod MozReview-Commit-ID: AHzWTbd8MQ
hgext/reviewboard/tests/test-review-request-summary.t
pylib/mozreview/mozreview/resources/review_request_summary.py
testing/vcttesting/reviewboard/mach_commands.py
--- a/hgext/reviewboard/tests/test-review-request-summary.t
+++ b/hgext/reviewboard/tests/test-review-request-summary.t
@@ -51,37 +51,40 @@
 
   $ rbmanage dump-summary 1
   parent:
     summary: bz://1/mynick
     id: 1
     submitter: default+5
     issue_open_count: 0
     status: pending
+    has_draft: false
     reviewers:
     - reviewer
   children:
   - summary: Bug 1 - Foo 1
     id: 2
     commit: 98467d80785ec84dd871f213c167ed704a6d974d
     submitter: default+5
     issue_open_count: 0
     status: pending
+    has_draft: false
     reviewers:
     - reviewer
     reviewers_status:
       reviewer:
         review_flag: r?
         ship_it: false
   - summary: Bug 1 - Foo 2
     id: 3
     commit: 3a446ae4382006c43cdfa5aa33c494f582736f35
     submitter: default+5
     issue_open_count: 0
     status: pending
+    has_draft: false
     reviewers: []
     reviewers_status: {}
 
 Only parents have summaries.
 
   $ rbmanage dump-summary 2
   API Error: 400: 1001: Review request is not a parent
   [1]
@@ -98,147 +101,159 @@ Opening an issue should be reflected in 
 
   $ rbmanage dump-summary 1
   parent:
     summary: bz://1/mynick
     id: 1
     submitter: default+5
     issue_open_count: 0
     status: pending
+    has_draft: false
     reviewers:
     - reviewer
   children:
   - summary: Bug 1 - Foo 1
     id: 2
     commit: 98467d80785ec84dd871f213c167ed704a6d974d
     submitter: default+5
     issue_open_count: 1
     status: pending
+    has_draft: false
     reviewers:
     - reviewer
     reviewers_status:
       reviewer:
         review_flag: r?
         ship_it: false
   - summary: Bug 1 - Foo 2
     id: 3
     commit: 3a446ae4382006c43cdfa5aa33c494f582736f35
     submitter: default+5
     issue_open_count: 0
     status: pending
+    has_draft: false
     reviewers: []
     reviewers_status: {}
 
 Resolving an issue should decrement the issue count.
 
   $ rbmanage update-issue-status 2 1 1 resolved
   updated issue status on diff comment 1
 
   $ rbmanage dump-summary 1
   parent:
     summary: bz://1/mynick
     id: 1
     submitter: default+5
     issue_open_count: 0
     status: pending
+    has_draft: false
     reviewers:
     - reviewer
   children:
   - summary: Bug 1 - Foo 1
     id: 2
     commit: 98467d80785ec84dd871f213c167ed704a6d974d
     submitter: default+5
     issue_open_count: 0
     status: pending
+    has_draft: false
     reviewers:
     - reviewer
     reviewers_status:
       reviewer:
         review_flag: r?
         ship_it: false
   - summary: Bug 1 - Foo 2
     id: 3
     commit: 3a446ae4382006c43cdfa5aa33c494f582736f35
     submitter: default+5
     issue_open_count: 0
     status: pending
+    has_draft: false
     reviewers: []
     reviewers_status: {}
 
 Giving a ship-it should result in a change in the reviewer status
 
   $ exportbzauth reviewer@example.com password1
   $ rbmanage create-review 2 --review-flag='r+' --public
   created review 2
 
   $ rbmanage dump-summary 1
   parent:
     summary: bz://1/mynick
     id: 1
     submitter: default+5
     issue_open_count: 0
     status: pending
+    has_draft: false
     reviewers:
     - reviewer
   children:
   - summary: Bug 1 - Foo 1
     id: 2
     commit: 98467d80785ec84dd871f213c167ed704a6d974d
     submitter: default+5
     issue_open_count: 0
     status: pending
+    has_draft: false
     reviewers:
     - reviewer
     reviewers_status:
       reviewer:
         review_flag: r+
         ship_it: true
   - summary: Bug 1 - Foo 2
     id: 3
     commit: 3a446ae4382006c43cdfa5aa33c494f582736f35
     submitter: default+5
     issue_open_count: 0
     status: pending
+    has_draft: false
     reviewers: []
     reviewers_status: {}
 
   $ exportbzauth default@example.com password
 
 Verify we can also get the summaries by bug, including closed ones.
 
   $ rbmanage closesubmitted 2
 
   $ rbmanage dump-summaries-by-bug 1
   - parent:
       summary: bz://1/mynick
       id: 1
       submitter: default+5
       issue_open_count: 0
       status: pending
+      has_draft: false
       reviewers:
       - reviewer
     children:
     - summary: Bug 1 - Foo 1
       id: 2
       commit: 98467d80785ec84dd871f213c167ed704a6d974d
       submitter: default+5
       issue_open_count: 0
       status: submitted
+      has_draft: false
       reviewers:
       - reviewer
       reviewers_status:
         reviewer:
           review_flag: r+
           ship_it: true
     - summary: Bug 1 - Foo 2
       id: 3
       commit: 3a446ae4382006c43cdfa5aa33c494f582736f35
       submitter: default+5
       issue_open_count: 0
       status: pending
+      has_draft: false
       reviewers: []
       reviewers_status: {}
 
 Verify that we get nothing from non-existent bugs.
 
   $ rbmanage dump-summaries-by-bug 2
   []
 
--- a/pylib/mozreview/mozreview/resources/review_request_summary.py
+++ b/pylib/mozreview/mozreview/resources/review_request_summary.py
@@ -199,16 +199,17 @@ class ReviewRequestSummaryResource(WebAP
     def _summarize_review_request(self, request, review_request, commit=None):
         """Returns a dict summarizing a ReviewRequest object.
 
         Example return value for a child request (a parent looks the same but
         without a 'commit' key):
 
         {
             'commit': 'ece2029d013af68f9f32aa0a6199fcb2201d5aae',
+            'has_draft': False,
             'id': 3,
             'issue_open_count': 0,
             'last_updated': '2015-04-13T18:58:25Z',
             'links': {
                     'self': {
                         'href': 'http://127.0.0.1:50936/api/extensions/mozreview.extension.MozReviewExtension/summary/3/',
                         'method': 'GET'
                     }
@@ -249,16 +250,18 @@ class ReviewRequestSummaryResource(WebAP
                                   BugzillaUserMap.objects.filter(user_id__in=[
                                       reviewer.id for reviewer in reviewers])]
 
         d['links'] = self.get_links(obj=review_request, request=request)
 
         if commit:
             d['commit'] = commit
 
+        d['has_draft'] = review_request.get_draft() is not None
+
         return d
 
     def _summarize_families(self, request, families):
         """Returns a list of dicts summarizing a parent and its children.
 
         'families' should be a list of dicts, each containing a 'parent' key
         mapping to a single ReviewRequest and a 'children' key containing a
         list of ReviewRequests.
--- a/testing/vcttesting/reviewboard/mach_commands.py
+++ b/testing/vcttesting/reviewboard/mach_commands.py
@@ -144,17 +144,18 @@ def serialize_review_requests(api_client
     return yaml.safe_dump(d, default_flow_style=False).rstrip()
 
 
 def short_review_request_dict(rr):
     # Don't include last_updated since it's hard to test.
     d = OrderedDict()
     d['summary'] = _serialize_text(rr['summary'])
 
-    for k in ('id', 'commit', 'submitter', 'issue_open_count', 'status'):
+    for k in ('id', 'commit', 'submitter', 'issue_open_count', 'status',
+              'has_draft'):
         if k in rr:
             d[k] = rr[k]
 
     d['reviewers'] = [x for x in rr['reviewers']]
 
     if 'reviewers_status' in rr:
         d['reviewers_status'] = dict()
         for reviewer, status in rr[u'reviewers_status'].iteritems():
@@ -664,17 +665,17 @@ class ReviewBoardCommands(object):
         from rbtools.api.errors import APIError
         c = self._get_client()
 
         try:
             r = c.get_path('/extensions/mozreview.extension.MozReviewExtension'
                            '/summary/%s/' % rrid)
         except APIError as e:
             print('API Error: %s: %s: %s' % (e.http_status, e.error_code,
-                e.rsp['err']['msg']))
+                  e.rsp['err']['msg']))
             return 1
 
         d = OrderedDict()
         d['parent'] = short_review_request_dict(r['parent'])
         d['children'] = [short_review_request_dict(x) for x in r['children']]
 
         print(yaml.safe_dump(d, default_flow_style=False).rstrip())