annotate tests/test_serving_util.py @ 1051:971b4d67e82a

serve: Fix problems with assets disappearing between servings. When an asset file changes, its source's pipeline is re-run. But that created a bake record that only had that pipeline's output, so the other outputs were incorrectly considered empty and therefore any stray files were removed. Now we copy over bake records for the pipelines we don't run.
author Ludovic Chabant <ludovic@chabant.com>
date Fri, 26 Jan 2018 18:05:02 -0800
parents 72f17534d58e
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
974
72f17534d58e tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
1 import re
72f17534d58e tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
2 import pytest
72f17534d58e tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
3 import mock
72f17534d58e tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
4 from piecrust.serving.util import find_routes
72f17534d58e tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
5 from piecrust.sources.base import REALM_USER, REALM_THEME
72f17534d58e tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
6
72f17534d58e tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
7
72f17534d58e tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
8 @pytest.mark.parametrize(
72f17534d58e tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
9 'uri, route_specs, expected',
72f17534d58e tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
10 [
72f17534d58e tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
11 ('/',
72f17534d58e tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
12 [{'src': 'pages', 'pat': '(?P<path>.*)'}],
72f17534d58e tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
13 [('pages', {'path': '/'})]),
72f17534d58e tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
14 ('/',
72f17534d58e tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
15 [{'src': 'pages', 'pat': '(?P<path>.*)'},
72f17534d58e tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
16 {'src': 'theme', 'pat': '(?P<path>.*)', 'realm': REALM_THEME}],
72f17534d58e tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
17 [('pages', {'path': '/'}), ('theme', {'path': '/'})])
72f17534d58e tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
18 ])
72f17534d58e tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
19 def test_find_routes(uri, route_specs, expected):
72f17534d58e tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
20 routes = []
72f17534d58e tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
21 for rs in route_specs:
72f17534d58e tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
22 m = mock.Mock()
72f17534d58e tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
23 m.source_name = rs['src']
72f17534d58e tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
24 m.source_realm = rs.setdefault('realm', REALM_USER)
72f17534d58e tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
25 m.uri_re = re.compile(rs['pat'])
72f17534d58e tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
26 m.matchUri = lambda u: m.uri_re.match(u).groupdict()
72f17534d58e tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
27 routes.append(m)
72f17534d58e tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
28 matching = find_routes(routes, uri)
72f17534d58e tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
29
72f17534d58e tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
30 assert len(matching) == len(expected)
72f17534d58e tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
31 for i in range(len(matching)):
72f17534d58e tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
32 route, metadata, is_sub_page = matching[i]
72f17534d58e tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
33 exp_source, exp_md = expected[i]
72f17534d58e tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
34 assert route.source_name == exp_source
72f17534d58e tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
35 assert metadata == exp_md