# -*- 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 cms.api import create_page, add_plugin, create_title from djangocms_text_ckeditor.fields import HTMLField from utils import create_tests_data, delete_tests_data from .models import News, NewsComplete, NewsExtended from .cms_plugins import NewsPlugin 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) self.assertIsInstance(summary_field, HTMLField) class NewsboxPageIntegrationTests(CMSTestCase): # fixtures = ['tests_data.json', ] def setUp(self): 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_en.save() self.plugin_fr = add_plugin(self.placeholder, 'NewsPlugin', 'fr', title='Actualités', numitems=1, with_pager=True, page_link=None, ) self.plugin_fr.save() 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') def test_01_cmsplugin_context(self): expected_results = {'en': 'News 7', 'fr': 'Actualité 7', } 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])