Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1397)

Unified Diff: appengine/findit/common/test/rietveld_test.py

Issue 2079773004: [Findit] Add a Rietveld client to post a message to codereview of a culprit. (Closed) Base URL: https://chromium.googlesource.com/infra/infra.git@master
Patch Set: Fix unittests. Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « appengine/findit/common/rietveld.py ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: appengine/findit/common/test/rietveld_test.py
diff --git a/appengine/findit/common/test/rietveld_test.py b/appengine/findit/common/test/rietveld_test.py
new file mode 100644
index 0000000000000000000000000000000000000000..50fb15e1f64333cfc39cf8a5b96834e509a37455
--- /dev/null
+++ b/appengine/findit/common/test/rietveld_test.py
@@ -0,0 +1,110 @@
+# Copyright 2016 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import textwrap
+
+from testing_utils import testing
+
+from common import retry_http_client
+from common.rietveld import Rietveld
+
+
+class DummyHttpClient(retry_http_client.RetryHttpClient):
+
+ def __init__(self):
+ super(DummyHttpClient, self).__init__()
+ self.responses = {}
+ self.requests = []
+
+ def SetResponse(self, url, result):
+ self.responses[url] = result
+
+ def GetBackoff(self, *_): # pragma: no cover
+ """Override to avoid sleep."""
+ return 0
+
+ def _Get(self, *_): # pragma: no cover
+ pass
+
+ def _Post(self, url, data, _, headers):
+ self.requests.append((url, data, headers))
+ return self.responses.get(url, (404, 'Not Found'))
+
+ def _Put(self, *_): # pragma: no cover
+ pass
+
+
+class RietveldTest(testing.AppengineTestCase):
+
+ def setUp(self):
+ super(RietveldTest, self).setUp()
+ self.http_client = DummyHttpClient()
+ self.rietveld = Rietveld()
+ self.rietveld.HTTP_CLIENT = self.http_client
+
+ def testGetXsrfTokenSuccess(self):
+ rietveld_url = 'https://test'
+ self.http_client.SetResponse('%s/xsrf_token' % rietveld_url, (200, 'abc'))
+ self.assertEqual('abc', self.rietveld._GetXsrfToken(rietveld_url))
+ self.assertEqual(1, len(self.http_client.requests))
+ _, _, headers = self.http_client.requests[0]
+ self.assertTrue('X-Requesting-XSRF-Token' in headers)
+
+ def testGetXsrfTokenFailure(self):
+ rietveld_url = 'https://test'
+ self.http_client.SetResponse('%s/xsrf_token' % rietveld_url, (302, 'login'))
+ self.assertIsNone(self.rietveld._GetXsrfToken(rietveld_url))
+
+ def testGetRietveldUrlAndIssueNumber(self):
+ cases = {
+ 'http://abc/123': '123',
+ 'https://abc/456/': '456',
+ 'http://abc/789/diff': '789',
+ }
+ for issue_url, expected_issue_number in cases.iteritems():
+ rietveld_url, issue_number = self.rietveld._GetRietveldUrlAndIssueNumber(
+ issue_url)
+ self.assertEqual('https://abc', rietveld_url)
+ self.assertEqual(expected_issue_number, issue_number)
+
+ def testEncodeMultipartFormData(self):
+ content_type, body = self.rietveld._EncodeMultipartFormData({'a':'b'})
+ expected_content_type = (
+ 'multipart/form-data; boundary=-F-I-N-D-I-T-M-E-S-S-A-G-E-')
+ expected_body = textwrap.dedent("""
+ ---F-I-N-D-I-T-M-E-S-S-A-G-E-\r
+ Content-Disposition: form-data; name="a"\r
+ \r
+ b\r
+ ---F-I-N-D-I-T-M-E-S-S-A-G-E---\r
+ """)[1:]
+ self.assertEqual(expected_content_type, content_type)
+ self.assertEqual(expected_body, body)
+
+ def testPostMessageSuccess(self):
+ rietveld_url = 'https://test'
+ issue_url = '%s/123' % rietveld_url
+ message_publish_url = '%s/publish' % issue_url
+ self.http_client.SetResponse('%s/xsrf_token' % rietveld_url, (200, 'abc'))
+ self.http_client.SetResponse(message_publish_url, (200, 'OK'))
+ self.assertTrue(self.rietveld.PostMessage(issue_url, 'message'))
+ self.assertEqual(2, len(self.http_client.requests))
+
+ def testPostMessageFailOnXsrfToken(self):
+ rietveld_url = 'https://test'
+ issue_url = '%s/123' % rietveld_url
+ message_publish_url = '%s/publish' % issue_url
+ self.http_client.SetResponse('%s/xsrf_token' % rietveld_url, (302, 'login'))
+ self.http_client.SetResponse(message_publish_url, (200, 'OK'))
+ self.assertFalse(self.rietveld.PostMessage(issue_url, 'message'))
+ self.assertEqual(1, len(self.http_client.requests))
+
+ def testPostMessageFailOnPublish(self):
+ rietveld_url = 'https://test'
+ issue_url = '%s/123' % rietveld_url
+ message_publish_url = '%s/publish' % issue_url
+ self.http_client.SetResponse('%s/xsrf_token' % rietveld_url, (302, 'login'))
+ self.http_client.SetResponse(message_publish_url, (429, 'Error'))
+ self.assertFalse(self.rietveld.PostMessage(issue_url, 'message'))
+ self.assertEqual(1, len(self.http_client.requests))
« no previous file with comments | « appengine/findit/common/rietveld.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698