def test_rendering(edit, injectable, theme_class, global_type): request = get_request(edit) request.resolver_match = mock.Mock() request.resolver_match.app_name = "E-Commerce" 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_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)
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
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")
def save(self, *args, **kwargs): request = get_request() if not self.pk: if request: if not request.session.session_key: request.session.save() session_object = request.session._get_session_from_db() self.author_type_id = ContentType.objects.get_for_model(session_object._meta.model).id self.author_id = session_object.pk return super().save(*args, **kwargs)
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_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)
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
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_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)
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)"
def test_layout_rendering(rf): request = get_request(edit=False) with override_current_theme_class(None): with plugin_override(): with layout_override(): (template, layout, gibberish, ctx) = get_test_template_bits(request) 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="col-md-12 hidden-xs xt-ph-cell"><p>%s</p></div> </div> </div> </div> """ % gibberish assert close_enough(result, expect)
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", ["E-Commerce_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(E-Commerce_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_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("E-Commerce.xtheme.layout.ProductLayout") with override_provides("xtheme_layout", provides): assert len(vc.get_placeholder_layouts(context, placeholder_name)) == 2 provides.append("E-Commerce.xtheme.layout.CategoryLayout") with override_provides("xtheme_layout", provides): assert len(vc.get_placeholder_layouts(context, placeholder_name)) == 3 provides.append("E-Commerce.xtheme.layout.AnonymousContactLayout") with override_provides("xtheme_layout", provides): assert len(vc.get_placeholder_layouts(context, placeholder_name)) == 4
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("E-Commerce: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("E-Commerce: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("E-Commerce: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
def get_request(self): return get_request()