commit
5089e5a0af
8 changed files with 252 additions and 117 deletions
|
@ -15,7 +15,7 @@ class LatestEntriesFeed(Feed):
|
||||||
def title(self):
|
def title(self):
|
||||||
return _('Blog articles on %(site_name)s') % {'site_name': Site.objects.get_current().name}
|
return _('Blog articles on %(site_name)s') % {'site_name': Site.objects.get_current().name}
|
||||||
|
|
||||||
def items(self, obj):
|
def items(self, obj=None):
|
||||||
return Post.objects.published().order_by('-date_published')[:10]
|
return Post.objects.published().order_by('-date_published')[:10]
|
||||||
|
|
||||||
def item_title(self, item):
|
def item_title(self, item):
|
||||||
|
@ -28,7 +28,7 @@ class LatestEntriesFeed(Feed):
|
||||||
class TagFeed(LatestEntriesFeed):
|
class TagFeed(LatestEntriesFeed):
|
||||||
|
|
||||||
def get_object(self, request, tag):
|
def get_object(self, request, tag):
|
||||||
return tag
|
return tag # pragma: no cover
|
||||||
|
|
||||||
def items(self, obj):
|
def items(self, obj=None):
|
||||||
return Post.objects.published().filter(tags__slug=obj)[:10]
|
return Post.objects.published().filter(tags__slug=obj)[:10]
|
||||||
|
|
|
@ -6,7 +6,7 @@ from django.core.urlresolvers import resolve
|
||||||
from django.http import Http404
|
from django.http import Http404
|
||||||
from django.views.generic import ListView, DetailView
|
from django.views.generic import ListView, DetailView
|
||||||
|
|
||||||
from parler.views import ViewUrlMixin
|
from parler.views import ViewUrlMixin, TranslatableSlugMixin
|
||||||
|
|
||||||
from .models import Post, BlogCategory, BLOG_CURRENT_POST_IDENTIFIER
|
from .models import Post, BlogCategory, BLOG_CURRENT_POST_IDENTIFIER
|
||||||
from .settings import (BLOG_PAGINATION, BLOG_POSTS_LIST_TRUNCWORDS_COUNT,
|
from .settings import (BLOG_PAGINATION, BLOG_POSTS_LIST_TRUNCWORDS_COUNT,
|
||||||
|
@ -40,22 +40,13 @@ class PostListView(BaseBlogView, ListView):
|
||||||
return context
|
return context
|
||||||
|
|
||||||
|
|
||||||
class PostDetailView(BaseBlogView, DetailView):
|
class PostDetailView(TranslatableSlugMixin, BaseBlogView, DetailView):
|
||||||
model = Post
|
model = Post
|
||||||
context_object_name = 'post'
|
context_object_name = 'post'
|
||||||
template_name = "djangocms_blog/post_detail.html"
|
template_name = "djangocms_blog/post_detail.html"
|
||||||
slug_field = 'slug'
|
slug_field = 'slug'
|
||||||
view_url_name = 'djangocms_blog:post-detail'
|
view_url_name = 'djangocms_blog:post-detail'
|
||||||
|
|
||||||
def get_object(self, queryset=None):
|
|
||||||
try:
|
|
||||||
qs = self.model._default_manager.active_translations(**{
|
|
||||||
self.slug_field: self.kwargs.get(self.slug_url_kwarg, None)
|
|
||||||
}).latest()
|
|
||||||
except Post.DoesNotExist:
|
|
||||||
raise Http404()
|
|
||||||
return qs
|
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
def get_context_data(self, **kwargs):
|
||||||
context = super(PostDetailView, self).get_context_data(**kwargs)
|
context = super(PostDetailView, self).get_context_data(**kwargs)
|
||||||
context['meta'] = self.get_object().as_meta()
|
context['meta'] = self.get_object().as_meta()
|
||||||
|
|
|
@ -112,7 +112,8 @@ try:
|
||||||
)
|
)
|
||||||
|
|
||||||
from django_nose import NoseTestSuiteRunner
|
from django_nose import NoseTestSuiteRunner
|
||||||
except ImportError:
|
except ImportError as e:
|
||||||
|
print(e)
|
||||||
raise ImportError('To fix this error, run: pip install -r requirements-test.txt')
|
raise ImportError('To fix this error, run: pip install -r requirements-test.txt')
|
||||||
|
|
||||||
|
|
||||||
|
|
2
setup.py
2
setup.py
|
@ -36,7 +36,7 @@ setup(
|
||||||
],
|
],
|
||||||
include_package_data=True,
|
include_package_data=True,
|
||||||
install_requires=[
|
install_requires=[
|
||||||
'django-parler>=1.0b1',
|
'django-parler>=1.0b3',
|
||||||
'django-cms>=3.0',
|
'django-cms>=3.0',
|
||||||
'django-taggit',
|
'django-taggit',
|
||||||
'django-filer',
|
'django-filer',
|
||||||
|
|
|
@ -81,7 +81,6 @@ class BaseTest(TestCase):
|
||||||
post.save()
|
post.save()
|
||||||
return post
|
return post
|
||||||
|
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def tearDownClass(cls):
|
def tearDownClass(cls):
|
||||||
User.objects.all().delete()
|
User.objects.all().delete()
|
||||||
|
@ -123,3 +122,14 @@ class BaseTest(TestCase):
|
||||||
mid = ToolbarMiddleware()
|
mid = ToolbarMiddleware()
|
||||||
mid.process_request(request)
|
mid.process_request(request)
|
||||||
return request
|
return request
|
||||||
|
|
||||||
|
def get_posts(self):
|
||||||
|
post1 = self._get_post(self.data['en'][0])
|
||||||
|
post1 = self._get_post(self.data['it'][0], post1, 'it')
|
||||||
|
post1.publish = True
|
||||||
|
post1.save()
|
||||||
|
post1.set_current_language('en')
|
||||||
|
post2 = self._get_post(self.data['en'][1])
|
||||||
|
post2 = self._get_post(self.data['it'][1], post2, 'it')
|
||||||
|
post2.set_current_language('en')
|
||||||
|
return post1, post2
|
|
@ -71,8 +71,8 @@ class ModelsTest(BaseTest):
|
||||||
})
|
})
|
||||||
|
|
||||||
def test_manager(self):
|
def test_manager(self):
|
||||||
post_1 = self._get_post(self.data['en'][0])
|
post1 = self._get_post(self.data['en'][0])
|
||||||
post_2 = self._get_post(self.data['en'][1])
|
post2 = self._get_post(self.data['en'][1])
|
||||||
|
|
||||||
# default queryset, published and unpublished posts
|
# default queryset, published and unpublished posts
|
||||||
months = Post.objects.get_months()
|
months = Post.objects.get_months()
|
||||||
|
@ -81,8 +81,8 @@ class ModelsTest(BaseTest):
|
||||||
self.assertEqual(data['count'], 2)
|
self.assertEqual(data['count'], 2)
|
||||||
|
|
||||||
# custom queryset, only published
|
# custom queryset, only published
|
||||||
post_1.publish = True
|
post1.publish = True
|
||||||
post_1.save()
|
post1.save()
|
||||||
months = Post.objects.get_months(Post.objects.published())
|
months = Post.objects.get_months(Post.objects.published())
|
||||||
for data in months:
|
for data in months:
|
||||||
self.assertEqual(data['date'], date(year=date.today().year, month=date.today().month, day=1))
|
self.assertEqual(data['date'], date(year=date.today().year, month=date.today().month, day=1))
|
||||||
|
@ -91,23 +91,23 @@ class ModelsTest(BaseTest):
|
||||||
self.assertEqual(len(Post.objects.available()), 1)
|
self.assertEqual(len(Post.objects.available()), 1)
|
||||||
|
|
||||||
# If post is published but publishing date is in the future
|
# If post is published but publishing date is in the future
|
||||||
post_2.date_published = date(year=date.today().year+1, month=date.today().month, day=1)
|
post2.date_published = date(year=date.today().year+1, month=date.today().month, day=1)
|
||||||
post_2.publish = True
|
post2.publish = True
|
||||||
post_2.save()
|
post2.save()
|
||||||
self.assertEqual(len(Post.objects.available()), 2)
|
self.assertEqual(len(Post.objects.available()), 2)
|
||||||
self.assertEqual(len(Post.objects.published()), 1)
|
self.assertEqual(len(Post.objects.published()), 1)
|
||||||
self.assertEqual(len(Post.objects.archived()), 0)
|
self.assertEqual(len(Post.objects.archived()), 0)
|
||||||
|
|
||||||
# If post is published but end publishing date is in the past
|
# If post is published but end publishing date is in the past
|
||||||
post_2.date_published = date(year=date.today().year-2, month=date.today().month, day=1)
|
post2.date_published = date(year=date.today().year-2, month=date.today().month, day=1)
|
||||||
post_2.date_published_end = date(year=date.today().year-1, month=date.today().month, day=1)
|
post2.date_published_end = date(year=date.today().year-1, month=date.today().month, day=1)
|
||||||
post_2.save()
|
post2.save()
|
||||||
self.assertEqual(len(Post.objects.available()), 2)
|
self.assertEqual(len(Post.objects.available()), 2)
|
||||||
self.assertEqual(len(Post.objects.published()), 1)
|
self.assertEqual(len(Post.objects.published()), 1)
|
||||||
self.assertEqual(len(Post.objects.archived()), 1)
|
self.assertEqual(len(Post.objects.archived()), 1)
|
||||||
|
|
||||||
# counting with language fallback enabled
|
# counting with language fallback enabled
|
||||||
post = self._get_post(self.data['it'][0], post_1, 'it')
|
post = self._get_post(self.data['it'][0], post1, 'it')
|
||||||
self.assertEqual(len(Post.objects.filter_by_language('it')), 2)
|
self.assertEqual(len(Post.objects.filter_by_language('it')), 2)
|
||||||
|
|
||||||
# No fallback
|
# No fallback
|
||||||
|
@ -116,12 +116,12 @@ class ModelsTest(BaseTest):
|
||||||
parler.appsettings.PARLER_LANGUAGES['default']['hide_untranslated'] = False
|
parler.appsettings.PARLER_LANGUAGES['default']['hide_untranslated'] = False
|
||||||
|
|
||||||
def test_tag_cloud(self):
|
def test_tag_cloud(self):
|
||||||
post_1 = self._get_post(self.data['en'][0])
|
post1 = self._get_post(self.data['en'][0])
|
||||||
post_2 = self._get_post(self.data['en'][1])
|
post2 = self._get_post(self.data['en'][1])
|
||||||
post_1.tags.add('tag 1', 'tag 2', 'tag 3', 'tag 4')
|
post1.tags.add('tag 1', 'tag 2', 'tag 3', 'tag 4')
|
||||||
post_1.save()
|
post1.save()
|
||||||
post_2.tags.add('tag 6', 'tag 2', 'tag 5', 'tag 8')
|
post2.tags.add('tag 6', 'tag 2', 'tag 5', 'tag 8')
|
||||||
post_2.save()
|
post2.save()
|
||||||
|
|
||||||
self.assertEqual(len(Post.objects.tag_cloud()), 0)
|
self.assertEqual(len(Post.objects.tag_cloud()), 0)
|
||||||
|
|
||||||
|
@ -145,59 +145,59 @@ class ModelsTest(BaseTest):
|
||||||
tag.count = 1
|
tag.count = 1
|
||||||
tags_1.append(tag)
|
tags_1.append(tag)
|
||||||
|
|
||||||
post_1.publish = True
|
post1.publish = True
|
||||||
post_1.save()
|
post1.save()
|
||||||
self.assertEqual(set(Post.objects.tag_cloud()), set(tags_1))
|
self.assertEqual(set(Post.objects.tag_cloud()), set(tags_1))
|
||||||
self.assertEqual(set(Post.objects.tag_cloud(published=False)), set(tags))
|
self.assertEqual(set(Post.objects.tag_cloud(published=False)), set(tags))
|
||||||
|
|
||||||
def test_plugin_latest(self):
|
def test_plugin_latest(self):
|
||||||
post_1 = self._get_post(self.data['en'][0])
|
post1 = self._get_post(self.data['en'][0])
|
||||||
post_2 = self._get_post(self.data['en'][1])
|
post2 = self._get_post(self.data['en'][1])
|
||||||
post_1.tags.add('tag 1')
|
post1.tags.add('tag 1')
|
||||||
post_1.save()
|
post1.save()
|
||||||
plugin = add_plugin(post_1.content, 'BlogLatestEntriesPlugin', language='en')
|
plugin = add_plugin(post1.content, 'BlogLatestEntriesPlugin', language='en')
|
||||||
tag = Tag.objects.get(slug='tag-1')
|
tag = Tag.objects.get(slug='tag-1')
|
||||||
plugin.tags.add(tag)
|
plugin.tags.add(tag)
|
||||||
self.assertEqual(len(plugin.get_posts()), 0)
|
self.assertEqual(len(plugin.get_posts()), 0)
|
||||||
post_1.publish = True
|
post1.publish = True
|
||||||
post_1.save()
|
post1.save()
|
||||||
self.assertEqual(len(plugin.get_posts()), 1)
|
self.assertEqual(len(plugin.get_posts()), 1)
|
||||||
|
|
||||||
def test_copy_plugin_latest(self):
|
def test_copy_plugin_latest(self):
|
||||||
post_1 = self._get_post(self.data['en'][0])
|
post1 = self._get_post(self.data['en'][0])
|
||||||
post_2 = self._get_post(self.data['en'][1])
|
post2 = self._get_post(self.data['en'][1])
|
||||||
tag = Tag.objects.create(name='tag 1')
|
tag = Tag.objects.create(name='tag 1')
|
||||||
plugin = add_plugin(post_1.content, 'BlogLatestEntriesPlugin', language='en')
|
plugin = add_plugin(post1.content, 'BlogLatestEntriesPlugin', language='en')
|
||||||
plugin.tags.add(tag)
|
plugin.tags.add(tag)
|
||||||
plugins = list(post_1.content.cmsplugin_set.filter(language='en').order_by('tree_id', 'level', 'position'))
|
plugins = list(post1.content.cmsplugin_set.filter(language='en').order_by('tree_id', 'level', 'position'))
|
||||||
copy_plugins_to(plugins, post_2.content)
|
copy_plugins_to(plugins, post2.content)
|
||||||
new = downcast_plugins(post_2.content.cmsplugin_set.all())
|
new = downcast_plugins(post2.content.cmsplugin_set.all())
|
||||||
self.assertEqual(set(new[0].tags.all()), set([tag]))
|
self.assertEqual(set(new[0].tags.all()), set([tag]))
|
||||||
|
|
||||||
def test_plugin_author(self):
|
def test_plugin_author(self):
|
||||||
post_1 = self._get_post(self.data['en'][0])
|
post1 = self._get_post(self.data['en'][0])
|
||||||
post_2 = self._get_post(self.data['en'][1])
|
post2 = self._get_post(self.data['en'][1])
|
||||||
plugin = add_plugin(post_1.content, 'BlogAuthorPostsPlugin', language='en')
|
plugin = add_plugin(post1.content, 'BlogAuthorPostsPlugin', language='en')
|
||||||
plugin.authors.add(self.user)
|
plugin.authors.add(self.user)
|
||||||
self.assertEqual(len(plugin.get_posts()), 0)
|
self.assertEqual(len(plugin.get_posts()), 0)
|
||||||
self.assertEqual(plugin.get_authors()[0].count, 0)
|
self.assertEqual(plugin.get_authors()[0].count, 0)
|
||||||
|
|
||||||
post_1.publish = True
|
post1.publish = True
|
||||||
post_1.save()
|
post1.save()
|
||||||
self.assertEqual(len(plugin.get_posts()), 1)
|
self.assertEqual(len(plugin.get_posts()), 1)
|
||||||
self.assertEqual(plugin.get_authors()[0].count, 1)
|
self.assertEqual(plugin.get_authors()[0].count, 1)
|
||||||
|
|
||||||
post_2.publish = True
|
post2.publish = True
|
||||||
post_2.save()
|
post2.save()
|
||||||
self.assertEqual(len(plugin.get_posts()), 2)
|
self.assertEqual(len(plugin.get_posts()), 2)
|
||||||
self.assertEqual(plugin.get_authors()[0].count, 2)
|
self.assertEqual(plugin.get_authors()[0].count, 2)
|
||||||
|
|
||||||
def test_copy_plugin_author(self):
|
def test_copy_plugin_author(self):
|
||||||
post_1 = self._get_post(self.data['en'][0])
|
post1 = self._get_post(self.data['en'][0])
|
||||||
post_2 = self._get_post(self.data['en'][1])
|
post2 = self._get_post(self.data['en'][1])
|
||||||
plugin = add_plugin(post_1.content, 'BlogAuthorPostsPlugin', language='en')
|
plugin = add_plugin(post1.content, 'BlogAuthorPostsPlugin', language='en')
|
||||||
plugin.authors.add(self.user)
|
plugin.authors.add(self.user)
|
||||||
plugins = list(post_1.content.cmsplugin_set.filter(language='en').order_by('tree_id', 'level', 'position'))
|
plugins = list(post1.content.cmsplugin_set.filter(language='en').order_by('tree_id', 'level', 'position'))
|
||||||
copy_plugins_to(plugins, post_2.content)
|
copy_plugins_to(plugins, post2.content)
|
||||||
new = downcast_plugins(post_2.content.cmsplugin_set.all())
|
new = downcast_plugins(post2.content.cmsplugin_set.all())
|
||||||
self.assertEqual(set(new[0].authors.all()), set([self.user]))
|
self.assertEqual(set(new[0].authors.all()), set([self.user]))
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
from datetime import date
|
||||||
import re
|
import re
|
||||||
from cms.api import add_plugin
|
from cms.api import add_plugin
|
||||||
from django.core.urlresolvers import reverse
|
from django.core.urlresolvers import reverse
|
||||||
|
@ -12,11 +13,11 @@ class PluginTest(BaseTest):
|
||||||
|
|
||||||
def test_plugin_latest(self):
|
def test_plugin_latest(self):
|
||||||
page1, page2 = self.get_pages()
|
page1, page2 = self.get_pages()
|
||||||
post_1 = self._get_post(self.data['en'][0])
|
post1 = self._get_post(self.data['en'][0])
|
||||||
post_2 = self._get_post(self.data['en'][1])
|
post2 = self._get_post(self.data['en'][1])
|
||||||
post_1.tags.add('tag 1')
|
post1.tags.add('tag 1')
|
||||||
post_1.publish = True
|
post1.publish = True
|
||||||
post_1.save()
|
post1.save()
|
||||||
ph = page1.placeholders.get(slot='placeholder')
|
ph = page1.placeholders.get(slot='placeholder')
|
||||||
plugin = add_plugin(ph, 'BlogLatestEntriesPlugin', language='en')
|
plugin = add_plugin(ph, 'BlogLatestEntriesPlugin', language='en')
|
||||||
tag = Tag.objects.get(slug='tag-1')
|
tag = Tag.objects.get(slug='tag-1')
|
||||||
|
@ -28,16 +29,16 @@ class PluginTest(BaseTest):
|
||||||
self.assertTrue(rendered.find(reverse('djangocms_blog:posts-tagged', kwargs={'tag': tag.slug})) > -1)
|
self.assertTrue(rendered.find(reverse('djangocms_blog:posts-tagged', kwargs={'tag': tag.slug})) > -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(post_1.get_absolute_url()) > -1)
|
self.assertTrue(rendered.find(post1.get_absolute_url()) > -1)
|
||||||
|
|
||||||
def test_plugin_authors(self):
|
def test_plugin_authors(self):
|
||||||
page1, page2 = self.get_pages()
|
page1, page2 = self.get_pages()
|
||||||
post_1 = self._get_post(self.data['en'][0])
|
post1 = self._get_post(self.data['en'][0])
|
||||||
post_2 = self._get_post(self.data['en'][1])
|
post2 = self._get_post(self.data['en'][1])
|
||||||
post_1.publish = True
|
post1.publish = True
|
||||||
post_1.save()
|
post1.save()
|
||||||
post_2.publish = True
|
post2.publish = True
|
||||||
post_2.save()
|
post2.save()
|
||||||
ph = page1.placeholders.get(slot='placeholder')
|
ph = page1.placeholders.get(slot='placeholder')
|
||||||
plugin = add_plugin(ph, 'BlogAuthorPostsPlugin', language='en')
|
plugin = add_plugin(ph, 'BlogAuthorPostsPlugin', language='en')
|
||||||
plugin.authors.add(self.user)
|
plugin.authors.add(self.user)
|
||||||
|
@ -49,14 +50,14 @@ class PluginTest(BaseTest):
|
||||||
|
|
||||||
def test_plugin_tags(self):
|
def test_plugin_tags(self):
|
||||||
page1, page2 = self.get_pages()
|
page1, page2 = self.get_pages()
|
||||||
post_1 = self._get_post(self.data['en'][0])
|
post1 = self._get_post(self.data['en'][0])
|
||||||
post_2 = self._get_post(self.data['en'][1])
|
post2 = self._get_post(self.data['en'][1])
|
||||||
post_1.tags.add('tag 1', 'tag 2', 'test tag')
|
post1.tags.add('tag 1', 'tag 2', 'test tag')
|
||||||
post_1.publish = True
|
post1.publish = True
|
||||||
post_1.save()
|
post1.save()
|
||||||
post_2.tags.add('test tag', 'another tag')
|
post2.tags.add('test tag', 'another tag')
|
||||||
post_2.publish = True
|
post2.publish = True
|
||||||
post_2.save()
|
post2.save()
|
||||||
ph = page1.placeholders.get(slot='placeholder')
|
ph = page1.placeholders.get(slot='placeholder')
|
||||||
plugin = add_plugin(ph, 'BlogTagsPlugin', language='en')
|
plugin = add_plugin(ph, 'BlogTagsPlugin', language='en')
|
||||||
request = self.get_page_request(page1, self.user, r'/en/blog/', lang_code='en', edit=True)
|
request = self.get_page_request(page1, self.user, r'/en/blog/', lang_code='en', edit=True)
|
||||||
|
@ -70,3 +71,37 @@ class PluginTest(BaseTest):
|
||||||
rf = '\s+%s\s+<span>\(\s+%s article' % (tag.name, 1)
|
rf = '\s+%s\s+<span>\(\s+%s article' % (tag.name, 1)
|
||||||
rx = re.compile(rf)
|
rx = re.compile(rf)
|
||||||
self.assertEqual(len(rx.findall(rendered)), 1)
|
self.assertEqual(len(rx.findall(rendered)), 1)
|
||||||
|
|
||||||
|
def test_blog_category_plugin(self):
|
||||||
|
page1, page2 = self.get_pages()
|
||||||
|
post1, post2 = self.get_posts()
|
||||||
|
post1.publish = True
|
||||||
|
post1.save()
|
||||||
|
post2.publish = True
|
||||||
|
post2.save()
|
||||||
|
ph = page1.placeholders.get(slot='placeholder')
|
||||||
|
plugin = add_plugin(ph, 'BlogCategoryPlugin', language='en')
|
||||||
|
request = self.get_page_request(page1, self.user, r'/en/blog/', lang_code='en', edit=True)
|
||||||
|
plugin_class = plugin.get_plugin_class_instance()
|
||||||
|
context = plugin_class.render(RequestContext(request, {}), plugin, ph)
|
||||||
|
self.assertTrue(context['categories'])
|
||||||
|
self.assertEqual(list(context['categories']), [self.category_1])
|
||||||
|
|
||||||
|
def test_blog_archive_plugin(self):
|
||||||
|
page1, page2 = self.get_pages()
|
||||||
|
post1, post2 = self.get_posts()
|
||||||
|
post1.publish = True
|
||||||
|
post1.save()
|
||||||
|
post2.publish = True
|
||||||
|
post2.save()
|
||||||
|
ph = page1.placeholders.get(slot='placeholder')
|
||||||
|
plugin = add_plugin(ph, 'BlogArchivePlugin', language='en')
|
||||||
|
request = self.get_page_request(page1, self.user, r'/en/blog/', lang_code='en', edit=True)
|
||||||
|
plugin_class = plugin.get_plugin_class_instance()
|
||||||
|
context = plugin_class.render(RequestContext(request, {}), plugin, ph)
|
||||||
|
self.assertEqual(context['dates'][0], {'date': date(year=date.today().year, month=date.today().month, day=1), 'count': 2})
|
||||||
|
|
||||||
|
post2.publish = False
|
||||||
|
post2.save()
|
||||||
|
context = plugin_class.render(RequestContext(request, {}), plugin, ph)
|
||||||
|
self.assertEqual(context['dates'][0], {'date': date(year=date.today().year, month=date.today().month, day=1), 'count': 1})
|
||||||
|
|
|
@ -3,7 +3,10 @@ from datetime import date
|
||||||
from django.contrib.auth.models import AnonymousUser
|
from django.contrib.auth.models import AnonymousUser
|
||||||
from django.http import Http404
|
from django.http import Http404
|
||||||
from django.utils.translation import activate
|
from django.utils.translation import activate
|
||||||
from djangocms_blog.views import PostListView, PostDetailView, PostArchiveView
|
from djangocms_blog.feeds import LatestEntriesFeed, TagFeed
|
||||||
|
from djangocms_blog.sitemaps import BlogSitemap
|
||||||
|
from djangocms_blog.views import PostListView, PostDetailView, PostArchiveView, \
|
||||||
|
CategoryEntriesView, AuthorEntriesView, TaggedListView
|
||||||
|
|
||||||
from . import BaseTest
|
from . import BaseTest
|
||||||
|
|
||||||
|
@ -12,32 +15,25 @@ class ViewTest(BaseTest):
|
||||||
|
|
||||||
def test_post_list_view(self):
|
def test_post_list_view(self):
|
||||||
page1, page2 = self.get_pages()
|
page1, page2 = self.get_pages()
|
||||||
post_1 = self._get_post(self.data['en'][0])
|
post1, post2 = self.get_posts()
|
||||||
post_1 = self._get_post(self.data['it'][0], post_1, 'it')
|
|
||||||
post_1.publish = True
|
|
||||||
post_1.save()
|
|
||||||
post_1.set_current_language('en')
|
|
||||||
post_2 = self._get_post(self.data['en'][1])
|
|
||||||
post_2 = self._get_post(self.data['it'][1], post_2, 'it')
|
|
||||||
post_2.set_current_language('en')
|
|
||||||
|
|
||||||
request = self.get_page_request(page1, AnonymousUser(), r'/en/blog/', edit=False)
|
request = self.get_page_request(page1, AnonymousUser(), r'/en/blog/', edit=False)
|
||||||
activate('en')
|
activate('en')
|
||||||
view_obj = PostListView()
|
view_obj = PostListView()
|
||||||
view_obj.request = request
|
view_obj.request = request
|
||||||
|
|
||||||
self.assertEqual(list(view_obj.get_queryset()), [post_1])
|
self.assertEqual(list(view_obj.get_queryset()), [post1])
|
||||||
|
|
||||||
request = self.get_page_request(page1, self.user, r'/en/blog/', edit=False)
|
request = self.get_page_request(page1, self.user, r'/en/blog/', edit=False)
|
||||||
view_obj.request = request
|
view_obj.request = request
|
||||||
self.assertEqual(set(view_obj.get_queryset()), set([post_1, post_2]))
|
self.assertEqual(set(view_obj.get_queryset()), set([post1, post2]))
|
||||||
|
|
||||||
view_obj.kwargs = {}
|
view_obj.kwargs = {}
|
||||||
view_obj.object_list = view_obj.get_queryset()
|
view_obj.object_list = view_obj.get_queryset()
|
||||||
view_obj.paginate_by = 1
|
view_obj.paginate_by = 1
|
||||||
context = view_obj.get_context_data(object_list=view_obj.object_list)
|
context = view_obj.get_context_data(object_list=view_obj.object_list)
|
||||||
self.assertTrue(context['is_paginated'])
|
self.assertTrue(context['is_paginated'])
|
||||||
self.assertEqual(list(context['post_list']), [post_2])
|
self.assertEqual(list(context['post_list']), [post2])
|
||||||
self.assertEqual(context['paginator'].count, 2)
|
self.assertEqual(context['paginator'].count, 2)
|
||||||
self.assertEqual(context['post_list'][0].title, 'Second post')
|
self.assertEqual(context['post_list'][0].title, 'Second post')
|
||||||
response = view_obj.render_to_response(context)
|
response = view_obj.render_to_response(context)
|
||||||
|
@ -54,14 +50,7 @@ class ViewTest(BaseTest):
|
||||||
|
|
||||||
def test_post_detail_view(self):
|
def test_post_detail_view(self):
|
||||||
page1, page2 = self.get_pages()
|
page1, page2 = self.get_pages()
|
||||||
post_1 = self._get_post(self.data['en'][0])
|
post1, post2 = self.get_posts()
|
||||||
post_1 = self._get_post(self.data['it'][0], post_1, 'it')
|
|
||||||
post_1.publish = True
|
|
||||||
post_1.save()
|
|
||||||
post_1.set_current_language('en')
|
|
||||||
post_2 = self._get_post(self.data['en'][1])
|
|
||||||
post_2 = self._get_post(self.data['it'][1], post_2, 'it')
|
|
||||||
post_2.set_current_language('en')
|
|
||||||
|
|
||||||
request = self.get_page_request(page1, AnonymousUser(), r'/en/blog/', edit=False)
|
request = self.get_page_request(page1, AnonymousUser(), r'/en/blog/', edit=False)
|
||||||
activate('en')
|
activate('en')
|
||||||
|
@ -72,34 +61,29 @@ class ViewTest(BaseTest):
|
||||||
view_obj.kwargs = {'slug': 'not-existing'}
|
view_obj.kwargs = {'slug': 'not-existing'}
|
||||||
post_obj = view_obj.get_object()
|
post_obj = view_obj.get_object()
|
||||||
|
|
||||||
view_obj.kwargs = {'slug': post_1.slug}
|
view_obj.kwargs = {'slug': post1.slug}
|
||||||
post_obj = view_obj.get_object()
|
post_obj = view_obj.get_object()
|
||||||
self.assertEqual(post_obj, post_1)
|
self.assertEqual(post_obj, post1)
|
||||||
self.assertEqual(post_obj.language_code, 'en')
|
self.assertEqual(post_obj.language_code, 'en')
|
||||||
|
|
||||||
request = self.get_page_request(page1, AnonymousUser(), r'/it/blog/', lang_code='it', edit=False)
|
request = self.get_page_request(page1, AnonymousUser(), r'/it/blog/', lang_code='it', edit=False)
|
||||||
activate('it')
|
activate('it')
|
||||||
|
post1.set_current_language('it')
|
||||||
view_obj.request = request
|
view_obj.request = request
|
||||||
|
view_obj.kwargs = {'slug': post1.slug}
|
||||||
post_obj = view_obj.get_object()
|
post_obj = view_obj.get_object()
|
||||||
self.assertEqual(post_obj, post_1)
|
self.assertEqual(post_obj, post1)
|
||||||
self.assertEqual(post_obj.language_code, 'it')
|
self.assertEqual(post_obj.language_code, 'it')
|
||||||
|
|
||||||
view_obj.object = post_obj
|
view_obj.object = post_obj
|
||||||
context = view_obj.get_context_data()
|
context = view_obj.get_context_data()
|
||||||
self.assertEqual(context['post'], post_1)
|
self.assertEqual(context['post'], post1)
|
||||||
self.assertEqual(context['post'].language_code, 'it')
|
self.assertEqual(context['post'].language_code, 'it')
|
||||||
self.assertTrue(context['meta'])
|
self.assertTrue(context['meta'])
|
||||||
|
|
||||||
def test_post_archive_view(self):
|
def test_post_archive_view(self):
|
||||||
page1, page2 = self.get_pages()
|
page1, page2 = self.get_pages()
|
||||||
post_1 = self._get_post(self.data['en'][0])
|
post1, post2 = self.get_posts()
|
||||||
post_1 = self._get_post(self.data['it'][0], post_1, 'it')
|
|
||||||
post_1.publish = True
|
|
||||||
post_1.save()
|
|
||||||
post_1.set_current_language('en')
|
|
||||||
post_2 = self._get_post(self.data['en'][1])
|
|
||||||
post_2 = self._get_post(self.data['it'][1], post_2, 'it')
|
|
||||||
post_2.set_current_language('en')
|
|
||||||
|
|
||||||
request = self.get_page_request(page1, AnonymousUser(), r'/en/blog/', edit=False)
|
request = self.get_page_request(page1, AnonymousUser(), r'/en/blog/', edit=False)
|
||||||
activate('en')
|
activate('en')
|
||||||
|
@ -110,8 +94,122 @@ class ViewTest(BaseTest):
|
||||||
# One post only, anonymous request
|
# One post only, anonymous request
|
||||||
qs = view_obj.get_queryset()
|
qs = view_obj.get_queryset()
|
||||||
self.assertEqual(qs.count(), 1)
|
self.assertEqual(qs.count(), 1)
|
||||||
self.assertEqual(list(qs), [post_1])
|
self.assertEqual(list(qs), [post1])
|
||||||
|
|
||||||
view_obj.object_list = qs
|
view_obj.object_list = qs
|
||||||
context = view_obj.get_context_data(object_list=view_obj.object_list)
|
context = view_obj.get_context_data(object_list=view_obj.object_list)
|
||||||
self.assertEqual(context['archive_date'], date(year=date.today().year, month=date.today().month, day=1))
|
self.assertEqual(context['archive_date'], date(year=date.today().year, month=date.today().month, day=1))
|
||||||
|
|
||||||
|
def test_category_entries_view(self):
|
||||||
|
page1, page2 = self.get_pages()
|
||||||
|
post1, post2 = self.get_posts()
|
||||||
|
|
||||||
|
request = self.get_page_request(page1, self.user, r'/en/blog/', edit=False)
|
||||||
|
activate('en')
|
||||||
|
view_obj = CategoryEntriesView()
|
||||||
|
view_obj.request = request
|
||||||
|
view_obj.kwargs = {'category': 'category-1'}
|
||||||
|
qs = view_obj.get_queryset()
|
||||||
|
self.assertEqual(qs.count(), 2)
|
||||||
|
self.assertEqual(set(qs), set([post1, post2]))
|
||||||
|
|
||||||
|
view_obj.paginate_by = 1
|
||||||
|
view_obj.object_list = qs
|
||||||
|
context = view_obj.get_context_data(object_list=view_obj.object_list)
|
||||||
|
self.assertTrue(context['category'])
|
||||||
|
self.assertEqual(context['category'], self.category_1)
|
||||||
|
self.assertTrue(context['is_paginated'])
|
||||||
|
self.assertEqual(list(context['post_list']), [post2])
|
||||||
|
self.assertEqual(context['paginator'].count, 2)
|
||||||
|
self.assertEqual(context['post_list'][0].title, 'Second post')
|
||||||
|
|
||||||
|
def test_author_entries_view(self):
|
||||||
|
page1, page2 = self.get_pages()
|
||||||
|
post1, post2 = self.get_posts()
|
||||||
|
|
||||||
|
request = self.get_page_request(page1, self.user, r'/en/blog/', edit=False)
|
||||||
|
activate('en')
|
||||||
|
view_obj = AuthorEntriesView()
|
||||||
|
view_obj.request = request
|
||||||
|
view_obj.kwargs = {'username': 'admin'}
|
||||||
|
qs = view_obj.get_queryset()
|
||||||
|
self.assertEqual(qs.count(), 2)
|
||||||
|
self.assertEqual(set(qs), set([post1, post2]))
|
||||||
|
|
||||||
|
view_obj.paginate_by = 1
|
||||||
|
view_obj.object_list = qs
|
||||||
|
context = view_obj.get_context_data(object_list=view_obj.object_list)
|
||||||
|
self.assertTrue(context['author'])
|
||||||
|
self.assertEqual(context['author'], self.user)
|
||||||
|
self.assertTrue(context['is_paginated'])
|
||||||
|
self.assertEqual(list(context['post_list']), [post2])
|
||||||
|
self.assertEqual(context['paginator'].count, 2)
|
||||||
|
self.assertEqual(context['post_list'][0].title, 'Second post')
|
||||||
|
|
||||||
|
def test_taggedlist_view(self):
|
||||||
|
page1, page2 = self.get_pages()
|
||||||
|
post1, post2 = self.get_posts()
|
||||||
|
post1.tags.add('tag 1', 'tag 2', 'tag 3', 'tag 4')
|
||||||
|
post1.save()
|
||||||
|
post2.tags.add('tag 6', 'tag 2', 'tag 5', 'tag 8')
|
||||||
|
post2.save()
|
||||||
|
|
||||||
|
request = self.get_page_request(page1, self.user, r'/en/blog/', edit=False)
|
||||||
|
activate('en')
|
||||||
|
view_obj = TaggedListView()
|
||||||
|
view_obj.request = request
|
||||||
|
view_obj.kwargs = {'tag': 'tag-2'}
|
||||||
|
qs = view_obj.get_queryset()
|
||||||
|
self.assertEqual(qs.count(), 2)
|
||||||
|
self.assertEqual(set(qs), set([post1, post2]))
|
||||||
|
|
||||||
|
view_obj.paginate_by = 1
|
||||||
|
view_obj.object_list = qs
|
||||||
|
context = view_obj.get_context_data(object_list=view_obj.object_list)
|
||||||
|
self.assertTrue(context['tagged_entries'], 'tag-2')
|
||||||
|
self.assertTrue(context['is_paginated'])
|
||||||
|
self.assertEqual(list(context['post_list']), [post2])
|
||||||
|
self.assertEqual(context['paginator'].count, 2)
|
||||||
|
self.assertEqual(context['post_list'][0].title, 'Second post')
|
||||||
|
|
||||||
|
def test_feed(self):
|
||||||
|
page1, page2 = self.get_pages()
|
||||||
|
post1, post2 = self.get_posts()
|
||||||
|
post1.tags.add('tag 1', 'tag 2', 'tag 3', 'tag 4')
|
||||||
|
post1.save()
|
||||||
|
post2.tags.add('tag 6', 'tag 2', 'tag 5', 'tag 8')
|
||||||
|
post2.save()
|
||||||
|
post1.set_current_language('en')
|
||||||
|
|
||||||
|
feed = LatestEntriesFeed()
|
||||||
|
self.assertEqual(list(feed.items()), [post1])
|
||||||
|
request = self.get_page_request(page1, self.user, r'/en/blog/', lang_code='en', edit=False)
|
||||||
|
xml = feed(request)
|
||||||
|
self.assertContains(xml, post1.get_absolute_url())
|
||||||
|
self.assertContains(xml, 'Blog articles on example.com')
|
||||||
|
|
||||||
|
activate('it')
|
||||||
|
post1.set_current_language('it')
|
||||||
|
feed = LatestEntriesFeed()
|
||||||
|
self.assertEqual(list(feed.items()), [post1])
|
||||||
|
request = self.get_page_request(page1, self.user, r'/it/blog/', lang_code='it', edit=False)
|
||||||
|
xml = feed(request)
|
||||||
|
self.assertContains(xml, post1.get_absolute_url())
|
||||||
|
self.assertContains(xml, 'Articoli del blog su example.com')
|
||||||
|
|
||||||
|
feed = TagFeed()
|
||||||
|
self.assertEqual(list(feed.items('tag-2')), [post1])
|
||||||
|
|
||||||
|
def test_sitemap(self):
|
||||||
|
post1, post2 = self.get_posts()
|
||||||
|
post1.tags.add('tag 1', 'tag 2', 'tag 3', 'tag 4')
|
||||||
|
post1.save()
|
||||||
|
post2.tags.add('tag 6', 'tag 2', 'tag 5', 'tag 8')
|
||||||
|
post2.publish = True
|
||||||
|
post2.save()
|
||||||
|
post1.set_current_language('en')
|
||||||
|
|
||||||
|
sitemap = BlogSitemap()
|
||||||
|
self.assertEqual(sitemap.items().count(), 2)
|
||||||
|
for item in sitemap.items():
|
||||||
|
self.assertTrue(sitemap.lastmod(item).date(), date.today())
|
||||||
|
|
Loading…
Reference in a new issue