PonyConf/proposals/tests.py

89 lines
4.7 KiB
Python
Raw Normal View History

2016-06-11 15:28:39 +00:00
from django.contrib.auth.models import User
2016-07-11 19:33:34 +00:00
from django.contrib.sites.models import Site
2016-06-11 15:28:39 +00:00
from django.core.urlresolvers import reverse
from django.test import TestCase
2016-06-07 20:59:13 +00:00
from accounts.models import Participation
from .models import Talk, Topic, Vote
2016-06-11 15:28:39 +00:00
class ProposalsTests(TestCase):
def setUp(self):
a, b, c = (User.objects.create_user(guy, email='%s@example.org' % guy, password=guy) for guy in 'abc')
2016-08-07 08:20:26 +00:00
Topic.objects.create(name='topipo', description='super topic', site=Site.objects.first())
c.is_superuser = True
c.save()
2016-06-11 15:28:39 +00:00
2016-06-12 19:09:52 +00:00
def test_everything(self):
2016-06-11 15:28:39 +00:00
# talk-edit
self.client.login(username='a', password='a')
self.client.post(reverse('add-talk'),
{'title': 'super talk',
'abstract': 'super',
'description': 'this is my super talk',
'notes': 'you can watch my previous talk videos',
'event': 1,
'topics': 1,
'speakers': 1})
2016-07-09 19:30:49 +00:00
talk = Talk.objects.first()
self.assertEqual(str(talk), 'super talk')
self.assertEqual(talk.abstract, 'super')
self.assertEqual(talk.description, 'this is my super talk')
self.assertEqual(talk.notes, 'you can watch my previous talk videos')
2016-06-11 15:28:39 +00:00
self.client.post(reverse('edit-talk', kwargs={'talk': 'super-talk'}),
{'title': 'mega talk', 'description': 'mega', 'event': 1, 'speakers': 1})
self.assertEqual(str(talk), 'super talk') # title is read only there
2016-07-09 19:30:49 +00:00
talk = Talk.objects.first()
self.assertEqual(talk.description, 'mega')
2016-06-11 15:28:39 +00:00
# Status Code
for view in ['home', 'list-talks', 'add-talk', 'list-topics', 'list-speakers']:
2016-06-25 14:27:35 +00:00
self.assertEqual(self.client.get(reverse(view)).status_code, 302 if view == 'list-speakers' else 200)
2016-06-12 16:35:59 +00:00
self.assertEqual(self.client.get(reverse('edit-talk', kwargs={'talk': talk.slug})).status_code, 200)
self.assertEqual(self.client.get(reverse('show-talk', kwargs={'slug': talk.slug})).status_code, 200)
2016-06-12 19:09:52 +00:00
self.assertEqual(self.client.get(reverse('show-speaker', kwargs={'username': 'a'})).status_code, 200)
2016-06-11 15:28:39 +00:00
self.client.login(username='b', password='b')
self.assertEqual(self.client.post(reverse('edit-talk', kwargs={'talk': 'super-talk'}),
2016-06-12 20:45:22 +00:00
{'title': 'mega talk', 'description': 'mega', 'event': 1}).status_code, 403)
2016-06-11 15:28:39 +00:00
self.assertEqual(self.client.get(reverse('list-talks')).status_code, 200)
2016-06-12 19:09:52 +00:00
# Vote
self.assertEqual(talk.score(), 0)
self.assertEqual(self.client.get(reverse('vote', kwargs={'talk': talk.slug, 'score': 2})).status_code, 403)
self.client.login(username='c', password='c')
self.assertEqual(self.client.get(reverse('vote', kwargs={'talk': talk.slug, 'score': 2})).status_code, 302)
self.assertEqual(talk.score(), 2)
2016-06-12 19:09:52 +00:00
# Models str & get_asbolute_url
for model in [Talk, Topic, Vote]:
2016-06-12 19:09:52 +00:00
item = model.objects.first()
self.assertEqual(self.client.get(item.get_absolute_url()).status_code, 200)
self.assertTrue(str(item))
# Talk.is_{editable,moderable}_by
a, b, c = User.objects.all()
2016-07-11 19:33:34 +00:00
self.assertTrue(talk.is_editable_by(c)) # c is superuser
self.assertTrue(talk.is_moderable_by(c)) # c is superuser
self.assertFalse(talk.is_editable_by(b)) # b is not speaker
self.assertFalse(talk.is_moderable_by(b)) # b is not orga
self.client.login(username='a', password='a')
self.client.post(reverse('edit-talk', kwargs={'talk': 'super-talk'}),
2016-07-09 18:29:24 +00:00
{'title': 'mega talk', 'description': 'mega', 'event': 1, 'speakers': (a.pk, b.pk)})
talk = Talk.objects.get(slug='super-talk')
self.assertTrue(b in talk.speakers.all())
2016-07-11 19:33:34 +00:00
self.assertTrue(talk.is_editable_by(b)) # b is speaker now
self.assertFalse(talk.is_moderable_by(b)) # b is not orga
2016-07-09 18:29:24 +00:00
def test_topic_edition_permissions(self):
# Only orga and superuser can edit topics
2016-07-05 23:32:31 +00:00
self.client.login(username='b', password='b')
2016-07-09 19:30:49 +00:00
self.assertFalse(Participation.objects.get(user__username='b').orga)
2016-07-07 14:50:33 +00:00
self.assertEqual(self.client.get(reverse('edit-topic', kwargs={'slug': 'topipo'})).status_code, 302)
2016-07-09 19:30:49 +00:00
Participation.objects.filter(user__username='b').update(orga=True)
2016-07-09 18:29:24 +00:00
self.assertEqual(self.client.get(reverse('edit-topic', kwargs={'slug': 'topipo'})).status_code, 200)
2016-07-11 19:33:34 +00:00
self.client.login(username='c', password='c') # superuser
self.assertEqual(self.client.get(reverse('edit-topic', kwargs={'slug': 'topipo'})).status_code, 200)
self.assertEqual(self.client.get(reverse('list-topics')).status_code, 200)