""" Check REDIRECTIONS. This module tests absolute, external and relative redirects. Each of the different redirect types is specified in the config and then tested by at least one test.""" import io import os import pytest import nikola.plugins.command.init from nikola import __main__ from .helper import append_config, cd from .test_demo_build import prepare_demo_site from .test_empty_build import ( # NOQA test_archive_exists, test_avoid_double_slash_in_rss, test_check_files, test_check_links, test_index_in_sitemap, ) def test_absolute_redirection(build, output_dir): abs_source = os.path.join(output_dir, "redirects", "absolute_source.html") assert os.path.exists(abs_source) abs_destination = os.path.join(output_dir, "posts", "absolute.html") assert os.path.exists(abs_destination) with open(abs_destination) as abs_destination_fd: abs_destination_content = abs_destination_fd.read() redirect_tag = '' assert redirect_tag in abs_destination_content with open(abs_source) as abs_source_fd: absolute_source_content = abs_source_fd.read() assert absolute_source_content == "absolute" def test_external_redirection(build, output_dir): ext_link = os.path.join(output_dir, "external.html") assert os.path.exists(ext_link) with open(ext_link) as ext_link_fd: ext_link_content = ext_link_fd.read() redirect_tag = '' assert redirect_tag in ext_link_content def test_relative_redirection(build, output_dir): rel_destination = os.path.join(output_dir, "relative.html") assert os.path.exists(rel_destination) rel_source = os.path.join(output_dir, "redirects", "rel_src.html") assert os.path.exists(rel_source) with open(rel_destination) as rel_destination_fd: rel_destination_content = rel_destination_fd.read() redirect_tag = '' assert redirect_tag in rel_destination_content with open(rel_source) as rel_source_fd: rel_source_content = rel_source_fd.read() assert rel_source_content == "relative" @pytest.fixture(scope="module") def build(target_dir): """Fill the site with demo content and build it.""" prepare_demo_site(target_dir) redirects_dir = os.path.join(target_dir, "files", "redirects") nikola.utils.makedirs(redirects_dir) # Source file for absolute redirect target_path = os.path.join(redirects_dir, "absolute_source.html") with io.open(target_path, "w+", encoding="utf8") as outf: outf.write("absolute") # Source file for relative redirect target_path = os.path.join(redirects_dir, "rel_src.html") with io.open(target_path, "w+", encoding="utf8") as outf: outf.write("relative") # Configure usage of specific redirects append_config( target_dir, """ REDIRECTIONS = [ ("posts/absolute.html", "/redirects/absolute_source.html"), ("external.html", "http://www.example.com/"), ("relative.html", "redirects/rel_src.html"), ] """, ) with cd(target_dir): __main__.main(["build"])