def test_models(self):
        simple_blog_plugin_simple_cms = SimpleBlogEntriesPluginCMS()
        self.assertIsNotNone(simple_blog_plugin_simple_cms)
        placeholder = Placeholder.objects.create(slot='test')
        model_instance = add_plugin(
            placeholder,
            SimpleBlogEntriesPluginCMS,
            'en',
        )
        renderer = ContentRenderer(request=RequestFactory())
        html = renderer.render_plugin(model_instance, {})
        self.assertIn("My post", html)
        self.assertIn("My post description", html)
        self.assertIn("My post 2", html)
        self.assertIn("My post 2 description", html)
        self.assertIn("carlosmart", html)
        self.assertIn("My blog", html)

        model_instance = add_plugin(
            placeholder,
            SimpleBlogEntriesPluginCMS,
            'en',
        )
        model_instance.custom_blog_title = "This is my new blog"
        model_instance.save()
        renderer = ContentRenderer(request=RequestFactory())
        html = renderer.render_plugin(model_instance, {})
        self.assertIn("My post", html)
        self.assertIn("My post description", html)
        self.assertIn("My post 2", html)
        self.assertIn("My post 2 description", html)
        self.assertIn("carlosmart", html)
        self.assertIn("This is my new blog", html)
Exemple #2
0
    def test_section_context_and_html(self):
        """
        Instanciating this plugin with an instance should populate the context
        and render in the template.
        """
        placeholder = Placeholder.objects.create(slot="test")

        # Create random values for parameters with a factory
        section = SectionFactory()

        model_instance = add_plugin(placeholder,
                                    SectionPlugin,
                                    "en",
                                    title=section.title)
        plugin_instance = model_instance.get_plugin_class_instance()
        context = plugin_instance.render({}, model_instance, None)

        # Check if "instance" is in context
        self.assertIn("instance", context)

        # Check if parameters, generated by the factory, are correctly set in "instance" of context
        self.assertEqual(context["instance"].title, section.title)

        # Get generated html for section title
        renderer = ContentRenderer(request=RequestFactory())
        html = renderer.render_plugin(model_instance, {})

        # Check rendered title
        self.assertIn(section.title, html)

        # Get created Section plugin instance
        target = placeholder.get_plugins().get(plugin_type="SectionPlugin")

        # Nest a Text plugin into the Section plugin
        model_instance = add_plugin(
            placeholder,
            plugin_type="TextPlugin",
            language="en",
            target=target,
            body="Lorem ipsum",
        )

        # Get generated html again with added Text plugin
        renderer = ContentRenderer(request=RequestFactory())
        html = renderer.render_plugin(model_instance, {})

        # Check rendered text body
        self.assertIn("Lorem ipsum", html)
def test_edit_accordion_group(rf, admin_site, bootstrap_accordion):
    request = rf.get('/')
    accordion_plugin, accordion_model = bootstrap_accordion
    first_group = accordion_model.get_first_child()
    group_model, group_plugin = first_group.get_plugin_instance(admin_site)
    data = {'heading': "Hello", 'body_padding': 'on'}
    ModelForm = group_plugin.get_form(request, group_model)
    form = ModelForm(data, None, instance=group_model)
    assert form.is_valid()
    group_plugin.save_model(request, group_model, form, False)
    assert group_model.glossary['heading'] == "Hello"
    assert group_model.glossary['body_padding'] is True

    # render the plugin
    build_plugin_tree([accordion_model, group_model])
    context = RequestContext(request)
    content_renderer = ContentRenderer(request)
    html = content_renderer.render_plugin(accordion_model, context).strip()
    html = html.replace('\n', '').replace('\t', '')
    expected = """<div id="cmsplugin_{accordion_id}" class="accordion"><div class="card">
<div class="card-header" id="heading_{group_id}"><h5 class="mb-0">
<button class="btn btn-link" type="button" data-toggle="collapse" data-target="#collapse_{group_id}" aria-expanded="true" aria-controls="collapse_{group_id}">
Hello</button></h5></div>
<div id="collapse_{group_id}" class="collapse" aria-labelledby="heading_{group_id}" data-parent="#cmsplugin_{accordion_id}">
<div class="card-body"></div></div></div></div>""".format(
        accordion_id=accordion_model.id, group_id=group_model.id)
    expected = expected.replace('\n', '').replace('\t', '')
    assert html == expected
