def test_rendering(edit, injectable, theme_class, global_type): request = get_request(edit) request.resolver_match = mock.Mock() request.resolver_match.app_name = "shuup" with override_current_theme_class(theme_class): with plugin_override(): jeng = get_jinja2_engine() if global_type: template = jeng.get_template("global_complex.jinja") else: template = jeng.get_template("complex.jinja") view = FauxView() view.xtheme_injection = bool(injectable) output = template.render(context={ "view": view, "request": request }, request=request) # From now on we render placholders in views that # actually can be edited. if injectable and theme_class: assert "wider column" in output assert "less wide column" in output if edit and injectable and theme_class: assert "xt-ph-edit" in output assert "data-xt-placeholder-name" in output assert "data-xt-row" in output assert "data-xt-cell" in output assert "XthemeEditorConfig" in output
def test_lcfg(rf): two_thirds = int(LayoutCellGeneralInfoForm.CELL_FULL_WIDTH * 2 / 3) with plugin_override(): with override_current_theme_class(None): theme = get_current_theme(get_default_shop()) cell = LayoutCell(theme, "text", sizes={"md": two_thirds, "sm": two_thirds}) lcfg = LayoutCellFormGroup(layout_cell=cell, theme=theme, request=apply_request_middleware(rf.get("/"))) assert "general" in lcfg.forms assert "plugin" in lcfg.forms assert not lcfg.is_valid() # Oh, we must've forgotten the text... lcfg = LayoutCellFormGroup( data={ "general-cell_width": "%d" % two_thirds, "general-cell_align": " ", "general-cell_extra_classes" : "newClass", "plugin-text_*": "Hello, world!" }, layout_cell=cell, theme=theme, request=apply_request_middleware(rf.get("/")) ) assert lcfg.is_valid() # Let's see now! lcfg.save() assert cell.sizes["md"] == two_thirds assert cell.extra_classes == "newClass" assert cell.config["text"] == {FALLBACK_LANGUAGE_CODE: "Hello, world!"}
def test_layout_rendering_with_global_type(rf): request = get_request(edit=False) with override_current_theme_class(None): with plugin_override(): jeng = get_jinja2_engine() template = jeng.from_string("") (template, layout, gibberish, ctx) = get_test_template_bits(request) global_class = "xt-global-ph" result = six.text_type( render_placeholder(ctx, "test", layout, template.template.name, global_type=True)) assert global_class in result result = six.text_type( render_placeholder(ctx, "test", layout, template.template.name, global_type=False)) assert global_class not in result
def test_formless_plugin_in_lcfg(rf): two_thirds = int(LayoutCellGeneralInfoForm.CELL_FULL_WIDTH * 2 / 3) with plugin_override(): with override_current_theme_class(None): theme = get_current_theme(get_default_shop()) cell = LayoutCell(theme, "inject") assert cell.instantiate_plugin() lcfg = LayoutCellFormGroup(data={ "general-cell_width": "%d" % two_thirds, "general-cell_align": "pull-right", "general-cell_extra_classes": "newClass", }, layout_cell=cell, theme=theme, request=apply_request_middleware( rf.get("/"))) assert "plugin" not in lcfg.forms assert lcfg.is_valid() lcfg.save() assert cell.extra_classes == "newClass" assert cell.sizes[ "md"] == two_thirds # Something got saved even if the plugin doesn't need config
def test_render_custom_size_cell(rf): request = get_request(edit=False) with override_current_theme_class(None): with plugin_override(): with layout_override(): layout = Layout(FauxTheme, "test") gibberish = printable_gibberish() layout.begin_column({"md": None, "xs": None, "sm": None}) layout.add_plugin("text", {"text": "<p>%s</p>" % gibberish}) jeng = get_jinja2_engine() template = jeng.from_string("") template.template.name = "test" vars = { "view": FauxView(), "request": request } ctx = template.template.new_context(vars) result = six.text_type(render_placeholder(ctx, "test", layout, "test")) expect = """ <div class="placeholder-edit-wrap"> <div class="xt-ph" id="xt-ph-test"> <div class="row xt-ph-row"> <div class="xt-ph-cell"><p>%s</p></div> </div> </div> </div> """ % gibberish assert close_enough(result, expect)
def test_lcfg(rf): two_thirds = int(LayoutCellGeneralInfoForm.CELL_FULL_WIDTH * 2 / 3) with plugin_override(): with override_current_theme_class(None): theme = get_current_theme(get_default_shop()) cell = LayoutCell(theme, "text", sizes={ "md": two_thirds, "sm": two_thirds }) lcfg = LayoutCellFormGroup(layout_cell=cell, theme=theme, request=apply_request_middleware( rf.get("/"))) assert "general" in lcfg.forms assert "plugin" in lcfg.forms assert not lcfg.is_valid() # Oh, we must've forgotten the text... lcfg = LayoutCellFormGroup(data={ "general-cell_width": "%d" % two_thirds, "general-cell_align": " ", "plugin-text_*": "Hello, world!" }, layout_cell=cell, theme=theme, request=apply_request_middleware( rf.get("/"))) assert lcfg.is_valid() # Let's see now! lcfg.save() assert cell.sizes["md"] == two_thirds assert cell.config["text"] == { FALLBACK_LANGUAGE_CODE: "Hello, world!" }
def test_pluginless_lcfg(rf): with plugin_override(): with override_current_theme_class(None): theme = get_current_theme(get_default_shop()) cell = LayoutCell(theme, None) assert not cell.instantiate_plugin() lcfg = LayoutCellFormGroup(layout_cell=cell, theme=theme, request=apply_request_middleware(rf.get("/"))) assert "plugin" not in lcfg.forms
def test_pluginless_lcfg(): with plugin_override(): with override_current_theme_class(None): theme = get_current_theme(get_default_shop()) cell = LayoutCell(theme, None) assert not cell.instantiate_plugin() lcfg = LayoutCellFormGroup(layout_cell=cell, theme=theme) assert "plugin" not in lcfg.forms
def test_plugin_choices(): with plugin_override(): theme = ShuupTestingTheme() choice_identifiers = set() for identifier, data in theme.get_all_plugin_choices(): for choice in data: choice_identifiers.add(choice[0]) assert choice_identifiers == set(("inject", "text", TestHighlightPlugin.identifier))
def test_plugin_choices(): with plugin_override(): theme = ShuupTestingTheme(shop=get_default_shop()) choice_identifiers = set() for identifier, data in theme.get_all_plugin_choices(): for choice in data: choice_identifiers.add(choice[0]) assert choice_identifiers == set(("inject", "text", HighlightTestPlugin.identifier))
def test_pluginless_lcfg(): with plugin_override(): with override_current_theme_class(None): request = get_request(edit=False) theme = get_current_theme(request) cell = LayoutCell(theme, None) assert not cell.instantiate_plugin() lcfg = LayoutCellFormGroup(layout_cell=cell, theme=theme) assert "plugin" not in lcfg.forms
def test_formless_plugin_in_lcfg(): two_thirds = int(LayoutCellGeneralInfoForm.CELL_FULL_WIDTH * 2 / 3) with plugin_override(): cell = LayoutCell("inject") assert cell.instantiate_plugin() lcfg = LayoutCellFormGroup(data={"general-cell_width": "%d" % two_thirds}, layout_cell=cell) assert "plugin" not in lcfg.forms assert lcfg.is_valid() lcfg.save() assert cell.sizes["md"] == two_thirds # Something got saved even if the plugin doesn't need config
def test_layout_edit_render(): request = get_request(edit=True) with override_current_theme_class(None): with plugin_override(): (template, layout, gibberish, ctx) = get_test_template_bits(request) result = six.text_type(render_placeholder(ctx, "test", layout, "test")) # Look for evidence of editing: assert "xt-ph-edit" in result assert "data-xt-placeholder-name" in result assert "data-xt-row" in result assert "data-xt-cell" in result
def test_formless_plugin_in_lcfg(): two_thirds = int(LayoutCellGeneralInfoForm.CELL_FULL_WIDTH * 2 / 3) with plugin_override(): cell = LayoutCell("inject") assert cell.instantiate_plugin() lcfg = LayoutCellFormGroup( data={"general-cell_width": "%d" % two_thirds}, layout_cell=cell) assert "plugin" not in lcfg.forms assert lcfg.is_valid() lcfg.save() assert cell.sizes[ "md"] == two_thirds # Something got saved even if the plugin doesn't need config
def initialize_editor_view(view_name, placeholder_name, request=None): if request is None: request = RequestFactory().get("/") request.user = SuperUser() if hasattr(request.GET, "_mutable"): request.GET._mutable = True # Ahem request.GET.update({"theme": FauxTheme.identifier, "view": view_name, "ph": placeholder_name}) with plugin_override(): with override_provides("xtheme", ["shuup_tests.xtheme.utils:FauxTheme"]): with override_current_theme_class(FauxTheme): yield EditorView(request=request, args=(), kwargs={})
def test_layout_serialization(): theme = FauxTheme with plugin_override(): l = Layout(theme, "test") l.begin_column({"md": 8}) l.add_plugin("text", {"text": "yes"}) serialized = l.serialize() expected = { "name": "test", "rows": [{"cells": [{"config": {"text": "yes"}, "plugin": "text", "sizes": {"md": 8}}]}], } assert serialized == expected assert Layout.unserialize(theme, serialized).serialize() == expected
def test_layout_rendering_with_global_type(rf): request = get_request(edit=False) with override_current_theme_class(None): with plugin_override(): jeng = get_jinja2_engine() template = jeng.from_string("") (template, layout, gibberish, ctx) = get_test_template_bits(request) global_class = "xt-global-ph" result = six.text_type(render_placeholder(ctx, "test", layout, template.template.name, global_type=True)) assert global_class in result result = six.text_type(render_placeholder(ctx, "test", layout, template.template.name, global_type=False)) assert global_class not in result
def test_formless_plugin_in_lcfg(): two_thirds = int(LayoutCellGeneralInfoForm.CELL_FULL_WIDTH * 2 / 3) with plugin_override(): with override_current_theme_class(None): request = get_request(edit=False) theme = get_current_theme(request) cell = LayoutCell(theme, "inject") assert cell.instantiate_plugin() lcfg = LayoutCellFormGroup(data={"general-cell_width": "%d" % two_thirds, "general-cell_align": "pull-right"}, layout_cell=cell, theme=theme) assert "plugin" not in lcfg.forms assert lcfg.is_valid() lcfg.save() assert cell.sizes["md"] == two_thirds # Something got saved even if the plugin doesn't need config
def test_layout_rendering(rf): request = get_request(edit=False) with override_current_theme_class(None): with plugin_override(): (template, layout, gibberish, ctx) = get_test_template_bits(request) result = six.text_type(render_placeholder(ctx, "test", layout, "test")) expect = """ <div class="xt-ph" id="xt-ph-test"> <div class="row xt-ph-row"> <div class="col-md-12 hidden-xs xt-ph-cell"><p>%s</p></div> </div> </div> """ % gibberish assert close_enough(result, expect)
def test_formless_plugin_in_lcfg(): two_thirds = int(LayoutCellGeneralInfoForm.CELL_FULL_WIDTH * 2 / 3) with plugin_override(): with override_current_theme_class(None): request = get_request(edit=False) theme = get_current_theme(request) cell = LayoutCell(theme, "inject") assert cell.instantiate_plugin() lcfg = LayoutCellFormGroup(data={"general-cell_width": "%d" % two_thirds}, layout_cell=cell, theme=theme) assert "plugin" not in lcfg.forms assert lcfg.is_valid() lcfg.save() assert cell.sizes["md"] == two_thirds # Something got saved even if the plugin doesn't need config
def test_resources(): request = get_request(edit=False) with override_current_theme_class(None): with plugin_override(): jeng = get_jinja2_engine() template = jeng.get_template("resinject.jinja") output = template.render(request=request) head, body = output.split("</head>", 1) assert "alert('xss')" in body # the inline script assert '"bars": [1, 2, 3]' in head # the script vars assert '(unknown resource type:' in body # the png assert 'href="://example.com/css.css"' in head # the css assert 'src="://example.com/js.js"' in body # the js assert head.count(ResourceInjectorPlugin.meta_markup) == 1 # the duplicate meta assert ResourceInjectorPlugin.message in output # the actual message
def test_lcfg(): two_thirds = int(LayoutCellGeneralInfoForm.CELL_FULL_WIDTH * 2 / 3) with plugin_override(): cell = LayoutCell("text", sizes={"md": two_thirds, "sm": two_thirds}) lcfg = LayoutCellFormGroup(layout_cell=cell) assert "general" in lcfg.forms assert "plugin" in lcfg.forms assert not lcfg.is_valid() # Oh, we must've forgotten the text... lcfg = LayoutCellFormGroup(data={ "general-cell_width": "%d" % two_thirds, "plugin-text": "Hello, world!" }, layout_cell=cell) assert lcfg.is_valid() # Let's see now! lcfg.save() assert cell.sizes["md"] == two_thirds assert cell.config["text"] == {FALLBACK_LANGUAGE_CODE: "Hello, world!"}
def initialize_editor_view(view_name, placeholder_name, request=None): if request is None: request = RequestFactory().get("/") request.user = SuperUser() if hasattr(request.GET, "_mutable"): request.GET._mutable = True # Ahem request.GET.update({ "theme": FauxTheme.identifier, "view": view_name, "ph": placeholder_name }) with plugin_override(): with override_provides("xtheme", ["shuup_tests.xtheme.utils:FauxTheme"]): with override_current_theme_class(FauxTheme): yield EditorView(request=request, args=(), kwargs={})
def test_resources(): request = get_request(edit=False) with override_current_theme_class(None): with plugin_override(): jeng = get_jinja2_engine() template = jeng.get_template("resinject.jinja") output = template.render(request=request) head, body = output.split("</head>", 1) assert "alert('xss')" in body # the inline script assert '"bars": [1, 2, 3]' in head # the script vars assert '(unknown resource type:' in body # the png assert 'href="://example.com/css.css"' in head # the css assert 'src="://example.com/js.js"' in body # the js assert head.count( ResourceInjectorPlugin.meta_markup) == 1 # the duplicate meta assert ResourceInjectorPlugin.message in output # the actual message
def test_layout_serialization(): with plugin_override(): l = Layout("test") l.begin_column({"md": 8}) l.add_plugin("text", {"text": "yes"}) serialized = l.serialize() expected = { 'name': "test", 'rows': [ { 'cells': [ {'config': {'text': 'yes'}, 'plugin': 'text', 'sizes': {"md": 8}} ] } ] } assert serialized == expected assert Layout.unserialize(serialized).serialize() == expected
def test_lcfg(): two_thirds = int(LayoutCellGeneralInfoForm.CELL_FULL_WIDTH * 2 / 3) with plugin_override(): with override_current_theme_class(None): request = get_request(edit=False) theme = get_current_theme(request) cell = LayoutCell(theme, "text", sizes={"md": two_thirds, "sm": two_thirds}) lcfg = LayoutCellFormGroup(layout_cell=cell, theme=theme) assert "general" in lcfg.forms assert "plugin" in lcfg.forms assert not lcfg.is_valid() # Oh, we must've forgotten the text... lcfg = LayoutCellFormGroup(data={ "general-cell_width": "%d" % two_thirds, "general-cell_align": " ", "plugin-text_*": "Hello, world!" }, layout_cell=cell, theme=theme) assert lcfg.is_valid() # Let's see now! lcfg.save() assert cell.sizes["md"] == two_thirds assert cell.config["text"] == {FALLBACK_LANGUAGE_CODE: "Hello, world!"}
def test_rendering(edit, injectable, theme_class, global_type): request = get_request(edit) with override_current_theme_class(theme_class): with plugin_override(): jeng = get_jinja2_engine() if global_type: template = jeng.get_template("global_complex.jinja") else: template = jeng.get_template("complex.jinja") view = FauxView() view.xtheme_injection = bool(injectable) output = template.render(context={ "view": view, }, request=request) assert "wider column" in output assert "less wide column" in output if edit and injectable and theme_class: assert "xt-ph-edit" in output assert "data-xt-placeholder-name" in output assert "data-xt-row" in output assert "data-xt-cell" in output assert "XthemeEditorConfig" in output
def test_custom_cell_size(rf): with plugin_override(): with override_current_theme_class(None): theme = get_current_theme(get_default_shop()) cell = LayoutCell(theme, "text", sizes={"md": None, "sm": None}) lcfg = LayoutCellFormGroup( data={ "general-cell_width": None, "general-cell_align": " ", "general-cell_extra_classes": "newClass", "plugin-text_*": "Hello, world!", }, layout_cell=cell, theme=theme, request=apply_request_middleware(rf.get("/")), ) assert lcfg.is_valid() lcfg.save() assert cell.sizes["md"] is None assert cell.sizes["sm"] is None assert cell.extra_classes == "newClass" assert cell.config["text"] == {FALLBACK_LANGUAGE_CODE: "Hello, world!"}
def test_formless_plugin_in_lcfg(rf): two_thirds = int(LayoutCellGeneralInfoForm.CELL_FULL_WIDTH * 2 / 3) with plugin_override(): with override_current_theme_class(None): theme = get_current_theme(get_default_shop()) cell = LayoutCell(theme, "inject") assert cell.instantiate_plugin() lcfg = LayoutCellFormGroup( data={ "general-cell_width": "%d" % two_thirds, "general-cell_align": "pull-right", "general-cell_extra_classes" : "newClass", }, layout_cell=cell, theme=theme, request=apply_request_middleware(rf.get("/")) ) assert "plugin" not in lcfg.forms assert lcfg.is_valid() lcfg.save() assert cell.extra_classes == "newClass" assert cell.sizes["md"] == two_thirds # Something got saved even if the plugin doesn't need config
def test_layout_serialization(): theme = FauxTheme with plugin_override(): l = Layout(theme, "test") l.begin_column({"md": 8}) l.add_plugin("text", {"text": "yes"}) serialized = l.serialize() expected = { "name": "test", "rows": [{ "cells": [{ "config": { "text": "yes" }, "plugin": "text", "sizes": { "md": 8 } }] }], } assert serialized == expected assert Layout.unserialize(theme, serialized).serialize() == expected
def test_plugin_choices(): with plugin_override(): choice_identifiers = set(c[0] for c in Plugin.get_plugin_choices()) assert choice_identifiers == set(("inject", "text"))
def test_pluginless_lcfg(): with plugin_override(): cell = LayoutCell(None) assert not cell.instantiate_plugin() lcfg = LayoutCellFormGroup(layout_cell=cell) assert "plugin" not in lcfg.forms
def test_plugin_naming(): with plugin_override(): cell = LayoutCell(FauxTheme, TextPlugin.identifier) assert cell.plugin_name == TextPlugin.name