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') |