Exemple #4
0
    def test_cms_plugins_lti_consumer_context_and_html(self):
        """
        Instanciating this plugin with an instance should populate the context
        and render in the template.
        """
        placeholder = Placeholder.objects.create(slot="test")

        lti_consumer = LTIConsumerFactory()

        model_instance = add_plugin(
            placeholder,
            LTIConsumerPlugin,
            "en",
            url=lti_consumer.url,
            lti_provider_id=lti_consumer.lti_provider_id,
        )
        plugin_instance = model_instance.get_plugin_class_instance()
        context = plugin_instance.render({}, model_instance, None)

        # Check if instance is in context
        self.assertEqual(model_instance, context["instance"])

        # Get generated html for LTI consumer url
        renderer = ContentRenderer(request=RequestFactory())
        html = renderer.render_plugin(model_instance, {})

        # Check rendered url is correct after save and sanitize
        self.assertIn(lti_consumer.url, html)
        self.assertIn("student", html)
def test_cms_plugin_renders_in_cms_page(rf):
    fd = FormDefinition.objects.create(
        mail_to='*****@*****.**',
        mail_subject='Someone sent you a greeting: {{ test }}'
    )
    field = FormDefinitionField.objects.create(
        form_definition=fd,
        name='test',
        label=get_random_string(),
        field_class='django.forms.CharField',
    )
    page = api.create_page("test", "page.html", "en")
    assert isinstance(page, Page)
    ph = page.get_placeholders()[0]
    assert isinstance(ph, Placeholder)
    plugin = api.add_plugin(ph, FormDesignerPlugin, "en", form_definition=fd)
    assert isinstance(plugin, CMSFormDefinition)
    assert plugin.form_definition == fd
    request = rf.get("/")
    request.user = AnonymousUser()
    request.current_page = page
    if CMS_VERSION >= Ver('3.4'):
        from cms.plugin_rendering import ContentRenderer
        renderer = ContentRenderer(request)
        context = RequestContext(request)
        context['request'] = request
        content = renderer.render_plugin(plugin, context)
    else:
        from cms.page_rendering import render_page
        response = render_page(request, page, "fi", "test")
        response.render()
        content = response.content.decode("utf8")
    assert field.label in content
    assert "<form" in content
 def get_rendered_plugin(self, obj):
     from cms.plugin_rendering import ContentRenderer
     request = self._context.request
     renderer = ContentRenderer(request)
     # Avoid errors if plugin require a request object
     # when rendering.
     return renderer.render_plugin(obj, self.context)
def test_cms_plugin_renders_in_cms_page(rf):
    fd = FormDefinition.objects.create(
        mail_to='*****@*****.**',
        mail_subject='Someone sent you a greeting: {{ test }}')
    field = FormDefinitionField.objects.create(
        form_definition=fd,
        name='test',
        label=get_random_string(),
        field_class='django.forms.CharField',
    )
    page = api.create_page("test", "page.html", "en")
    assert isinstance(page, Page)
    ph = page.get_placeholders()[0]
    assert isinstance(ph, Placeholder)
    plugin = api.add_plugin(ph, FormDesignerPlugin, "en", form_definition=fd)
    assert isinstance(plugin, CMSFormDefinition)
    assert plugin.form_definition == fd
    request = rf.get("/")
    request.user = AnonymousUser()
    request.current_page = page
    if CMS_VERSION >= Ver('3.4'):
        from cms.plugin_rendering import ContentRenderer
        renderer = ContentRenderer(request)
        context = RequestContext(request)
        context['request'] = request
        content = renderer.render_plugin(plugin, context)
    else:
        from cms.page_rendering import render_page
        response = render_page(request, page, "fi", "test")
        response.render()
        content = response.content.decode("utf8")
    assert field.label in content
    assert "<form" in content
    def test_cms_plugins_organization_render_context_variant(self):
        """
        The organization plugin should render according to variant variable
        eventually present in the context of its container.
        """
        # Create an blogpost
        organization = OrganizationFactory(page_title="public title")
        organization_page = organization.extended_object

        # Create a page to add the plugin to
        page = create_i18n_page("A page")
        placeholder = page.placeholders.get(slot="maincontent")

        # Add blogpost plugin with default template
        model_instance = add_plugin(
            placeholder,
            OrganizationPlugin,
            "en",
            page=organization_page,
            variant="small",
        )

        # Get generated html
        request = RequestFactory()
        request.current_page = page
        request.user = AnonymousUser()
        context = {
            "current_page": page,
            "organization_variant": "xxl",
            "request": request,
        }
        renderer = ContentRenderer(request=request)
        html = renderer.render_plugin(model_instance, context)

        self.assertIn("organization-small", html)
