import pytest
from markupsafe import Markup
@pytest.mark.parametrize("autoescape", [True, False])
def test_prefix_namespace(catalog, folder, folder_t, autoescape):
"""Components mounted with a prefix should be able to import other components
from the same folder without specifying the prefix.
"""
catalog.jinja_env.autoescape = autoescape
catalog.add_folder(folder_t, prefix="ui")
(folder / "Title.jinja").write_text("parent")
(folder_t / "Title.jinja").write_text("prefix")
(folder_t / "Alert.jinja").write_text("
")
html = catalog.render("ui.Alert")
assert html == Markup("prefix")
@pytest.mark.parametrize("autoescape", [True, False])
def test_prefix_namespace_sub(catalog, folder, folder_t, autoescape):
"""Components mounted with a prefix should be able to import other components
from the same folder without specifying the prefix, even if those components
are in a subfolder.
"""
catalog.jinja_env.autoescape = autoescape
catalog.add_folder(folder_t, prefix="ui")
(folder / "sub").mkdir()
(folder_t / "sub").mkdir()
(folder / "Title.jinja").write_text("parent")
(folder / "sub" / "Title.jinja").write_text("sub/parent")
(folder_t / "Title.jinja").write_text("sub")
(folder_t / "sub" / "Title.jinja").write_text("sub/prefix")
(folder_t / "Alert.jinja").write_text("")
html = catalog.render("ui.Alert")
assert html == Markup("sub/prefix")
@pytest.mark.parametrize("autoescape", [True, False])
def test_prefix_fallback(catalog, folder, folder_t, autoescape):
"""If a component is not found in the folder with the prefix, it should
fallback to the no-prefix folders.
"""
catalog.jinja_env.autoescape = autoescape
catalog.add_folder(folder_t, prefix="ui")
(folder / "Title.jinja").write_text("parent")
(folder_t / "Alert.jinja").write_text("")
html = catalog.render("ui.Alert")
assert html == Markup("parent")
@pytest.mark.parametrize("autoescape", [True, False])
def test_prefix_namespace_assets(catalog, folder, folder_t, autoescape):
"""Components import without specifying the prefix should also be
able to auto-import their assets.
"""
catalog.jinja_env.autoescape = autoescape
catalog.add_folder(folder_t, prefix="ui")
(folder_t / "Title.jinja").write_text("prefix")
(folder_t / "Title.css").touch()
(folder_t / "Layout.jinja").write_text("""
{{ catalog.render_assets() }}
{{ content }}
""")
(folder_t / "Alert.jinja").write_text("")
html = catalog.render("ui.Alert")
assert html == Markup("""
prefix
""".strip())