Example #1
0
    def test_render_placeholder_cache(self):
        """
        Regression test for #4223

        Assert that placeholder cache is cleared correctly when a plugin is saved
        """
        invalidate_cms_page_cache()
        ex = Example1(char_1='one', char_2='two', char_3='tree', char_4='four')
        ex.save()
        ph1 = ex.placeholder
        ###
        # add the test plugin
        ##
        test_plugin = add_plugin(ph1, u"TextPlugin", u"en", body="Some text")
        test_plugin.save()

        request = self.get_request()
        content_renderer = self.get_content_renderer(request)
        # asserting initial text
        context = SekizaiContext()
        context['request'] = self.get_request()
        text = content_renderer.render_placeholder(ph1, context)
        self.assertEqual(text, "Some text")

        # deleting local plugin cache
        del ph1._plugins_cache
        test_plugin.body = 'Other text'
        test_plugin.save()

        # plugin text has changed, so the placeholder rendering
        text = content_renderer.render_placeholder(ph1, context)
        self.assertEqual(text, "Other text")
    def test_admin_url_multiple_fields(self):
        user = self.get_staff()
        page = create_page('Test', 'col_two.html', 'en', published=True)
        ex1 = Example1(char_1="char_1",
                       char_2="char_2",
                       char_3="char_3",
                       char_4="char_4")
        ex1.save()
        template_text = '''{% extends "base.html" %}
{% load placeholder_tags %}

{% block content %}
<h1>{% show_editable_model instance "callable_item" "char_1,char_2" "en" "admin:placeholderapp_example1_edit_field" %}</h1>
{% endblock content %}
'''
        request = self.get_page_request(page, user, edit=True)
        response = detail_view(request, ex1.pk, template_string=template_text)
        self.assertContains(
            response,
            '<h1><span id="cms_placeholder-model-placeholderapp-%s-%s" class="cms_placeholder-generic">char_1</span></h1>'
            % (ex1.pk, 'callable_item'))
        self.assertContains(
            response,
            "/admin/placeholderapp/example1/edit-field/%s/en/" % ex1.pk)
        self.assertTrue(
            re.search(self.edit_fields_rx % "char_1",
                      response.content.decode('utf8')))
        self.assertTrue(
            re.search(self.edit_fields_rx % "char_1%2Cchar_2",
                      response.content.decode('utf8')))
Example #3
0
    def test_render_uncached_placeholder_tag_no_use_cache(self):
        """
        Tests that {% render_uncached_placeholder %} does not populate cache.
        """
        render_uncached_placeholder_body = "I'm the render uncached placeholder body"
        ex1 = Example1(char_1="char_1",
                       char_2="char_2",
                       char_3="char_3",
                       char_4="char_4")
        ex1.save()
        request = self.get_request('/')
        add_plugin(ex1.placeholder,
                   u"TextPlugin",
                   u"en",
                   body=render_uncached_placeholder_body)

        template = '{% load cms_tags %}<h1>{% render_uncached_placeholder ex1.placeholder %}</h1>'

        cache_value_before = get_placeholder_cache(ex1.placeholder, 'en', 1,
                                                   request)
        self.render(template, self.test_page, {'ex1': ex1})
        cache_value_after = get_placeholder_cache(ex1.placeholder, 'en', 1,
                                                  request)

        self.assertEqual(cache_value_before, cache_value_after)
        self.assertIsNone(cache_value_after)
Example #4
0
 def test_page_only_plugins(self):
     ex = Example1(char_1='one', char_2='two', char_3='tree', char_4='four')
     ex.save()
     response = self.client.get(
         reverse('admin:placeholderapp_example1_change', args=(ex.pk, )))
     self.assertEqual(response.status_code, 200)
     self.assertNotContains(response, 'InheritPagePlaceholderPlugin')
