changeset 177:4b0c87e7df73

tests: Add unit tests for routing classes.
author Ludovic Chabant <ludovic@chabant.com>
date Sat, 03 Jan 2015 21:54:38 -0800
parents d47d9493bb0a
children ff5b2d3863a8
files tests/test_routing.py
diffstat 1 files changed, 60 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test_routing.py	Sat Jan 03 21:54:38 2015 -0800
@@ -0,0 +1,60 @@
+import mock
+import pytest
+from piecrust.routing import Route
+
+
+@pytest.mark.parametrize(
+        'config, metadata, expected',
+        [
+            ({'url': '/%foo%'},
+                {'foo': 'bar'}, True),
+            ({'url': '/%foo%'},
+                {'zoo': 'zar', 'foo': 'bar'}, True),
+            ({'url': '/%foo%'},
+                {'zoo': 'zar'}, False),
+            ({'url': '/%foo%/%zoo%'},
+                {'zoo': 'zar'}, False)
+            ])
+def test_matches_metadata(config, metadata, expected):
+    app = mock.Mock()
+    app.config = {'site/root': '/'}
+    config.setdefault('source', 'blah')
+    route = Route(app, config)
+    m = route.matchesMetadata(metadata)
+    assert m == expected
+
+
+@pytest.mark.parametrize(
+        'config, uri, expected_match',
+        [
+            ({'url': '/%foo%'},
+                'something',
+                {'foo': 'something'}),
+            ({'url': '/%foo%'},
+                'something/other',
+                None),
+            ({'url': '/%path:foo%'},
+                'something/other',
+                {'foo': 'something/other'}),
+            ({'url': '/%path:foo%'},
+                '',
+                {'foo': ''}),
+            ({'url': '/prefix/%path:foo%'},
+                'prefix/something/other',
+                {'foo': 'something/other'}),
+            ({'url': '/prefix/%path:foo%'},
+                'prefix/',
+                {'foo': ''}),
+            ({'url': '/prefix/%path:foo%'},
+                'prefix',
+                {}),
+            ])
+def test_match_uri(config, uri, expected_match):
+    app = mock.Mock()
+    app.config = {'site/root': '/'}
+    config.setdefault('source', 'blah')
+    route = Route(app, config)
+    assert route.uri_pattern == config['url'].lstrip('/')
+    m = route.matchUri(uri)
+    assert m == expected_match
+