import datetime 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, Statistic, TimeTable from city.models import City from country.models import Country from events.models import TargetAudience class ConferenceTest(TestCase): def setUp(self): self.conference = 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], url='new-conference', services=b'0001000' ) def test_a_conference_create(self): conference_count = Conference.objects.all().count() 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] ) new_conference_count = Conference.objects.all().count() self.assertEqual(conference_count + 1, new_conference_count) def test_save_conference_info(self): name = 'New Conference' datetime_now = datetime.datetime.now() data_begin = datetime_now data_end = datetime.timedelta(24) + datetime_now country = Country.objects.all()[0] city = City.objects.all()[0] new_conference = Conference.objects.create( name=name, data_begin=data_begin, data_end=data_end, country=country, city=city ) self.assertEqual(name, new_conference.name) self.assertEqual(data_begin, new_conference.data_begin) self.assertEqual(data_end, new_conference.data_end) 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): 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( self.conference.get_news_url(), reverse('news_conference', kwargs={'slug': self.conference.url}) ) def test_method_get_audience(self): self.assertFalse(self.conference.get_audience()) 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( self.conference.get_calendar_url(), reverse('conference_add_calendar', args=[self.conference.id]) ) def test_method_get_visit_url(self): self.assertEqual( self.conference.get_visit_url(), reverse( 'events:event_visit', args=['conference', self.conference.id] ) ) def test_method_get_note_url(self): self.assertEqual( self.conference.get_note_url(), 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): 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 )