Exemple #9
0
    def test_cms_plugins_blogpost_cascade_variant(self):
        """
        If the variant is not specified on the blogpost plugin, it should render
        according to variant variable eventually present in the context of its
        container.
        """
        # Create an blogpost
        blogpost = BlogPostFactory(page_title="public title",
                                   should_publish=True)
        blogpost_page = blogpost.extended_object

        # Create a page to add the plugin to
        page = create_i18n_page("A page")
        placeholder = page.placeholders.get(slot="maincontent")

        # Add blogpost plugin with default template
        model_instance = add_plugin(placeholder,
                                    BlogPostPlugin,
                                    "en",
                                    page=blogpost_page)

        # Get generated html
        request = RequestFactory()
        request.current_page = page
        request.path_info = "/en/my-path/"
        request.user = AnonymousUser()
        context = {
            "current_page": page,
            "blogpost_variant": "xxl",
            "request": request
        }
        renderer = ContentRenderer(request=request)
        html = renderer.render_plugin(model_instance, context)

        self.assertIn("blogpost-xxl", html)
    def test_children_shown(self):
        page1, text_plugin, parent_plugin, text_content = self.setup_plugin(
            group=self.group)

        request = self.get_page_request(page1, self.user, r'/en/', lang='en')
        renderer = ContentRenderer(request=request)
        context = RequestContext(request, {
            "user": self.user,
            "cms_content_renderer": renderer
        })

        child_html = renderer.render_plugin(text_plugin, context)
        parent_html = renderer.render_plugin(parent_plugin, context)

        self.assertEqual(child_html, text_content)
        self.assertEqual(parent_html, text_content)
Exemple #11
0
    def test_large_banner_no_background_image(self):
        """
        Instanciating this plugin with an instance but no background image should render
        a default image in the html.
        The default image is defined as background image in the CSS.
        """
        placeholder = Placeholder.objects.create(slot="test")

        # Create random values for parameters with a factory
        large_banner = LargeBannerFactory(background_image=None)
        fields_list = ["title", "background_image", "logo", "logo_alt_text"]

        model_instance = add_plugin(
            placeholder,
            LargeBannerPlugin,
            "en",
            **{field: getattr(large_banner, field) for field in fields_list}
        )

        # Get the generated html
        renderer = ContentRenderer(request=RequestFactory())
        html = renderer.render_plugin(model_instance, {})

        # Check that all expected elements are in the html
        self.assertIn('class="large-banner"', html)
        self.assertFalse('class="large-banner__background"' in html)
Exemple #12
0
    def test_cms_plugins_simpletext_context_and_html(self):
        """
        Instanciating this plugin with an instance should populate the context
        and render in the template.
        """
        placeholder = Placeholder.objects.create(slot="test")

        # Create random values for parameters with a factory
        simpletext = SimpleTextFactory()

        model_instance = add_plugin(placeholder,
                                    CKEditorPlugin,
                                    "en",
                                    body=simpletext.body)
        plugin_instance = model_instance.get_plugin_class_instance()
        context = plugin_instance.render({}, model_instance, None)

        # Check if "instance" is in context
        self.assertIn("instance", context)

        # Check if parameters, generated by the factory, are correctly set in "instance" of context
        self.assertEqual(context["instance"].body, simpletext.body)

        # Get generated html for simpletext body
        renderer = ContentRenderer(request=RequestFactory())
        html = renderer.render_plugin(model_instance, {})

        # Check rendered body is correct after save and sanitize
        self.assertInHTML(simpletext.body, html)
