summaryrefslogtreecommitdiff
path: root/repoze
diff options
context:
space:
mode:
authorChris McDonough <chrism@agendaless.com>2009-01-07 04:15:27 +0000
committerChris McDonough <chrism@agendaless.com>2009-01-07 04:15:27 +0000
commit7d32df3d33354dc34c1cb0a086463e4f23d968ce (patch)
treedc33728f73b23a35111eb2d6a5a0077426320266 /repoze
parentd67c741ef82c0a14778c691281139ec364c34a27 (diff)
downloadpyramid-7d32df3d33354dc34c1cb0a086463e4f23d968ce.tar.gz
pyramid-7d32df3d33354dc34c1cb0a086463e4f23d968ce.tar.bz2
pyramid-7d32df3d33354dc34c1cb0a086463e4f23d968ce.zip
- Add a method named ``assert_`` to the DummyTemplateRenderer. This
method accepts keyword arguments. Each key/value pair in the keyword arguments causes an assertion to be made that the renderer received this key with a value equal to the asserted value. - Projects generated by the paster templates now use the ``DummyTemplateRenderer.assert_`` method in their view tests.
Diffstat (limited to 'repoze')
-rw-r--r--repoze/bfg/paster_templates/starter/+package+/tests.py_tmpl2
-rw-r--r--repoze/bfg/paster_templates/zodb/+package+/tests.py_tmpl2
-rw-r--r--repoze/bfg/testing.py41
-rw-r--r--repoze/bfg/tests/test_testing.py41
4 files changed, 73 insertions, 13 deletions
diff --git a/repoze/bfg/paster_templates/starter/+package+/tests.py_tmpl b/repoze/bfg/paster_templates/starter/+package+/tests.py_tmpl
index ee4050b95..b7c0eb1ef 100644
--- a/repoze/bfg/paster_templates/starter/+package+/tests.py_tmpl
+++ b/repoze/bfg/paster_templates/starter/+package+/tests.py_tmpl
@@ -28,7 +28,7 @@ class ViewTests(unittest.TestCase):
request = testing.DummyRequest()
renderer = testing.registerDummyRenderer('templates/mytemplate.pt')
response = my_view(context, request)
- self.assertEqual(renderer.project, '{{project}}')
+ renderer.assert_(project='{{project}}')
class ViewIntegrationTests(unittest.TestCase):
""" These tests are integration tests for the view. These test
diff --git a/repoze/bfg/paster_templates/zodb/+package+/tests.py_tmpl b/repoze/bfg/paster_templates/zodb/+package+/tests.py_tmpl
index ee4050b95..b7c0eb1ef 100644
--- a/repoze/bfg/paster_templates/zodb/+package+/tests.py_tmpl
+++ b/repoze/bfg/paster_templates/zodb/+package+/tests.py_tmpl
@@ -28,7 +28,7 @@ class ViewTests(unittest.TestCase):
request = testing.DummyRequest()
renderer = testing.registerDummyRenderer('templates/mytemplate.pt')
response = my_view(context, request)
- self.assertEqual(renderer.project, '{{project}}')
+ renderer.assert_(project='{{project}}')
class ViewIntegrationTests(unittest.TestCase):
""" These tests are integration tests for the view. These test
diff --git a/repoze/bfg/testing.py b/repoze/bfg/testing.py
index 94f798469..be7b5fea0 100644
--- a/repoze/bfg/testing.py
+++ b/repoze/bfg/testing.py
@@ -5,7 +5,7 @@ from zope.interface import implements
from repoze.bfg.interfaces import IRequest
-_marker = ()
+_marker = []
def registerDummySecurityPolicy(userid=None, groupids=(), permissive=True):
""" Registers a dummy ``repoze.bfg`` security policy using the
@@ -172,13 +172,50 @@ def make_traverser_factory(root):
return DummyTraverserFactory
class DummyTemplateRenderer:
+ """
+ An instance of this class is returned from
+ ``registerDummyRenderer``. It has a helper function (``assert_``)
+ that makes it possible to make an assertion which compares data
+ passed to the renderer by the view function against expected
+ key/value pairs.
+ """
+
+ def __init__(self):
+ self._received = {}
+
def implementation(self):
return self
def __call__(self, **kw):
- self.__dict__.update(kw)
+ self._received.update(kw)
return ''
+ def __getattr__(self, k):
+ """ Backwards compatibiity """
+ val = self._received.get(k, _marker)
+ if val is _marker:
+ raise AttributeError(k)
+ return val
+
+ def assert_(self, **kw):
+ """ Accept an arbitrary set of assertion key/value pairs. For
+ each assertion key/value pair assert that the renderer
+ (eg. ``render_template_to_response``) received the key with a
+ value that equals the asserted value. If the renderer did not
+ receive the key at all, or the value received by the renderer
+ doesn't match the assertion value, raise an AssertionError."""
+ for k, v in kw.items():
+ myval = self._received.get(k, _marker)
+ if myval is _marker:
+ raise AssertionError(
+ 'A value for key "%s" was not passed to the renderer' % k)
+
+ if myval != v:
+ raise AssertionError(
+ '\nasserted value for %s: %r\nactual value: %r' % (
+ v, k, myval))
+ return True
+
def make_view(result):
def dummy_view(context, request):
from webob import Response
diff --git a/repoze/bfg/tests/test_testing.py b/repoze/bfg/tests/test_testing.py
index 0dd3539df..3921a4d27 100644
--- a/repoze/bfg/tests/test_testing.py
+++ b/repoze/bfg/tests/test_testing.py
@@ -1,12 +1,12 @@
-from zope.component.testing import PlacelessSetup
+from zope.testing.cleanup import cleanUp
import unittest
-class TestTestingFunctions(unittest.TestCase, PlacelessSetup):
+class TestTestingFunctions(unittest.TestCase):
def setUp(self):
- PlacelessSetup.setUp(self)
+ cleanUp()
def tearDown(self):
- PlacelessSetup.tearDown(self)
+ cleanUp()
def test_registerDummySecurityPolicy_permissive(self):
from repoze.bfg import testing
@@ -49,14 +49,12 @@ class TestTestingFunctions(unittest.TestCase, PlacelessSetup):
def test_registerDummyRenderer(self):
from repoze.bfg import testing
- template = testing.registerDummyRenderer('templates/foo')
+ renderer = testing.registerDummyRenderer('templates/foo')
from repoze.bfg.testing import DummyTemplateRenderer
- self.failUnless(isinstance(template, DummyTemplateRenderer))
+ self.failUnless(isinstance(renderer, DummyTemplateRenderer))
from repoze.bfg.chameleon_zpt import render_template_to_response
response = render_template_to_response('templates/foo', foo=1, bar=2)
- self.assertEqual(template.foo, 1)
- self.assertEqual(template.bar, 2)
- self.assertEqual(response.body, '')
+ self.assertEqual(dict(foo=1, bar=2), renderer._received)
def test_registerEventListener_single(self):
from repoze.bfg import testing
@@ -345,4 +343,29 @@ class TestDummyRequest(unittest.TestCase):
self.assertEqual(request.environ['PATH_INFO'], '/foo')
self.assertEqual(request.water, 1)
+class TestDummyTemplateRenderer(unittest.TestCase):
+ def _getTargetClass(self):
+ from repoze.bfg.testing import DummyTemplateRenderer
+ return DummyTemplateRenderer
+
+ def _makeOne(self,):
+ return self._getTargetClass()()
+
+ def test_implementation(self):
+ renderer = self._makeOne()
+ self.assertEqual(renderer.implementation(), renderer)
+
+ def test_getattr(self):
+ renderer = self._makeOne()
+ renderer(a=1)
+ self.assertEqual(renderer.a, 1)
+ self.assertRaises(AttributeError, renderer.__getattr__, 'b')
+
+ def test_assert_(self):
+ renderer = self._makeOne()
+ renderer(a=1, b=2)
+ self.assertRaises(AssertionError, renderer.assert_, c=1)
+ self.assertRaises(AssertionError, renderer.assert_, b=3)
+ self.failUnless(renderer.assert_(a=1, b=2))
+