Skip to content
Snippets Groups Projects
tests.py 3.81 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 .models import News, NewsComplete, NewsExtended


class NewsboxAbstractModelsTests(TestCase):

Dylann Cordel's avatar
Dylann Cordel committed
    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'])
        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/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)
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/newsbox/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(self):
        """
        Test if generic day views return a 404 with an URL with a date without
Olivier Le Brouster's avatar
Olivier Le Brouster committed
        any news.
        """
        c = Client()
        r = c.get('/en/newsbox/myapp_i18n/news/1985/07/02/my-birthday/')
Olivier Le Brouster's avatar
Olivier Le Brouster committed
        self.assertEqual(r.status_code, 404)

    def test_06_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/newsbox/myapp_i18n/news/2014/02/22/news-2/')
Olivier Le Brouster's avatar
Olivier Le Brouster committed
        self.assertEqual(r.status_code, 404)

    def test_07_view_detail_translated(self):
        c = Client()
        r_en = c.get('/en/newsbox/myapp_i18n/news/2005/07/15/news-6/')
        r_fr = c.get('/fr/newsbox/myapp_i18n/news/2005/07/15/actualite-6/')
Olivier Le Brouster's avatar
Olivier Le Brouster committed
        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')

    def test_08_get_absolute_url(self):
        news6 = News.objects.get(pk=6)
Dylann Cordel's avatar
Dylann Cordel committed
        expected_results = {'en': '/en/newsbox/myapp_i18n/news/2005/07/15/news-6/',
                            'fr': '/fr/newsbox/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])