Example #5
0
 def test_nested_plugin_escapejs(self):
     """
     Checks #1366 error condition.
     When adding/editing a plugin whose icon_src() method returns a URL
     containing an hyphen, the hyphen is escaped by django escapejs resulting
     in a incorrect URL
     """
     with SettingsOverride(CMS_PERMISSION=False):
         ex = Example1(char_1='one',
                       char_2='two',
                       char_3='tree',
                       char_4='four')
         ex.save()
         ph1 = ex.placeholder
         ###
         # add the test plugin
         ###
         test_plugin = add_plugin(ph1, u"EmptyPlugin", u"en")
         test_plugin.save()
         pl_url = "%sedit-plugin/%s/" % (reverse(
             'admin:placeholderapp_example1_change',
             args=(ex.pk, )), test_plugin.pk)
         response = self.client.post(pl_url, {})
         self.assertContains(response,
                             "/static/plugins/empty-image-file.png")
Example #6
0
    def test_render_placeholder_tag_use_cache(self):
        """
        Tests that {% render_placeholder %} populates cache.
        """
        render_placeholder_body = "I'm the render placeholder body"
        ex1 = Example1(char_1="char_1",
                       char_2="char_2",
                       char_3="char_3",
                       char_4="char_4")
        ex1.save()

        add_plugin(ex1.placeholder,
                   u"TextPlugin",
                   u"en",
                   body=render_placeholder_body)

        template = '{% load cms_tags %}<h1>{% render_placeholder ex1.placeholder %}</h1>'

        cache_key = ex1.placeholder.get_cache_key(u"en")
        cache_value_before = cache.get(cache_key)
        self.render(template, self.test_page, {'ex1': ex1})
        cache_value_after = cache.get(cache_key)

        self.assertNotEqual(cache_value_before, cache_value_after)
        self.assertIsNone(cache_value_before)
        self.assertIsNotNone(cache_value_after)
Example #7
0
    def test_render_uncached_placeholder_tag(self):
        """
        Tests the {% render_uncached_placeholder %} templatetag.
        """
        render_uncached_placeholder_body = "I'm the render uncached placeholder body"
        ex1 = Example1(char_1="char_1", char_2="char_2", char_3="char_3",
                       char_4="char_4")
        ex1.save()

        add_plugin(ex1.placeholder, u"TextPlugin", u"en", body=render_uncached_placeholder_body)

        t = '''{% extends "base.html" %}
{% load cms_tags %}

{% block content %}
<h1>{% render_uncached_placeholder ex1.placeholder %}</h1>
<h2>{% render_uncached_placeholder ex1.placeholder as tempvar %}</h2>
<h3>{{ tempvar }}</h3>
{% endblock content %}
'''
        r = self.render(t, self.test_page, {'ex1': ex1})
        self.assertIn(
            '<h1>%s</h1>' % render_uncached_placeholder_body,
            r
        )
        self.assertIn(
            '<h2></h2>',
            r
        )

        self.assertIn(
            '<h3>%s</h3>' % render_uncached_placeholder_body,
            r
        )
Example #8
0
 def _create_example(self):
     ex = Example1(
         char_1='one',
         char_2='two',
         char_3='tree',
         char_4='four'
     )
     ex.save()
     self._placeholder = ex.placeholder
Example #9
0
 def test_excercise_get_attached_models_notplugins(self):
     ex = Example1(char_1='one', char_2='two', char_3='tree', char_4='four')
     ex.save()
     ph = ex.placeholder
     result = list(ph._get_attached_models())
     self.assertEqual(result, [Example1])  # Simple PH - Example1 model
     add_plugin(ph, TextPlugin, 'en', body='en body')
     result = list(ph._get_attached_models())
     self.assertEqual(result,
                      [Example1])  # Simple PH still one Example1 model
 def test_noedit(self):
     user = self.get_staff()
     page = create_page('Test', 'col_two.html', 'en', published=True)
     ex1 = Example1(char_1="char_1",
                    char_2="char_2",
                    char_3="char_3",
                    char_4="char_4")
     ex1.save()
     request = self.get_page_request(page, user, edit=False)
     response = detail_view(request, ex1.pk)
     self.assertContains(response, "<h1>char_1</h1>")
     self.assertContains(response, "CMS.API.Toolbar")
