test_models, and began test_views

remotes/origin/HEAD
avgoeid 9 years ago
parent 1e15a49ac5
commit 7bf9951122
  1. 3
      apps/conference/admin_urls.py
  2. 2
      apps/conference/models.py
  3. 3
      apps/conference/tests/__init__.py
  4. 0
      apps/conference/tests/test_forms.py
  5. 211
      apps/conference/tests/test_models.py
  6. 100
      apps/conference/tests/test_views.py
  7. 17
      apps/conference/urls.py
  8. 2
      apps/functions/model_mixin.py

@ -3,7 +3,8 @@ from django.conf.urls import patterns, include, url
from admin import ConferenceListView, ConferenceView
urlpatterns = patterns('conference.admin',
url(r'^upload-photo/(?P<conf_id>.*)/$', 'upload_conference_photo'),
url(r'^upload-photo/(?P<conf_id>.*)/$', 'upload_conference_photo',
name='conference_upload_photo'),
url(r'^delete/(?P<url>.*)$', 'conference_delete'),
url(r'^copy/$', 'conf_copy'),
url(r'^all/$', ConferenceListView.as_view(), name='admin-conference-all'),

@ -222,7 +222,7 @@ class Conference(TranslatableModel, EventMixin, ExpoMixin):
return names + ' ' + titles + ' ' + themes + ' ' + tags
def upload_photo_url(self):
return '/admin/conference/upload-photo/%s/' % self.id
return reverse_lazy('conference_upload_photo', args=[self.id])
def clicks(self):
return self.paid_new.tickets.clicks() + self.paid_new.official.clicks()

@ -1 +1,2 @@
from .test_models import *
# from .test_models import *
from .test_views import *

@ -1,10 +1,16 @@
import datetime
from django.core.urlresolvers import reverse
from accounts.models import User
from django.contrib.contenttypes.models import ContentType
from django.core.urlresolvers import reverse, NoReverseMatch
from django.test import TestCase
from expobanner.models import Paid, Banner
from note.models import Note
from service.models import Service
from stats_collector.models import ObjectStats
from theme.models import Tag, Theme
from ..models import Conference, Speaker
from ..models import Conference, Speaker, Statistic, TimeTable
from city.models import City
from country.models import Country
from events.models import TargetAudience
@ -12,8 +18,6 @@ from events.models import TargetAudience
class ConferenceTest(TestCase):
def setUp(self):
audience = TargetAudience.objects.create(title='All')
self.conference = Conference.objects.create(
name='New Conference',
data_begin=datetime.datetime.now(),
@ -24,7 +28,6 @@ class ConferenceTest(TestCase):
url='new-conference',
services=b'0001000'
)
self.conference.audience.add(audience)
def test_a_conference_create(self):
conference_count = Conference.objects.all().count()
@ -62,8 +65,22 @@ class ConferenceTest(TestCase):
self.assertEqual(country, new_conference.country)
self.assertEqual(city, new_conference.city)
def test_method_unicode(self):
self.assertEqual(
str(self.conference),
self.conference.lazy_translation_getter(
'name', unicode(self.conference.pk))
)
def test_method_get_services(self):
pass
services = [item for item, bool in self.conference.services if bool]
qs = Service.objects.language()
qs = qs.filter(url__in=services)
self.assertEqual(
sorted(self.conference.get_services(), key=lambda x: x.pk),
sorted(list(qs), key=lambda x: x.pk)
)
def test_method_get_news_url(self):
self.assertEqual(
@ -72,11 +89,13 @@ class ConferenceTest(TestCase):
)
def test_method_get_audience(self):
audience = TargetAudience.objects.all()[0]
self.assertIn(audience, self.conference.get_audience())
self.assertFalse(self.conference.get_audience())
def test_method_get_services(self):
pass
self.conference.audience.add(
TargetAudience.objects.create(title='All'))
audience = TargetAudience.objects.filter(title='All')[0]
self.assertIn(audience, self.conference.get_audience())
def test_method_get_calendar_url(self):
self.assertEqual(
@ -99,5 +118,175 @@ class ConferenceTest(TestCase):
reverse('conference_add_note', args=[self.conference.url])
)
def test_method_get_note_by_user(self):
user = User.objects.all()[0]
self.assertEqual(self.conference.get_note_by_user(user.id), '')
text = 'Great'
ct = ContentType.objects.get_for_model(self.conference)
object_id = self.conference.id
Note.objects.create(
content_type=ct, object_id=object_id,
user=user, text=text
)
self.assertEqual(self.conference.get_note_by_user(user.id), text)
def test_method_tags(self):
self.assertFalse(self.conference.tags())
theme = Theme.objects.create(
name='Theme name', main_title='Theme title'
)
tag = Tag.objects.create(
name='Tag name', main_title='Tag title', theme=theme
)
self.conference.tag.add(tag)
self.assertIn(tag, self.conference.tags())
def test_method_get_index_text(self):
self.assertIn(
self.conference.name,
self.conference.get_index_text()
)
title = 'Conf Title'
self.conference.main_title = title
self.conference.save()
self.assertIn(title, self.conference.get_index_text())
theme_name = 'Theme name'
theme = Theme.objects.create(
name=theme_name, main_title='Theme title'
)
tag_name = 'Tag name'
tag = Tag.objects.create(
name=tag_name, main_title='Tag title', theme=theme
)
self.conference.tag.add(tag)
self.assertIn(tag_name, self.conference.get_index_text())
self.conference.theme.add(theme)
self.assertIn(theme_name, self.conference.get_index_text())
def test_method_upload_photo_url(self):
self.assertEqual(
reverse('conference_upload_photo', args=[self.conference.id]),
self.conference.upload_photo_url()
)
def test_method_clicks(self):
with self.assertRaises(AttributeError):
self.conference.clicks()
ticket_url = 'ticket_url/'
ticket = Banner.objects.create_for_paid(
self.conference, ticket_url, 'tickets')
official_url = 'official_url/'
official = Banner.objects.create_for_paid(
self.conference, official_url, 'official')
paid = Paid.objects.create(
tickets=ticket, official=official, catalog=ticket)
self.conference.paid_new = paid
self.conference.save()
self.assertEqual(self.conference.clicks(), 0)
self.client.get(ticket.get_click_link())
self.assertEqual(self.conference.clicks(), 1)
self.client.get(official.get_click_link())
self.assertEqual(self.conference.clicks(), 2)
def test_method_get_paid_change_url(self):
try:
self.conference.get_paid_change_url()
except NoReverseMatch:
pass
ticket = Banner.objects.create_for_paid(
self.conference, 'ticket_url', 'tickets')
official = Banner.objects.create_for_paid(
self.conference, 'official_url', 'official')
paid = Paid.objects.create(
tickets=ticket, official=official, catalog=official)
self.conference.paid_new = paid
self.conference.save()
self.assertEqual(
self.conference.get_paid_change_url(),
reverse('confbanner-update_paid',
args=[self.conference.paid_new.id])
)
def test_method_get_objectstat_views(self):
self.assertEqual(
self.conference.get_objectstat_views(),
sum(ObjectStats.objects.filter(
conference=self.conference).values_list('value', flat=True))
)
class SpeakerTest(TestCase):
pass
def test_create_speaker(self):
speacers = Speaker.objects.all().count()
Speaker.objects.create(fullname='Hgangu Piter')
speacers_plus_one = Speaker.objects.all().count()
self.assertEqual(speacers + 1, speacers_plus_one)
def test_method_unicode(self):
fullname = 'Hgangu Piter'
speaker = Speaker.objects.create(fullname=fullname)
self.assertEqual(str(speaker), fullname)
class StatisticTest(TestCase):
def test_create_statistic(self):
stats = Statistic.objects.all().count()
conf = Conference.objects.create(
name='New Conference',
data_begin=datetime.datetime.now(),
data_end=datetime.timedelta(24)+datetime.datetime.now(),
country=Country.objects.all()[0],
city=City.objects.all()[0]
)
Statistic.objects.create(
conference=conf,
year=datetime.datetime.now().year,
countries='Monaco'
)
stats_plus_one = Statistic.objects.all().count()
self.assertEqual(stats + 1, stats_plus_one)
class TimeTableTest(TestCase):
def test_create_timetable(self):
tables = TimeTable.objects.all().count()
conf = Conference.objects.create(
name='New Conference',
data_begin=datetime.datetime.now(),
data_end=datetime.timedelta(24) + datetime.datetime.now(),
country=Country.objects.all()[0],
city=City.objects.all()[0]
)
TimeTable.objects.create(
conference=conf,
begin=datetime.datetime.now(),
end=datetime.timedelta(24) + datetime.datetime.now(),
name='All times'
)
tables_plus_one = TimeTable.objects.all().count()
self.assertEqual(
tables + 1, tables_plus_one
)

@ -0,0 +1,100 @@
# -*- coding: utf-8 -*-
from city.models import City
from country.models import Country
from django.core.urlresolvers import reverse
from django.test import TestCase
from django.utils.translation import ugettext as _
from functions.views_help import get_side_items
class ConferenceByTest(object):
"""Функционал 'абстрактного' класса ConferenceBy"""
def setUp(self):
self.response = self.client.get(self.url)
def test_template(self):
self.assertTemplateUsed(
self.response,
'client/conference/conference_by.html'
)
def test_is_available(self):
self.assertEqual(self.response.status_code, 200)
def test_titles(self):
self.assertContains(self.response, self.title1)
self.assertContains(self.response, self.title2)
def test_link(self):
link = '/conference/%s' % (self.catalog, )
self.assertContains(self.response, link)
def test_queryset(self):
obj_list = self.response.context[-1].get('object_list')
for obj in obj_list:
self.assertContains(
self.response, obj.name
)
self.assertContains(
self.response, obj.url
)
class CanFilterAndSidePopular(object):
"""Функционал can_filter and side_popular in get_context_data"""
def test_can_filter(self):
text = 'ВЫБРАТЬ ПО КРИТЕРИЯМ:'
can_filter = self.response.context[-1].get('can_filter', None)
if can_filter is False:
self.assertNotContains(self.response, text)
elif can_filter is True:
self.assertContains(self.response, text)
def test_side_popular(self):
side_popular = get_side_items('conf', self.model)
for popular in side_popular:
self.assertContains(self.response, popular.get('url'))
self.assertContains(self.response, popular.get('name'))
class ConferenceByCountryTest(ConferenceByTest, CanFilterAndSidePopular, TestCase):
url = reverse('conference_country')
title1 = _(u'По странам')
title2 = _(u'Коференции мира по странам')
catalog = 'country/'
model = Country
class ConferenceByThemeTest(ConferenceByTest, TestCase):
url = reverse('conference_theme')
title1 = _(u'По тематикам')
title2 = _(u'Коференции мира по тематикам')
catalog = 'theme/'
class ConferenceByTagTest(ConferenceByTest, TestCase):
url = reverse('conference_tag')
title1 = _(u'По тегам')
title2 = _(u'Коференции мира по тегам')
catalog = 'tag/'
class ConferenceByCityTest(ConferenceByTest, CanFilterAndSidePopular, TestCase):
url = reverse('conference_city')
title1 = _(u'По городам')
title2 = _(u'Коференции мира по городам')
catalog = 'city/'
model = City
class ConferenceCatalogTest(object):
def test_template(self):
self.assertTemplateUsed(
self.response,
'client/conference/catalog.html'
)
# class ConferenceCountryCatalogTest(ConferenceCatalogTest, TestCase):
# def setUp(self):
# url = reverse('conference_country_catalog', args=[])
# self.response = self.client.get(url)

@ -36,15 +36,20 @@ urlpatterns = patterns('',
# search
url(r'^conference/search/', ExpositionSearchView.as_view()),
# country catalog
url(r'^conference/country/$', ConferenceByCountry.as_view(), {'meta_id':51}),
url(r'^conference/country/(?P<slug>[^/]*)/(?P<year>\d+)/(?P<month>[^/]*)/page/(?P<page>\d+)/$', ConferenceCountryCatalog.as_view(), {'meta_id':25}),
url(r'^conference/country/$',
ConferenceByCountry.as_view(), {'meta_id':51},
name='conference_country'),
url(r'^conference/country/(?P<slug>[^/]*)/(?P<year>\d+)/(?P<month>[^/]*)/page/(?P<page>\d+)/$',
ConferenceCountryCatalog.as_view(), {'meta_id':25},
name='conference_country_catalog'),
url(r'^conference/country/(?P<slug>[^/]*)/(?P<year>\d+)/page/(?P<page>\d+)/$', ConferenceCountryCatalog.as_view(), {'meta_id':24}),
url(r'^conference/country/(?P<slug>[^/]*)/page/(?P<page>\d+)/$', ConferenceCountryCatalog.as_view(), {'meta_id':23}),
url(r'^conference/country/(?P<slug>[^/]*)/(?P<year>\d+)/(?P<month>[^/]*)/$', ConferenceCountryCatalog.as_view(), {'meta_id':25}),
url(r'^conference/country/(?P<slug>[^/]*)/(?P<year>\d+)/$', ConferenceCountryCatalog.as_view(), {'meta_id':24}),
url(r'^conference/country/(?P<slug>[^/]*)/$', ConferenceCountryCatalog.as_view(), {'meta_id':23}, name='conf_country'),
# city catalog
url(r'^conference/city/$', ConferenceByCity.as_view(), {'meta_id':52}),
url(r'^conference/city/$',
ConferenceByCity.as_view(), {'meta_id':52}, name='conference_city'),
url(r'^conference/city/(?P<slug>[^/]*)/(?P<year>\d+)/(?P<month>[^/]*)/page/(?P<page>\d+)/$', ConferenceCityCatalog.as_view(), {'meta_id':28}),
url(r'^conference/city/(?P<slug>[^/]*)/(?P<year>\d+)/page/(?P<page>\d+)/$', ConferenceCityCatalog.as_view(), {'meta_id':27}),
url(r'^conference/city/(?P<slug>[^/]*)/page/(?P<page>\d+)/$', ConferenceCityCatalog.as_view(), {'meta_id':26}),
@ -52,7 +57,8 @@ urlpatterns = patterns('',
url(r'^conference/city/(?P<slug>[^/]*)/(?P<year>\d+)/$', ConferenceCityCatalog.as_view(), {'meta_id':27}),
url(r'^conference/city/(?P<slug>[^/]*)/$', ConferenceCityCatalog.as_view(), {'meta_id':26}, name='conf_city'),
# theme catalog
url(r'^conference/theme/$', ConferenceByTheme.as_view(), {'meta_id':50}),
url(r'^conference/theme/$',
ConferenceByTheme.as_view(), {'meta_id':50}, name='conference_theme'),
url(r'^conference/theme/(?P<slug>[^/]*)/country/(?P<country_slug>[^/]*)/(?P<year>\d+)/(?P<month>[^/]*)/page/(?P<page>\d+)/$', ConferenceThemeCatalog.as_view()),
url(r'^conference/theme/(?P<slug>[^/]*)/country/(?P<country_slug>[^/]*)/(?P<year>\d+)/page/(?P<page>\d+)/$', ConferenceThemeCatalog.as_view()),
url(r'^conference/theme/(?P<slug>[^/]*)/country/(?P<country_slug>[^/]*)/(?P<year>\d+)/(?P<month>[^/]*)/$', ConferenceThemeCatalog.as_view()),
@ -76,7 +82,8 @@ urlpatterns = patterns('',
url(r'^conference/theme/(?P<slug>[^/]*)/(?P<year>\d+)/$', ConferenceThemeCatalog.as_view(), {'meta_id':30}),
url(r'^conference/theme/(?P<slug>[^/]*)/$', ConferenceThemeCatalog.as_view(), {'meta_id':29}),
# tag catalog
url(r'^conference/tag/$', ConferenceByTag.as_view(), {'meta_id':50}),
url(r'^conference/tag/$',
ConferenceByTag.as_view(), {'meta_id':50}, name='conference_tag'),
url(r'^conference/tag/(?P<slug>[^/]*)/(?P<year>\d+)/(?P<month>[^/]*)/page/(?P<page>\d+)/$', ConferenceTagCatalog.as_view(), {'meta_id':34}),
url(r'^conference/tag/(?P<slug>[^/]*)/(?P<year>\d+)/page/(?P<page>\d+)/$', ConferenceTagCatalog.as_view(), {'meta_id':33}),
url(r'^conference/tag/(?P<slug>[^/]*)/page/(?P<page>\d+)/$', ConferenceTagCatalog.as_view(), {'meta_id':32}),

@ -256,7 +256,7 @@ class EventMixin(object):
if not isinstance(getattr(self, '_get_services_detail', None), list):
# excluded = ['visit', 'tickets']
# country_ids = [item for item, bool in self.country.services if bool==True]
services = [item for item, bool in self.services if bool==True]
services = [item for item, bool in self.services if bool]
qs = Service.objects.language()
if excluded is not None:
qs = qs.exclude(url__in=excluded)

Loading…
Cancel
Save