diff --git a/apps/conference/tests/__init__.py b/apps/conference/tests/__init__.py index 4a7770a9..741da8c7 100644 --- a/apps/conference/tests/__init__.py +++ b/apps/conference/tests/__init__.py @@ -1,2 +1,2 @@ -# from .test_models import * +from .test_models import * from .test_views import * diff --git a/apps/conference/tests/test_views.py b/apps/conference/tests/test_views.py index c0429965..400aba7f 100644 --- a/apps/conference/tests/test_views.py +++ b/apps/conference/tests/test_views.py @@ -1,12 +1,23 @@ # -*- coding: utf-8 -*- -from city.models import City -from country.models import Country -from django.core.urlresolvers import reverse + +from django.core.urlresolvers import reverse, NoReverseMatch from django.test import TestCase from django.utils.translation import ugettext as _ +from django.conf import settings + +from city.models import City +from conference.models import Conference +from country.models import Country + from functions.views_help import get_side_items +############################################################################### +# ConferenceBy +############################################################################### +from theme.models import Theme + + class ConferenceByTest(object): """Функционал 'абстрактного' класса ConferenceBy""" def setUp(self): @@ -18,7 +29,7 @@ class ConferenceByTest(object): 'client/conference/conference_by.html' ) - def test_is_available(self): + def test_page_is_available(self): self.assertEqual(self.response.status_code, 200) def test_titles(self): @@ -39,6 +50,7 @@ class ConferenceByTest(object): self.response, obj.url ) + class CanFilterAndSidePopular(object): """Функционал can_filter and side_popular in get_context_data""" def test_can_filter(self): @@ -56,6 +68,9 @@ class CanFilterAndSidePopular(object): self.assertContains(self.response, popular.get('name')) +############################################################################### + + class ConferenceByCountryTest(ConferenceByTest, CanFilterAndSidePopular, TestCase): url = reverse('conference_country') title1 = _(u'По странам') @@ -86,15 +101,1299 @@ class ConferenceByCityTest(ConferenceByTest, CanFilterAndSidePopular, TestCase): model = City +############################################################################### +# ConferenceCatalog +############################################################################### + + class ConferenceCatalogTest(object): + """Функционал абстрактного класа ConferenceCatalog_""" + conf = Conference.objects.all()[0] + def test_template(self): self.assertTemplateUsed( self.response, 'client/conference/catalog.html' ) + def test_page_is_available(self): + self.assertEqual(self.response.status_code, 200) + + def test_context_data(self): + context = self.response.context[-1] + + self.assertIn('filter_object', context) + self.assertIn('year', context) + self.assertIn('month', context) + self.assertIn('catalog_url', context) + + +class CommonConferenceCatalogTest(object): + def test_slug_wrong(self): + self.url_kwargs['slug'] = 'liuwyf' + url = reverse( + self.url_name, + kwargs=self.url_kwargs + ) + response = self.client.get(url) + self.assertEqual(response.status_code, 404) + + def check_page_with_negative_index(self): + self.url_kwargs['page'] = -1 + try: + url = reverse( + self.url_name, + kwargs=self.url_kwargs + ) + except NoReverseMatch: + pass + + def check_page_is_very_large(self): + self.url_kwargs['page'] = 1024 + url = reverse( + self.url_name, + kwargs=self.url_kwargs + ) + response = self.client.get(url) + self.assertEqual(response.status_code, 302) + + +class ContextDataCountryCityCatalogTest(object): + def test_context_data(self): + context = self.response.context[-1] + ctx_country_id = context.get('country')[0] + country = self.model.objects.get(url=self.url_kwargs.get('slug')) + + self.assertEqual(ctx_country_id, str(country.id)) + + +class ContextDataThemeCatalogTest(object): + def test_context_data(self): + context = self.response.context[-1] + if 'country' in context: + ctx_country = context.get('country') + country = Country.objects.get(url=self.url_kwargs.get('country_slug')) + self.assertEqual(ctx_country, country) + if 'city' in context: + ctx_city = context.get('city') + city = City.objects.get( + url=self.url_kwargs.get('city_slug')) + self.assertEqual(ctx_city, city) + + theme_for_filter = context.get('theme_for_filter') + ctx_themes = context.get('themes') + themes = Theme.objects.language().filter(name=theme_for_filter) + + self.assertEqual( + sorted(themes.values_list('id', flat=True)), + sorted([int(i) for i in ctx_themes]) + ) + +def month_convert(number): + """ + Переводит числовое представление месяца в строковое + """ + mapping = {v['value']: k for k, v in settings.MONTHES.items()} + return mapping.get(number) + + +############################################################################### +# ConferenceCountryCatalog + + +class ConferenceCountryCatalogSlugYearMonthPageTest( + ConferenceCatalogTest, CommonConferenceCatalogTest, + ContextDataCountryCityCatalogTest, TestCase): + url_name = 'conference_country_catalog_slug_year_month_page' + model = Country + + def setUp(self): + self.month = self.conf.data_begin.month + self.url_kwargs = { + 'slug': self.conf.country.url, + 'year': self.conf.data_end.year, + 'month': month_convert(self.month), + 'page': 1 + } + url = reverse( + self.url_name, + kwargs=self.url_kwargs + ) + self.response = self.client.get(url) + + def test_queryset(self): + object_list = self.response.context[-1].get('object_list') + + conferences = Conference.objects.filter( + country__url=self.url_kwargs.get('slug'), + data_end__year=self.url_kwargs.get('year'), + data_begin__month=self.month + ) + + self.assertEqual( + sorted(list(object_list), key=lambda x: x.pk), + sorted(list(conferences), key=lambda x: x.pk) + ) + + def test_page_with_negative_index(self): + self.check_page_with_negative_index() + + def test_page_is_very_large(self): + self.check_page_is_very_large() + + +class ConferenceCountryCatalogSlugYearPageTest( + ConferenceCatalogTest, CommonConferenceCatalogTest, + ContextDataCountryCityCatalogTest, TestCase): + url_name = 'conference_country_catalog_slug_year_page' + model = Country + + def setUp(self): + self.month = self.conf.data_begin.month + self.url_kwargs = { + 'slug': self.conf.country.url, + 'year': self.conf.data_end.year, + 'page': 1 + } + url = reverse( + self.url_name, + kwargs=self.url_kwargs + ) + self.response = self.client.get(url) + + def test_queryset(self): + object_list = self.response.context[-1].get('object_list') + + conferences = Conference.objects.filter( + country__url=self.url_kwargs.get('slug'), + data_end__year=self.url_kwargs.get('year') + ) + + self.assertEqual( + sorted(list(object_list), key=lambda x: x.pk), + sorted(list(conferences), key=lambda x: x.pk) + ) + + def test_page_with_negative_index(self): + self.check_page_with_negative_index() + + def test_page_is_very_large(self): + self.check_page_is_very_large() + + +class ConferenceCountryCatalogSlugPageTest( + ConferenceCatalogTest, CommonConferenceCatalogTest, + ContextDataCountryCityCatalogTest, TestCase): + url_name = 'conference_country_catalog_slug_page' + model = Country + + def setUp(self): + self.url_kwargs = { + 'slug': self.conf.country.url, + 'page': 1 + } + url = reverse( + self.url_name, + kwargs=self.url_kwargs + ) + self.response = self.client.get(url) + + def test_queryset(self): + object_list = self.response.context[-1].get('object_list') + + conferences = Conference.objects.filter( + country__url=self.url_kwargs.get('slug') + ) + + self.assertEqual( + sorted(list(object_list), key=lambda x: x.pk), + sorted(list(conferences), key=lambda x: x.pk) + ) + + def test_page_with_negative_index(self): + self.check_page_with_negative_index() + + def test_page_very_large(self): + self.check_page_is_very_large() + + +class ConferenceCountryCatalogSlugYearMonthTest( + ConferenceCatalogTest, CommonConferenceCatalogTest, + ContextDataCountryCityCatalogTest, TestCase): + url_name = 'conference_country_catalog_slug_year_month' + model = Country + + def setUp(self): + self.month = self.conf.data_begin.month + self.url_kwargs = { + 'slug': self.conf.country.url, + 'year': self.conf.data_end.year, + 'month': month_convert(self.month) + } + url = reverse( + self.url_name, + kwargs=self.url_kwargs + ) + self.response = self.client.get(url) + + def test_queryset(self): + object_list = self.response.context[-1].get('object_list') + + conferences = Conference.objects.filter( + country__url=self.url_kwargs.get('slug'), + data_end__year=self.url_kwargs.get('year'), + data_begin__month=self.month + ) + + self.assertEqual( + sorted(list(object_list), key=lambda x: x.pk), + sorted(list(conferences), key=lambda x: x.pk) + ) + + +class ConferenceCountryCatalogSlugYearTest( + ConferenceCatalogTest, CommonConferenceCatalogTest, + ContextDataCountryCityCatalogTest, TestCase): + url_name = 'conference_country_catalog_slug_year' + model = Country + + def setUp(self): + self.url_kwargs = { + 'slug': self.conf.country.url, + 'year': self.conf.data_end.year, + } + url = reverse( + self.url_name, + kwargs=self.url_kwargs + ) + self.response = self.client.get(url) + + def test_queryset(self): + object_list = self.response.context[-1].get('object_list') + + conferences = Conference.objects.filter( + country__url=self.url_kwargs.get('slug'), + data_end__year=self.url_kwargs.get('year') + ) + + self.assertEqual( + sorted(list(object_list), key=lambda x: x.pk), + sorted(list(conferences), key=lambda x: x.pk) + ) + + +class ConferenceCountryCatalogSlugTest( + ConferenceCatalogTest, CommonConferenceCatalogTest, + ContextDataCountryCityCatalogTest, TestCase): + url_name = 'conf_country' + model = Country + + def setUp(self): + self.url_kwargs = { + 'slug': self.conf.country.url, + } + url = reverse( + self.url_name, + kwargs=self.url_kwargs + ) + self.response = self.client.get(url) + + def test_queryset(self): + object_list = self.response.context[-1].get('object_list') + + conferences = Conference.objects.filter( + country__url=self.url_kwargs.get('slug') + ) + + self.assertEqual( + sorted(list(object_list), key=lambda x: x.pk), + sorted(list(conferences), key=lambda x: x.pk) + ) + + +############################################################################### +# ConferenceCityCatalog + + +class ConferenceCityCatalogSlugYearMonthPageTest( + ConferenceCatalogTest, CommonConferenceCatalogTest, + ContextDataCountryCityCatalogTest, TestCase): + url_name = 'conference_city_catalog_slug_year_month_page' + model = City + + def setUp(self): + self.month = self.conf.data_begin.month + self.url_kwargs = { + 'slug': self.conf.city.url, + 'year': self.conf.data_end.year, + 'month': month_convert(self.month), + 'page': 1 + } + url = reverse( + self.url_name, + kwargs=self.url_kwargs + ) + self.response = self.client.get(url) + + def test_queryset(self): + object_list = self.response.context[-1].get('object_list') + + conferences = Conference.objects.filter( + city__url=self.url_kwargs.get('slug'), + data_end__year=self.url_kwargs.get('year'), + data_begin__month=self.month + ) + + self.assertEqual( + sorted(list(object_list), key=lambda x: x.pk), + sorted(list(conferences), key=lambda x: x.pk) + ) + + def test_page_with_negative_index(self): + self.check_page_with_negative_index() + + def test_page_is_very_large(self): + self.check_page_is_very_large() + + +class ConferenceCityCatalogSlugYearPageTest( + ConferenceCatalogTest, CommonConferenceCatalogTest, + ContextDataCountryCityCatalogTest, TestCase): + url_name = 'conference_city_catalog_slug_year_page' + model = City + + def setUp(self): + self.month = self.conf.data_begin.month + self.url_kwargs = { + 'slug': self.conf.city.url, + 'year': self.conf.data_end.year, + 'page': 1 + } + url = reverse( + self.url_name, + kwargs=self.url_kwargs + ) + self.response = self.client.get(url) + + def test_queryset(self): + object_list = self.response.context[-1].get('object_list') + + conferences = Conference.objects.filter( + city__url=self.url_kwargs.get('slug'), + data_end__year=self.url_kwargs.get('year') + ) + + self.assertEqual( + sorted(list(object_list), key=lambda x: x.pk), + sorted(list(conferences), key=lambda x: x.pk) + ) + + def test_page_with_negative_index(self): + self.check_page_with_negative_index() + + def test_page_is_very_large(self): + self.check_page_is_very_large() + + +class ConferenceCityCatalogSlugPageTest( + ConferenceCatalogTest, CommonConferenceCatalogTest, + ContextDataCountryCityCatalogTest, TestCase): + url_name = 'conference_city_catalog_slug_page' + model = City + + def setUp(self): + self.url_kwargs = { + 'slug': self.conf.city.url, + 'page': 1 + } + url = reverse( + self.url_name, + kwargs=self.url_kwargs + ) + self.response = self.client.get(url) + + def test_queryset(self): + object_list = self.response.context[-1].get('object_list') + + conferences = Conference.objects.filter( + city__url=self.url_kwargs.get('slug') + ) + + self.assertEqual( + sorted(list(object_list), key=lambda x: x.pk), + sorted(list(conferences), key=lambda x: x.pk) + ) + + def test_page_with_negative_index(self): + self.check_page_with_negative_index() + + def test_page_very_large(self): + self.check_page_is_very_large() + + +class ConferenceCityCatalogSlugYearMonthTest( + ConferenceCatalogTest, CommonConferenceCatalogTest, + ContextDataCountryCityCatalogTest, TestCase): + url_name = 'conference_city_catalog_slug_year_month' + model = City + + def setUp(self): + self.month = self.conf.data_begin.month + self.url_kwargs = { + 'slug': self.conf.city.url, + 'year': self.conf.data_end.year, + 'month': month_convert(self.month) + } + url = reverse( + self.url_name, + kwargs=self.url_kwargs + ) + self.response = self.client.get(url) + + def test_queryset(self): + object_list = self.response.context[-1].get('object_list') + + conferences = Conference.objects.filter( + city__url=self.url_kwargs.get('slug'), + data_end__year=self.url_kwargs.get('year'), + data_begin__month=self.month + ) + + self.assertEqual( + sorted(list(object_list), key=lambda x: x.pk), + sorted(list(conferences), key=lambda x: x.pk) + ) + + +class ConferenceCityCatalogSlugYearTest( + ConferenceCatalogTest, CommonConferenceCatalogTest, + ContextDataCountryCityCatalogTest, TestCase): + url_name = 'conference_city_catalog_slug_year' + model = City + + def setUp(self): + self.url_kwargs = { + 'slug': self.conf.city.url, + 'year': self.conf.data_end.year, + } + url = reverse( + self.url_name, + kwargs=self.url_kwargs + ) + self.response = self.client.get(url) + + def test_queryset(self): + object_list = self.response.context[-1].get('object_list') + + conferences = Conference.objects.filter( + city__url=self.url_kwargs.get('slug'), + data_end__year=self.url_kwargs.get('year') + ) + + self.assertEqual( + sorted(list(object_list), key=lambda x: x.pk), + sorted(list(conferences), key=lambda x: x.pk) + ) + + +class ConferenceCityCatalogSlugTest( + ConferenceCatalogTest, CommonConferenceCatalogTest, + ContextDataCountryCityCatalogTest, TestCase): + url_name = 'conf_city' + model = City + + def setUp(self): + self.url_kwargs = { + 'slug': self.conf.city.url, + } + url = reverse( + self.url_name, + kwargs=self.url_kwargs + ) + self.response = self.client.get(url) + + def test_queryset(self): + object_list = self.response.context[-1].get('object_list') + + conferences = Conference.objects.filter( + city__url=self.url_kwargs.get('slug') + ) + + self.assertEqual( + sorted(list(object_list), key=lambda x: x.pk), + sorted(list(conferences), key=lambda x: x.pk) + ) + + +############################################################################### +# ConferenceThemeCatalog + + +class ConferenceThemeCatalogSlugCountryslugYearMonthPageTest( + ConferenceCatalogTest, CommonConferenceCatalogTest, + ContextDataThemeCatalogTest, TestCase): + url_name = 'conference_theme_catalog_slug_countryslug_year_month_page' + + def setUp(self): + self.month = self.conf.data_begin.month + theme_slug = self.conf.theme.all()[0].url + self.url_kwargs = { + 'slug': theme_slug, + 'country_slug': self.conf.country.url, + 'year': self.conf.data_end.year, + 'month': month_convert(self.month), + 'page': 1 + } + url = reverse( + self.url_name, + kwargs=self.url_kwargs + ) + self.response = self.client.get(url) + + def test_queryset(self): + object_list = self.response.context[-1].get('object_list') + + conferences = Conference.objects.filter( + theme__url=self.url_kwargs.get('slug'), + country__url=self.url_kwargs.get('country_slug'), + data_end__year=self.url_kwargs.get('year'), + data_begin__month=self.month + ) + + self.assertEqual( + sorted(list(object_list), key=lambda x: x.pk), + sorted(list(conferences), key=lambda x: x.pk) + ) + + def test_page_with_negative_index(self): + self.check_page_with_negative_index() + + def test_page_is_very_large(self): + self.check_page_is_very_large() + + # TODO вынести в родительский клас + def test_template(self): + self.assertTemplateUsed( + self.response, + 'conference/catalog_theme.html' + ) + + +class ConferenceThemeCatalogSlugCountryslugYearPageTest( + ConferenceCatalogTest, CommonConferenceCatalogTest, + ContextDataThemeCatalogTest, TestCase): + url_name = 'conference_theme_catalog_slug_countryslug_year_page' + + def setUp(self): + theme_slug = self.conf.theme.all()[0].url + self.url_kwargs = { + 'slug': theme_slug, + 'country_slug': self.conf.country.url, + 'year': self.conf.data_end.year, + 'page': 1 + } + url = reverse( + self.url_name, + kwargs=self.url_kwargs + ) + self.response = self.client.get(url) + + def test_queryset(self): + object_list = self.response.context[-1].get('object_list') + + conferences = Conference.objects.filter( + theme__url=self.url_kwargs.get('slug'), + country__url=self.url_kwargs.get('country_slug'), + data_end__year=self.url_kwargs.get('year'), + ) + + self.assertEqual( + sorted(list(object_list), key=lambda x: x.pk), + sorted(list(conferences), key=lambda x: x.pk) + ) + + def test_page_with_negative_index(self): + self.check_page_with_negative_index() + + def test_page_is_very_large(self): + self.check_page_is_very_large() + + def test_template(self): + self.assertTemplateUsed( + self.response, + 'conference/catalog_theme.html' + ) + + +class ConferenceThemeCatalogSlugCountryslugYearMonthTest( + ConferenceCatalogTest, CommonConferenceCatalogTest, + ContextDataThemeCatalogTest, TestCase): + url_name = 'conference_theme_catalog_slug_countryslug_year_month' + + def setUp(self): + self.month = self.conf.data_begin.month + theme_slug = self.conf.theme.all()[0].url + self.url_kwargs = { + 'slug': theme_slug, + 'country_slug': self.conf.country.url, + 'year': self.conf.data_end.year, + 'month': month_convert(self.month) + } + url = reverse( + self.url_name, + kwargs=self.url_kwargs + ) + self.response = self.client.get(url) + + def test_queryset(self): + object_list = self.response.context[-1].get('object_list') + + conferences = Conference.objects.filter( + theme__url=self.url_kwargs.get('slug'), + country__url=self.url_kwargs.get('country_slug'), + data_end__year=self.url_kwargs.get('year'), + data_begin__month=self.month + ) + + self.assertEqual( + sorted(list(object_list), key=lambda x: x.pk), + sorted(list(conferences), key=lambda x: x.pk) + ) + + def test_template(self): + self.assertTemplateUsed( + self.response, + 'conference/catalog_theme.html' + ) + + +class ConferenceThemeCatalogSlugCountryslugPageTest( + ConferenceCatalogTest, CommonConferenceCatalogTest, + ContextDataThemeCatalogTest, TestCase): + url_name = 'conference_theme_catalog_slug_countryslug_page' + + def setUp(self): + theme_slug = self.conf.theme.all()[0].url + self.url_kwargs = { + 'slug': theme_slug, + 'country_slug': self.conf.country.url, + 'page': 1 + } + url = reverse( + self.url_name, + kwargs=self.url_kwargs + ) + self.response = self.client.get(url) + + def test_queryset(self): + object_list = self.response.context[-1].get('object_list') + + conferences = Conference.objects.filter( + theme__url=self.url_kwargs.get('slug'), + country__url=self.url_kwargs.get('country_slug'), + ) + + self.assertEqual( + sorted(list(object_list), key=lambda x: x.pk), + sorted(list(conferences), key=lambda x: x.pk) + ) + + def test_page_with_negative_index(self): + self.check_page_with_negative_index() + + def test_page_is_very_large(self): + self.check_page_is_very_large() + + def test_template(self): + self.assertTemplateUsed( + self.response, + 'conference/catalog_theme.html' + ) + + +class ConferenceThemeCatalogSlugCountryslugYearTest( + ConferenceCatalogTest, CommonConferenceCatalogTest, + ContextDataThemeCatalogTest, TestCase): + url_name = 'conference_theme_catalog_slug_countryslug_year' + + def setUp(self): + self.month = self.conf.data_begin.month + theme_slug = self.conf.theme.all()[0].url + self.url_kwargs = { + 'slug': theme_slug, + 'country_slug': self.conf.country.url, + 'year': self.conf.data_end.year + } + url = reverse( + self.url_name, + kwargs=self.url_kwargs + ) + self.response = self.client.get(url) + + def test_queryset(self): + object_list = self.response.context[-1].get('object_list') + + conferences = Conference.objects.filter( + theme__url=self.url_kwargs.get('slug'), + country__url=self.url_kwargs.get('country_slug'), + data_end__year=self.url_kwargs.get('year') + ) + + self.assertEqual( + sorted(list(object_list), key=lambda x: x.pk), + sorted(list(conferences), key=lambda x: x.pk) + ) + + def test_template(self): + self.assertTemplateUsed( + self.response, + 'conference/catalog_theme.html' + ) + +class ConferenceThemeCatalogSlugCountryslugTest( + ConferenceCatalogTest, CommonConferenceCatalogTest, + ContextDataThemeCatalogTest, TestCase): + url_name = 'conference_theme_catalog_slug_countryslug' + + def setUp(self): + self.month = self.conf.data_begin.month + theme_slug = self.conf.theme.all()[0].url + self.url_kwargs = { + 'slug': theme_slug, + 'country_slug': self.conf.country.url + } + url = reverse( + self.url_name, + kwargs=self.url_kwargs + ) + self.response = self.client.get(url) + + def test_queryset(self): + object_list = self.response.context[-1].get('object_list') + + conferences = Conference.objects.filter( + theme__url=self.url_kwargs.get('slug'), + country__url=self.url_kwargs.get('country_slug') + ) + + self.assertEqual( + sorted(list(object_list), key=lambda x: x.pk), + sorted(list(conferences), key=lambda x: x.pk) + ) + + def test_template(self): + self.assertTemplateUsed( + self.response, + 'conference/catalog_theme.html' + ) + + +class ConferenceThemeCatalogSlugCityslugYearMonthPageTest( + ConferenceCatalogTest, CommonConferenceCatalogTest, + ContextDataThemeCatalogTest, TestCase): + url_name = 'conference_theme_catalog_slug_cityslug_year_month_page' + + def setUp(self): + self.month = self.conf.data_begin.month + theme_slug = self.conf.theme.all()[0].url + self.url_kwargs = { + 'slug': theme_slug, + 'city_slug': self.conf.city.url, + 'year': self.conf.data_end.year, + 'month': month_convert(self.month), + 'page': 1 + } + url = reverse( + self.url_name, + kwargs=self.url_kwargs + ) + self.response = self.client.get(url) + + def test_queryset(self): + object_list = self.response.context[-1].get('object_list') + + conferences = Conference.objects.filter( + theme__url=self.url_kwargs.get('slug'), + city__url=self.url_kwargs.get('city_slug'), + data_end__year=self.url_kwargs.get('year'), + data_begin__month=self.month + ) + + self.assertEqual( + sorted(list(object_list), key=lambda x: x.pk), + sorted(list(conferences), key=lambda x: x.pk) + ) + + def test_page_with_negative_index(self): + self.check_page_with_negative_index() + + def test_page_is_very_large(self): + self.check_page_is_very_large() + + def test_template(self): + self.assertTemplateUsed( + self.response, + 'conference/catalog_theme.html' + ) + + +class ConferenceThemeCatalogSlugCityslugYearPageTest( + ConferenceCatalogTest, CommonConferenceCatalogTest, + ContextDataThemeCatalogTest, TestCase): + url_name = 'conference_theme_catalog_slug_cityslug_year_page' + + def setUp(self): + theme_slug = self.conf.theme.all()[0].url + self.url_kwargs = { + 'slug': theme_slug, + 'city_slug': self.conf.city.url, + 'year': self.conf.data_end.year, + 'page': 1 + } + url = reverse( + self.url_name, + kwargs=self.url_kwargs + ) + self.response = self.client.get(url) + + def test_queryset(self): + object_list = self.response.context[-1].get('object_list') + + conferences = Conference.objects.filter( + theme__url=self.url_kwargs.get('slug'), + city__url=self.url_kwargs.get('city_slug'), + data_end__year=self.url_kwargs.get('year'), + ) + + self.assertEqual( + sorted(list(object_list), key=lambda x: x.pk), + sorted(list(conferences), key=lambda x: x.pk) + ) + + def test_page_with_negative_index(self): + self.check_page_with_negative_index() + + def test_page_is_very_large(self): + self.check_page_is_very_large() + + def test_template(self): + self.assertTemplateUsed( + self.response, + 'conference/catalog_theme.html' + ) + + +class ConferenceThemeCatalogSlugCityslugYearMonthTest( + ConferenceCatalogTest, CommonConferenceCatalogTest, + ContextDataThemeCatalogTest, TestCase): + url_name = 'conference_theme_catalog_slug_cityslug_year_month' + + def setUp(self): + self.month = self.conf.data_begin.month + theme_slug = self.conf.theme.all()[0].url + self.url_kwargs = { + 'slug': theme_slug, + 'city_slug': self.conf.city.url, + 'year': self.conf.data_end.year, + 'month': month_convert(self.month) + } + url = reverse( + self.url_name, + kwargs=self.url_kwargs + ) + self.response = self.client.get(url) + + def test_queryset(self): + object_list = self.response.context[-1].get('object_list') + + conferences = Conference.objects.filter( + theme__url=self.url_kwargs.get('slug'), + city__url=self.url_kwargs.get('city_slug'), + data_end__year=self.url_kwargs.get('year'), + data_begin__month=self.month + ) + + self.assertEqual( + sorted(list(object_list), key=lambda x: x.pk), + sorted(list(conferences), key=lambda x: x.pk) + ) + + def test_template(self): + self.assertTemplateUsed( + self.response, + 'conference/catalog_theme.html' + ) + + +class ConferenceThemeCatalogSlugCityslugPageTest( + ConferenceCatalogTest, CommonConferenceCatalogTest, + ContextDataThemeCatalogTest, TestCase): + url_name = 'conference_theme_catalog_slug_cityslug_page' + + def setUp(self): + theme_slug = self.conf.theme.all()[0].url + self.url_kwargs = { + 'slug': theme_slug, + 'city_slug': self.conf.city.url, + 'page': 1 + } + url = reverse( + self.url_name, + kwargs=self.url_kwargs + ) + self.response = self.client.get(url) + + def test_queryset(self): + object_list = self.response.context[-1].get('object_list') + + conferences = Conference.objects.filter( + theme__url=self.url_kwargs.get('slug'), + city__url=self.url_kwargs.get('city_slug'), + ) + + self.assertEqual( + sorted(list(object_list), key=lambda x: x.pk), + sorted(list(conferences), key=lambda x: x.pk) + ) + + def test_page_with_negative_index(self): + self.check_page_with_negative_index() + + def test_page_is_very_large(self): + self.check_page_is_very_large() + + def test_template(self): + self.assertTemplateUsed( + self.response, + 'conference/catalog_theme.html' + ) + + +class ConferenceThemeCatalogSlugCityslugYearTest( + ConferenceCatalogTest, CommonConferenceCatalogTest, + ContextDataThemeCatalogTest, TestCase): + url_name = 'conference_theme_catalog_slug_cityslug_year' + + def setUp(self): + self.month = self.conf.data_begin.month + theme_slug = self.conf.theme.all()[0].url + self.url_kwargs = { + 'slug': theme_slug, + 'city_slug': self.conf.city.url, + 'year': self.conf.data_end.year + } + url = reverse( + self.url_name, + kwargs=self.url_kwargs + ) + self.response = self.client.get(url) + + def test_queryset(self): + object_list = self.response.context[-1].get('object_list') + + conferences = Conference.objects.filter( + theme__url=self.url_kwargs.get('slug'), + city__url=self.url_kwargs.get('city_slug'), + data_end__year=self.url_kwargs.get('year') + ) + + self.assertEqual( + sorted(list(object_list), key=lambda x: x.pk), + sorted(list(conferences), key=lambda x: x.pk) + ) + + def test_template(self): + self.assertTemplateUsed( + self.response, + 'conference/catalog_theme.html' + ) + + +class ConferenceThemeCatalogSlugCityslugTest( + ConferenceCatalogTest, CommonConferenceCatalogTest, + ContextDataThemeCatalogTest, TestCase): + url_name = 'conference_theme_catalog_slug_cityslug' + + def setUp(self): + self.month = self.conf.data_begin.month + theme_slug = self.conf.theme.all()[0].url + self.url_kwargs = { + 'slug': theme_slug, + 'city_slug': self.conf.city.url + } + url = reverse( + self.url_name, + kwargs=self.url_kwargs + ) + self.response = self.client.get(url) + + def test_queryset(self): + object_list = self.response.context[-1].get('object_list') + + conferences = Conference.objects.filter( + theme__url=self.url_kwargs.get('slug'), + city__url=self.url_kwargs.get('city_slug') + ) + + self.assertEqual( + sorted(list(object_list), key=lambda x: x.pk), + sorted(list(conferences), key=lambda x: x.pk) + ) + + def test_template(self): + self.assertTemplateUsed( + self.response, + 'conference/catalog_theme.html' + ) + + +class ConferenceThemeCatalogSlugYearMonthPageTest( + ConferenceCatalogTest, CommonConferenceCatalogTest, + ContextDataThemeCatalogTest, TestCase): + url_name = 'conference_theme_catalog_slug_year_month_page' + + def setUp(self): + self.month = self.conf.data_begin.month + theme_slug = self.conf.theme.all()[0].url + self.url_kwargs = { + 'slug': theme_slug, + 'year': self.conf.data_end.year, + 'month': month_convert(self.month), + 'page': 1 + } + url = reverse( + self.url_name, + kwargs=self.url_kwargs + ) + self.response = self.client.get(url) + + def test_queryset(self): + object_list = self.response.context[-1].get('object_list') + + conferences = Conference.objects.filter( + theme__url=self.url_kwargs.get('slug'), + data_end__year=self.url_kwargs.get('year'), + data_begin__month=self.month + ) + + self.assertEqual( + sorted(list(object_list), key=lambda x: x.pk), + sorted(list(conferences), key=lambda x: x.pk) + ) + + def test_page_with_negative_index(self): + self.check_page_with_negative_index() + + def test_page_is_very_large(self): + self.check_page_is_very_large() + + def test_template(self): + self.assertTemplateUsed( + self.response, + 'conference/catalog_theme.html' + ) + + +class ConferenceThemeCatalogSlugYearPageTest( + ConferenceCatalogTest, CommonConferenceCatalogTest, + ContextDataThemeCatalogTest, TestCase): + url_name = 'conference_theme_catalog_slug_year_page' + + def setUp(self): + theme_slug = self.conf.theme.all()[0].url + self.url_kwargs = { + 'slug': theme_slug, + 'year': self.conf.data_end.year, + 'page': 1 + } + url = reverse( + self.url_name, + kwargs=self.url_kwargs + ) + self.response = self.client.get(url) + + def test_queryset(self): + object_list = self.response.context[-1].get('object_list') + + conferences = Conference.objects.filter( + theme__url=self.url_kwargs.get('slug'), + data_end__year=self.url_kwargs.get('year') + ) + + self.assertEqual( + sorted(list(object_list), key=lambda x: x.pk), + sorted(list(conferences), key=lambda x: x.pk) + ) + + def test_page_with_negative_index(self): + self.check_page_with_negative_index() + + def test_page_is_very_large(self): + self.check_page_is_very_large() + + def test_template(self): + self.assertTemplateUsed( + self.response, + 'conference/catalog_theme.html' + ) + + +class ConferenceThemeCatalogSlugPageTest( + ConferenceCatalogTest, CommonConferenceCatalogTest, + ContextDataThemeCatalogTest, TestCase): + url_name = 'conference_theme_catalog_slug_page' + + def setUp(self): + theme_slug = self.conf.theme.all()[0].url + self.url_kwargs = { + 'slug': theme_slug, + 'page': 1 + } + url = reverse( + self.url_name, + kwargs=self.url_kwargs + ) + self.response = self.client.get(url) + + def test_queryset(self): + object_list = self.response.context[-1].get('object_list') + + conferences = Conference.objects.filter( + theme__url=self.url_kwargs.get('slug') + ) + + self.assertEqual( + sorted(list(object_list), key=lambda x: x.pk), + sorted(list(conferences), key=lambda x: x.pk) + ) + + def test_page_with_negative_index(self): + self.check_page_with_negative_index() + + def test_page_is_very_large(self): + self.check_page_is_very_large() + + def test_template(self): + self.assertTemplateUsed( + self.response, + 'conference/catalog_theme.html' + ) + + +class ConferenceThemeCatalogSlugYearMonthTest( + ConferenceCatalogTest, CommonConferenceCatalogTest, + ContextDataThemeCatalogTest, TestCase): + url_name = 'conference_theme_catalog_slug_year_month' + + def setUp(self): + self.month = self.conf.data_begin.month + theme_slug = self.conf.theme.all()[0].url + self.url_kwargs = { + 'slug': theme_slug, + 'year': self.conf.data_end.year, + 'month': month_convert(self.month) + } + url = reverse( + self.url_name, + kwargs=self.url_kwargs + ) + self.response = self.client.get(url) + + def test_queryset(self): + object_list = self.response.context[-1].get('object_list') + + conferences = Conference.objects.filter( + theme__url=self.url_kwargs.get('slug'), + data_end__year=self.url_kwargs.get('year'), + data_begin__month=self.month + ) + + self.assertEqual( + sorted(list(object_list), key=lambda x: x.pk), + sorted(list(conferences), key=lambda x: x.pk) + ) + + def test_template(self): + self.assertTemplateUsed( + self.response, + 'conference/catalog_theme.html' + ) + + +class ConferenceThemeCatalogSlugYearTest( + ConferenceCatalogTest, CommonConferenceCatalogTest, + ContextDataThemeCatalogTest, TestCase): + url_name = 'conference_theme_catalog_slug_year' + + def setUp(self): + self.month = self.conf.data_begin.month + theme_slug = self.conf.theme.all()[0].url + self.url_kwargs = { + 'slug': theme_slug, + 'year': self.conf.data_end.year + } + url = reverse( + self.url_name, + kwargs=self.url_kwargs + ) + self.response = self.client.get(url) + + def test_queryset(self): + object_list = self.response.context[-1].get('object_list') + + conferences = Conference.objects.filter( + theme__url=self.url_kwargs.get('slug'), + data_end__year=self.url_kwargs.get('year') + ) + + self.assertEqual( + sorted(list(object_list), key=lambda x: x.pk), + sorted(list(conferences), key=lambda x: x.pk) + ) + + def test_template(self): + self.assertTemplateUsed( + self.response, + 'conference/catalog_theme.html' + ) + + +class ConferenceThemeCatalogSlugTest( + ConferenceCatalogTest, CommonConferenceCatalogTest, + ContextDataThemeCatalogTest, TestCase): + url_name = 'conference_theme_catalog_slug' + + def setUp(self): + self.month = self.conf.data_begin.month + theme_slug = self.conf.theme.all()[0].url + self.url_kwargs = { + 'slug': theme_slug + } + url = reverse( + self.url_name, + kwargs=self.url_kwargs + ) + self.response = self.client.get(url) + + def test_queryset(self): + object_list = self.response.context[-1].get('object_list') + + conferences = Conference.objects.filter( + theme__url=self.url_kwargs.get('slug') + ) + + self.assertEqual( + sorted(list(object_list), key=lambda x: x.pk), + sorted(list(conferences), key=lambda x: x.pk) + ) + + def test_template(self): + self.assertTemplateUsed( + self.response, + 'conference/catalog_theme.html' + ) + +############################################################################### + + -# class ConferenceCountryCatalogTest(ConferenceCatalogTest, TestCase): -# def setUp(self): -# url = reverse('conference_country_catalog', args=[]) -# self.response = self.client.get(url) diff --git a/apps/conference/urls.py b/apps/conference/urls.py index 9d22369c..b8d08e79 100644 --- a/apps/conference/urls.py +++ b/apps/conference/urls.py @@ -41,46 +41,98 @@ urlpatterns = patterns('', name='conference_country'), url(r'^conference/country/(?P[^/]*)/(?P\d+)/(?P[^/]*)/page/(?P\d+)/$', ConferenceCountryCatalog.as_view(), {'meta_id':25}, - name='conference_country_catalog'), - url(r'^conference/country/(?P[^/]*)/(?P\d+)/page/(?P\d+)/$', ConferenceCountryCatalog.as_view(), {'meta_id':24}), - url(r'^conference/country/(?P[^/]*)/page/(?P\d+)/$', ConferenceCountryCatalog.as_view(), {'meta_id':23}), - url(r'^conference/country/(?P[^/]*)/(?P\d+)/(?P[^/]*)/$', ConferenceCountryCatalog.as_view(), {'meta_id':25}), - url(r'^conference/country/(?P[^/]*)/(?P\d+)/$', ConferenceCountryCatalog.as_view(), {'meta_id':24}), + name='conference_country_catalog_slug_year_month_page'), + url(r'^conference/country/(?P[^/]*)/(?P\d+)/page/(?P\d+)/$', + ConferenceCountryCatalog.as_view(), {'meta_id':24}, + name='conference_country_catalog_slug_year_page' + ), + url(r'^conference/country/(?P[^/]*)/page/(?P\d+)/$', + ConferenceCountryCatalog.as_view(), {'meta_id':23}, + name='conference_country_catalog_slug_page'), + url(r'^conference/country/(?P[^/]*)/(?P\d+)/(?P[^/]*)/$', + ConferenceCountryCatalog.as_view(), {'meta_id':25}, + name='conference_country_catalog_slug_year_month'), + url(r'^conference/country/(?P[^/]*)/(?P\d+)/$', + ConferenceCountryCatalog.as_view(), {'meta_id':24}, + name='conference_country_catalog_slug_year'), url(r'^conference/country/(?P[^/]*)/$', ConferenceCountryCatalog.as_view(), {'meta_id':23}, name='conf_country'), # city catalog url(r'^conference/city/$', ConferenceByCity.as_view(), {'meta_id':52}, name='conference_city'), - url(r'^conference/city/(?P[^/]*)/(?P\d+)/(?P[^/]*)/page/(?P\d+)/$', ConferenceCityCatalog.as_view(), {'meta_id':28}), - url(r'^conference/city/(?P[^/]*)/(?P\d+)/page/(?P\d+)/$', ConferenceCityCatalog.as_view(), {'meta_id':27}), - url(r'^conference/city/(?P[^/]*)/page/(?P\d+)/$', ConferenceCityCatalog.as_view(), {'meta_id':26}), - url(r'^conference/city/(?P[^/]*)/(?P\d+)/(?P[^/]*)/$', ConferenceCityCatalog.as_view(), {'meta_id':28}), - url(r'^conference/city/(?P[^/]*)/(?P\d+)/$', ConferenceCityCatalog.as_view(), {'meta_id':27}), + url(r'^conference/city/(?P[^/]*)/(?P\d+)/(?P[^/]*)/page/(?P\d+)/$', + ConferenceCityCatalog.as_view(), {'meta_id':28}, + name='conference_city_catalog_slug_year_month_page'), + url(r'^conference/city/(?P[^/]*)/(?P\d+)/page/(?P\d+)/$', + ConferenceCityCatalog.as_view(), {'meta_id':27}, + name='conference_city_catalog_slug_year_page'), + url(r'^conference/city/(?P[^/]*)/page/(?P\d+)/$', + ConferenceCityCatalog.as_view(), {'meta_id':26}, + name='conference_city_catalog_slug_page'), + url(r'^conference/city/(?P[^/]*)/(?P\d+)/(?P[^/]*)/$', + ConferenceCityCatalog.as_view(), {'meta_id':28}, + name='conference_city_catalog_slug_year_month'), + url(r'^conference/city/(?P[^/]*)/(?P\d+)/$', + ConferenceCityCatalog.as_view(), {'meta_id':27}, + name='conference_city_catalog_slug_year'), url(r'^conference/city/(?P[^/]*)/$', ConferenceCityCatalog.as_view(), {'meta_id':26}, name='conf_city'), # theme catalog url(r'^conference/theme/$', ConferenceByTheme.as_view(), {'meta_id':50}, name='conference_theme'), - url(r'^conference/theme/(?P[^/]*)/country/(?P[^/]*)/(?P\d+)/(?P[^/]*)/page/(?P\d+)/$', ConferenceThemeCatalog.as_view()), - url(r'^conference/theme/(?P[^/]*)/country/(?P[^/]*)/(?P\d+)/page/(?P\d+)/$', ConferenceThemeCatalog.as_view()), - url(r'^conference/theme/(?P[^/]*)/country/(?P[^/]*)/(?P\d+)/(?P[^/]*)/$', ConferenceThemeCatalog.as_view()), - url(r'^conference/theme/(?P[^/]*)/country/(?P[^/]*)/page/(?P\d+)/$', ConferenceThemeCatalog.as_view()), - url(r'^conference/theme/(?P[^/]*)/country/(?P[^/]*)/(?P\d+)/$', ConferenceThemeCatalog.as_view()), - url(r'^conference/theme/(?P[^/]*)/country/(?P[^/]*)/$', ConferenceThemeCatalog.as_view()), - - url(r'^conference/theme/(?P[^/]*)/city/(?P[^/]*)/(?P\d+)/(?P[^/]*)/page/(?P\d+)/$', ConferenceThemeCatalog.as_view()), - url(r'^conference/theme/(?P[^/]*)/city/(?P[^/]*)/(?P\d+)/(?P[^/]*)/$', ConferenceThemeCatalog.as_view()), - url(r'^conference/theme/(?P[^/]*)/city/(?P[^/]*)/(?P\d+)/page/(?P\d+)/$', ConferenceThemeCatalog.as_view()), - url(r'^conference/theme/(?P[^/]*)/city/(?P[^/]*)/(?P\d+)/$', ConferenceThemeCatalog.as_view()), - url(r'^conference/theme/(?P[^/]*)/city/(?P[^/]*)/page/(?P\d+)/$', ConferenceThemeCatalog.as_view()), - + url(r'^conference/theme/(?P[^/]*)/country/(?P[^/]*)/(?P\d+)/(?P[^/]*)/page/(?P\d+)/$', + ConferenceThemeCatalog.as_view(), + name='conference_theme_catalog_slug_countryslug_year_month_page'), + url(r'^conference/theme/(?P[^/]*)/country/(?P[^/]*)/(?P\d+)/page/(?P\d+)/$', + ConferenceThemeCatalog.as_view(), + name='conference_theme_catalog_slug_countryslug_year_page'), + url(r'^conference/theme/(?P[^/]*)/country/(?P[^/]*)/(?P\d+)/(?P[^/]*)/$', + ConferenceThemeCatalog.as_view(), + name='conference_theme_catalog_slug_countryslug_year_month'), + url(r'^conference/theme/(?P[^/]*)/country/(?P[^/]*)/page/(?P\d+)/$', + ConferenceThemeCatalog.as_view(), + name='conference_theme_catalog_slug_countryslug_page'), + url(r'^conference/theme/(?P[^/]*)/country/(?P[^/]*)/(?P\d+)/$', + ConferenceThemeCatalog.as_view(), + name='conference_theme_catalog_slug_countryslug_year'), + url(r'^conference/theme/(?P[^/]*)/country/(?P[^/]*)/$', + ConferenceThemeCatalog.as_view(), + name='conference_theme_catalog_slug_countryslug'), - url(r'^conference/theme/(?P[^/]*)/city/(?P[^/]*)/page/(?P\d+)/$', ConferenceThemeCatalog.as_view()), - url(r'^conference/theme/(?P[^/]*)/city/(?P[^/]*)/$', ConferenceThemeCatalog.as_view()), - url(r'^conference/theme/(?P[^/]*)/(?P\d+)/(?P[^/]*)/page/(?P\d+)/$', ConferenceThemeCatalog.as_view(), {'meta_id':31}), - url(r'^conference/theme/(?P[^/]*)/(?P\d+)/page/(?P\d+)/$', ConferenceThemeCatalog.as_view(), {'meta_id':30}), - url(r'^conference/theme/(?P[^/]*)/page/(?P\d+)/$', ConferenceThemeCatalog.as_view(), {'meta_id':29}), - url(r'^conference/theme/(?P[^/]*)/(?P\d+)/(?P[^/]*)/$', ConferenceThemeCatalog.as_view(), {'meta_id':31}), - url(r'^conference/theme/(?P[^/]*)/(?P\d+)/$', ConferenceThemeCatalog.as_view(), {'meta_id':30}), - url(r'^conference/theme/(?P[^/]*)/$', ConferenceThemeCatalog.as_view(), {'meta_id':29}), + url(r'^conference/theme/(?P[^/]*)/city/(?P[^/]*)/(?P\d+)/(?P[^/]*)/page/(?P\d+)/$', + ConferenceThemeCatalog.as_view(), + name='conference_theme_catalog_slug_cityslug_year_month_page'), + url(r'^conference/theme/(?P[^/]*)/city/(?P[^/]*)/(?P\d+)/(?P[^/]*)/$', + ConferenceThemeCatalog.as_view(), + name='conference_theme_catalog_slug_cityslug_year_month'), + url(r'^conference/theme/(?P[^/]*)/city/(?P[^/]*)/(?P\d+)/page/(?P\d+)/$', + ConferenceThemeCatalog.as_view(), + name='conference_theme_catalog_slug_cityslug_year_page'), + url(r'^conference/theme/(?P[^/]*)/city/(?P[^/]*)/(?P\d+)/$', + ConferenceThemeCatalog.as_view(), + name='conference_theme_catalog_slug_cityslug_year'), + url(r'^conference/theme/(?P[^/]*)/city/(?P[^/]*)/page/(?P\d+)/$', + ConferenceThemeCatalog.as_view(), + name='conference_theme_catalog_slug_cityslug_page'), + url(r'^conference/theme/(?P[^/]*)/city/(?P[^/]*)/$', + ConferenceThemeCatalog.as_view(), + name='conference_theme_catalog_slug_cityslug'), + url(r'^conference/theme/(?P[^/]*)/(?P\d+)/(?P[^/]*)/page/(?P\d+)/$', + ConferenceThemeCatalog.as_view(), {'meta_id':31}, + name='conference_theme_catalog_slug_year_month_page'), + url(r'^conference/theme/(?P[^/]*)/(?P\d+)/page/(?P\d+)/$', + ConferenceThemeCatalog.as_view(), {'meta_id':30}, + name='conference_theme_catalog_slug_year_page'), + url(r'^conference/theme/(?P[^/]*)/page/(?P\d+)/$', + ConferenceThemeCatalog.as_view(), {'meta_id':29}, + name='conference_theme_catalog_slug_page'), + url(r'^conference/theme/(?P[^/]*)/(?P\d+)/(?P[^/]*)/$', + ConferenceThemeCatalog.as_view(), {'meta_id':31}, + name='conference_theme_catalog_slug_year_month'), + url(r'^conference/theme/(?P[^/]*)/(?P\d+)/$', + ConferenceThemeCatalog.as_view(), {'meta_id':30}, + name='conference_theme_catalog_slug_year'), + url(r'^conference/theme/(?P[^/]*)/$', + ConferenceThemeCatalog.as_view(), {'meta_id':29}, + name='conference_theme_catalog_slug'), # tag catalog url(r'^conference/tag/$', ConferenceByTag.as_view(), {'meta_id':50}, name='conference_tag'), diff --git a/apps/conference/views.py b/apps/conference/views.py index 91b8b0a8..6fea0850 100644 --- a/apps/conference/views.py +++ b/apps/conference/views.py @@ -235,6 +235,7 @@ class ConferenceCountryCatalog(ConferenceCatalog): class ConferenceCityCatalog(ConferenceCatalog): catalog_url = '/conference/city/' stat_kind = 'city' + def get_filtered_qs(self): #this method used in parent get_queryset slug = self.kwargs.get('slug') @@ -268,12 +269,13 @@ class ConferenceThemeCatalog(ConferenceCatalog): qs = self.model.enable.upcoming().filter(theme=theme) if country_slug: country = get_object_or_404(Country, url=country_slug) - self.country = country + self.kwargs['country'] = country qs = qs.filter(country=country) if city_slug: city = get_object_or_404(City, url=city_slug) - self.city = city + self.kwargs['city'] = city + qs = qs.filter(city=city) self.filter_object = theme diff --git a/proj/settings.py b/proj/settings.py index 54b9f09c..9d6b0e39 100644 --- a/proj/settings.py +++ b/proj/settings.py @@ -480,11 +480,11 @@ BIT_AUDIENCE = (('experts', _(u'Специалисты')), ('experts and consume ('general public', _(u'Широкая публика'))) MONTHES = {'jan': {'value': 1, 'name': _(u'Январь')}, 'feb': {'value': 2, 'name': _(u'Февраль')}, - 'mar': {'value': 3, 'name': _(u'Март')}, 'apr': {'value': 4, 'name': _(u'Апрель')}, - 'may': {'value': 5, 'name': _(u'Май')}, 'jun': {'value': 6, 'name': _(u'Июнь')}, - 'jul': {'value': 7, 'name': _(u'Июль')}, 'aug': {'value': 8, 'name': _(u'Август')}, - 'sep': {'value': 9, 'name': _(u'Сентябрь')}, 'oct': {'value': 10, 'name': _(u'Октябрь')}, - 'nov': {'value': 11, 'name': _(u'Ноябрь')}, 'dec': {'value': 12, 'name': _(u'Декабрь')}} + 'mar': {'value': 3, 'name': _(u'Март')}, 'apr': {'value': 4, 'name': _(u'Апрель')}, + 'may': {'value': 5, 'name': _(u'Май')}, 'jun': {'value': 6, 'name': _(u'Июнь')}, + 'jul': {'value': 7, 'name': _(u'Июль')}, 'aug': {'value': 8, 'name': _(u'Август')}, + 'sep': {'value': 9, 'name': _(u'Сентябрь')}, 'oct': {'value': 10, 'name': _(u'Октябрь')}, + 'nov': {'value': 11, 'name': _(u'Ноябрь')}, 'dec': {'value': 12, 'name': _(u'Декабрь')}} SNG_COUNTRIES = [159, 186, 31, 6, 99, 13, 189, 64] RUSSIA_PK = 159