| Index: tests/test_additional_paths.py |
| =================================================================== |
| --- a/tests/test_additional_paths.py |
| +++ b/tests/test_additional_paths.py |
| @@ -25,68 +25,82 @@ |
| from .utils import get_dir_contents, run_test_server |
| PATHS_FRAGMENT_TEMPLATE = """ |
| [paths] |
| additional-paths = {} |
| """ |
| +# Expected strings in CMS output: |
| +EXPECTATIONS = [ |
| + # Pages from the main site have priority. |
| + ('en/filter', 'MAIN_SITE'), |
| + # Lists of pages from main website and additional paths are merged. |
| + ('en/map', 'sitemap'), |
| + ('en/sitemap', 'map'), |
| + # Pages that have same name but different extensions on main website and |
| + # additional paths are handled correctly (no conflict and main website |
| + # should have priority, see https://issues.adblockplus.org/ticket/5862) |
| + ('en/global', 'MAIN_SITE'), |
| + ('en/translate', 'MAIN_SITE'), |
| +] |
| + |
| @pytest.fixture(scope='session') |
| def ap_site(temp_site, tmpdir_factory): |
| """A website source that has another website in additional-paths.""" |
| base_root = py.path.local(temp_site) |
| base_pages = base_root.join('pages') |
| ap_root = tmpdir_factory.mktemp('ap_site') |
| ap_root.join('settings.ini').write( |
| base_root.join('settings.ini').read() + |
| PATHS_FRAGMENT_TEMPLATE.format(base_root) |
| ) |
| pages = ap_root.mkdir('pages') |
| - pages.join('filter.tmpl').write(base_pages.join('filter.tmpl').read() + |
| - 'MARKER') |
| + for file_name in ['filter.tmpl', 'global.md', 'translate.tmpl']: |
| + pages.join(file_name).write('template=empty\n\nMAIN_SITE') |
| pages.join('map.tmpl').write(base_pages.join('sitemap.tmpl').read()) |
| subprocess.check_call(['hg', 'init', ap_root.strpath]) |
| subprocess.check_call(['hg', '-R', ap_root.strpath, |
| 'commit', '-A', '-m', 'foo']) |
| return ap_root |
| @pytest.fixture(scope='session') |
| def ap_static_output(tmpdir_factory, ap_site): |
| """Generate website from two source directories, return output path.""" |
| out_path = tmpdir_factory.mktemp('ap_out') |
| saved_argv = sys.argv |
| sys.argv = ['', ap_site.strpath, out_path.strpath] |
| runpy.run_module('cms.bin.generate_static_pages', run_name='__main__') |
| - yield out_path |
| + yield get_dir_contents(out_path.strpath) |
| sys.argv = saved_argv |
| -def test_ap_static(ap_static_output): |
| - outfiles = get_dir_contents(ap_static_output.strpath) |
| - assert outfiles['en/filter'].endswith('MARKER') # We can override pages. |
| - assert 'sitemap' in outfiles['en/map'] # The lists of pages are |
| - assert 'map' in outfiles['en/sitemap'] # merged. |
| - |
| - |
| @pytest.fixture(scope='module') |
| def dynamic_server(ap_site): |
| + """Run CMS test server and returns its URL.""" |
| with run_test_server(ap_site.strpath) as ts: |
| yield ts |
| -def test_dynamic(dynamic_server): |
| - response = urllib2.urlopen(dynamic_server + 'en/filter') |
| - assert response.read().endswith('MARKER') |
| +@pytest.mark.parametrize('page_name,expectation', EXPECTATIONS) |
| +def test_ap_static(ap_static_output, page_name, expectation): |
| + assert expectation in ap_static_output[page_name] |
| + |
| + |
| +@pytest.mark.parametrize('page_name,expectation', EXPECTATIONS) |
| +def test_dynamic(dynamic_server, page_name, expectation): |
| + response = urllib2.urlopen(dynamic_server + page_name) |
| + assert expectation in response.read() |
| def test_create_source(tmpdir): |
| """Create a hierarchy of multi-sources testing different config options.""" |
| one = tmpdir.mkdir('one') |
| two = tmpdir.mkdir('two') |
| three = tmpdir.mkdir('three') |
| four = two.mkdir('four') |