annotate tests/test_uriutil.py @ 585:25df894f9ab9

internal: Some fixes to the new app configuration. * Tweak order of source registration. * Add some missing default settings. * Fix some validation code. * Add better error handling to validation.
author Ludovic Chabant <ludovic@chabant.com>
date Sat, 02 Jan 2016 16:39:26 -0800
parents 4284c673bb91
children e85f29b28b84
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
33
62c7a97c8340 Get the un-paginated URL of a page early and pass that around.
Ludovic Chabant <ludovic@chabant.com>
parents: 5
diff changeset
1 import mock
3
f485ba500df3 Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
2 import pytest
316
eb958151c8dc tests: Bad me, the tests were broken. Now they're fixed.
Ludovic Chabant <ludovic@chabant.com>
parents: 33
diff changeset
3 from piecrust.uriutil import UriInfo, parse_uri, split_sub_uri
3
f485ba500df3 Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
4
f485ba500df3 Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
5
f485ba500df3 Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
6 @pytest.mark.parametrize('routes, uri, expected', [
f485ba500df3 Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
7 ({}, '/foo', None),
f485ba500df3 Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
8 (
f485ba500df3 Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
9 {'/articles/%slug%': {'source': 'dummy'}},
f485ba500df3 Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
10 '/articles/foo',
f485ba500df3 Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
11 UriInfo('', 'dummy', {'slug': 'foo'})),
f485ba500df3 Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
12 (
f485ba500df3 Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
13 {'/foo/%bar%': {'source': 'foo'},
f485ba500df3 Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
14 '/other/%one%-%two%': {'source': 'other'}},
f485ba500df3 Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
15 '/other/some-thing',
f485ba500df3 Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
16 UriInfo('', 'other', {'one': 'some', 'two': 'thing'}))
f485ba500df3 Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
17 ])
f485ba500df3 Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
18 def test_parse_uri(routes, uri, expected):
f485ba500df3 Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
19 if expected is not None:
f485ba500df3 Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
20 expected.uri = uri
5
474c9882decf Upgrade to Python 3.
Ludovic Chabant <ludovic@chabant.com>
parents: 3
diff changeset
21 for pattern, args in routes.items():
3
f485ba500df3 Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
22 if 'taxonomy' not in args:
f485ba500df3 Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
23 args['taxonomy'] = None
f485ba500df3 Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
24
f485ba500df3 Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
25 actual = parse_uri(routes, uri)
f485ba500df3 Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
26 assert actual == expected
f485ba500df3 Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
27
33
62c7a97c8340 Get the un-paginated URL of a page early and pass that around.
Ludovic Chabant <ludovic@chabant.com>
parents: 5
diff changeset
28
62c7a97c8340 Get the un-paginated URL of a page early and pass that around.
Ludovic Chabant <ludovic@chabant.com>
parents: 5
diff changeset
29 @pytest.mark.parametrize('uri, expected, pretty_urls', [
484
d4321317beae internal: Correctly split sub URIs. Add unit tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 329
diff changeset
30 ('/', ('/', 1), True),
d4321317beae internal: Correctly split sub URIs. Add unit tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 329
diff changeset
31 ('/2', ('/', 2), True),
d4321317beae internal: Correctly split sub URIs. Add unit tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 329
diff changeset
32 ('/foo/bar', ('/foo/bar', 1), True),
495
4284c673bb91 internal: Fix some edge-cases for splitting sub-URIs.
Ludovic Chabant <ludovic@chabant.com>
parents: 484
diff changeset
33 ('/foo/bar/', ('/foo/bar', 1), True),
4284c673bb91 internal: Fix some edge-cases for splitting sub-URIs.
Ludovic Chabant <ludovic@chabant.com>
parents: 484
diff changeset
34 ('/foo/bar/2/', ('/foo/bar', 2), True),
484
d4321317beae internal: Correctly split sub URIs. Add unit tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 329
diff changeset
35 ('/foo/bar.ext', ('/foo/bar.ext', 1), True),
d4321317beae internal: Correctly split sub URIs. Add unit tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 329
diff changeset
36 ('/foo/bar.ext/2', ('/foo/bar.ext', 2), True),
d4321317beae internal: Correctly split sub URIs. Add unit tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 329
diff changeset
37 ('/', ('/', 1), False),
d4321317beae internal: Correctly split sub URIs. Add unit tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 329
diff changeset
38 ('/2.html', ('/', 2), False),
d4321317beae internal: Correctly split sub URIs. Add unit tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 329
diff changeset
39 ('/foo/bar.html', ('/foo/bar.html', 1), False),
d4321317beae internal: Correctly split sub URIs. Add unit tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 329
diff changeset
40 ('/foo/bar/2.html', ('/foo/bar.html', 2), False),
d4321317beae internal: Correctly split sub URIs. Add unit tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 329
diff changeset
41 ('/foo/bar.ext', ('/foo/bar.ext', 1), False),
d4321317beae internal: Correctly split sub URIs. Add unit tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 329
diff changeset
42 ('/foo/bar/2.ext', ('/foo/bar.ext', 2), False)
33
62c7a97c8340 Get the un-paginated URL of a page early and pass that around.
Ludovic Chabant <ludovic@chabant.com>
parents: 5
diff changeset
43 ])
316
eb958151c8dc tests: Bad me, the tests were broken. Now they're fixed.
Ludovic Chabant <ludovic@chabant.com>
parents: 33
diff changeset
44 def test_split_sub_uri(uri, expected, pretty_urls):
33
62c7a97c8340 Get the un-paginated URL of a page early and pass that around.
Ludovic Chabant <ludovic@chabant.com>
parents: 5
diff changeset
45 app = mock.MagicMock()
62c7a97c8340 Get the un-paginated URL of a page early and pass that around.
Ludovic Chabant <ludovic@chabant.com>
parents: 5
diff changeset
46 app.config = {
484
d4321317beae internal: Correctly split sub URIs. Add unit tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 329
diff changeset
47 'site/root': '/',
d4321317beae internal: Correctly split sub URIs. Add unit tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 329
diff changeset
48 'site/pretty_urls': pretty_urls,
d4321317beae internal: Correctly split sub URIs. Add unit tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 329
diff changeset
49 '__cache/pagination_suffix_re': '/(?P<num>\\d+)$'}
d4321317beae internal: Correctly split sub URIs. Add unit tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 329
diff changeset
50 actual = split_sub_uri(app, uri)
d4321317beae internal: Correctly split sub URIs. Add unit tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 329
diff changeset
51 assert actual == (expected[0], expected[1])
d4321317beae internal: Correctly split sub URIs. Add unit tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 329
diff changeset
52
d4321317beae internal: Correctly split sub URIs. Add unit tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 329
diff changeset
53
d4321317beae internal: Correctly split sub URIs. Add unit tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 329
diff changeset
54 @pytest.mark.parametrize('uri, expected, pretty_urls', [
d4321317beae internal: Correctly split sub URIs. Add unit tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 329
diff changeset
55 ('/', ('/', 1), True),
d4321317beae internal: Correctly split sub URIs. Add unit tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 329
diff changeset
56 ('/2/', ('/', 2), True),
495
4284c673bb91 internal: Fix some edge-cases for splitting sub-URIs.
Ludovic Chabant <ludovic@chabant.com>
parents: 484
diff changeset
57 ('/foo/bar', ('/foo/bar/', 1), True),
484
d4321317beae internal: Correctly split sub URIs. Add unit tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 329
diff changeset
58 ('/foo/bar/', ('/foo/bar/', 1), True),
495
4284c673bb91 internal: Fix some edge-cases for splitting sub-URIs.
Ludovic Chabant <ludovic@chabant.com>
parents: 484
diff changeset
59 ('/foo/bar/2', ('/foo/bar/', 2), True),
484
d4321317beae internal: Correctly split sub URIs. Add unit tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 329
diff changeset
60 ('/foo/bar/2/', ('/foo/bar/', 2), True),
d4321317beae internal: Correctly split sub URIs. Add unit tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 329
diff changeset
61 ('/foo/bar.ext/', ('/foo/bar.ext/', 1), True),
d4321317beae internal: Correctly split sub URIs. Add unit tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 329
diff changeset
62 ('/foo/bar.ext/2/', ('/foo/bar.ext/', 2), True),
d4321317beae internal: Correctly split sub URIs. Add unit tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 329
diff changeset
63 ])
d4321317beae internal: Correctly split sub URIs. Add unit tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 329
diff changeset
64 def test_split_sub_uri_trailing_slash(uri, expected, pretty_urls):
d4321317beae internal: Correctly split sub URIs. Add unit tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 329
diff changeset
65 app = mock.MagicMock()
d4321317beae internal: Correctly split sub URIs. Add unit tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 329
diff changeset
66 app.config = {
d4321317beae internal: Correctly split sub URIs. Add unit tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 329
diff changeset
67 'site/root': '/',
d4321317beae internal: Correctly split sub URIs. Add unit tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 329
diff changeset
68 'site/pretty_urls': pretty_urls,
d4321317beae internal: Correctly split sub URIs. Add unit tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 329
diff changeset
69 'site/trailing_slash': True,
d4321317beae internal: Correctly split sub URIs. Add unit tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 329
diff changeset
70 '__cache/pagination_suffix_re': '/(?P<num>\\d+)$'}
d4321317beae internal: Correctly split sub URIs. Add unit tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 329
diff changeset
71 actual = split_sub_uri(app, uri)
d4321317beae internal: Correctly split sub URIs. Add unit tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 329
diff changeset
72 assert actual == (expected[0], expected[1])
d4321317beae internal: Correctly split sub URIs. Add unit tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 329
diff changeset
73
d4321317beae internal: Correctly split sub URIs. Add unit tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 329
diff changeset
74
d4321317beae internal: Correctly split sub URIs. Add unit tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 329
diff changeset
75 @pytest.mark.parametrize('uri, expected, pretty_urls', [
d4321317beae internal: Correctly split sub URIs. Add unit tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 329
diff changeset
76 ('/', ('/', 1), True),
d4321317beae internal: Correctly split sub URIs. Add unit tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 329
diff changeset
77 ('/2', ('/', 2), True),
d4321317beae internal: Correctly split sub URIs. Add unit tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 329
diff changeset
78 ('/foo/bar', ('/foo/bar', 1), True),
495
4284c673bb91 internal: Fix some edge-cases for splitting sub-URIs.
Ludovic Chabant <ludovic@chabant.com>
parents: 484
diff changeset
79 ('/foo/bar/', ('/foo/bar', 1), True),
484
d4321317beae internal: Correctly split sub URIs. Add unit tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 329
diff changeset
80 ('/foo/bar/2', ('/foo/bar', 2), True),
495
4284c673bb91 internal: Fix some edge-cases for splitting sub-URIs.
Ludovic Chabant <ludovic@chabant.com>
parents: 484
diff changeset
81 ('/foo/bar/2/', ('/foo/bar', 2), True),
484
d4321317beae internal: Correctly split sub URIs. Add unit tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 329
diff changeset
82 ('/foo/bar.ext', ('/foo/bar.ext', 1), True),
d4321317beae internal: Correctly split sub URIs. Add unit tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 329
diff changeset
83 ('/foo/bar.ext/2', ('/foo/bar.ext', 2), True),
d4321317beae internal: Correctly split sub URIs. Add unit tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 329
diff changeset
84 ('/', ('/', 1), False),
d4321317beae internal: Correctly split sub URIs. Add unit tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 329
diff changeset
85 ('/2.html', ('/', 2), False),
d4321317beae internal: Correctly split sub URIs. Add unit tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 329
diff changeset
86 ('/foo/bar.html', ('/foo/bar.html', 1), False),
d4321317beae internal: Correctly split sub URIs. Add unit tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 329
diff changeset
87 ('/foo/bar/2.html', ('/foo/bar.html', 2), False),
d4321317beae internal: Correctly split sub URIs. Add unit tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 329
diff changeset
88 ('/foo/bar.ext', ('/foo/bar.ext', 1), False),
d4321317beae internal: Correctly split sub URIs. Add unit tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 329
diff changeset
89 ('/foo/bar/2.ext', ('/foo/bar.ext', 2), False)
d4321317beae internal: Correctly split sub URIs. Add unit tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 329
diff changeset
90 ])
d4321317beae internal: Correctly split sub URIs. Add unit tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 329
diff changeset
91 def test_split_sub_uri_with_root(uri, expected, pretty_urls):
d4321317beae internal: Correctly split sub URIs. Add unit tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 329
diff changeset
92 app = mock.MagicMock()
d4321317beae internal: Correctly split sub URIs. Add unit tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 329
diff changeset
93 app.config = {
329
422052d2e978 internal: Try handling URLs in a consistent way.
Ludovic Chabant <ludovic@chabant.com>
parents: 316
diff changeset
94 'site/root': '/whatever/',
33
62c7a97c8340 Get the un-paginated URL of a page early and pass that around.
Ludovic Chabant <ludovic@chabant.com>
parents: 5
diff changeset
95 'site/pretty_urls': pretty_urls,
316
eb958151c8dc tests: Bad me, the tests were broken. Now they're fixed.
Ludovic Chabant <ludovic@chabant.com>
parents: 33
diff changeset
96 '__cache/pagination_suffix_re': '/(?P<num>\\d+)$'}
484
d4321317beae internal: Correctly split sub URIs. Add unit tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 329
diff changeset
97 actual = split_sub_uri(app, '/whatever' + uri)
d4321317beae internal: Correctly split sub URIs. Add unit tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 329
diff changeset
98 assert actual == ('/whatever' + expected[0], expected[1])
33
62c7a97c8340 Get the un-paginated URL of a page early and pass that around.
Ludovic Chabant <ludovic@chabant.com>
parents: 5
diff changeset
99