From 58a9c41a21be0ab4a02b65133d66be87957af49e Mon Sep 17 00:00:00 2001 From: Iacopo Spalletti Date: Wed, 11 Jun 2014 01:06:57 +0200 Subject: [PATCH] View tests --- djangocms_blog/views.py | 2 +- runtests.py | 2 + tests/__init__.py | 8 +- tests/test_models.py | 26 ------ tests/test_utils/templates/base.html | 6 ++ tests/test_utils/templates/page.html | 5 +- tests/test_views.py | 117 +++++++++++++++++++++++++++ 7 files changed, 137 insertions(+), 29 deletions(-) create mode 100644 tests/test_utils/templates/base.html create mode 100644 tests/test_views.py diff --git a/djangocms_blog/views.py b/djangocms_blog/views.py index 21e49ab..913b5ed 100644 --- a/djangocms_blog/views.py +++ b/djangocms_blog/views.py @@ -17,7 +17,7 @@ class BaseBlogView(ViewUrlMixin): def get_queryset(self): language = get_language() - manager = self.model._default_manager.language(language) + manager = self.model._default_manager.active_translations(language_code=language) if not self.request.user.is_staff: manager = manager.filter(publish=True) return manager diff --git a/runtests.py b/runtests.py index b76eb79..d2e44b9 100644 --- a/runtests.py +++ b/runtests.py @@ -55,6 +55,8 @@ try: 'filer', 'parler', 'taggit', + 'meta', + 'meta_mixin', 'easy_thumbnails', 'djangocms_text_ckeditor', 'cmsplugin_filer_image', diff --git a/tests/__init__.py b/tests/__init__.py index 418473b..a311d6b 100644 --- a/tests/__init__.py +++ b/tests/__init__.py @@ -7,6 +7,7 @@ from cmsplugin_filer_image.models import ThumbnailOption from django.contrib.auth.models import User from django.http import SimpleCookie from django.test import TestCase, RequestFactory +from django.utils.translation import activate from six import StringIO from djangocms_blog.models import BlogCategory, Post @@ -27,7 +28,7 @@ class BaseTest(TestCase): 'it': [ {'title': u'Primo post', 'abstract': u'

prima riga

', 'description': u'Questa รจ la descrizione', 'keywords': u'keyword1, keyword2', - 'text': u'Testo del post'}, + 'text': u'Testo del post',}, {'title': u'Secondo post', 'abstract': u'

prima riga del secondo post

', 'description': u'Descrizione del secondo post', 'keywords': u'keyword3, keyword4', 'text': u'Testo del secondo post'}, @@ -50,10 +51,15 @@ class BaseTest(TestCase): cls.user_normal = User.objects.create(username='normal') def setUp(self): + activate('en') super(BaseTest, self).setUp() self.category_1 = BlogCategory.objects.create() self.category_1.name = u'category 1' self.category_1.save() + self.category_1.set_current_language('it') + self.category_1.name = u'categoria 1' + self.category_1.save() + self.category_1.set_current_language('en') self.thumb_1 = ThumbnailOption.objects.create( name='base', width=100, height=100, crop=True, upscale=False ) diff --git a/tests/test_models.py b/tests/test_models.py index 11212b4..8aa79d6 100644 --- a/tests/test_models.py +++ b/tests/test_models.py @@ -201,29 +201,3 @@ class ModelsTest(BaseTest): copy_plugins_to(plugins, post_2.content) new = downcast_plugins(post_2.content.cmsplugin_set.all()) self.assertEqual(set(new[0].authors.all()), set([self.user])) - - """ - 'title': 'title', - 'description': 'get_description', - 'og_description': 'get_description', - 'twitter_description': 'get_description', - 'gplus_description': 'get_description', - 'keywords': 'get_keywords', - 'locale': None, - 'image': 'get_image_url', - 'object_type': settings.BLOG_TYPE, - 'og_type': settings.BLOG_FB_TYPE, - 'og_app_id': settings.BLOG_FB_APPID, - 'og_profile_id': settings.BLOG_FB_PROFILE_ID, - 'og_publisher': settings.BLOG_FB_PUBLISHER, - 'og_author_url': settings.BLOG_FB_AUTHOR_URL, - 'twitter_type': settings.BLOG_TWITTER_TYPE, - 'twitter_site': settings.BLOG_TWITTER_SITE, - 'twitter_author': settings.BLOG_TWITTER_AUTHOR, - 'gplus_type': settings.BLOG_GPLUS_TYPE, - 'gplus_author': settings.BLOG_GPLUS_AUTHOR, - 'published_time': 'date_published', - 'modified_time': 'date_modified', - 'expiration_time': 'date_published_end', - 'tag': 'get_tags', - 'url': 'get_absolute_url',""" \ No newline at end of file diff --git a/tests/test_utils/templates/base.html b/tests/test_utils/templates/base.html new file mode 100644 index 0000000..7d7532c --- /dev/null +++ b/tests/test_utils/templates/base.html @@ -0,0 +1,6 @@ +{% include "page.html" %} +{% block content %} +
+ {% block content_blog %}{% endblock %} +
+{% endblock content %} \ No newline at end of file diff --git a/tests/test_utils/templates/page.html b/tests/test_utils/templates/page.html index a536b92..1f1b1cf 100644 --- a/tests/test_utils/templates/page.html +++ b/tests/test_utils/templates/page.html @@ -1,6 +1,9 @@ {% load cms_tags sekizai_tags %} {% render_block "css" %} {% cms_toolbar %} -{% placeholder "placeholder" %} + +{% block content %} + {% placeholder "placeholder" %} +{% endblock content %} {% render_block "js" %} \ No newline at end of file diff --git a/tests/test_views.py b/tests/test_views.py new file mode 100644 index 0000000..86cba63 --- /dev/null +++ b/tests/test_views.py @@ -0,0 +1,117 @@ +# -*- coding: utf-8 -*- +from datetime import date +from django.contrib.auth.models import AnonymousUser +from django.http import Http404 +from django.utils.translation import activate +from djangocms_blog.views import PostListView, PostDetailView, PostArchiveView + +from . import BaseTest + + +class ViewTest(BaseTest): + + def test_post_list_view(self): + page1, page2 = self.get_pages() + post_1 = self._get_post(self.data['en'][0]) + 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) + activate('en') + view_obj = PostListView() + view_obj.request = request + + self.assertEqual(list(view_obj.get_queryset()), [post_1]) + + request = self.get_page_request(page1, self.user, r'/en/blog/', edit=False) + view_obj.request = request + self.assertEqual(set(view_obj.get_queryset()), set([post_1, post_2])) + + view_obj.kwargs = {} + view_obj.object_list = view_obj.get_queryset() + view_obj.paginate_by = 1 + context = view_obj.get_context_data() + self.assertTrue(context['is_paginated']) + self.assertEqual(list(context['post_list']), [post_2]) + self.assertEqual(context['paginator'].count, 2) + self.assertEqual(context['post_list'][0].title, 'Second post') + response = view_obj.render_to_response(context) + self.assertContains(response, context['post_list'][0].get_absolute_url()) + + request = self.get_page_request(page1, self.user, r'/it/blog/', lang_code='it', edit=False) + activate('it') + view_obj.request = request + view_obj.object_list = view_obj.get_queryset() + context = view_obj.get_context_data() + self.assertEqual(context['post_list'][0].title, 'Secondo post') + response = view_obj.render_to_response(context) + self.assertContains(response, context['post_list'][0].get_absolute_url()) + + def test_post_detail_view(self): + page1, page2 = self.get_pages() + post_1 = self._get_post(self.data['en'][0]) + 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) + activate('en') + view_obj = PostDetailView() + view_obj.request = request + + with self.assertRaises(Http404): + view_obj.kwargs = {'slug': 'not-existing'} + post_obj = view_obj.get_object() + + view_obj.kwargs = {'slug': post_1.slug} + post_obj = view_obj.get_object() + self.assertEqual(post_obj, post_1) + self.assertEqual(post_obj.language_code, 'en') + + request = self.get_page_request(page1, AnonymousUser(), r'/it/blog/', lang_code='it', edit=False) + activate('it') + view_obj.request = request + post_obj = view_obj.get_object() + self.assertEqual(post_obj, post_1) + self.assertEqual(post_obj.language_code, 'it') + + view_obj.object = post_obj + context = view_obj.get_context_data() + self.assertEqual(context['post'], post_1) + self.assertEqual(context['post'].language_code, 'it') + self.assertTrue(context['meta']) + + def test_post_archive_view(self): + page1, page2 = self.get_pages() + post_1 = self._get_post(self.data['en'][0]) + 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) + activate('en') + view_obj = PostArchiveView() + view_obj.request = request + view_obj.kwargs = {'year': date.today().year, 'month': date.today().month} + + # One post only, anonymous request + qs = view_obj.get_queryset() + self.assertEqual(qs.count(), 1) + self.assertEqual(list(qs), [post_1]) + + view_obj.object_list = qs + context = view_obj.get_context_data() + self.assertEqual(context['archive_date'], date(year=date.today().year, month=date.today().month, day=1)) \ No newline at end of file