Example #11
0
    def test_render_placeholderfield_cache_in_custom_model(self):
        """
        Regression test for #6912

        Assert that placeholder of a placeholderfield in custom model has its cache cleared correctly when mark_as_dirty is called in the admin
        """

        invalidate_cms_page_cache()

        # Create an instance of a custom model containing a placeholderfield
        ex = Example1(char_1="one", char_2="two", char_3="tree", char_4="four")
        ex.save()
        ph1 = ex.placeholder

        # Add a first plugin
        test_plugin = add_plugin(ph1, "TextPlugin", "en", body="Some text")
        test_plugin.save()

        # Create a first request using render_placeholder to ensure that the content is equal to the first plugin content
        request = self.get_request()
        content_renderer = self.get_content_renderer(request)
        context = SekizaiContext()
        context["request"] = self.get_request()
        text = content_renderer.render_placeholder(ph1, context, use_cache=True)
        self.assertEqual(text, "Some text")

        # Add a second plugin in the placeholder
        test_plugin = add_plugin(ph1, "TextPlugin", "en", body="Some other text")
        test_plugin.save()

        # Clear plugins cache to ensure that cms.utils.plugins.get_plugins() will refetch the plugins
        del ph1._plugins_cache

        # Create a second request using render_placeholder to ensure that the content is still equal to the first plugin content as cache was not cleared yet
        request = self.get_request()
        content_renderer = self.get_content_renderer(request)
        context = SekizaiContext()
        context["request"] = self.get_request()
        text = content_renderer.render_placeholder(ph1, context, use_cache=True)
        self.assertEqual(text, "Some text")

        # Mark placeholder as dirty as it is done in cms.admin.placeholderadmin file
        ph1.mark_as_dirty("en", clear_cache=False)

        # Create a last request to ensure that rendered content contains the two plugins content
        request = self.get_request()
        content_renderer = self.get_content_renderer(request)
        context = SekizaiContext()
        context["request"] = self.get_request()

        text = content_renderer.render_placeholder(ph1, context, use_cache=True)
        self.assertEqual(text, "Some textSome other text")
Example #12
0
    def test_no_tabs(self):
        ex = Example1(
            char_1='one',
            char_2='two',
            char_3='one',
            char_4='two',
        )
        ex.save()
        self._testuser()
        self.client.login(username='******', password='******')

        response = self.client.get('/de/admin/placeholderapp/example1/%d/' % ex.pk)
        self.assertNotContains(response, '<input type="hidden" class="language_button selected" name="de" />')
 def test_edit(self):
     user = self.get_staff()
     page = create_page('Test', 'col_two.html', 'en', published=True)
     ex1 = Example1(char_1="char_1",
                    char_2="char_2",
                    char_3="char_3",
                    char_4="char_4")
     ex1.save()
     request = self.get_page_request(page, user, edit=True)
     response = detail_view(request, ex1.pk)
     self.assertContains(
         response,
         '<h1><span id="cms_placeholder-model-placeholderapp-%s-%s" class="cms_placeholder-generic">char_1</span></h1>'
         % (ex1.pk, 'char_1'))
