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')))
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)
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')
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")
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)
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 )
def _create_example(self): ex = Example1( char_1='one', char_2='two', char_3='tree', char_4='four' ) ex.save() self._placeholder = ex.placeholder
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")
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")
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'))
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'))