Mercurial > piecrust2
annotate tests/test_uriutil.py @ 661:2f780b191541
internal: Fix a bug with registering taxonomy terms that are not strings.
Some objects, like the blog data provider's taxnonomy entries, can render as
strings, but are objects themselves. When registering them as "used terms", we
need to use their string representation.
author | Ludovic Chabant <ludovic@chabant.com> |
---|---|
date | Tue, 01 Mar 2016 22:26:09 -0800 |
parents | 4284c673bb91 |
children | e85f29b28b84 |
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 | 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 |