# HG changeset patch # User Ludovic Chabant # Date 1420350878 28800 # Node ID 4b0c87e7df73c600d0a8ff7598fcc14057300e2e # Parent d47d9493bb0a573e49204dcc1274c67f04567bf3 tests: Add unit tests for routing classes. diff -r d47d9493bb0a -r 4b0c87e7df73 tests/test_routing.py --- /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 +