# -*- coding: utf-8 -*- from __future__ import unicode_literals from django.test import TestCase, Client from django.core.paginator import EmptyPage from django.utils.translation import activate from utils import create_tests_data, delete_tests_data from .models import News, NewsComplete, NewsExtended class NewsboxI18NModelsTests(TestCase): def setUp(self): create_tests_data('myapp_i18n') def tearDown(self): delete_tests_data('myapp_i18n') # 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_extra_translated_fields(self): news = NewsExtended.objects.get(pk=1) self.assertEqual(list(news.get_available_languages()), ['en', 'fr']) news_fr = NewsExtended.objects.language('fr').get(pk=1) news_en = NewsExtended.objects.language('en').get(pk=1) self.assertEqual( news_fr.content_field, 'Contenu additionnel de l\'actualité 1') self.assertEqual( news_en.content_field, 'Extra content of the news 1') self.assertEqual(news_en.general_field, news_fr.general_field) def test_03_view_archive_200(self): """ Test if generic archive view return right informations. """ c = Client() r = c.get('/en/myapp_i18n/news/') self.assertEqual(r.status_code, 200) self.assertIn('newsset', r.context) self.assertEqual(r.context['newsset'][0].pk, 7) self.assertEqual(r.context['newsset'].number, 1) self.assertEqual(r.context['newsset'].paginator.num_pages, 4) self.assertFalse(r.context['newsset'].has_previous()) self.assertTrue(r.context['newsset'].has_next()) self.assertRaises(EmptyPage, r.context['newsset'].previous_page_number) self.assertEqual(r.context['newsset'].next_page_number(), 2) def test_04_view_detail_200(self): """ Test if generic day views return right informations. """ c = Client() r = c.get('/en/myapp_i18n/news/2005/07/15/news-6/') self.assertEqual(r.status_code, 200) self.assertEqual(r.context['news'].pk, 6) def test_05_view_detail_404_wrong_date(self): """ Test if generic day views return a 404 with an URL with an invalide date """ c = Client() r = c.get('/en/myapp_i18n/news/1984/04/01/news-6/') self.assertEqual(r.status_code, 404) def test_06_view_detail_404_wrong_slug(self): """ Test if generic day views return a 404 with an URL with an invalid slug """ c = Client() r = c.get('/en/myapp_i18n/news/2005/07/15/my-birthday/') self.assertEqual(r.status_code, 404) def test_07_view_detail_404_not_published(self): """ Test if generic day views return a 404 with an URL with a not published news """ c = Client() r = c.get('/en/myapp_i18n/news/2005/07/15/news-2/') self.assertEqual(r.status_code, 404) def test_08_get_absolute_url(self): news6 = News.objects.get(pk=6) expected_results = {'en': '/en/myapp_i18n/news/2005/07/15/news-6/', 'fr': '/fr/myapp_i18n/news/2005/07/15/actualite-6/', } for lang in expected_results: activate(lang) self.assertEqual(news6.get_absolute_url(), expected_results[lang]) def test_09_view_detail_translated(self): c = Client() r_en = c.get('/en/myapp_i18n/news/2005/07/15/news-6/') r_fr = c.get('/fr/myapp_i18n/news/2005/07/15/actualite-6/') self.assertEqual(r_fr.context['news'].pk, r_en.context['news'].pk) self.assertEqual(r_fr.context['news'].newsbox_title, 'Actualité 6') self.assertEqual(r_en.context['news'].newsbox_title, 'News 6')