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

Unified Diff: appengine/monorail/testing/testing_helpers.py

Issue 1868553004: Open Source Monorail (Closed) Base URL: https://chromium.googlesource.com/infra/infra.git@master
Patch Set: Rebase Created 4 years, 8 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/monorail/testing/test/testing_helpers_test.py ('k') | appengine/monorail/testing_utils » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: appengine/monorail/testing/testing_helpers.py
diff --git a/appengine/monorail/testing/testing_helpers.py b/appengine/monorail/testing/testing_helpers.py
new file mode 100644
index 0000000000000000000000000000000000000000..d31429454b96850f9da3c2bc2544caabbf941ff8
--- /dev/null
+++ b/appengine/monorail/testing/testing_helpers.py
@@ -0,0 +1,108 @@
+# Copyright 2016 The Chromium Authors. All rights reserved.
+# Use of this source code is govered by a BSD-style
+# license that can be found in the LICENSE file or at
+# https://developers.google.com/open-source/licenses/bsd
+
+"""Helpers for testing."""
+
+import email
+
+from framework import profiler
+from proto import user_pb2
+from services import service_manager
+from testing import fake
+import webapp2
+
+DEFAULT_HOST = '127.0.0.1'
+
+
+MINIMAL_HEADER_LINES = [
+ ('From', 'user@example.com'),
+ ('To', 'proj@monorail.example.com'),
+ ('Cc', 'ningerso@chromium.org'),
+ ('Subject', 'Issue 123 in proj: broken link'),
+ ]
+
+# Add one more (long) line for In-Reply-To
+HEADER_LINES = MINIMAL_HEADER_LINES + [
+ ('In-Reply-To', '<0=969704940193871313=13442892928193434663='
+ 'proj@monorail.example.com>'),
+ ]
+
+
+def MakeMessage(header_list, body):
+ """Convenience function to make an email.message.Message."""
+ msg = email.message.Message()
+ for key, value in header_list:
+ msg[key] = value
+ msg.set_payload(body)
+ return msg
+
+
+def MakeMonorailRequest(*args, **kwargs):
+ """Get just the monorailrequest.MonorailRequest() from GetRequestObjects."""
+ _request, mr = GetRequestObjects(*args, **kwargs)
+ return mr
+
+
+def GetRequestObjects(
+ headers=None, path='/', params=None, user_info=None, project=None,
+ method='GET', perms=None, services=None):
+ """Make fake request and MonorailRequest objects for testing.
+
+ Host param will override the 'Host' header, and has a default value of
+ '127.0.0.1'.
+
+ Args:
+ headers: Dict of HTTP header strings.
+ path: Path part of the URL in the request.
+ params: Dict of query-string parameters.
+ user_info: Dict of user attributes to set on a MonorailRequest object.
+ For example, "user_id: 5" causes self.auth.user_id=5.
+ project: optional Project object for the current request.
+ method: 'GET' or 'POST'.
+ perms: PermissionSet to use for this request.
+ services: Connections to backends.
+
+ Returns:
+ A tuple of (http Request, monorailrequest.MonorailRequest()).
+ """
+ headers = headers or {}
+ params = params or {}
+
+ headers.setdefault('Host', DEFAULT_HOST)
+ post_items = params if method == 'POST' else None
+
+ if not services:
+ services = service_manager.Services(
+ project=fake.ProjectService(),
+ user=fake.UserService(),
+ usergroup=fake.UserGroupService())
+ services.project.TestAddProject('proj')
+
+ request = webapp2.Request.blank(path, headers=headers, POST=post_items)
+ mr = fake.MonorailRequest(
+ user_info=user_info, project=project, perms=perms, params=params)
+ mr.ParseRequest(
+ request, services, profiler.Profiler(), do_user_lookups=False)
+ mr.auth.user_pb = user_pb2.MakeUser()
+
+ return request, mr
+
+
+class Blank(object):
+ """Simple class that assigns all named args to attributes.
+
+ Tip: supply a lambda to define a method.
+ """
+
+ def __init__(self, **kwargs):
+ vars(self).update(kwargs)
+
+ def __repr__(self):
+ return '%s(%s)' % (self.__class__.__name__, str(vars(self)))
+
+ def __eq__(self, other):
+ if other is None:
+ return False
+ return vars(self) == vars(other)
« no previous file with comments | « appengine/monorail/testing/test/testing_helpers_test.py ('k') | appengine/monorail/testing_utils » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698