Newer
Older
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.test import TestCase, Client
from django.contrib.auth.models import User
from django.core.paginator import EmptyPage
from django.utils.translation import activate
from cms.test_utils.testcases import CMSTestCase
from djangocms_text_ckeditor.fields import HTMLField
from utils import create_tests_data, delete_tests_data
class NewsboxAllModelsTests(TestCase):
def setUp(self):
create_tests_data('myapp_all')
def tearDown(self):
delete_tests_data('myapp_all')
# fixtures = ['tests_data.json', ]
def test_01_manager_published(self):
"""
Test if we only get really published news via the manager
"""
newsClasses = [
News, NewsComplete, NewsExtended,
]
for cls in newsClasses:
returned_ids = list(cls.objects.published().values_list(
'id', flat=True).order_by('id'))
self.assertEqual((cls.__name__, returned_ids),
(cls.__name__, [1, 4, 6, 7, ]))
def test_02_summary_as_html_field(self):
"""
Test if newsbox_summary field is HTMLField
"""
newsClasses = [
News, NewsComplete, NewsExtended,
]
for cls in newsClasses:
try:
transmodel = cls.translations.related.related_model
summary_field = transmodel._meta.get_field('newsbox_summary')
except:
self.fail('%s is not properly configured' % cls)
class NewsboxPageIntegrationTests(CMSTestCase):
# fixtures = ['tests_data.json', ]
create_tests_data('myapp_all')
self.super_user = User(username="test", is_staff=True, is_active=True, is_superuser=True)
self.super_user.set_password("test")
self.super_user.save()
home = create_page(title='Home', slug='home', template='page.html',
language='en', published=True, reverse_id='home', in_navigation=True)
create_title('fr', 'Accueil', home, slug='accueil')
home.publish('en')
home.publish('fr')
self.page = create_page(title='News page', slug='news-page', template='page.html',
parent=home, language='en', published=True, apphook='NewsApphook',
reverse_id='newspage', in_navigation=True)
create_title('fr', 'page Actualités', self.page, slug='page-actualites')
self.placeholder = self.page.placeholders.get(slot='main')
self.plugin_en = add_plugin(self.placeholder, 'NewsPlugin', 'en', title='News',
numitems=1, with_pager=True, page_link=None, )
self.plugin_fr = add_plugin(self.placeholder, 'NewsPlugin', 'fr', title='Actualités',
numitems=1, with_pager=True, page_link=None, )
self.page.publish('en')
self.page.publish('fr')
self.page.reload()
self.newsPlugin = NewsPlugin()
self.placeholder = self.page.placeholders.get(slot='main')
def tearDown(self):
delete_tests_data('myapp_all')
for lang in expected_results:
activate(lang)
context = self.get_context(
self.page.get_absolute_url(), page=self.page)
self.newsPlugin.render(context,
getattr(self, 'plugin_%s' % lang),
self.placeholder)
self.assertIn('newsset', context)
self.assertEqual(context['newsset'][0].pk, 7)
self.assertEqual(context['newsset'][0].newsbox_title,
expected_results[lang])
self.assertEqual(context['newsset'].number, 1)
self.assertEqual(context['newsset'].paginator.num_pages, 4)
self.assertFalse(context['newsset'].has_previous())
self.assertTrue(context['newsset'].has_next())
self.assertRaises(EmptyPage, context['newsset'].previous_page_number)
self.assertEqual(context['newsset'].next_page_number(), 2)
def test_02_wrong_language_404(self):
c = Client()
r_en = c.get('/en/news-page/2014/03/07/news-7/')
r_fr = c.get('/fr/page-actualites/2014/03/07/actualite-7/')
r_en_and_fr = c.get('/en/news-page/2014/03/07/actualite-7/')
self.assertEqual(r_en.status_code, 200)
self.assertEqual(r_fr.status_code, 200)
self.assertEqual(r_en_and_fr.status_code, 404)
def test_03_get_absolute_url(self):
news7 = News.objects.get(pk=7)
expected_results = {'en': '/en/news-page/2014/03/07/news-7/',
'fr': '/fr/page-actualites/2014/03/07/actualite-7/', }
for lang in expected_results:
activate(lang)
self.assertEqual(news7.get_absolute_url(), expected_results[lang])