summaryrefslogtreecommitdiff
path: root/repoze/bfg/tests
diff options
context:
space:
mode:
authorChris McDonough <chrism@agendaless.com>2009-01-05 23:36:27 +0000
committerChris McDonough <chrism@agendaless.com>2009-01-05 23:36:27 +0000
commit7ae0c2522bbb2b026bc0370dbb1b1608f146137d (patch)
treed46aa3e872eaf70d900af720b7458efd2ed0a189 /repoze/bfg/tests
parent96d8a517bf195a1ce0787e6ec16c3db82bef98f5 (diff)
downloadpyramid-7ae0c2522bbb2b026bc0370dbb1b1608f146137d.tar.gz
pyramid-7ae0c2522bbb2b026bc0370dbb1b1608f146137d.tar.bz2
pyramid-7ae0c2522bbb2b026bc0370dbb1b1608f146137d.zip
New Modules
- A new module ``repoze.bfg.url`` has been added. It contains the ``model_url`` API (moved from ``repoze.bfg.traversal``) and an implementation of ``urlencode`` (like Python's ``urllib.urlencode``) which can handle Unicode keys and values in parameters to the ``query`` argument. Deprecations - The ``model_url`` function has been moved from ``repoze.bfg.traversal`` into ``repoze.bfg.url``. It can still be imported from ``repoze.bfg.traversal`` but an import from ``repoze.bfg.traversal`` will emit a DeprecationWarning. Features - The ``repoze.bfg.url.model_url`` API (nee' ``repoze.bfg.traversal.model_url``) now accepts and honors a keyword argument named ``query``. The value of this argument will be used to compose a query string, which will be attached to the generated URL before it is returned. See the API docs (in the docs directory or `on the web <http://static.repoze.org/bfgdocs>`_) for more information.
Diffstat (limited to 'repoze/bfg/tests')
-rw-r--r--repoze/bfg/tests/test_traversal.py80
-rw-r--r--repoze/bfg/tests/test_url.py134
2 files changed, 134 insertions, 80 deletions
diff --git a/repoze/bfg/tests/test_traversal.py b/repoze/bfg/tests/test_traversal.py
index 70938cbf6..dcb47e6ed 100644
--- a/repoze/bfg/tests/test_traversal.py
+++ b/repoze/bfg/tests/test_traversal.py
@@ -225,86 +225,6 @@ class FindInterfaceTests(unittest.TestCase):
result = self._callFUT(baz, IFoo)
self.assertEqual(result.__name__, 'root')
-class ModelURLTests(unittest.TestCase):
- def _callFUT(self, model, request, *elements):
- from repoze.bfg.traversal import model_url
- return model_url(model, request, *elements)
-
- def test_extra_args(self):
- baz = DummyContext()
- bar = DummyContext(baz)
- foo = DummyContext(bar)
- root = DummyContext(foo)
- root.__parent__ = None
- root.__name__ = None
- foo.__parent__ = root
- foo.__name__ = 'foo '
- bar.__parent__ = foo
- bar.__name__ = 'bar'
- baz.__parent__ = bar
- baz.__name__ = 'baz'
- request = DummyRequest()
- result = self._callFUT(baz, request, 'this/theotherthing', 'that')
-
- self.assertEqual(
- result,
- 'http://example.com:5432/foo%20/bar/baz/this/theotherthing/that')
-
- def test_root_default_app_url(self):
- root = DummyContext()
- root.__parent__ = None
- root.__name__ = None
- request = DummyRequest()
- result = self._callFUT(root, request)
- self.assertEqual(result, 'http://example.com:5432/')
-
- def test_nonroot_default_app_url(self):
- root = DummyContext()
- root.__parent__ = None
- root.__name__ = None
- other = DummyContext()
- other.__parent__ = root
- other.__name__ = 'nonroot object'
- request = DummyRequest()
- result = self._callFUT(other, request)
- self.assertEqual(result, 'http://example.com:5432/nonroot%20object/')
-
- def test_unicode_mixed_with_bytes_in_model_names(self):
- root = DummyContext()
- root.__parent__ = None
- root.__name__ = None
- one = DummyContext()
- one.__parent__ = root
- one.__name__ = unicode('La Pe\xc3\xb1a', 'utf-8')
- two = DummyContext()
- two.__parent__ = one
- two.__name__ = 'La Pe\xc3\xb1a'
- request = DummyRequest()
- result = self._callFUT(two, request)
- self.assertEqual(result,
- 'http://example.com:5432/La%20Pe%C3%B1a/La%20Pe%C3%B1a/')
-
- def test_unicode_in_element_names(self):
- uc = unicode('La Pe\xc3\xb1a', 'utf-8')
- root = DummyContext()
- root.__parent__ = None
- root.__name__ = None
- one = DummyContext()
- one.__parent__ = root
- one.__name__ = uc
- request = DummyRequest()
- result = self._callFUT(one, request, uc)
- self.assertEqual(result,
- 'http://example.com:5432/La%20Pe%C3%B1a/La%20Pe%C3%B1a')
-
- def test_element_names_url_quoted(self):
- root = DummyContext()
- root.__parent__ = None
- root.__name__ = None
- request = DummyRequest()
- result = self._callFUT(root, request, 'a b c')
- self.assertEqual(result, 'http://example.com:5432/a%20b%20c')
-
class FindRootTests(unittest.TestCase):
def _callFUT(self, context):
from repoze.bfg.traversal import find_root
diff --git a/repoze/bfg/tests/test_url.py b/repoze/bfg/tests/test_url.py
new file mode 100644
index 000000000..2a47068cd
--- /dev/null
+++ b/repoze/bfg/tests/test_url.py
@@ -0,0 +1,134 @@
+import unittest
+
+class ModelURLTests(unittest.TestCase):
+ def _callFUT(self, model, request, *elements, **kw):
+ from repoze.bfg.url import model_url
+ return model_url(model, request, *elements, **kw)
+
+ def test_extra_args(self):
+ baz = DummyContext()
+ bar = DummyContext(baz)
+ foo = DummyContext(bar)
+ root = DummyContext(foo)
+ root.__parent__ = None
+ root.__name__ = None
+ foo.__parent__ = root
+ foo.__name__ = 'foo '
+ bar.__parent__ = foo
+ bar.__name__ = 'bar'
+ baz.__parent__ = bar
+ baz.__name__ = 'baz'
+ request = DummyRequest()
+ result = self._callFUT(baz, request, 'this/theotherthing', 'that')
+
+ self.assertEqual(
+ result,
+ 'http://example.com:5432/foo%20/bar/baz/this/theotherthing/that')
+
+ def test_root_default_app_url(self):
+ root = DummyContext()
+ root.__parent__ = None
+ root.__name__ = None
+ request = DummyRequest()
+ result = self._callFUT(root, request)
+ self.assertEqual(result, 'http://example.com:5432/')
+
+ def test_nonroot_default_app_url(self):
+ root = DummyContext()
+ root.__parent__ = None
+ root.__name__ = None
+ other = DummyContext()
+ other.__parent__ = root
+ other.__name__ = 'nonroot object'
+ request = DummyRequest()
+ result = self._callFUT(other, request)
+ self.assertEqual(result, 'http://example.com:5432/nonroot%20object/')
+
+ def test_unicode_mixed_with_bytes_in_model_names(self):
+ root = DummyContext()
+ root.__parent__ = None
+ root.__name__ = None
+ one = DummyContext()
+ one.__parent__ = root
+ one.__name__ = unicode('La Pe\xc3\xb1a', 'utf-8')
+ two = DummyContext()
+ two.__parent__ = one
+ two.__name__ = 'La Pe\xc3\xb1a'
+ request = DummyRequest()
+ result = self._callFUT(two, request)
+ self.assertEqual(result,
+ 'http://example.com:5432/La%20Pe%C3%B1a/La%20Pe%C3%B1a/')
+
+ def test_unicode_in_element_names(self):
+ uc = unicode('La Pe\xc3\xb1a', 'utf-8')
+ root = DummyContext()
+ root.__parent__ = None
+ root.__name__ = None
+ one = DummyContext()
+ one.__parent__ = root
+ one.__name__ = uc
+ request = DummyRequest()
+ result = self._callFUT(one, request, uc)
+ self.assertEqual(result,
+ 'http://example.com:5432/La%20Pe%C3%B1a/La%20Pe%C3%B1a')
+
+ def test_element_names_url_quoted(self):
+ root = DummyContext()
+ root.__parent__ = None
+ root.__name__ = None
+ request = DummyRequest()
+ result = self._callFUT(root, request, 'a b c')
+ self.assertEqual(result, 'http://example.com:5432/a%20b%20c')
+
+ def test_with_query(self):
+ root = DummyContext()
+ root.__parent__ = None
+ root.__name__ = None
+ request = DummyRequest()
+ result = self._callFUT(root, request, 'a', query=[('a', 1), ('b', 2)])
+ self.assertEqual(result, 'http://example.com:5432/a?a=1&b=2')
+
+
+class UrlEncodeTests(unittest.TestCase):
+ def _callFUT(self, query, doseq=False):
+ from repoze.bfg.url import urlencode
+ return urlencode(query, doseq)
+
+ def test_ascii_only(self):
+ result = self._callFUT([('a',1), ('b',2)])
+ self.assertEqual(result, 'a=1&b=2')
+
+ def test_unicode_key(self):
+ la = unicode('LaPe\xc3\xb1a', 'utf-8')
+ result = self._callFUT([(la, 1), ('b',2)])
+ self.assertEqual(result, 'LaPe%C3%B1a=1&b=2')
+
+ def test_unicode_val_single(self):
+ la = unicode('LaPe\xc3\xb1a', 'utf-8')
+ result = self._callFUT([('a', la), ('b',2)])
+ self.assertEqual(result, 'a=LaPe%C3%B1a&b=2')
+
+ def test_unicode_val_multiple(self):
+ la = [unicode('LaPe\xc3\xb1a', 'utf-8')] * 2
+ result = self._callFUT([('a', la), ('b',2)], doseq=True)
+ self.assertEqual(result, 'a=LaPe%C3%B1a&a=LaPe%C3%B1a&b=2')
+
+ def test_dict(self):
+ result = self._callFUT({'a':1})
+ self.assertEqual(result, 'a=1')
+
+class DummyContext(object):
+ def __init__(self, next=None):
+ self.next = next
+
+ def __getitem__(self, name):
+ if self.next is None:
+ raise KeyError, name
+ return self.next
+
+class DummyRequest:
+ application_url = 'http://example.com:5432' # app_url never ends with slash
+
+class DummySettings:
+ def __init__(self, **kw):
+ self.__dict__.update(kw)