Exemple #13
0
    def test_plugin_icon(self):
        icon_widget = IconFieldWidget()
        self.assertTrue(isinstance(icon_widget.get_fontawesome_icons, list),
                        "Could not get Fontawesome icon list")
        self.assertGreaterEqual(len(icon_widget.get_fontawesome_icons), 0,
                                "Could not get any Fontawesome icons")

        data = {'icon': 'fab fa-bible'}
        placeholder = Placeholder.objects.create(slot='content')
        model_instance = add_plugin(placeholder, IconPlugin, 'en', data=data)
        plugin_instance = model_instance.get_plugin_class_instance()
        context = plugin_instance.render({}, model_instance, None)

        self.assertDictEqual(data, context['instance']._json,
                             "_json field data is not as expected")

        renderer = ContentRenderer(request=RequestFactory())
        html = renderer.render_plugin(model_instance, {})

        test_context = {'instance': {'glossary': data}}
        test_html = render_to_string(template_name=IconPlugin.render_template,
                                     context=test_context,
                                     request=RequestFactory())

        self.assertHTMLEqual(test_html, html,
                             "Rendered HTML differs from what it should be")
    def test_exclude_anon_mode_member(self):
        page1, text_plugin, parent_plugin, text_content = self.setup_plugin(
            group=self.group, mode='not_in_group_plus_anon')

        request = self.get_page_request(page1, self.user, r'/en/', lang='en')
        renderer = ContentRenderer(request=request)
        context = RequestContext(request, {
            "user": self.user,
            "cms_content_renderer": renderer
        })

        child_html = renderer.render_plugin(text_plugin, context)
        parent_html = renderer.render_plugin(parent_plugin, context)

        self.assertEqual(child_html, text_content)
        self.assertEqual(parent_html, '')
Exemple #15
0
 def test_plugin_bem_classes_applied(self):
     """
     test if BEM style classes are applied to this plugins output
     :return:
     """
     placeholder = Placeholder.objects.create(slot='test')
     data = {
         'anchor': 'anchor-value',
         'layout': 'layout-value',
         'color': 'color-value',
         'background': 'background-value',
     }
     data.update(self.get_plugin_default_data())
     model_instance = add_plugin(
         placeholder,
         self.plugin_class,
         'en',
         **data
     )
     renderer = ContentRenderer(request=RequestFactory())
     html = renderer.render_plugin(model_instance, {})
     plugin_name = model_instance.__class__.__name__.lower()
     self.assertIn('plugin_{}'.format(model_instance.pk), force_text(html))
     self.assertIn('plugin-{}'.format(plugin_name), force_text(html))
     self.assertIn('plugin-{}_{}'.format(plugin_name, 'layout-value'), force_text(html))
     self.assertIn('plugin-{}_{}'.format(plugin_name, 'color-value'), force_text(html))
     self.assertIn('plugin-{}_{}'.format(plugin_name, 'background-value'), force_text(html))
     self.assertIn('plugin-{}_anchor-{}'.format(plugin_name, 'anchor-value'), force_text(html))
