Commit 053af45b authored by Robert Ma's avatar Robert Ma Committed by Commit Bot

Work around a Monorail API bug ('cc' field in issue body)

The type of 'cc' field is inconsistent with the API docs. Marshal the
field to work around the bug for now.

Bug: 765334, monorail:3300
Change-Id: I1b252b649b665e77ff643b34b87ce9587723db0d
Reviewed-on: https://chromium-review.googlesource.com/826186Reviewed-by: default avatarQuinten Yearsley <qyearsley@chromium.org>
Commit-Queue: Robert Ma <robertma@chromium.org>
Cr-Commit-Position: refs/heads/master@{#524397}
parent fbaaaf60
......@@ -122,5 +122,15 @@ class MonorailAPI(object):
self.api = self._api_discovery.build(
'monorail', 'v1', discoveryServiceUrl=self._DISCOVERY_URL, credentials=credentials, cache_discovery=False)
@staticmethod
def _fix_cc_in_body(body):
# TODO(crbug.com/monorail/3300): Despite the docs, 'cc' is in fact a
# list of dictionaries with only one string field 'name'. Hide the bug
# and expose the cleaner, documented API for now.
if 'cc' in body:
body['cc'] = [{'name': email} for email in body['cc']]
return body
def insert_issue(self, issue):
return self.api.issues().insert(projectId=issue.project_id, body=issue.body).execute()
body = self._fix_cc_in_body(issue.body)
return self.api.issues().insert(projectId=issue.project_id, body=body).execute()
......@@ -4,7 +4,7 @@
import unittest
from webkitpy.w3c.monorail import MonorailIssue
from webkitpy.w3c.monorail import MonorailAPI, MonorailIssue
class MonorailIssueTest(unittest.TestCase):
......@@ -18,12 +18,12 @@ class MonorailIssueTest(unittest.TestCase):
def test_str(self):
issue = MonorailIssue('chromium', summary='test', status='Untriaged', description='body',
cc=['foo@chromium.org'], labels=['Flaky'], components=['Infra'])
cc=['foo@chromium.org', 'bar@chromium.org'], labels=['Flaky'], components=['Infra'])
self.assertEqual(str(issue),
('Monorail issue in project chromium\n'
'Summary: test\n'
'Status: Untriaged\n'
'CC: foo@chromium.org\n'
'CC: foo@chromium.org, bar@chromium.org\n'
'Components: Infra\n'
'Labels: Flaky\n'
'Description:\nbody\n'))
......@@ -44,9 +44,13 @@ class MonorailIssueTest(unittest.TestCase):
with self.assertRaises(AssertionError):
MonorailIssue('chromium', summary='test', status='unknown')
def test_init_string_passed_for_cc_field(self):
def test_init_string_passed_for_list_fields(self):
with self.assertRaises(AssertionError):
MonorailIssue('chromium', summary='test', status='Untriaged', cc='foo@chromium.org')
with self.assertRaises(AssertionError):
MonorailIssue('chromium', summary='test', status='Untriaged', components='Infra')
with self.assertRaises(AssertionError):
MonorailIssue('chromium', summary='test', status='Untriaged', labels='Flaky')
def test_new_chromium_issue(self):
issue = MonorailIssue.new_chromium_issue(
......@@ -59,3 +63,17 @@ class MonorailIssueTest(unittest.TestCase):
def test_crbug_link(self):
self.assertEqual(MonorailIssue.crbug_link(12345), 'https://crbug.com/12345')
class MonorailAPITest(unittest.TestCase):
def test_fix_cc_field_in_body(self):
original_body = {
'summary': 'test bug',
'cc': ['foo@chromium.org', 'bar@chromium.org']
}
# pylint: disable=protected-access
self.assertEqual(MonorailAPI._fix_cc_in_body(original_body), {
'summary': 'test bug',
'cc': [{'name': 'foo@chromium.org'}, {'name': 'bar@chromium.org'}]
})
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment