Example #1
0
def test_without_rc():
    request = get_request()
    (template, layout, gibberish, ctx) = get_test_template_bits(request)
    assert not add_resource(ctx, "yes", "hello.js")
    content1 = "<html>"
    content2 = inject_resources(ctx, content1)
    assert content1 == content2
Example #2
0
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
Example #3
0
def test_injecting_into_weird_places():
    request = get_request()
    (template, layout, gibberish, ctx) = get_test_template_bits(request, **{
        RESOURCE_CONTAINER_VAR_NAME: ResourceContainer()
    })
    with pytest.raises(ValueError):
        add_resource(ctx, "yes", "hello.js")
Example #4
0
def test_injecting_into_weird_places():
    request = get_request()
    (template, layout, gibberish, ctx) = get_test_template_bits(request, **{
        RESOURCE_CONTAINER_VAR_NAME: ResourceContainer()
    })
    with pytest.raises(ValueError):
        add_resource(ctx, "yes", "hello.js")
Example #5
0
def test_company_contact_layout():
    vc = _get_basic_view_config()
    company = factories.create_random_company()

    placeholder_name = "kissa"
    request = get_request()
    request.customer = company
    context = {"request": request}
    layout = vc.get_placeholder_layout(CompanyContactLayout, placeholder_name, context=context)
    assert isinstance(layout, CompanyContactLayout)
    help_text = layout.get_help_text({})  # Same help text with or without the context
    assert layout.get_help_text(context) == help_text

    # Invalid contexts for anon and person contact layouts
    assert vc.get_placeholder_layout(AnonymousContactLayout, placeholder_name, context=context) is None
    assert vc.get_placeholder_layout(PersonContactLayout, placeholder_name, context=context) is None

    # Valid contexts for contact layout
    assert vc.get_placeholder_layout(ContactLayout, placeholder_name, context=context) is not None

    _add_plugin_and_test_save(vc, layout, placeholder_name, context)

    # Ok here we want to check that the plugin doesn't end up to the
    # contact placeholders
    contact_layout = vc.get_placeholder_layout(ContactLayout, placeholder_name, context=context)
    _assert_empty_layout(contact_layout, placeholder_name)
Example #6
0
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
Example #7
0
def test_get_placeholder_layouts():
    vc = _get_basic_view_config()
    product = factories.create_product("test", name="Test product name")
    category = factories.get_default_category()

    placeholder_name = "hermit"
    context = {
        "request": get_request(),
        "product": product,
        "category": category
    }

    provides = []
    with override_provides("xtheme_layout", provides):
        assert len(vc.get_placeholder_layouts(
            context, placeholder_name)) == 1  # Default layout

    provides.append("shuup.xtheme.layout.ProductLayout")
    with override_provides("xtheme_layout", provides):
        assert len(vc.get_placeholder_layouts(context, placeholder_name)) == 2

    provides.append("shuup.xtheme.layout.CategoryLayout")
    with override_provides("xtheme_layout", provides):
        assert len(vc.get_placeholder_layouts(context, placeholder_name)) == 3

    provides.append("shuup.xtheme.layout.AnonymousContactLayout")
    with override_provides("xtheme_layout", provides):
        assert len(vc.get_placeholder_layouts(context, placeholder_name)) == 4
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!"
            }
Example #9
0
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
Example #10
0
def test_company_contact_layout():
    vc = _get_basic_view_config()
    company = factories.create_random_company()

    placeholder_name = "kissa"
    request = get_request()
    request.customer = company
    context = {"request": request}
    layout = vc.get_placeholder_layout(CompanyContactLayout,
                                       placeholder_name,
                                       context=context)
    assert isinstance(layout, CompanyContactLayout)
    help_text = layout.get_help_text(
        {})  # Same help text with or without the context
    assert layout.get_help_text(context) == help_text

    # Invalid contexts for anon and person contact layouts
    assert vc.get_placeholder_layout(
        AnonymousContactLayout, placeholder_name, context=context) is None
    assert vc.get_placeholder_layout(
        PersonContactLayout, placeholder_name, context=context) is None

    # Valid contexts for contact layout
    assert vc.get_placeholder_layout(ContactLayout,
                                     placeholder_name,
                                     context=context) is not None

    _add_plugin_and_test_save(vc, layout, placeholder_name, context)

    # Ok here we want to check that the plugin doesn't end up to the
    # contact placeholders
    contact_layout = vc.get_placeholder_layout(ContactLayout,
                                               placeholder_name,
                                               context=context)
    _assert_empty_layout(contact_layout, placeholder_name)
Example #11
0
def test_without_rc():
    request = get_request()
    (template, layout, gibberish, ctx) = get_test_template_bits(request)
    assert not add_resource(ctx, "yes", "hello.js")
    content1 = "<html>"
    content2 = inject_resources(ctx, content1)
    assert content1 == content2
Example #12
0
def test_simple_addon_injection():
    request = get_request(edit=False)
    request.shop = get_default_shop()
    jeng = get_jinja2_engine()
    template = jeng.get_template("resinject.jinja")

    with override_current_theme_class():
        with override_provides(
                "xtheme_resource_injection",
            [
                "shuup_tests.xtheme.test_addon_injections:add_test_injection",
            ],
        ):
            # TestInjector should add alert to end of the body for every request
            output = template.render(request=request)
            head, body = output.split("</head>", 1)
            assert "window.injectedFromAddon=true;" in body

            with override_settings(
                    SHUUP_XTHEME_EXCLUDE_TEMPLATES_FROM_RESOUCE_INJECTION=[
                        "resinject.jinja"
                    ]):
                output = template.render(request=request)
                head, body = output.split("</head>", 1)
                assert "window.injectedFromAddon=true;" not in body
def test_global_snippet_resource_injection():
    request = get_request(edit=False)
    request.shop = get_default_shop()
    jeng = get_jinja2_engine()
    template = jeng.get_template("resinject.jinja")
    request.resolver_match = MagicMock(app_name="shuup")
    context = dict(view=FauxView, request=request)

    with override_provides("xtheme_resource_injection",
                           ["shuup.xtheme.resources:inject_global_snippet"]):
        with override_current_theme_class():
            output = template.render(context, request=request)
            assert "<div>1</div>" not in output

            Snippet.objects.create(
                shop=request.shop,
                location="body_end",
                snippet_type=SnippetType.InlineJinjaHTMLMarkup,
                snippet="""
                    {% set x = 1 %}
                    <div>{{- x -}}</div>
                """)

        cache.clear()

        with override_current_theme_class():
            output = template.render(context, request=request)
            assert "<div>1</div>" in output
Example #14
0
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)
Example #15
0
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
Example #16
0
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
Example #17
0
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
Example #18
0
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
Example #19
0
def test_view_config_caches_into_context(rf):
    # This is a silly test...
    request = get_request(edit=False)
    with override_current_theme_class(None):
        (template, layout, gibberish, ctx) = get_test_template_bits(request)
        cfg1 = get_view_config(ctx)
        cfg2 = get_view_config(ctx)
        assert cfg1 is cfg2
        (template, layout, gibberish, ctx) = get_test_template_bits(request, False)
        cfg1 = get_view_config(ctx)
        cfg2 = get_view_config(ctx)
        assert cfg1 is cfg2
Example #20
0
def test_view_config_caches_into_context(rf):
    # This is a silly test...
    request = get_request(edit=False)
    with override_current_theme_class(None):
        (template, layout, gibberish, ctx) = get_test_template_bits(request)
        cfg1 = get_view_config(ctx)
        cfg2 = get_view_config(ctx)
        assert cfg1 is cfg2
        (template, layout, gibberish, ctx) = get_test_template_bits(request, False)
        cfg1 = get_view_config(ctx)
        cfg2 = get_view_config(ctx)
        assert cfg1 is cfg2
Example #21
0
def test_simple_addon_injection():
    request = get_request(edit=False)
    jeng = get_jinja2_engine()
    template = jeng.get_template("resinject.jinja")

    with override_current_theme_class():
        with override_provides(
                "xtheme_resource_injection", ["shuup_tests.xtheme.test_addon_injections:add_test_injection",]):
            # TestInjector should add alert to end of the body for every request
            output = template.render(request=request)
            head, body = output.split("</head>", 1)
            assert "window.injectedFromAddon=true;" in body
Example #22
0
def test_default_layout():
    vc = _get_basic_view_config()
    product = factories.create_product("test", name="Test product name")
    category = factories.get_default_category()

    placeholder_name = "wildhorse"
    context = {"request": get_request(), "product": product, "category": category}
    layout = vc.get_placeholder_layout(Layout, placeholder_name)
    assert isinstance(layout, Layout)
    assert layout.get_help_text({}) == layout.get_help_text(context)

    _add_plugin_and_test_save(vc, layout, placeholder_name, context)
Example #23
0
def test_simple_addon_injection():
    request = get_request(edit=False)
    jeng = get_jinja2_engine()
    template = jeng.get_template("resinject.jinja")

    with override_current_theme_class():
        with override_provides("xtheme_resource_injection", [
                "shuup_tests.xtheme.test_addon_injections:add_test_injection",
        ]):
            # TestInjector should add alert to end of the body for every request
            output = template.render(request=request)
            head, body = output.split("</head>", 1)
            assert "window.injectedFromAddon=true;" in body
Example #24
0
def test_jinja_resource():
    request = get_request()
    (template, layout, gibberish, context) = get_test_template_bits(request)
    assert JinjaMarkupResource("1+1={{ 1+1|float }}", context).render() == "1+1=2.0"
    assert JinjaMarkupResource("{{ 1|thisdoesnwork }}", context) == "(Error while rendering)"
    assert JinjaMarkupResource("", context) == ""
    assert str(JinjaMarkupResource("1+1", context)) == "1+1"

    container = ResourceContainer()
    container.add_resource("body_end", JinjaMarkupResource("1+1={{ 1+1|float }}", context))
    container.add_resource("body_end", JinjaMarkupResource("{{ 1|thisdoesnwork }}", context))
    container.add_resource("body_end", JinjaMarkupResource("", context))

    assert container.render_resources("body_end") == "1+1=2.0(Error while rendering)"
Example #25
0
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
Example #26
0
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)
Example #27
0
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)
Example #28
0
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
Example #29
0
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
Example #30
0
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
Example #31
0
def test_anon_layout():
    vc = _get_basic_view_config()

    placeholder_name = "hip hop"
    context = {"request": get_request()}  # By default user is anonymous
    layout = vc.get_placeholder_layout(AnonymousContactLayout, placeholder_name, context=context)
    assert isinstance(layout, AnonymousContactLayout)
    help_text = layout.get_help_text({})  # Same help text with or without the context
    assert layout.get_help_text(context) == help_text

    # Invalid contexts for rest of the contact group layouts
    assert vc.get_placeholder_layout(ContactLayout, placeholder_name, context=context) is None
    assert vc.get_placeholder_layout(PersonContactLayout, placeholder_name, context=context) is None
    assert vc.get_placeholder_layout(CompanyContactLayout, placeholder_name, context=context) is None

    _add_plugin_and_test_save(vc, layout, placeholder_name, context)
Example #32
0
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
Example #33
0
def test_jinja_resource():
    request = get_request()
    (template, layout, gibberish, context) = get_test_template_bits(request)
    assert JinjaMarkupResource("1+1={{ 1+1|float }}", context).render() == "1+1=2.0"
    assert JinjaMarkupResource("{{ 1|thisdoesnwork }}", context) == "(Error while rendering.)"
    assert JinjaMarkupResource("", context) == ""
    assert str(JinjaMarkupResource("1+1", context)) == "1+1"

    container = ResourceContainer()
    container.add_resource("body_end", JinjaMarkupResource("1+1={{ 1+1|float }}", context))
    container.add_resource("body_end", JinjaMarkupResource("{{ 1|thisdoesnwork }}", context))
    container.add_resource("body_end", JinjaMarkupResource("", context))
    rendered_resource = container._render_resource("://example.com/js.js?random_text")
    assert "unknown resource type" not in rendered_resource
    assert rendered_resource == '<script src="://example.com/js.js?random_text"></script>'
    assert container.render_resources("body_end") == "1+1=2.0(Error while rendering.)"
Example #34
0
def test_default_layout():
    vc = _get_basic_view_config()
    product = factories.create_product("test", name="Test product name")
    category = factories.get_default_category()

    placeholder_name = "wildhorse"
    context = {
        "request": get_request(),
        "product": product,
        "category": category
    }
    layout = vc.get_placeholder_layout(Layout, placeholder_name)
    assert isinstance(layout, Layout)
    assert layout.get_help_text({}) == layout.get_help_text(context)

    _add_plugin_and_test_save(vc, layout, placeholder_name, context)
Example #35
0
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,
                "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!"}
Example #36
0
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
Example #37
0
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
Example #38
0
def test_anon_layout():
    vc = _get_basic_view_config()

    placeholder_name = "hip hop"
    context = {"request": get_request()}  # By default user is anonymous
    layout = vc.get_placeholder_layout(AnonymousContactLayout,
                                       placeholder_name,
                                       context=context)
    assert isinstance(layout, AnonymousContactLayout)
    help_text = layout.get_help_text(
        {})  # Same help text with or without the context
    assert layout.get_help_text(context) == help_text

    # Invalid contexts for rest of the contact group layouts
    assert vc.get_placeholder_layout(
        ContactLayout, placeholder_name, context=context) is None
    assert vc.get_placeholder_layout(
        PersonContactLayout, placeholder_name, context=context) is None
    assert vc.get_placeholder_layout(
        CompanyContactLayout, placeholder_name, context=context) is None

    _add_plugin_and_test_save(vc, layout, placeholder_name, context)
Example #39
0
def test_get_placeholder_layouts():
    vc = _get_basic_view_config()
    product = factories.create_product("test", name="Test product name")
    category = factories.get_default_category()

    placeholder_name = "hermit"
    context = {"request": get_request(), "product": product, "category": category}

    provides = []
    with override_provides("xtheme_layout", provides):
        assert len(vc.get_placeholder_layouts(context, placeholder_name)) == 1  # Default layout

    provides.append("shuup.xtheme.layout.ProductLayout")
    with override_provides("xtheme_layout", provides):
        assert len(vc.get_placeholder_layouts(context, placeholder_name)) == 2

    provides.append("shuup.xtheme.layout.CategoryLayout")
    with override_provides("xtheme_layout", provides):
        assert len(vc.get_placeholder_layouts(context, placeholder_name)) == 3

    provides.append("shuup.xtheme.layout.AnonymousContactLayout")
    with override_provides("xtheme_layout", provides):
        assert len(vc.get_placeholder_layouts(context, placeholder_name)) == 4
Example #40
0
def test_index_view_with_contact_limitatons():
    shop = factories.get_default_shop()
    password = "******"

    # Person 1 to test contact and person contact layouts
    person1 = factories.create_random_person(shop=shop)
    person1.user = factories.create_random_user()
    person1.user.set_password(password)
    person1.user.save()
    person1.save()

    # Person 2 to test company layout
    person2 = factories.create_random_person(shop=shop)
    person2.user = factories.create_random_user()
    person2.user.set_password(password)
    person2.user.save()
    person2.save()
    company = factories.create_random_company(shop=shop)
    company.members.add(person2)

    placeholder_name = "front_content"
    request = get_request()
    context = {"request": request}

    # Add plugin for anons
    vc = _get_basic_view_config(view_name="IndexView")
    anon_plugin_text = "This content is only for guests"
    layout = vc.get_placeholder_layout(AnonymousContactLayout, placeholder_name, context=context)
    _add_plugin_and_test_save(vc, layout, placeholder_name, context, anon_plugin_text)

    # Add plugin for contact
    vc = _get_basic_view_config(view_name="IndexView")
    context["request"].customer = person1
    contact_plugin_text = "This content is only for users logged in"
    layout = vc.get_placeholder_layout(ContactLayout, placeholder_name, context=context)
    _add_plugin_and_test_save(vc, layout, placeholder_name, context, contact_plugin_text)

    # Add plugin for person contacts
    vc = _get_basic_view_config(view_name="IndexView")
    person_contact_plugin_text = "This content is only for person contacts"
    layout = vc.get_placeholder_layout(PersonContactLayout, placeholder_name, context=context)
    _add_plugin_and_test_save(vc, layout, placeholder_name, context, person_contact_plugin_text)

    # Add plugin for companies
    vc = _get_basic_view_config(view_name="IndexView")
    context["request"].customer = company
    company_plugin_text = "This content is only for companies"
    layout = vc.get_placeholder_layout(CompanyContactLayout, placeholder_name, context=context)
    _add_plugin_and_test_save(vc, layout, placeholder_name, context, company_plugin_text)

    c = SmartClient()  # By default there is no user logged in
    soup = c.soup(reverse("shuup:index"))
    page_content = soup.find("div", {"class": "page-content"})
    page_content_text = page_content.text
    assert anon_plugin_text in page_content_text
    assert contact_plugin_text not in page_content_text
    assert person_contact_plugin_text not in page_content_text
    assert company_plugin_text not in page_content_text

    # Login as person1 user
    c = SmartClient()
    c.login(username=person1.user.username, password=password)
    soup = c.soup(reverse("shuup:index"))
    page_content = soup.find("div", {"class": "page-content"})
    page_content_text = page_content.text
    assert anon_plugin_text not in page_content_text
    assert contact_plugin_text in page_content_text
    assert person_contact_plugin_text in page_content_text
    assert company_plugin_text not in page_content_text

    # Login as person2 user which is linked to company
    c = SmartClient()
    c.login(username=person2.user.username, password=password)
    soup = c.soup(reverse("shuup:index"))
    page_content = soup.find("div", {"class": "page-content"})
    page_content_text = page_content.text
    assert anon_plugin_text not in page_content_text
    assert contact_plugin_text in page_content_text
    assert person_contact_plugin_text not in page_content_text
    assert company_plugin_text in page_content_text
Example #41
0
def test_index_view_with_contact_limitatons():
    shop = factories.get_default_shop()
    password = "******"

    # Person 1 to test contact and person contact layouts
    person1 = factories.create_random_person(shop=shop)
    person1.user = factories.create_random_user()
    person1.user.set_password(password)
    person1.user.save()
    person1.save()

    # Person 2 to test company layout
    person2 = factories.create_random_person(shop=shop)
    person2.user = factories.create_random_user()
    person2.user.set_password(password)
    person2.user.save()
    person2.save()
    company = factories.create_random_company(shop=shop)
    company.members.add(person2)

    placeholder_name = "front_content"
    request = get_request()
    context = {"request": request}

    # Add plugin for anons
    vc = _get_basic_view_config(view_name="IndexView")
    anon_plugin_text = "This content is only for guests"
    layout = vc.get_placeholder_layout(AnonymousContactLayout,
                                       placeholder_name,
                                       context=context)
    _add_plugin_and_test_save(vc, layout, placeholder_name, context,
                              anon_plugin_text)

    # Add plugin for contact
    vc = _get_basic_view_config(view_name="IndexView")
    context["request"].customer = person1
    contact_plugin_text = "This content is only for users logged in"
    layout = vc.get_placeholder_layout(ContactLayout,
                                       placeholder_name,
                                       context=context)
    _add_plugin_and_test_save(vc, layout, placeholder_name, context,
                              contact_plugin_text)

    # Add plugin for person contacts
    vc = _get_basic_view_config(view_name="IndexView")
    person_contact_plugin_text = "This content is only for person contacts"
    layout = vc.get_placeholder_layout(PersonContactLayout,
                                       placeholder_name,
                                       context=context)
    _add_plugin_and_test_save(vc, layout, placeholder_name, context,
                              person_contact_plugin_text)

    # Add plugin for companies
    vc = _get_basic_view_config(view_name="IndexView")
    context["request"].customer = company
    company_plugin_text = "This content is only for companies"
    layout = vc.get_placeholder_layout(CompanyContactLayout,
                                       placeholder_name,
                                       context=context)
    _add_plugin_and_test_save(vc, layout, placeholder_name, context,
                              company_plugin_text)

    c = SmartClient()  # By default there is no user logged in
    soup = c.soup(reverse("shuup:index"))
    page_content = soup.find("div", {"class": "page-content"})
    page_content_text = page_content.text
    assert anon_plugin_text in page_content_text
    assert contact_plugin_text not in page_content_text
    assert person_contact_plugin_text not in page_content_text
    assert company_plugin_text not in page_content_text

    # Login as person1 user
    c = SmartClient()
    c.login(username=person1.user.username, password=password)
    soup = c.soup(reverse("shuup:index"))
    page_content = soup.find("div", {"class": "page-content"})
    page_content_text = page_content.text
    assert anon_plugin_text not in page_content_text
    assert contact_plugin_text in page_content_text
    assert person_contact_plugin_text in page_content_text
    assert company_plugin_text not in page_content_text

    # Login as person2 user which is linked to company
    c = SmartClient()
    c.login(username=person2.user.username, password=password)
    soup = c.soup(reverse("shuup:index"))
    page_content = soup.find("div", {"class": "page-content"})
    page_content_text = page_content.text
    assert anon_plugin_text not in page_content_text
    assert contact_plugin_text in page_content_text
    assert person_contact_plugin_text not in page_content_text
    assert company_plugin_text in page_content_text