1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
|
# This file is part of Buildbot. Buildbot is free software: you can
# redistribute it and/or modify it under the terms of the GNU General Public
# License as published by the Free Software Foundation, version 2.
#
# This program is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
# details.
#
# You should have received a copy of the GNU General Public License along with
# this program; if not, write to the Free Software Foundation, Inc., 51
# Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
#
# Copyright Buildbot Team Members
from mock import Mock
from twisted.internet import defer
from twisted.web import server
class FakeRequest(Mock):
"""
A fake Twisted Web Request object, including some pointers to the
buildmaster and an addChange method on that master which will append its
arguments to self.addedChanges.
"""
written = ''
finished = False
redirected_to = None
failure = None
def __init__(self, args={}):
Mock.__init__(self)
self.args = args
self.site = Mock()
self.site.buildbot_service = Mock()
master = self.site.buildbot_service.master = Mock()
self.addedChanges = []
def addChange(**kwargs):
self.addedChanges.append(kwargs)
return defer.succeed(Mock())
master.addChange = addChange
self.deferred = defer.Deferred()
def write(self, data):
self.written = self.written + data
def redirect(self, url):
self.redirected_to = url
def finish(self):
self.finished = True
self.deferred.callback(None)
def processingFailed(self, f):
self.deferred.errback(f)
# work around http://code.google.com/p/mock/issues/detail?id=105
def _get_child_mock(self, **kw):
return Mock(**kw)
# cribed from twisted.web.test._util._render
def test_render(self, resource):
result = resource.render(self)
if isinstance(result, str):
self.write(result)
self.finish()
return self.deferred
elif result is server.NOT_DONE_YET:
return self.deferred
else:
raise ValueError("Unexpected return value: %r" % (result,))
|