def test_edit_bootstrap_row(rf, bootstrap_row):
    row_plugin, row_model = bootstrap_row
    request = rf.get('/')
    ModelForm = row_plugin.get_form(request, row_model)
    data = {'num_children': 3}
    form = ModelForm(data, None, instance=row_model)
    assert form.is_valid()
    row_plugin.save_model(request, row_model, form, False)

    container_model, container_plugin = row_model.parent.get_plugin_instance()
    plugin_list = [container_model, row_model]

    # we now should have three columns attached to the row
    assert row_model.get_descendant_count() == 3
    for cms_plugin in row_model.get_descendants():
        column_model, column_plugin = cms_plugin.get_plugin_instance()
        assert isinstance(column_model, CascadeElement)
        assert isinstance(column_plugin, BootstrapColumnPlugin)
        assert column_model.parent.id == row_model.id
        plugin_list.append(column_model)

    # change data inside the first column
    cms_plugin = row_model.get_descendants().first()
    column_model, column_plugin = cms_plugin.get_plugin_instance()
    data = {
        'xs-column-width': 'col',
        'sm-column-offset': 'offset-sm-1',
        'sm-column-width': 'col-sm-3'
    }
    ModelForm = column_plugin.get_form(request, column_model)
    form = ModelForm(data, None, instance=column_model)
    assert form.is_valid()
    column_plugin.save_model(request, column_model, form, True)

    # change data inside the last column
    cms_plugin = row_model.get_descendants().last()
    column_model, column_plugin = cms_plugin.get_plugin_instance()
    data = {
        'xs-column-width': 'col',
        'sm-responsive-utils': 'hidden-sm',
        'sm-column-width': 'col-sm-4'
    }
    ModelForm = column_plugin.get_form(request, column_model)
    form = ModelForm(data, None, instance=column_model)
    assert form.is_valid()
    column_plugin.save_model(request, column_model, form, False)

    # render the plugin and check the output
    context = {
        'request': request,
    }
    content_renderer = ContentRenderer(request)
    row_model.parent.child_plugin_instances
    for plugin in plugin_list:
        plugin.refresh_from_db()
    build_plugin_tree(plugin_list)
    html = content_renderer.render_plugin(container_model, context)
    html = strip_spaces_between_tags(html).strip()
    assert html == '<div class="container"><div class="row"><div class="col col-sm-3 offset-sm-1">' \
                   '</div><div class="col"></div><div class="col col-sm-4 hidden-sm"></div></div></div>'
Exemple #17
0
 def _render_via_cms():
     from cms.plugin_rendering import ContentRenderer
     renderer = ContentRenderer(request)
     context = RequestContext(request)
     # Avoid errors if plugin require a request object
     # when rendering.
     context['request'] = request
     return renderer.render_plugin(plugin, context)
Exemple #18
0
def test_simple_icon(rf, simple_icon):
    """Render a SimpleIconPlugin"""
    simple_icon_plugin, simple_icon_model = simple_icon
    request = rf.get('/')
    context = RequestContext(request)
    content_renderer = ContentRenderer(request)
    html = content_renderer.render_plugin(simple_icon_model, context).strip()
    assert html == '<i class="icon-icon-skiing"></i>'
Exemple #19
0
 def _render_via_cms():
     from cms.plugin_rendering import ContentRenderer
     renderer = ContentRenderer(request)
     context = RequestContext(request)
     # Avoid errors if plugin require a request object
     # when rendering.
     context['request'] = request
     return renderer.render_plugin(plugin, context)
Exemple #20
0
    def render_plugin(self, instance):
        context = RequestContext(self.request, {'request': self.request})

        if get_cms_version() >= (3, 4):
            renderer = ContentRenderer(request=self.request)
            return renderer.render_plugin(instance, context)
        else:
            return instance.render_plugin(context)
Exemple #21
0
 def test_plugin_html(self):
     placeholder = Placeholder.objects.create(slot='test')
     model_instance = add_plugin(placeholder, self.plugin_class, 'en', **{
         'body': '<strong>Test</strong>',
     })
     renderer = ContentRenderer(request=RequestFactory())
     html = renderer.render_plugin(model_instance, {})
     self.assertInHTML('<strong>Test</strong>', force_text(html))
Exemple #22
0
    def test_cms_plugins_htmlsitemap_no_children(self):
        """An HTML sitemap plugin without any children should render an empty sitemap."""
        placeholder = Placeholder.objects.create(slot="maincontent")
        model_instance = add_plugin(placeholder, HTMLSitemapPlugin, "en")

        renderer = ContentRenderer(request=RequestFactory())
        html = renderer.render_plugin(model_instance, {})

        self.assertHTMLEqual(html, '<div class="sitemap"></div>')
Exemple #23
0
 def test_plugin_html(self):
     placeholder = Placeholder.objects.create(slot='test')
     model_instance = add_plugin(placeholder,
                                 IconPlugin,
                                 'en',
                                 icon='fa-bath')
     renderer = ContentRenderer(request=RequestFactory())
     html = renderer.render_plugin(model_instance, {})
     self.assertEqual(html, '<i class="fa fa-bath"></i>')
 def get_rendered(self, obj):
     from django.template import RequestContext
     from cms.plugin_rendering import ContentRenderer
     request = self._context.get('request', {})
     renderer = ContentRenderer(request)
     context = RequestContext(request)
     # Avoid errors if plugin require a request object
     # when rendering.
     context['request'] = request
     return renderer.render_plugin(obj, context)
