Merge pull request #226 from nephila/feature/knocker_tests
Add knocker tests
This commit is contained in:
commit
98a2eeb299
7 changed files with 111 additions and 37 deletions
|
|
@ -13,7 +13,6 @@ HELPER_SETTINGS = dict(
|
||||||
'filer',
|
'filer',
|
||||||
'parler',
|
'parler',
|
||||||
'meta',
|
'meta',
|
||||||
'meta_mixin',
|
|
||||||
'easy_thumbnails',
|
'easy_thumbnails',
|
||||||
'django.contrib.sitemaps',
|
'django.contrib.sitemaps',
|
||||||
'djangocms_text_ckeditor',
|
'djangocms_text_ckeditor',
|
||||||
|
|
@ -91,7 +90,7 @@ HELPER_SETTINGS = dict(
|
||||||
FILE_UPLOAD_TEMP_DIR=mkdtemp(),
|
FILE_UPLOAD_TEMP_DIR=mkdtemp(),
|
||||||
SITE_ID=1,
|
SITE_ID=1,
|
||||||
HAYSTACK_CONNECTIONS={
|
HAYSTACK_CONNECTIONS={
|
||||||
"default": {}
|
'default': {}
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -110,10 +109,29 @@ try:
|
||||||
except ImportError:
|
except ImportError:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
try:
|
||||||
|
import meta_mixin # pragma: no cover # NOQA
|
||||||
|
HELPER_SETTINGS['INSTALLED_APPS'].append('meta_mixin')
|
||||||
|
except ImportError:
|
||||||
|
pass
|
||||||
|
|
||||||
|
try:
|
||||||
|
import knocker # pragma: no cover # NOQA
|
||||||
|
HELPER_SETTINGS['INSTALLED_APPS'].append('knocker')
|
||||||
|
HELPER_SETTINGS['CHANNEL_LAYERS'] = {
|
||||||
|
'default': {
|
||||||
|
'BACKEND': 'asgiref.inmemory.ChannelLayer',
|
||||||
|
'ROUTING': 'knocker.routing.channel_routing',
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
except ImportError:
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
def run():
|
def run():
|
||||||
from djangocms_helper import runner
|
from djangocms_helper import runner
|
||||||
runner.cms('djangocms_blog')
|
runner.cms('djangocms_blog')
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == '__main__':
|
||||||
run()
|
run()
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,7 @@ from djangocms_text_ckeditor.fields import HTMLField
|
||||||
from filer.fields.image import FilerImageField
|
from filer.fields.image import FilerImageField
|
||||||
from meta_mixin.models import ModelMeta
|
from meta_mixin.models import ModelMeta
|
||||||
from parler.models import TranslatableModel, TranslatedFields
|
from parler.models import TranslatableModel, TranslatedFields
|
||||||
|
from parler.utils.context import switch_language
|
||||||
from taggit_autosuggest.managers import TaggableManager
|
from taggit_autosuggest.managers import TaggableManager
|
||||||
|
|
||||||
from .cms_appconfig import BlogConfig
|
from .cms_appconfig import BlogConfig
|
||||||
|
|
@ -203,22 +204,25 @@ class Post(KnockerModel, ModelMeta, TranslatableModel):
|
||||||
super(Post, self).save_translation(translation, *args, **kwargs)
|
super(Post, self).save_translation(translation, *args, **kwargs)
|
||||||
|
|
||||||
def get_absolute_url(self, lang=None):
|
def get_absolute_url(self, lang=None):
|
||||||
if not lang:
|
if not lang or lang not in self.get_available_languages():
|
||||||
|
lang = self.get_current_language()
|
||||||
|
if not lang or lang not in self.get_available_languages():
|
||||||
lang = get_language()
|
lang = get_language()
|
||||||
category = self.categories.first()
|
with switch_language(self, lang):
|
||||||
kwargs = {}
|
category = self.categories.first()
|
||||||
urlconf = get_setting('PERMALINK_URLS')[self.app_config.url_patterns]
|
kwargs = {}
|
||||||
if '<year>' in urlconf:
|
urlconf = get_setting('PERMALINK_URLS')[self.app_config.url_patterns]
|
||||||
kwargs['year'] = self.date_published.year
|
if '<year>' in urlconf:
|
||||||
if '<month>' in urlconf:
|
kwargs['year'] = self.date_published.year
|
||||||
kwargs['month'] = '%02d' % self.date_published.month
|
if '<month>' in urlconf:
|
||||||
if '<day>' in urlconf:
|
kwargs['month'] = '%02d' % self.date_published.month
|
||||||
kwargs['day'] = '%02d' % self.date_published.day
|
if '<day>' in urlconf:
|
||||||
if '<slug>' in urlconf:
|
kwargs['day'] = '%02d' % self.date_published.day
|
||||||
kwargs['slug'] = self.safe_translation_getter('slug', language_code=lang, any_language=True) # NOQA
|
if '<slug>' in urlconf:
|
||||||
if '<category>' in urlconf:
|
kwargs['slug'] = self.safe_translation_getter('slug', language_code=lang, any_language=True) # NOQA
|
||||||
kwargs['category'] = category.safe_translation_getter('slug', language_code=lang, any_language=True) # NOQA
|
if '<category>' in urlconf:
|
||||||
return reverse('%s:post-detail' % self.app_config.namespace, kwargs=kwargs)
|
kwargs['category'] = category.safe_translation_getter('slug', language_code=lang, any_language=True) # NOQA
|
||||||
|
return reverse('%s:post-detail' % self.app_config.namespace, kwargs=kwargs)
|
||||||
|
|
||||||
def get_meta_attribute(self, param):
|
def get_meta_attribute(self, param):
|
||||||
"""
|
"""
|
||||||
|
|
|
||||||
3
setup.py
3
setup.py
|
|
@ -36,8 +36,7 @@ setup(
|
||||||
'django-taggit-autosuggest',
|
'django-taggit-autosuggest',
|
||||||
'djangocms-text-ckeditor',
|
'djangocms-text-ckeditor',
|
||||||
'cmsplugin-filer',
|
'cmsplugin-filer',
|
||||||
'django-meta>=0.2',
|
'django-meta>=1.1',
|
||||||
'django-meta-mixin>=0.2.1',
|
|
||||||
'aldryn-apphooks-config>=0.2.6',
|
'aldryn-apphooks-config>=0.2.6',
|
||||||
'djangocms-apphook-setup',
|
'djangocms-apphook-setup',
|
||||||
'aldryn-search'
|
'aldryn-search'
|
||||||
|
|
|
||||||
|
|
@ -40,8 +40,8 @@ class MenuTest(BaseTest):
|
||||||
"""
|
"""
|
||||||
Tests if all categories are present in the menu
|
Tests if all categories are present in the menu
|
||||||
"""
|
"""
|
||||||
posts = self.get_posts()
|
|
||||||
pages = self.get_pages()
|
pages = self.get_pages()
|
||||||
|
posts = self.get_posts()
|
||||||
self.reload_urlconf()
|
self.reload_urlconf()
|
||||||
|
|
||||||
for lang in ('en', 'it'):
|
for lang in ('en', 'it'):
|
||||||
|
|
@ -66,8 +66,8 @@ class MenuTest(BaseTest):
|
||||||
"""
|
"""
|
||||||
Tests menu structure based on menu_structure configuration
|
Tests menu structure based on menu_structure configuration
|
||||||
"""
|
"""
|
||||||
posts = self.get_posts()
|
|
||||||
self.get_pages()
|
self.get_pages()
|
||||||
|
posts = self.get_posts()
|
||||||
|
|
||||||
cats_url = {}
|
cats_url = {}
|
||||||
posts_url = {}
|
posts_url = {}
|
||||||
|
|
@ -77,7 +77,7 @@ class MenuTest(BaseTest):
|
||||||
for lang in languages:
|
for lang in languages:
|
||||||
with smart_override(lang):
|
with smart_override(lang):
|
||||||
cats_url[lang] = set([cat.get_absolute_url() for cat in self.cats if cat.has_translation(lang)])
|
cats_url[lang] = set([cat.get_absolute_url() for cat in self.cats if cat.has_translation(lang)])
|
||||||
posts_url[lang] = set([post.get_absolute_url() for post in posts if post.has_translation(lang) and post.app_config == self.app_config_1])
|
posts_url[lang] = set([post.get_absolute_url(lang) for post in posts if post.has_translation(lang) and post.app_config == self.app_config_1])
|
||||||
|
|
||||||
# No item in the menu
|
# No item in the menu
|
||||||
self.app_config_1.app_data.config.menu_structure = MENU_TYPE_NONE
|
self.app_config_1.app_data.config.menu_structure = MENU_TYPE_NONE
|
||||||
|
|
@ -132,8 +132,8 @@ class MenuTest(BaseTest):
|
||||||
Tests if correct category is selected in the menu
|
Tests if correct category is selected in the menu
|
||||||
according to context (view object)
|
according to context (view object)
|
||||||
"""
|
"""
|
||||||
posts = self.get_posts()
|
|
||||||
pages = self.get_pages()
|
pages = self.get_pages()
|
||||||
|
posts = self.get_posts()
|
||||||
|
|
||||||
tests = (
|
tests = (
|
||||||
# view class, view kwarg, view object, category
|
# view class, view kwarg, view object, category
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@
|
||||||
from __future__ import absolute_import, print_function, unicode_literals
|
from __future__ import absolute_import, print_function, unicode_literals
|
||||||
|
|
||||||
import re
|
import re
|
||||||
|
from contextlib import contextmanager
|
||||||
from copy import deepcopy
|
from copy import deepcopy
|
||||||
from datetime import timedelta
|
from datetime import timedelta
|
||||||
|
|
||||||
|
|
@ -19,6 +20,7 @@ from django.utils.html import strip_tags
|
||||||
from django.utils.timezone import now
|
from django.utils.timezone import now
|
||||||
from django.utils.translation import get_language, override
|
from django.utils.translation import get_language, override
|
||||||
from djangocms_helper.utils import CMS_30
|
from djangocms_helper.utils import CMS_30
|
||||||
|
from parler.utils.context import smart_override
|
||||||
from taggit.models import Tag
|
from taggit.models import Tag
|
||||||
|
|
||||||
from djangocms_blog.cms_appconfig import BlogConfig, BlogConfigForm
|
from djangocms_blog.cms_appconfig import BlogConfig, BlogConfigForm
|
||||||
|
|
@ -27,6 +29,18 @@ from djangocms_blog.settings import get_setting
|
||||||
|
|
||||||
from .base import BaseTest
|
from .base import BaseTest
|
||||||
|
|
||||||
|
try:
|
||||||
|
from unittest import SkipTest
|
||||||
|
except ImportError:
|
||||||
|
from django.utils.unittest import SkipTest
|
||||||
|
|
||||||
|
try:
|
||||||
|
from knocker.signals import pause_knocks
|
||||||
|
except ImportError:
|
||||||
|
@contextmanager
|
||||||
|
def pause_knocks(obj):
|
||||||
|
yield
|
||||||
|
|
||||||
|
|
||||||
class AdminTest(BaseTest):
|
class AdminTest(BaseTest):
|
||||||
|
|
||||||
|
|
@ -236,17 +250,18 @@ class AdminTest(BaseTest):
|
||||||
pages = self.get_pages()
|
pages = self.get_pages()
|
||||||
post = self._get_post(self._post_data[0]['en'])
|
post = self._get_post(self._post_data[0]['en'])
|
||||||
|
|
||||||
with self.login_user_context(self.user):
|
with pause_knocks(post):
|
||||||
with self.settings(BLOG_USE_PLACEHOLDER=False):
|
with self.login_user_context(self.user):
|
||||||
data = {'post_text': 'ehi text', 'title': 'some title'}
|
with self.settings(BLOG_USE_PLACEHOLDER=False):
|
||||||
request = self.post_request(pages[0], 'en', user=self.user, data=data, path='/en/?edit_fields=post_text')
|
data = {'post_text': 'ehi text', 'title': 'some title'}
|
||||||
msg_mid = MessageMiddleware()
|
request = self.post_request(pages[0], 'en', user=self.user, data=data, path='/en/?edit_fields=post_text')
|
||||||
msg_mid.process_request(request)
|
msg_mid = MessageMiddleware()
|
||||||
post_admin = admin.site._registry[Post]
|
msg_mid.process_request(request)
|
||||||
response = post_admin.edit_field(request, post.pk, 'en')
|
post_admin = admin.site._registry[Post]
|
||||||
self.assertEqual(response.status_code, 200)
|
response = post_admin.edit_field(request, post.pk, 'en')
|
||||||
modified_post = Post.objects.language('en').get(pk=post.pk)
|
self.assertEqual(response.status_code, 200)
|
||||||
self.assertEqual(modified_post.safe_translation_getter('post_text'), data['post_text'])
|
modified_post = Post.objects.language('en').get(pk=post.pk)
|
||||||
|
self.assertEqual(modified_post.safe_translation_getter('post_text'), data['post_text'])
|
||||||
|
|
||||||
|
|
||||||
class ModelsTest(BaseTest):
|
class ModelsTest(BaseTest):
|
||||||
|
|
@ -416,6 +431,7 @@ class ModelsTest(BaseTest):
|
||||||
self.assertTrue(re.match(r'.*/%s/$' % post.slug, post.get_absolute_url()))
|
self.assertTrue(re.match(r'.*/%s/$' % post.slug, post.get_absolute_url()))
|
||||||
|
|
||||||
def test_manager(self):
|
def test_manager(self):
|
||||||
|
self.get_pages()
|
||||||
post1 = self._get_post(self._post_data[0]['en'])
|
post1 = self._get_post(self._post_data[0]['en'])
|
||||||
post2 = self._get_post(self._post_data[1]['en'])
|
post2 = self._get_post(self._post_data[1]['en'])
|
||||||
|
|
||||||
|
|
@ -595,6 +611,7 @@ class ModelsTest(BaseTest):
|
||||||
self.assertEqual(set(list(Post.objects.all().on_site())), set([post2, post3]))
|
self.assertEqual(set(list(Post.objects.all().on_site())), set([post2, post3]))
|
||||||
|
|
||||||
def test_str_repr(self):
|
def test_str_repr(self):
|
||||||
|
self.get_pages()
|
||||||
post1 = self._get_post(self._post_data[0]['en'])
|
post1 = self._get_post(self._post_data[0]['en'])
|
||||||
post1.meta_description = ''
|
post1.meta_description = ''
|
||||||
post1.main_image = None
|
post1.main_image = None
|
||||||
|
|
@ -615,3 +632,36 @@ class ModelsTest(BaseTest):
|
||||||
|
|
||||||
plugin = add_plugin(post1.content, 'BlogArchivePlugin', language='en', app_config=self.app_config_1)
|
plugin = add_plugin(post1.content, 'BlogArchivePlugin', language='en', app_config=self.app_config_1)
|
||||||
self.assertEqual(force_text(plugin.__str__()), 'generic blog plugin')
|
self.assertEqual(force_text(plugin.__str__()), 'generic blog plugin')
|
||||||
|
|
||||||
|
|
||||||
|
class KnockerTest(BaseTest):
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def setUpClass(cls):
|
||||||
|
try:
|
||||||
|
import knocker
|
||||||
|
super(KnockerTest, cls).setUpClass()
|
||||||
|
except ImportError:
|
||||||
|
raise SkipTest('django-knocker not installed, skipping tests')
|
||||||
|
|
||||||
|
def test_model_attributes(self):
|
||||||
|
self.get_pages()
|
||||||
|
posts = self.get_posts()
|
||||||
|
|
||||||
|
for language in posts[0].get_available_languages():
|
||||||
|
with smart_override(language):
|
||||||
|
posts[0].set_current_language(language)
|
||||||
|
knock_create = posts[0].as_knock(True)
|
||||||
|
self.assertEqual(knock_create['title'],
|
||||||
|
'new {0}'.format(posts[0]._meta.verbose_name))
|
||||||
|
self.assertEqual(knock_create['message'], posts[0].title)
|
||||||
|
self.assertEqual(knock_create['language'], language)
|
||||||
|
|
||||||
|
for language in posts[0].get_available_languages():
|
||||||
|
with smart_override(language):
|
||||||
|
posts[0].set_current_language(language)
|
||||||
|
knock_create = posts[0].as_knock(False)
|
||||||
|
self.assertEqual(knock_create['title'],
|
||||||
|
'new {0}'.format(posts[0]._meta.verbose_name))
|
||||||
|
self.assertEqual(knock_create['message'], posts[0].title)
|
||||||
|
self.assertEqual(knock_create['language'], language)
|
||||||
|
|
|
||||||
|
|
@ -30,6 +30,7 @@ class WizardTest(BaseTest):
|
||||||
except ImportError:
|
except ImportError:
|
||||||
# Not in django CMS 3.2+, no cleanup needed
|
# Not in django CMS 3.2+, no cleanup needed
|
||||||
pass
|
pass
|
||||||
|
super(WizardTest, self).setUp()
|
||||||
|
|
||||||
@skipIf(LooseVersion(cms.__version__) < LooseVersion('3.2'),
|
@skipIf(LooseVersion(cms.__version__) < LooseVersion('3.2'),
|
||||||
reason='Wizards not available for django CMS < 3.2')
|
reason='Wizards not available for django CMS < 3.2')
|
||||||
|
|
|
||||||
6
tox.ini
6
tox.ini
|
|
@ -1,5 +1,5 @@
|
||||||
[tox]
|
[tox]
|
||||||
envlist = pep8,isort,py{35,34,27}-django{19}-cms{32},py{35,34,33,27}-django{18}-cms{32,31},py{34,33,27}-django{17,16}-cms{32,31,30},py{26}-django16-cms{31,30}
|
envlist = pep8,isort,py{35,34,27}-django{19}-{cms32,knocker},py{35,34,33,27}-django{18}-cms{32,31},py{34,33,27}-django{17,16}-cms{32,31,30},py{26}-django16-cms{31,30}
|
||||||
|
|
||||||
[testenv]
|
[testenv]
|
||||||
commands = {env:COMMAND:python} cms_helper.py test djangocms_blog --no-migrate
|
commands = {env:COMMAND:python} cms_helper.py test djangocms_blog --no-migrate
|
||||||
|
|
@ -18,7 +18,9 @@ deps =
|
||||||
cms30: https://github.com/divio/django-cms/archive/support/3.0.x.zip
|
cms30: https://github.com/divio/django-cms/archive/support/3.0.x.zip
|
||||||
cms31: https://github.com/divio/django-cms/archive/support/3.1.x.zip
|
cms31: https://github.com/divio/django-cms/archive/support/3.1.x.zip
|
||||||
cms32: https://github.com/divio/django-cms/archive/release/3.2.x.zip
|
cms32: https://github.com/divio/django-cms/archive/release/3.2.x.zip
|
||||||
https://github.com/nephila/django-meta-mixin/archive/master.zip
|
knocker: https://github.com/divio/django-cms/archive/release/3.2.x.zip
|
||||||
|
knocker: https://github.com/nephila/django-knocker/archive/master.zip?0.1.1
|
||||||
|
django-meta>=1.0b3
|
||||||
https://github.com/nephila/djangocms-helper/archive/develop.zip
|
https://github.com/nephila/djangocms-helper/archive/develop.zip
|
||||||
py26: unittest2
|
py26: unittest2
|
||||||
https://github.com/aldryn/aldryn-apphooks-config/archive/master.zip
|
https://github.com/aldryn/aldryn-apphooks-config/archive/master.zip
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue