Mercurial > piecrust2
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 +