djangocms_blog/tests/__init__.py

189 lines
7.8 KiB
Python
Raw Normal View History

2014-06-08 22:06:01 +00:00
# -*- coding: utf-8 -*-
"""
Tests for `djangocms_blog` module.
"""
2015-09-12 22:46:05 +00:00
from __future__ import absolute_import, print_function, unicode_literals
2015-09-07 07:23:23 +00:00
2015-09-19 23:11:14 +00:00
from copy import deepcopy
2014-06-20 16:28:06 +00:00
2014-06-09 22:11:48 +00:00
from cmsplugin_filer_image.models import ThumbnailOption
2014-09-04 07:17:03 +00:00
from django.contrib.auth import get_user_model
2014-10-05 06:25:18 +00:00
from django.contrib.sites.models import Site
from djangocms_helper.base_test import BaseTestCase
2015-09-07 07:23:23 +00:00
from parler.utils.context import smart_override
2014-06-08 22:06:01 +00:00
2015-09-07 07:23:23 +00:00
from djangocms_blog.cms_appconfig import BlogConfig
2014-10-05 06:25:18 +00:00
from djangocms_blog.models import BlogCategory, Post
2014-09-04 07:17:03 +00:00
User = get_user_model()
2014-06-09 22:11:48 +00:00
2015-07-21 04:59:23 +00:00
2015-07-20 12:31:59 +00:00
def _get_cat_pk(lang, name):
return lambda: BlogCategory.objects.translated(lang, name=name).get().pk
2014-06-08 22:06:01 +00:00
class BaseTest(BaseTestCase):
2014-06-08 22:06:01 +00:00
"""
Base class with utility function
"""
2014-06-09 22:11:48 +00:00
category_1 = None
thumb_1 = None
thumb_2 = None
_pages_data = (
{'en': {'title': 'page one', 'template': 'blog.html', 'publish': True},
'fr': {'title': 'page un', 'publish': True},
'it': {'title': 'pagina uno', 'publish': True}},
{'en': {'title': 'page two', 'template': 'blog.html', 'publish': True,
2015-09-19 23:11:14 +00:00
'apphook': 'BlogApp', 'apphook_namespace': 'sample_app'},
'fr': {'title': 'page deux', 'publish': True},
'it': {'title': 'pagina due', 'publish': True}},
{'en': {'title': 'page three', 'template': 'blog.html', 'publish': True,
2015-09-19 23:11:14 +00:00
'apphook': 'BlogApp', 'apphook_namespace': 'sample_app2'},
'fr': {'title': 'page trois', 'publish': True},
'it': {'title': 'pagina tre', 'publish': True}},
)
2015-09-19 23:11:14 +00:00
_post_data = (
{'en': {'title': 'First post', 'abstract': '<p>first line</p>',
'description': 'This is the description', 'keywords': 'keyword1, keyword2',
'text': 'Post text', 'app_config': 'sample_app', 'publish': True},
'it': {'title': 'Primo post', 'abstract': '<p>prima riga</p>',
'description': 'Questa è la descrizione', 'keywords': 'keyword1, keyword2',
'text': 'Testo del post'},
},
{'en': {'title': 'Second post', 'abstract': '<p>second post first line</p>',
'description': 'Second post description', 'keywords': 'keyword3, keyword4',
'text': 'Second post text', 'app_config': 'sample_app', 'publish': False},
'it': {'title': 'Secondo post', 'abstract': '<p>prima riga del secondo post</p>',
'description': 'Descrizione del secondo post', 'keywords': 'keyword3, keyword4',
'text': 'Testo del secondo post', 'app_config': 'sample_app'},
},
{'en': {'title': 'Third post', 'abstract': '<p>third post first line</p>',
'description': 'third post description', 'keywords': 'keyword5, keyword6',
'text': 'Third post text', 'app_config': 'sample_app', 'publish': False},
'it': {'title': 'Terzo post', 'abstract': '<p>prima riga del terzo post</p>',
'description': 'Descrizione del terzo post', 'keywords': 'keyword5, keyword6',
'text': 'Testo del terzo post'},
},
{'en': {'title': 'Different appconfig', 'abstract': '<p>Different appconfig first line</p>',
'description': 'Different appconfig description', 'keywords': 'keyword5, keyword6',
'text': 'Different appconfig text', 'app_config': 'sample_app2', 'publish': True},
'it': {'title': 'Altro appconfig', 'abstract': '<p>prima riga del Altro appconfig</p>',
'description': 'Descrizione Altro appconfig', 'keywords': 'keyword5, keyword6',
'text': 'Testo del Altro appconfig'},
},
)
_categories_data = (
{'en': {'name': 'Very loud', 'app_config': 'sample_app'},
'it': {'name': 'Fortissimo'},
},
{'en': {'name': 'Very very silent', 'app_config': 'sample_app'},
'it': {'name': 'Pianississimo'},
},
{'en': {'name': 'Almost', 'app_config': 'sample_app'},
'it': {'name': 'Mezzo'},
},
{'en': {'name': 'Loud', 'parent_id': _get_cat_pk('en', 'Almost'), 'app_config': 'sample_app'},
'it': {'name': 'Forte', 'parent_id': _get_cat_pk('it', 'Mezzo')},
},
{'en': {'name': 'Silent', 'parent_id': _get_cat_pk('en', 'Almost'), 'app_config': 'sample_app'},
},
{'en': {'name': 'Drums', 'app_config': 'sample_app2'},
'it': {'name': 'Tamburi'},
},
{'en': {'name': 'Guitars', 'app_config': 'sample_app2'},
'it': {'name': 'Chitarre'},
},
)
2015-07-20 12:31:59 +00:00
2014-06-08 22:06:01 +00:00
@classmethod
def setUpClass(cls):
super(BaseTest, cls).setUpClass()
2015-09-19 23:11:14 +00:00
cls.thumb_1 = ThumbnailOption.objects.create(
2014-06-09 22:11:48 +00:00
name='base', width=100, height=100, crop=True, upscale=False
)
2015-09-19 23:11:14 +00:00
cls.thumb_2 = ThumbnailOption.objects.create(
2014-06-09 22:11:48 +00:00
name='main', width=200, height=200, crop=False, upscale=False
)
2015-09-19 23:11:14 +00:00
cls.app_config_1 = BlogConfig.objects.create(
namespace='sample_app', app_title='app1'
)
cls.app_config_2 = BlogConfig.objects.create(
namespace='sample_app2', app_title='app2'
)
cls.app_config_1.app_data.config.paginate_by = 1
cls.app_config_1.save()
cls.app_config_2.app_data.config.paginate_by = 2
cls.app_config_2.save()
cls.app_configs = {
'sample_app': cls.app_config_1,
'sample_app2': cls.app_config_2,
}
cls.category_1 = BlogCategory.objects.create(name='category 1', app_config=cls.app_config_1)
cls.category_1.set_current_language('it', initialize=True)
cls.category_1.name = 'categoria 1'
cls.category_1.save()
cls.site_2 = Site.objects.create(domain='http://example2.com', name='example 2')
2015-09-26 16:01:22 +00:00
@classmethod
def tearDownClass(cls):
super(BaseTest, cls).tearDownClass()
BlogConfig.objects.all().delete()
BlogCategory.objects.all().delete()
ThumbnailOption.objects.all().delete()
2015-07-20 12:31:59 +00:00
def _get_category(self, data, category=None, lang='en'):
2015-09-19 23:11:14 +00:00
data = deepcopy(data)
2015-07-20 14:16:52 +00:00
for k, v in data.items():
if hasattr(v, '__call__'):
data[k] = v()
2015-07-20 12:31:59 +00:00
if not category:
2015-09-19 23:11:14 +00:00
with smart_override(lang):
data['app_config'] = self.app_configs[data['app_config']]
category = BlogCategory.objects.create(**data)
2015-07-20 12:31:59 +00:00
else:
2015-09-19 23:11:14 +00:00
category.set_current_language(lang, initialize=True)
2015-07-20 12:31:59 +00:00
for attr, val in data.items():
setattr(category, attr, val)
category.save()
return category
2014-10-04 18:05:17 +00:00
def _get_post(self, data, post=None, lang='en', sites=None):
2014-06-09 22:11:48 +00:00
if not post:
2014-10-05 06:25:18 +00:00
post_data = {
'author': self.user,
'title': data['title'],
'abstract': data['abstract'],
'meta_description': data['description'],
'meta_keywords': data['keywords'],
2015-09-19 23:11:14 +00:00
'app_config': self.app_configs[data['app_config']]
2014-10-05 06:25:18 +00:00
}
post = Post.objects.create(**post_data)
else:
2015-09-19 23:11:14 +00:00
post.create_translation(
lang,
title=data['title'],
abstract=data['abstract'],
meta_description=data['description'],
meta_keywords=data['keywords']
)
post = self.reload_model(post)
2014-06-09 22:11:48 +00:00
post.categories.add(self.category_1)
2014-10-04 18:05:17 +00:00
if sites:
for site in sites:
post.sites.add(site)
2014-06-09 22:11:48 +00:00
return post
2014-10-04 18:05:17 +00:00
def get_posts(self, sites=None):
2015-09-19 23:11:14 +00:00
posts = []
for post in self._post_data:
post1 = self._get_post(post['en'], sites=sites)
post1 = self._get_post(post['it'], post=post1, lang='it')
post1.publish = post['en']['publish']
2015-09-26 08:38:57 +00:00
post1.main_image = self.create_filer_image_object()
2015-09-19 23:11:14 +00:00
post1.save()
posts.append(post1)
return posts