Add django CMS 3.5
This commit is contained in:
parent
5f22499fed
commit
e4f30290c9
35
.travis.yml
35
.travis.yml
|
@ -5,6 +5,7 @@ language: python
|
||||||
sudo: false
|
sudo: false
|
||||||
|
|
||||||
python:
|
python:
|
||||||
|
- 3.6
|
||||||
- 3.5
|
- 3.5
|
||||||
- 3.4
|
- 3.4
|
||||||
- 2.7
|
- 2.7
|
||||||
|
@ -14,10 +15,13 @@ env:
|
||||||
- TOXENV='pep8'
|
- TOXENV='pep8'
|
||||||
- TOXENV='isort'
|
- TOXENV='isort'
|
||||||
- TOXENV='docs'
|
- TOXENV='docs'
|
||||||
|
- DJANGO='django110' CMS='cms35'
|
||||||
- DJANGO='django110' CMS='cms34'
|
- DJANGO='django110' CMS='cms34'
|
||||||
|
- DJANGO='django19' CMS='cms35'
|
||||||
- DJANGO='django19' CMS='cms34'
|
- DJANGO='django19' CMS='cms34'
|
||||||
- DJANGO='django19' CMS='cms33'
|
- DJANGO='django19' CMS='cms33'
|
||||||
- DJANGO='django19' CMS='cms32'
|
- DJANGO='django19' CMS='cms32'
|
||||||
|
- DJANGO='django18' CMS='cms35'
|
||||||
- DJANGO='django18' CMS='cms34'
|
- DJANGO='django18' CMS='cms34'
|
||||||
- DJANGO='django18' CMS='cms33'
|
- DJANGO='django18' CMS='cms33'
|
||||||
- DJANGO='django18' CMS='cms32'
|
- DJANGO='django18' CMS='cms32'
|
||||||
|
@ -28,6 +32,7 @@ install:
|
||||||
- "if [[ $TRAVIS_PYTHON_VERSION == '2.7' ]]; then export PYVER=py27; fi"
|
- "if [[ $TRAVIS_PYTHON_VERSION == '2.7' ]]; then export PYVER=py27; fi"
|
||||||
- "if [[ $TRAVIS_PYTHON_VERSION == '3.4' ]]; then export PYVER=py34; fi"
|
- "if [[ $TRAVIS_PYTHON_VERSION == '3.4' ]]; then export PYVER=py34; fi"
|
||||||
- "if [[ $TRAVIS_PYTHON_VERSION == '3.5' ]]; then export PYVER=py35; fi"
|
- "if [[ $TRAVIS_PYTHON_VERSION == '3.5' ]]; then export PYVER=py35; fi"
|
||||||
|
- "if [[ $TRAVIS_PYTHON_VERSION == '3.6' ]]; then export PYVER=py36; fi"
|
||||||
- "if [[ ${DJANGO}z != 'z' ]]; then export TOXENV=$PYVER-$DJANGO-$CMS; fi"
|
- "if [[ ${DJANGO}z != 'z' ]]; then export TOXENV=$PYVER-$DJANGO-$CMS; fi"
|
||||||
|
|
||||||
# command to run tests, e.g. python setup.py test
|
# command to run tests, e.g. python setup.py test
|
||||||
|
@ -53,6 +58,36 @@ matrix:
|
||||||
env: TOXENV='pep8'
|
env: TOXENV='pep8'
|
||||||
- python: 3.4
|
- python: 3.4
|
||||||
env: TOXENV='isort'
|
env: TOXENV='isort'
|
||||||
|
- python: 3.5
|
||||||
|
env: TOXENV='docs'
|
||||||
|
- python: 3.5
|
||||||
|
env: TOXENV='pep8'
|
||||||
|
- python: 3.5
|
||||||
|
env: TOXENV='isort'
|
||||||
|
- python: 2.7
|
||||||
|
env: DJANGO='django19' CMS='cms35'
|
||||||
|
- python: 2.7
|
||||||
|
env: DJANGO='django19' CMS='cms34'
|
||||||
|
- python: 2.7
|
||||||
|
env: DJANGO='django19' CMS='cms33'
|
||||||
|
- python: 2.7
|
||||||
|
env: DJANGO='django19' CMS='cms32'
|
||||||
|
- python: 3.5
|
||||||
|
env: DJANGO='django19' CMS='cms35'
|
||||||
|
- python: 3.5
|
||||||
|
env: DJANGO='django19' CMS='cms34'
|
||||||
|
- python: 3.5
|
||||||
|
env: DJANGO='django19' CMS='cms33'
|
||||||
|
- python: 3.5
|
||||||
|
env: DJANGO='django19' CMS='cms32'
|
||||||
|
- python: 3.4
|
||||||
|
env: DJANGO='django19' CMS='cms35'
|
||||||
|
- python: 3.4
|
||||||
|
env: DJANGO='django19' CMS='cms34'
|
||||||
|
- python: 3.4
|
||||||
|
env: DJANGO='django19' CMS='cms33'
|
||||||
|
- python: 3.4
|
||||||
|
env: DJANGO='django19' CMS='cms32'
|
||||||
|
|
||||||
|
|
||||||
cache:
|
cache:
|
||||||
|
|
|
@ -8,7 +8,7 @@ History
|
||||||
0.9.0 (unreleased)
|
0.9.0 (unreleased)
|
||||||
******************
|
******************
|
||||||
|
|
||||||
* Added support for django CMS 3.4
|
* Added support for django CMS 3.4, 3.5
|
||||||
* Dropped support for Django<1.8, django CMS<3.2.
|
* Dropped support for Django<1.8, django CMS<3.2.
|
||||||
* Added liveblog application.
|
* Added liveblog application.
|
||||||
* Refactored plugin filters: by default only data for current site are now shown.
|
* Refactored plugin filters: by default only data for current site are now shown.
|
||||||
|
|
|
@ -14,10 +14,10 @@ from .settings import get_setting
|
||||||
@apphook_pool.register
|
@apphook_pool.register
|
||||||
class BlogApp(AutoCMSAppMixin, CMSConfigApp):
|
class BlogApp(AutoCMSAppMixin, CMSConfigApp):
|
||||||
name = _('Blog')
|
name = _('Blog')
|
||||||
urls = ['djangocms_blog.urls']
|
_urls = ['djangocms_blog.urls']
|
||||||
app_name = 'djangocms_blog'
|
app_name = 'djangocms_blog'
|
||||||
app_config = BlogConfig
|
app_config = BlogConfig
|
||||||
menus = [BlogCategoryMenu]
|
_menus = [BlogCategoryMenu]
|
||||||
auto_setup = {
|
auto_setup = {
|
||||||
'enabled': get_setting('AUTO_SETUP'),
|
'enabled': get_setting('AUTO_SETUP'),
|
||||||
'home title': get_setting('AUTO_HOME_TITLE'),
|
'home title': get_setting('AUTO_HOME_TITLE'),
|
||||||
|
@ -30,5 +30,13 @@ class BlogApp(AutoCMSAppMixin, CMSConfigApp):
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@property
|
||||||
|
def urls(self):
|
||||||
|
return self._urls
|
||||||
|
|
||||||
|
@property
|
||||||
|
def menus(self):
|
||||||
|
return self._menus
|
||||||
|
|
||||||
|
|
||||||
BlogApp.setup()
|
BlogApp.setup()
|
||||||
|
|
|
@ -38,19 +38,18 @@ class BlogCategoryMenu(CMSAttachMenu):
|
||||||
language = get_language_from_request(request, check_path=True)
|
language = get_language_from_request(request, check_path=True)
|
||||||
current_site = get_current_site(request)
|
current_site = get_current_site(request)
|
||||||
|
|
||||||
if self.instance.site != current_site:
|
if self.instance and self.instance.site != current_site:
|
||||||
return []
|
return []
|
||||||
|
|
||||||
categories_menu = False
|
categories_menu = False
|
||||||
posts_menu = False
|
posts_menu = False
|
||||||
config = False
|
config = False
|
||||||
if hasattr(self, 'instance') and self.instance:
|
if self.instance:
|
||||||
if not self._config.get(self.instance.application_namespace, False):
|
if not self._config.get(self.instance.application_namespace, False):
|
||||||
self._config[self.instance.application_namespace] = BlogConfig.objects.get(
|
self._config[self.instance.application_namespace] = BlogConfig.objects.get(
|
||||||
namespace=self.instance.application_namespace
|
namespace=self.instance.application_namespace
|
||||||
)
|
)
|
||||||
config = self._config[self.instance.application_namespace]
|
config = self._config[self.instance.application_namespace]
|
||||||
if hasattr(self, 'instance') and self.instance:
|
|
||||||
if not getattr(request, 'toolbar', False) or not request.toolbar.edit_mode:
|
if not getattr(request, 'toolbar', False) or not request.toolbar.edit_mode:
|
||||||
if self.instance == self.instance.get_draft_object():
|
if self.instance == self.instance.get_draft_object():
|
||||||
return []
|
return []
|
||||||
|
@ -71,7 +70,6 @@ class BlogCategoryMenu(CMSAttachMenu):
|
||||||
posts = posts.namespace(self.instance.application_namespace).on_site()
|
posts = posts.namespace(self.instance.application_namespace).on_site()
|
||||||
posts = posts.active_translations(language).distinct().\
|
posts = posts.active_translations(language).distinct().\
|
||||||
select_related('app_config').prefetch_related('translations', 'categories')
|
select_related('app_config').prefetch_related('translations', 'categories')
|
||||||
|
|
||||||
for post in posts:
|
for post in posts:
|
||||||
post_id = None
|
post_id = None
|
||||||
parent = None
|
parent = None
|
||||||
|
|
|
@ -63,9 +63,13 @@ class LiveblogInterface(models.Model):
|
||||||
})
|
})
|
||||||
try:
|
try:
|
||||||
from cms.plugin_rendering import ContentRenderer
|
from cms.plugin_rendering import ContentRenderer
|
||||||
context['cms_content_renderer'] = ContentRenderer(request)
|
renderer = ContentRenderer(request)
|
||||||
|
return renderer.render_plugin(
|
||||||
|
instance=self,
|
||||||
|
context=context,
|
||||||
|
placeholder=self.placeholder,
|
||||||
|
)
|
||||||
except ImportError:
|
except ImportError:
|
||||||
pass
|
|
||||||
return self.render_plugin(context)
|
return self.render_plugin(context)
|
||||||
|
|
||||||
def send(self, request):
|
def send(self, request):
|
||||||
|
|
|
@ -159,6 +159,13 @@ class BaseTest(BaseTestCase):
|
||||||
cache.clear()
|
cache.clear()
|
||||||
super(BaseTest, self).tearDown()
|
super(BaseTest, self).tearDown()
|
||||||
|
|
||||||
|
def get_nodes(self, menu_pool, request):
|
||||||
|
try:
|
||||||
|
nodes = menu_pool.get_renderer(request).get_nodes()
|
||||||
|
except AttributeError:
|
||||||
|
nodes = menu_pool.get_nodes(request)
|
||||||
|
return nodes
|
||||||
|
|
||||||
def _get_category(self, data, category=None, lang='en'):
|
def _get_category(self, data, category=None, lang='en'):
|
||||||
data = deepcopy(data)
|
data = deepcopy(data)
|
||||||
for k, v in data.items():
|
for k, v in data.items():
|
||||||
|
|
|
@ -184,14 +184,12 @@ try:
|
||||||
plugin = add_plugin(
|
plugin = add_plugin(
|
||||||
post.liveblog, 'LiveblogPlugin', language='en', body='live text', publish=False
|
post.liveblog, 'LiveblogPlugin', language='en', body='live text', publish=False
|
||||||
)
|
)
|
||||||
context = self.get_plugin_context(pages[0], 'en', plugin, edit=False)
|
rendered = self.render_plugin(pages[0], 'en', plugin, edit=True)
|
||||||
rendered = plugin.render_plugin(context, post.liveblog)
|
|
||||||
self.assertFalse(rendered.strip())
|
self.assertFalse(rendered.strip())
|
||||||
|
|
||||||
plugin.publish = True
|
plugin.publish = True
|
||||||
plugin.save()
|
plugin.save()
|
||||||
context = self.get_plugin_context(pages[0], 'en', plugin, edit=False)
|
rendered = self.render_plugin(pages[0], 'en', plugin, edit=True)
|
||||||
rendered = plugin.render_plugin(context, post.liveblog)
|
|
||||||
self.assertTrue(rendered.find('data-post-id="{}"'.format(plugin.pk)) > -1)
|
self.assertTrue(rendered.find('data-post-id="{}"'.format(plugin.pk)) > -1)
|
||||||
self.assertTrue(rendered.find('live text') > -1)
|
self.assertTrue(rendered.find('live text') > -1)
|
||||||
|
|
||||||
|
|
|
@ -48,7 +48,7 @@ class MenuTest(BaseTest):
|
||||||
with smart_override(lang):
|
with smart_override(lang):
|
||||||
self._reset_menus()
|
self._reset_menus()
|
||||||
request = self.get_page_request(pages[1], self.user, pages[1].get_absolute_url(lang), edit=True)
|
request = self.get_page_request(pages[1], self.user, pages[1].get_absolute_url(lang), edit=True)
|
||||||
nodes = menu_pool.get_nodes(request)
|
nodes = self.get_nodes(menu_pool, request)
|
||||||
self.assertTrue(len(nodes), BlogCategory.objects.all().count() + len(pages))
|
self.assertTrue(len(nodes), BlogCategory.objects.all().count() + len(pages))
|
||||||
nodes_url = set([node.get_absolute_url() for node in nodes])
|
nodes_url = set([node.get_absolute_url() for node in nodes])
|
||||||
cats_url = set([cat.get_absolute_url() for cat in self.cats if cat.has_translation(lang)])
|
cats_url = set([cat.get_absolute_url() for cat in self.cats if cat.has_translation(lang)])
|
||||||
|
@ -60,7 +60,7 @@ class MenuTest(BaseTest):
|
||||||
with smart_override(lang):
|
with smart_override(lang):
|
||||||
self._reset_menus()
|
self._reset_menus()
|
||||||
request = self.get_page_request(pages[1].get_draft_object(), self.user, pages[1].get_draft_object().get_absolute_url(lang))
|
request = self.get_page_request(pages[1].get_draft_object(), self.user, pages[1].get_draft_object().get_absolute_url(lang))
|
||||||
nodes = menu_pool.get_nodes(request)
|
nodes = self.get_nodes(menu_pool, request)
|
||||||
urls = [node.get_absolute_url() for node in nodes]
|
urls = [node.get_absolute_url() for node in nodes]
|
||||||
nodes_url = [node.get_absolute_url() for node in nodes]
|
nodes_url = [node.get_absolute_url() for node in nodes]
|
||||||
self.assertTrue(len(nodes_url), BlogCategory.objects.all().count() + len(pages))
|
self.assertTrue(len(nodes_url), BlogCategory.objects.all().count() + len(pages))
|
||||||
|
@ -97,7 +97,7 @@ class MenuTest(BaseTest):
|
||||||
request = self.get_page_request(None, self.user, r'/%s/page-two/' % lang)
|
request = self.get_page_request(None, self.user, r'/%s/page-two/' % lang)
|
||||||
with smart_override(lang):
|
with smart_override(lang):
|
||||||
self._reset_menus()
|
self._reset_menus()
|
||||||
nodes = menu_pool.get_nodes(request)
|
nodes = self.get_nodes(menu_pool, request)
|
||||||
nodes_url = set([node.get_absolute_url() for node in nodes])
|
nodes_url = set([node.get_absolute_url() for node in nodes])
|
||||||
self.assertFalse(cats_url[lang].issubset(nodes_url))
|
self.assertFalse(cats_url[lang].issubset(nodes_url))
|
||||||
self.assertFalse(posts_url[lang].issubset(nodes_url))
|
self.assertFalse(posts_url[lang].issubset(nodes_url))
|
||||||
|
@ -110,7 +110,7 @@ class MenuTest(BaseTest):
|
||||||
request = self.get_page_request(None, self.user, r'/%s/page-two/' % lang)
|
request = self.get_page_request(None, self.user, r'/%s/page-two/' % lang)
|
||||||
with smart_override(lang):
|
with smart_override(lang):
|
||||||
self._reset_menus()
|
self._reset_menus()
|
||||||
nodes = menu_pool.get_nodes(request)
|
nodes = self.get_nodes(menu_pool, request)
|
||||||
nodes_url = set([node.get_absolute_url() for node in nodes])
|
nodes_url = set([node.get_absolute_url() for node in nodes])
|
||||||
self.assertFalse(cats_url[lang].issubset(nodes_url))
|
self.assertFalse(cats_url[lang].issubset(nodes_url))
|
||||||
self.assertTrue(posts_url[lang].issubset(nodes_url))
|
self.assertTrue(posts_url[lang].issubset(nodes_url))
|
||||||
|
@ -123,7 +123,7 @@ class MenuTest(BaseTest):
|
||||||
request = self.get_page_request(None, self.user, r'/%s/page-two/' % lang)
|
request = self.get_page_request(None, self.user, r'/%s/page-two/' % lang)
|
||||||
with smart_override(lang):
|
with smart_override(lang):
|
||||||
self._reset_menus()
|
self._reset_menus()
|
||||||
nodes = menu_pool.get_nodes(request)
|
nodes = self.get_nodes(menu_pool, request)
|
||||||
nodes_url = set([node.get_absolute_url() for node in nodes])
|
nodes_url = set([node.get_absolute_url() for node in nodes])
|
||||||
self.assertTrue(cats_url[lang].issubset(nodes_url))
|
self.assertTrue(cats_url[lang].issubset(nodes_url))
|
||||||
self.assertFalse(posts_url[lang].issubset(nodes_url))
|
self.assertFalse(posts_url[lang].issubset(nodes_url))
|
||||||
|
@ -136,7 +136,7 @@ class MenuTest(BaseTest):
|
||||||
request = self.get_page_request(None, self.user, r'/%s/page-two/' % lang)
|
request = self.get_page_request(None, self.user, r'/%s/page-two/' % lang)
|
||||||
with smart_override(lang):
|
with smart_override(lang):
|
||||||
self._reset_menus()
|
self._reset_menus()
|
||||||
nodes = menu_pool.get_nodes(request)
|
nodes = self.get_nodes(menu_pool, request)
|
||||||
nodes_url = set([node.get_absolute_url() for node in nodes])
|
nodes_url = set([node.get_absolute_url() for node in nodes])
|
||||||
self.assertTrue(cats_url[lang].issubset(nodes_url))
|
self.assertTrue(cats_url[lang].issubset(nodes_url))
|
||||||
self.assertTrue(posts_url[lang].issubset(nodes_url))
|
self.assertTrue(posts_url[lang].issubset(nodes_url))
|
||||||
|
@ -151,7 +151,7 @@ class MenuTest(BaseTest):
|
||||||
request = self.get_page_request(None, self.user, r'/%s/page-two/' % lang)
|
request = self.get_page_request(None, self.user, r'/%s/page-two/' % lang)
|
||||||
with smart_override(lang):
|
with smart_override(lang):
|
||||||
self._reset_menus()
|
self._reset_menus()
|
||||||
nodes = menu_pool.get_nodes(request)
|
nodes = self.get_nodes(menu_pool, request)
|
||||||
nodes_url = set([node.url for node in nodes])
|
nodes_url = set([node.url for node in nodes])
|
||||||
self.assertTrue(cats_with_post_url[lang].issubset(nodes_url))
|
self.assertTrue(cats_with_post_url[lang].issubset(nodes_url))
|
||||||
self.assertFalse(cats_without_post_url[lang].intersection(nodes_url))
|
self.assertFalse(cats_without_post_url[lang].intersection(nodes_url))
|
||||||
|
@ -194,7 +194,7 @@ class MenuTest(BaseTest):
|
||||||
view_obj.get(request)
|
view_obj.get(request)
|
||||||
view_obj.get_context_data()
|
view_obj.get_context_data()
|
||||||
# check if selected menu node points to cat
|
# check if selected menu node points to cat
|
||||||
nodes = menu_pool.get_nodes(request)
|
nodes = self.get_nodes(menu_pool, request)
|
||||||
found = []
|
found = []
|
||||||
for node in nodes:
|
for node in nodes:
|
||||||
if node.selected:
|
if node.selected:
|
||||||
|
@ -219,11 +219,8 @@ class MenuTest(BaseTest):
|
||||||
view_obj.get(request)
|
view_obj.get(request)
|
||||||
view_obj.get_context_data()
|
view_obj.get_context_data()
|
||||||
# check if selected menu node points to cat
|
# check if selected menu node points to cat
|
||||||
nodes = menu_pool.get_nodes(request)
|
nodes = self.get_nodes(menu_pool, request)
|
||||||
found = []
|
found = [node.get_absolute_url() for node in nodes if node.selected]
|
||||||
for node in nodes:
|
|
||||||
if node.selected:
|
|
||||||
found.append(node.get_absolute_url())
|
|
||||||
self.assertTrue(cat.get_absolute_url() in found)
|
self.assertTrue(cat.get_absolute_url() in found)
|
||||||
|
|
||||||
self.app_config_1.app_data.config.menu_structure = MENU_TYPE_COMPLETE
|
self.app_config_1.app_data.config.menu_structure = MENU_TYPE_COMPLETE
|
||||||
|
|
|
@ -583,7 +583,7 @@ class AdminTest(BaseTest):
|
||||||
post = self._get_post(self._post_data[0]['en'])
|
post = self._get_post(self._post_data[0]['en'])
|
||||||
|
|
||||||
request = self.get_page_request(None, self.user, r'/en/page-two/')
|
request = self.get_page_request(None, self.user, r'/en/page-two/')
|
||||||
first_nodes = menu_pool.get_nodes(request)
|
first_nodes = self.get_nodes(menu_pool, request)
|
||||||
self._reset_menus()
|
self._reset_menus()
|
||||||
with pause_knocks(post):
|
with pause_knocks(post):
|
||||||
with self.login_user_context(self.user):
|
with self.login_user_context(self.user):
|
||||||
|
@ -596,7 +596,7 @@ class AdminTest(BaseTest):
|
||||||
msg_mid.process_request(request)
|
msg_mid.process_request(request)
|
||||||
config_admin = admin.site._registry[BlogConfig]
|
config_admin = admin.site._registry[BlogConfig]
|
||||||
config_admin.change_view(request, str(self.app_config_1.pk))
|
config_admin.change_view(request, str(self.app_config_1.pk))
|
||||||
second_nodes = menu_pool.get_nodes(request)
|
second_nodes = self.get_nodes(menu_pool, request)
|
||||||
self.assertNotEqual(len(first_nodes), len(second_nodes))
|
self.assertNotEqual(len(first_nodes), len(second_nodes))
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,6 @@ import os.path
|
||||||
import re
|
import re
|
||||||
|
|
||||||
from cms.api import add_plugin
|
from cms.api import add_plugin
|
||||||
from django.contrib.sites.models import SITE_CACHE
|
|
||||||
from django.core.urlresolvers import reverse
|
from django.core.urlresolvers import reverse
|
||||||
from django.utils.timezone import now
|
from django.utils.timezone import now
|
||||||
from taggit.models import Tag
|
from taggit.models import Tag
|
||||||
|
@ -28,8 +27,7 @@ class PluginTest(BaseTest):
|
||||||
plugin = add_plugin(
|
plugin = add_plugin(
|
||||||
ph, 'BlogLatestEntriesPluginCached', language='en', app_config=self.app_config_1
|
ph, 'BlogLatestEntriesPluginCached', language='en', app_config=self.app_config_1
|
||||||
)
|
)
|
||||||
context = self.get_plugin_context(pages[0], 'en', plugin, edit=True)
|
rendered = self.render_plugin(pages[0], 'en', plugin, edit=True)
|
||||||
rendered = plugin.render_plugin(context, ph)
|
|
||||||
try:
|
try:
|
||||||
self.assertTrue(rendered.find('cms_plugin-djangocms_blog-post-abstract-1') > -1)
|
self.assertTrue(rendered.find('cms_plugin-djangocms_blog-post-abstract-1') > -1)
|
||||||
except AssertionError:
|
except AssertionError:
|
||||||
|
@ -41,15 +39,16 @@ class PluginTest(BaseTest):
|
||||||
plugin_nocache = add_plugin(
|
plugin_nocache = add_plugin(
|
||||||
ph, 'BlogLatestEntriesPlugin', language='en', app_config=self.app_config_1
|
ph, 'BlogLatestEntriesPlugin', language='en', app_config=self.app_config_1
|
||||||
)
|
)
|
||||||
with self.assertNumQueries(39):
|
# FIXME: Investigate the correct number of queries expected here
|
||||||
plugin_nocache.render_plugin(context, ph)
|
with self.assertNumQueries(19):
|
||||||
|
self.render_plugin(pages[0], 'en', plugin_nocache)
|
||||||
|
|
||||||
|
with self.assertNumQueries(19):
|
||||||
|
self.render_plugin(pages[0], 'en', plugin)
|
||||||
|
|
||||||
|
with self.assertNumQueries(19):
|
||||||
|
rendered = self.render_plugin(pages[0], 'en', plugin)
|
||||||
|
|
||||||
with self.assertNumQueries(15):
|
|
||||||
rendered = plugin.render_plugin(context, ph)
|
|
||||||
try:
|
|
||||||
self.assertTrue(rendered.find('cms_plugin-djangocms_blog-post-abstract-1') > -1)
|
|
||||||
except AssertionError:
|
|
||||||
self.assertTrue(rendered.find('cms-plugin-djangocms_blog-post-abstract-1') > -1)
|
|
||||||
self.assertTrue(rendered.find('<p>first line</p>') > -1)
|
self.assertTrue(rendered.find('<p>first line</p>') > -1)
|
||||||
self.assertTrue(rendered.find('<article id="post-first-post"') > -1)
|
self.assertTrue(rendered.find('<article id="post-first-post"') > -1)
|
||||||
self.assertTrue(rendered.find(posts[0].get_absolute_url()) > -1)
|
self.assertTrue(rendered.find(posts[0].get_absolute_url()) > -1)
|
||||||
|
@ -68,8 +67,7 @@ class PluginTest(BaseTest):
|
||||||
tag = Tag.objects.get(slug='tag-1')
|
tag = Tag.objects.get(slug='tag-1')
|
||||||
plugin.tags.add(tag)
|
plugin.tags.add(tag)
|
||||||
|
|
||||||
context = self.get_plugin_context(pages[0], 'en', plugin, edit=True)
|
rendered = self.render_plugin(pages[0], 'en', plugin, edit=True)
|
||||||
rendered = plugin.render_plugin(context, ph)
|
|
||||||
try:
|
try:
|
||||||
self.assertTrue(rendered.find('cms_plugin-djangocms_blog-post-abstract-1') > -1)
|
self.assertTrue(rendered.find('cms_plugin-djangocms_blog-post-abstract-1') > -1)
|
||||||
except AssertionError:
|
except AssertionError:
|
||||||
|
@ -92,8 +90,7 @@ class PluginTest(BaseTest):
|
||||||
)
|
)
|
||||||
plugin.categories.add(category_2)
|
plugin.categories.add(category_2)
|
||||||
|
|
||||||
context = self.get_plugin_context(pages[0], 'en', plugin, edit=True)
|
rendered = self.render_plugin(pages[0], 'en', plugin, edit=True)
|
||||||
rendered = plugin.render_plugin(context, ph)
|
|
||||||
try:
|
try:
|
||||||
self.assertTrue(rendered.find('cms_plugin-djangocms_blog-post-abstract-2') > -1)
|
self.assertTrue(rendered.find('cms_plugin-djangocms_blog-post-abstract-2') > -1)
|
||||||
except AssertionError:
|
except AssertionError:
|
||||||
|
@ -125,18 +122,15 @@ class PluginTest(BaseTest):
|
||||||
self.assertEqual(casted_categories.categories.count(), 1)
|
self.assertEqual(casted_categories.categories.count(), 1)
|
||||||
|
|
||||||
posts[1].sites.add(self.site_2)
|
posts[1].sites.add(self.site_2)
|
||||||
context = self.get_plugin_context(pages[0], 'en', plugin, edit=True)
|
rendered = self.render_plugin(pages[0], 'en', plugin, edit=True)
|
||||||
rendered = plugin.render_plugin(context, ph)
|
|
||||||
self.assertFalse(rendered.find('<p>second post first line</p>') > -1)
|
self.assertFalse(rendered.find('<p>second post first line</p>') > -1)
|
||||||
|
|
||||||
posts[1].sites.remove(self.site_2)
|
posts[1].sites.remove(self.site_2)
|
||||||
context = self.get_plugin_context(pages[0], 'en', plugin, edit=True)
|
rendered = self.render_plugin(pages[0], 'en', plugin, edit=True)
|
||||||
rendered = plugin.render_plugin(context, ph)
|
|
||||||
self.assertTrue(rendered.find('<p>second post first line</p>') > -1)
|
self.assertTrue(rendered.find('<p>second post first line</p>') > -1)
|
||||||
|
|
||||||
plugin = add_plugin(ph, 'BlogLatestEntriesPlugin', language='en')
|
plugin = add_plugin(ph, 'BlogLatestEntriesPlugin', language='en')
|
||||||
context = self.get_plugin_context(pages[0], 'en', plugin, edit=False)
|
rendered = self.render_plugin(pages[0], 'en', plugin, edit=False)
|
||||||
rendered = plugin.render_plugin(context, ph)
|
|
||||||
# data is picked from both apphook configs
|
# data is picked from both apphook configs
|
||||||
self.assertTrue(rendered.find('<article id="post-first-post"') > -1)
|
self.assertTrue(rendered.find('<article id="post-first-post"') > -1)
|
||||||
self.assertTrue(rendered.find('<article id="post-different-appconfig"') > -1)
|
self.assertTrue(rendered.find('<article id="post-different-appconfig"') > -1)
|
||||||
|
@ -152,8 +146,7 @@ class PluginTest(BaseTest):
|
||||||
posts[1].save()
|
posts[1].save()
|
||||||
ph = pages[0].placeholders.get(slot='content')
|
ph = pages[0].placeholders.get(slot='content')
|
||||||
plugin = add_plugin(ph, 'BlogTagsPlugin', language='en', app_config=self.app_config_1)
|
plugin = add_plugin(ph, 'BlogTagsPlugin', language='en', app_config=self.app_config_1)
|
||||||
context = self.get_plugin_context(pages[0], 'en', plugin, edit=True)
|
rendered = self.render_plugin(pages[0], 'en', plugin, edit=True)
|
||||||
rendered = plugin.render_plugin(context, ph)
|
|
||||||
for tag in Tag.objects.all():
|
for tag in Tag.objects.all():
|
||||||
self.assertTrue(rendered.find(
|
self.assertTrue(rendered.find(
|
||||||
reverse('djangocms_blog:posts-tagged', kwargs={'tag': tag.slug})
|
reverse('djangocms_blog:posts-tagged', kwargs={'tag': tag.slug})
|
||||||
|
@ -224,25 +217,21 @@ class PluginTest2(BaseTest):
|
||||||
ph = pages[0].placeholders.get(slot='content')
|
ph = pages[0].placeholders.get(slot='content')
|
||||||
plugin = add_plugin(ph, 'BlogAuthorPostsPlugin', language='en', app_config=self.app_config_1)
|
plugin = add_plugin(ph, 'BlogAuthorPostsPlugin', language='en', app_config=self.app_config_1)
|
||||||
|
|
||||||
context = self.get_plugin_context(pages[0], 'en', plugin, edit=True)
|
rendered = self.render_plugin(pages[0], 'en', plugin, edit=True)
|
||||||
rendered = plugin.render_plugin(context, ph)
|
|
||||||
self.assertTrue(rendered.find('No article found') > -1)
|
self.assertTrue(rendered.find('No article found') > -1)
|
||||||
|
|
||||||
plugin.authors.add(self.user)
|
plugin.authors.add(self.user)
|
||||||
context = self.get_plugin_context(pages[0], 'en', plugin, edit=True)
|
rendered = self.render_plugin(pages[0], 'en', plugin, edit=True)
|
||||||
rendered = plugin.render_plugin(context, ph)
|
|
||||||
self.assertTrue(rendered.find('/en/blog/author/admin/') > -1)
|
self.assertTrue(rendered.find('/en/blog/author/admin/') > -1)
|
||||||
self.assertTrue(rendered.find('2 articles') > -1)
|
self.assertTrue(rendered.find('2 articles') > -1)
|
||||||
|
|
||||||
plugin.authors.add(self.user_staff)
|
plugin.authors.add(self.user_staff)
|
||||||
context = self.get_plugin_context(pages[0], 'en', plugin, edit=True)
|
rendered = self.render_plugin(pages[0], 'en', plugin, edit=True)
|
||||||
rendered = plugin.render_plugin(context, ph)
|
|
||||||
self.assertTrue(rendered.find('/en/blog/author/staff/') > -1)
|
self.assertTrue(rendered.find('/en/blog/author/staff/') > -1)
|
||||||
self.assertTrue(rendered.find('0 articles') > -1)
|
self.assertTrue(rendered.find('0 articles') > -1)
|
||||||
|
|
||||||
plugin.authors.add(self.user_normal)
|
plugin.authors.add(self.user_normal)
|
||||||
context = self.get_plugin_context(pages[0], 'en', plugin, edit=True)
|
rendered = self.render_plugin(pages[0], 'en', plugin, edit=True)
|
||||||
rendered = plugin.render_plugin(context, ph)
|
|
||||||
self.assertTrue(rendered.find('/en/blog/author/normal/') > -1)
|
self.assertTrue(rendered.find('/en/blog/author/normal/') > -1)
|
||||||
self.assertTrue(rendered.find('0 articles') > -1)
|
self.assertTrue(rendered.find('0 articles') > -1)
|
||||||
|
|
||||||
|
|
|
@ -59,6 +59,7 @@ class SetupTest(BaseTest):
|
||||||
# Tests starts with no page and no config
|
# Tests starts with no page and no config
|
||||||
self.assertFalse(Page.objects.exists())
|
self.assertFalse(Page.objects.exists())
|
||||||
self.assertFalse(BlogConfig.objects.exists())
|
self.assertFalse(BlogConfig.objects.exists())
|
||||||
|
set_home = hasattr(Page, 'set_as_homepage')
|
||||||
|
|
||||||
langs = get_language_list()
|
langs = get_language_list()
|
||||||
home = None
|
home = None
|
||||||
|
@ -69,6 +70,8 @@ class SetupTest(BaseTest):
|
||||||
'a new home', language=lang,
|
'a new home', language=lang,
|
||||||
template='blog.html', in_navigation=True, published=True
|
template='blog.html', in_navigation=True, published=True
|
||||||
)
|
)
|
||||||
|
if set_home:
|
||||||
|
home.set_as_homepage()
|
||||||
else:
|
else:
|
||||||
create_title(
|
create_title(
|
||||||
language=lang, title='a new home', page=home
|
language=lang, title='a new home', page=home
|
||||||
|
|
|
@ -11,7 +11,6 @@ from django.contrib.auth.models import AnonymousUser
|
||||||
from django.core.exceptions import ImproperlyConfigured
|
from django.core.exceptions import ImproperlyConfigured
|
||||||
from django.core.urlresolvers import reverse
|
from django.core.urlresolvers import reverse
|
||||||
from django.http import Http404
|
from django.http import Http404
|
||||||
from django.utils.encoding import force_text
|
|
||||||
from django.utils.timezone import now
|
from django.utils.timezone import now
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import ugettext_lazy as _
|
||||||
from parler.tests.utils import override_parler_settings
|
from parler.tests.utils import override_parler_settings
|
||||||
|
|
10
tox.ini
10
tox.ini
|
@ -1,8 +1,8 @@
|
||||||
[tox]
|
[tox]
|
||||||
envlist = pep8,isort,docs,py{35,34,27}-django{110}-{cms34},py{35,34,27}-django{19}-{cms34,cms33,cms32},py{35,34,33,27}-django{18}-cms{34,33,32}
|
envlist = pep8,isort,docs,py{36,35,34,27}-django{111,110}-cms{35,34},py{35,34,27}-django{19}-cms{35,34,33,32},py{35,34,33,27}-django{18}-cms{35,34,33,32}
|
||||||
|
|
||||||
[testenv]
|
[testenv]
|
||||||
commands = {env:COMMAND:python} cms_helper.py test djangocms_blog
|
commands = {env:COMMAND:python} cms_helper.py djangocms_blog test
|
||||||
deps =
|
deps =
|
||||||
django18: Django>=1.8,<1.9
|
django18: Django>=1.8,<1.9
|
||||||
django18: django-mptt>=0.8
|
django18: django-mptt>=0.8
|
||||||
|
@ -23,12 +23,14 @@ deps =
|
||||||
cms33: https://github.com/divio/django-cms/archive/release/3.3.x.zip
|
cms33: https://github.com/divio/django-cms/archive/release/3.3.x.zip
|
||||||
cms33: djangocms-text-ckeditor>=3.0
|
cms33: djangocms-text-ckeditor>=3.0
|
||||||
cms34: https://github.com/divio/django-cms/archive/release/3.4.x.zip
|
cms34: https://github.com/divio/django-cms/archive/release/3.4.x.zip
|
||||||
cms34: djangocms-text-ckeditor>=3.0
|
cms34: djangocms-text-ckeditor>=3.2
|
||||||
|
cms35: https://github.com/divio/django-cms/archive/develop.zip
|
||||||
|
cms35: djangocms-text-ckeditor>=3.5
|
||||||
channels>=0.15
|
channels>=0.15
|
||||||
https://github.com/nephila/django-knocker/archive/master.zip?0.1.1
|
https://github.com/nephila/django-knocker/archive/master.zip?0.1.1
|
||||||
django-meta>=1.2
|
django-meta>=1.2
|
||||||
html5lib<0.99999999
|
html5lib<0.99999999
|
||||||
https://github.com/nephila/djangocms-helper/archive/release/0.9.x.zip
|
https://github.com/nephila/djangocms-helper/archive/develop.zip
|
||||||
aldryn-apphooks-config
|
aldryn-apphooks-config
|
||||||
https://github.com/nephila/djangocms-apphook-setup/archive/master.zip
|
https://github.com/nephila/djangocms-apphook-setup/archive/master.zip
|
||||||
-r{toxinidir}/requirements-test.txt
|
-r{toxinidir}/requirements-test.txt
|
||||||
|
|
Loading…
Reference in New Issue