Skip to content
Snippets Groups Projects
tests.py 4.19 KiB
Newer Older
Olivier Le Brouster's avatar
Olivier Le Brouster committed
# -*- 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
Olivier Le Brouster's avatar
Olivier Le Brouster committed
from .models import News, NewsComplete, NewsExtended


class NewsboxI18NModelsTests(TestCase):
Olivier Le Brouster's avatar
Olivier Le Brouster committed

    def setUp(self):
        create_tests_data('myapp_i18n')

    def tearDown(self):
        delete_tests_data('myapp_i18n')

    # fixtures = ['tests_data.json', ]
Olivier Le Brouster's avatar
Olivier Le Brouster committed
    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'))
Dylann Cordel's avatar
Dylann Cordel committed
            self.assertEqual((cls.__name__, returned_ids),
                             (cls.__name__, [1, 4, 6, 7, ]))
Olivier Le Brouster's avatar
Olivier Le Brouster committed

    def test_02_extra_translated_fields(self):
        news = NewsExtended.objects.get(pk=1)
        self.assertEqual(list(news.get_available_languages()), ['en', 'fr'])
Olivier Le Brouster's avatar
Olivier Le Brouster committed
        news_fr = NewsExtended.objects.language('fr').get(pk=1)
        news_en = NewsExtended.objects.language('en').get(pk=1)
        self.assertEqual(
            news_fr.content_field,
Olivier Le Brouster's avatar
Olivier Le Brouster committed
            'Contenu additionnel de l\'actualité 1')
        self.assertEqual(
            news_en.content_field,
Olivier Le Brouster's avatar
Olivier Le Brouster committed
            'Extra content of the news 1')
        self.assertEqual(news_en.general_field, news_fr.general_field)
Olivier Le Brouster's avatar
Olivier Le Brouster committed
    def test_03_view_archive_200(self):
        """
        Test if generic archive view return right informations.
        """
        c = Client()
        r = c.get('/en/myapp_i18n/news/')
Olivier Le Brouster's avatar
Olivier Le Brouster committed

        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)
Olivier Le Brouster's avatar
Olivier Le Brouster committed
    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/')
Olivier Le Brouster's avatar
Olivier Le Brouster committed
        self.assertEqual(r.status_code, 200)
        self.assertEqual(r.context['news'].pk, 6)

    def test_05_view_detail_404_wrong_date(self):
Olivier Le Brouster's avatar
Olivier Le Brouster committed
        """
        Test if generic day views return a 404 with an URL with an invalide date
Olivier Le Brouster's avatar
Olivier Le Brouster committed
        """
        c = Client()
        r = c.get('/en/myapp_i18n/news/1984/04/01/news-6/')
Olivier Le Brouster's avatar
Olivier Le Brouster committed
        self.assertEqual(r.status_code, 404)

    def test_06_view_detail_404_wrong_slug(self):
Olivier Le Brouster's avatar
Olivier Le Brouster committed
        """
        Test if generic day views return a 404 with an URL with an invalid slug
Olivier Le Brouster's avatar
Olivier Le Brouster committed
        """
        c = Client()
        r = c.get('/en/myapp_i18n/news/2005/07/15/my-birthday/')
Olivier Le Brouster's avatar
Olivier Le Brouster committed
        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
        """
Olivier Le Brouster's avatar
Olivier Le Brouster committed
        c = Client()
        r = c.get('/en/myapp_i18n/news/2005/07/15/news-2/')
        self.assertEqual(r.status_code, 404)
Olivier Le Brouster's avatar
Olivier Le Brouster committed

    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/', }
Olivier Le Brouster's avatar
Olivier Le Brouster committed
        for lang in expected_results:
            activate(lang)
            self.assertEqual(news6.get_absolute_url(), expected_results[lang])
Dylann Cordel's avatar
Dylann Cordel committed

    def test_09_view_detail_translated(self):
Dylann Cordel's avatar
Dylann Cordel committed
        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')