Example #14
0
 def test_excercise_get_attached_fields_notplugins(self):
     ex = Example1(
         char_1='one',
         char_2='two',
         char_3='tree',
         char_4='four',
     )
     ex.save()
     ph = ex.placeholder
     result = [f.name for f in list(ph._get_attached_fields())]
     self.assertEqual(result, ['placeholder']) # Simple PH - placeholder field name
     add_plugin(ph, 'TextPlugin', 'en', body='en body')
     result = [f.name for f in list(ph._get_attached_fields())]
     self.assertEqual(result, ['placeholder']) # Simple PH - still one placeholder field name
    def test_edit_field(self):
        from django.contrib.admin import site
        exadmin = site._registry[Example1]

        user = self.get_superuser()
        page = create_page('Test', 'col_two.html', 'en', published=True)
        ex1 = Example1(char_1="char_1",
                       char_2="char_2",
                       char_3="char_3",
                       char_4="char_4")
        ex1.save()

        request = self.get_page_request(page, user, edit=True)
        request.GET['edit_fields'] = 'char_1'
        response = exadmin.edit_field(request, ex1.pk, "en")
        self.assertContains(response, 'id="id_char_1"')
        self.assertContains(response, 'value="char_1"')
 def test_nested_plugin_escapejs(self):
     """
     Checks #1366 error condition.
     When adding/editing a plugin whose icon_src() method returns a URL
     containing an hyphen, the hyphen is escaped by django escapejs resulting
     in a incorrect URL
     """
     ex = Example1(char_1='one', char_2='two', char_3='tree', char_4='four')
     ex.save()
     ph1 = ex.placeholder
     ###
     # add the test plugin
     ###
     test_plugin = add_plugin(ph1, u"EmptyPlugin", u"en")
     test_plugin.save()
     endpoint = self.get_change_plugin_uri(test_plugin, container=Example1)
     response = self.client.post(endpoint, {})
     self.assertContains(response, "CMS.API.Helpers.onPluginSave")
    def test_edit_field_not_allowed(self):
        from django.contrib.admin import site
        exadmin = site._registry[Example1]

        user = self.get_superuser()
        page = create_page('Test', 'col_two.html', 'en', published=True)
        ex1 = Example1(char_1="char_1",
                       char_2="char_2",
                       char_3="char_3",
                       char_4="char_4")
        ex1.save()

        request = self.get_page_request(page, user, edit=True)
        request.GET['edit_fields'] = 'char_3'
        response = exadmin.edit_field(request, ex1.pk, "en")
        self.assertEqual(response.status_code, 400)
        self.assertEqual(response.content.decode('utf8'),
                         'Fields char_3 not editabled in the frontend')
 def test_nested_plugin_escapejs(self):
     """
     Checks #1366 error condition.
     When adding/editing a plugin whose icon_src() method returns a URL
     containing an hyphen, the hyphen is escaped by django escapejs resulting
     in a incorrect URL
     """
     ex = Example1(char_1='one', char_2='two', char_3='tree', char_4='four')
     ex.save()
     ph1 = ex.placeholder
     ###
     # add the test plugin
     ###
     test_plugin = add_plugin(ph1, u"EmptyPlugin", u"en")
     test_plugin.save()
     pl_url = "%sedit-plugin/%s/" % (admin_reverse(
         'placeholderapp_example1_change', args=(ex.pk, )), test_plugin.pk)
     response = self.client.post(pl_url, {})
     self.assertContains(response, "CMS.API.Helpers.onPluginSave")
 def test_placeholder_languages_model(self):
     """
     Checks the retrieval of filled languages for a placeholder in a django
     model
     """
     avail_langs = set([u'en', u'de', u'fr'])
     # Setup instance
     ex = Example1(char_1='one', char_2='two', char_3='tree', char_4='four')
     ex.save()
     ###
     # add the test plugin
     ###
     for lang in avail_langs:
         add_plugin(ex.placeholder, u"EmptyPlugin", lang)
     # reload instance from database
     ex = Example1.objects.get(pk=ex.pk)
     #get languages
     langs = [
         lang['code'] for lang in ex.placeholder.get_filled_languages()
     ]
     self.assertEqual(avail_langs, set(langs))
    def test_instance_method(self):
        user = self.get_staff()
        page = create_page('Test', 'col_two.html', 'en', published=True)
        ex1 = Example1(char_1="char_1",
                       char_2="char_2",
                       char_3="char_3",
                       char_4="char_4")
        ex1.save()
        template_text = '''{% extends "base.html" %}
{% load placeholder_tags %}

{% block content %}
<h1>{% show_editable_model instance "callable_item" %}</h1>
{% endblock content %}
'''
        request = self.get_page_request(page, user, edit=True)
        response = detail_view(request, ex1.pk, template_string=template_text)
        self.assertContains(
            response,
            '<h1><span id="cms_placeholder-model-placeholderapp-%s-%s" class="cms_placeholder-generic">char_1</span></h1>'
            % (ex1.pk, 'callable_item'))