Exemple #25
0
 def test_plugin_html(self):
     placeholder = Placeholder.objects.create(slot='test')
     model_instance = add_plugin(
         placeholder,
         MyPlugin,
         'en',
     )
     renderer = ContentRenderer(request=RequestFactory())
     html = renderer.render_plugin(model_instance, {})
     self.assertEqual(html, '<strong>Test</strong>')
 def test_plugin_html(self):
     placeholder = Placeholder.objects.create(slot='test')
     model_instance = add_plugin(
         placeholder,
         HelloWorldPluginBase,
         'en',
     )
     renderer = ContentRenderer(request=RequestFactory())
     html = renderer.render_plugin(model_instance, {})
     self.assertEqual(html, '<p>Hello world!</p>')
Exemple #27
0
    def render(self, request):
        context = Context({"request": request})
        from cms.plugin_rendering import ContentRenderer

        renderer = ContentRenderer(request)
        return renderer.render_plugin(
            instance=self,
            context=context,
            placeholder=self.placeholder,
        )
    def test_anon_mode_anon(self):
        page1, text_plugin, parent_plugin, text_content = self.setup_plugin(
            group=self.group, mode='anonymous')

        request = self.get_page_request(page1,
                                        AnonymousUser(),
                                        r'/en/',
                                        lang='en')
        renderer = ContentRenderer(request=request)
        context = RequestContext(request, {
            "user": AnonymousUser(),
            "cms_content_renderer": renderer
        })

        child_html = renderer.render_plugin(text_plugin, context)
        parent_html = renderer.render_plugin(parent_plugin, context)

        self.assertEqual(child_html, text_content)
        self.assertEqual(parent_html, text_content)
 def test_plugin_html(self):
     placeholder = Placeholder.objects.create(slot='content')
     model_instance = add_plugin(
         placeholder,
         PlaintextPlugin,
         self.language,
         body=self.plaintext_body,
     )
     renderer = ContentRenderer(request=RequestFactory())
     html = renderer.render_plugin(model_instance, {})
     self.assertEqual(html, self.plaintext_body)
Exemple #30
0
 def render(self, request):
     context = Context({'request': request})
     try:
         from cms.plugin_rendering import ContentRenderer
         renderer = ContentRenderer(request)
         return renderer.render_plugin(
             instance=self,
             context=context,
             placeholder=self.placeholder,
         )
     except ImportError:
         return self.render_plugin(context)
Exemple #31
0
    def plain_text(self):
        """
        Renders all the plaintext plugins from the placeholder field
        """

        # We need to use this weird ContentRenderer in order to render the plugins
        renderer = ContentRenderer(request=RequestFactory())
        text = ""

        for plugin in self.content.cmsplugin_set.all():
            html = renderer.render_plugin(plugin, {})
            text += strip_tags(html)

        return text.strip()
Exemple #32
0
    def test_plugin_html(self):
        placeholder = Placeholder.objects.create(slot='test')

        model_instance = add_plugin(
            placeholder,
            SlickSliderPlugin,
            'de'
        )
        model_instance.copy_relations(self.slider)
        renderer = ContentRenderer(request=RequestFactory())
        from sekizai.context import SekizaiContext
        html = renderer.render_plugin(model_instance, SekizaiContext())
        self.assertIn('class="slider-wrapper"', html)
        self.assertIn('id="slider-%s' % model_instance.id, html)
def render_plugin_preview(context, plugin):
    request = context['request']

    if LTE_CMS_3_3:
        return plugin.render_plugin(context)

    try:
        content_renderer = request.toolbar.content_renderer
    except AttributeError:
        from cms.plugin_rendering import ContentRenderer

        content_renderer = ContentRenderer(request)

    content = content_renderer.render_plugin(
        instance=plugin,
        context=context,
        editable=False,
    )
    return content
Exemple #34
0
def render_plugin(request, plugin_instance):
    renderer = ContentRenderer(request)
    context = {'request': request}
    return renderer.render_plugin(plugin_instance, context)