more tests and a minor fix

This commit is contained in:
Élie Bouttier 2017-11-20 20:12:51 +01:00
parent 9d9ab225a1
commit a19926dc29
2 changed files with 107 additions and 10 deletions

View File

@ -6,6 +6,7 @@ from django.utils import timezone
from datetime import datetime, timedelta from datetime import datetime, timedelta
from xml.etree import ElementTree as ET from xml.etree import ElementTree as ET
from icalendar import Calendar
import pytz import pytz
from .models import * from .models import *
@ -49,6 +50,32 @@ class VolunteersTests(TestCase):
self.assertRedirects(response, reverse('volunteer-home', kwargs=dict(volunteer_token=v.token)), self.assertRedirects(response, reverse('volunteer-home', kwargs=dict(volunteer_token=v.token)),
status_code=302, target_status_code=200) status_code=302, target_status_code=200)
def test_enrole_logged_in(self):
self.client.login(username='a', password='a')
self.assertRedirects(self.client.get(reverse('volunteer-enrole')), reverse('volunteer-home'))
self.client.login(username='b', password='b')
self.assertEqual(self.client.get(reverse('volunteer-enrole')).status_code, 403)
conf = Conference.objects.first()
conf.volunteers_opening_date = timezone.now() - timedelta(hours=1)
conf.save()
user = User.objects.get(username='b')
user.first_name = 'Jean'
user.last_name = 'Mi'
user.save()
user.profile.phone_number = '0123456789'
user.profile.save()
response = self.client.get(reverse('volunteer-enrole'))
self.assertEqual(response.status_code, 200)
self.assertContains(response, 'value="Jean Mi"')
self.assertContains(response, 'value="0123456789"')
n = Volunteer.objects.count()
response = self.client.post(reverse('volunteer-enrole'), {'name': 'B'})
self.assertEqual(Volunteer.objects.count(), n+1)
v = Volunteer.objects.get(name='B')
self.assertRedirects(response, reverse('volunteer-home', kwargs=dict(volunteer_token=v.token)),
status_code=302, target_status_code=200)
self.assertRedirects(self.client.get(reverse('volunteer-enrole')), reverse('volunteer-home'))
def test_home(self): def test_home(self):
v = Volunteer.objects.get(name='A') v = Volunteer.objects.get(name='A')
self.assertEqual(self.client.get(reverse('volunteer-home', kwargs=dict(volunteer_token=v.token))).status_code, 200) self.assertEqual(self.client.get(reverse('volunteer-home', kwargs=dict(volunteer_token=v.token))).status_code, 200)
@ -65,6 +92,17 @@ class VolunteersTests(TestCase):
self.assertRedirects(self.client.get(reverse('volunteer-quit', kwargs=dict(volunteer_token=v.token, activity=a.slug))), self.assertRedirects(self.client.get(reverse('volunteer-quit', kwargs=dict(volunteer_token=v.token, activity=a.slug))),
reverse('volunteer-home', kwargs=dict(volunteer_token=v.token)), status_code=302, target_status_code=200) reverse('volunteer-home', kwargs=dict(volunteer_token=v.token)), status_code=302, target_status_code=200)
def test_volunteer_mail_token(self):
v = Volunteer.objects.get(name='A')
self.assertEqual(self.client.get(reverse('volunteer-mail-token')).status_code, 200)
def test_volunteer_list(self):
self.client.login(username='c', password='c')
self.assertEqual(self.client.get(reverse('volunteer-list')).status_code, 200)
response = self.client.get(reverse('volunteer-list') + '?format=csv')
self.assertEqual(response.status_code, 200)
self.assertEqual(response.get('Content-Disposition'), 'attachment; filename="volunteers.csv"')
class ProposalTest(TestCase): class ProposalTest(TestCase):
def setUp(self): def setUp(self):
@ -80,6 +118,16 @@ class ProposalTest(TestCase):
talk.speakers.add(speaker1) talk.speakers.add(speaker1)
talk.speakers.add(speaker2) talk.speakers.add(speaker2)
def test_home(self):
self.assertRedirects(self.client.get(reverse('home')), reverse('proposal-home'), status_code=302)
site = Site.objects.first()
conf = Conference.objects.get(site=site)
conf.home = '**Welcome!**'
conf.save()
response = self.client.get(reverse('home'))
self.assertEquals(response.status_code, 200)
self.assertContains(response, '<strong>Welcome!</strong>')
def test_opened_categories(self): def test_opened_categories(self):
# TODO cover all cases # TODO cover all cases
conf = Conference.objects.get(name='PonyConf') conf = Conference.objects.get(name='PonyConf')
@ -87,7 +135,21 @@ class ProposalTest(TestCase):
self.assertQuerysetEqual(conf.opened_categories, all_categories_pk, transform=lambda category: category.pk, ordered=False) self.assertQuerysetEqual(conf.opened_categories, all_categories_pk, transform=lambda category: category.pk, ordered=False)
def test_proposal_home(self): def test_proposal_home(self):
conf = Conference.objects.get(name='PonyConf')
site = conf.site
self.assertEqual(self.client.get(reverse('proposal-home')).status_code, 200) self.assertEqual(self.client.get(reverse('proposal-home')).status_code, 200)
response = self.client.post(reverse('proposal-home'), {
'name': 'Jean-Mi',
'email': 'jean@mi.me',
'biography': 'I am Jean-Mi!',
'category': conf.opened_categories.first().pk,
'title': 'PonyConf',
'description': 'PonyConf is cool.',
})
speaker = Participant.objects.get(site=site, name='Jean-Mi')
talk = Talk.objects.get(site=site, title='PonyConf')
self.assertRedirects(response, reverse('proposal-talk-details', kwargs=dict(speaker_token=speaker.token, talk_id=talk.pk)), 302)
self.assertTrue(speaker in talk.speakers.all())
def test_proposal_dashboard(self): def test_proposal_dashboard(self):
speaker = Participant.objects.get(name='Speaker 1') speaker = Participant.objects.get(name='Speaker 1')
@ -141,6 +203,8 @@ class ScheduleTest(TestCase):
participant = Participant.objects.create(site=site, name='Participant 1', email='1@example.org') participant = Participant.objects.create(site=site, name='Participant 1', email='1@example.org')
t1 = Tag.objects.create(site=site, name='Private tag', public=False) t1 = Tag.objects.create(site=site, name='Private tag', public=False)
t2 = Tag.objects.create(site=site, name='Public tag', public=True) t2 = Tag.objects.create(site=site, name='Public tag', public=True)
t3 = Tag.objects.create(site=site, name='Not staff tag', staff=False)
t3 = Tag.objects.create(site=site, name='Staff tag', staff=True)
start_date = datetime(year=2000, month=1, day=1, hour=10, tzinfo=pytz.timezone('Europe/Paris')) start_date = datetime(year=2000, month=1, day=1, hour=10, tzinfo=pytz.timezone('Europe/Paris'))
pending_talk = Talk.objects.create(site=site, title='Talk', description='A talk.', category=category) pending_talk = Talk.objects.create(site=site, title='Talk', description='A talk.', category=category)
pending_talk.speakers.add(participant) pending_talk.speakers.add(participant)
@ -148,11 +212,45 @@ class ScheduleTest(TestCase):
accepted_talk.speakers.add(participant) accepted_talk.speakers.add(participant)
accepted_talk.tags.add(t1) accepted_talk.tags.add(t1)
accepted_talk.tags.add(t2) accepted_talk.tags.add(t2)
accepted_talk.tags.add(t3)
def test_public_schedule(self):
site = Site.objects.first()
conf = Conference.objects.get(site=site)
self.assertEquals(self.client.get(reverse('public-schedule')).status_code, 403)
conf.schedule_publishing_date = timezone.now() - timedelta(hours=1)
conf.save()
self.assertEquals(self.client.get(reverse('public-schedule')).status_code, 200)
conf.schedule_redirection_url ='http://example.net/schedule.html'
conf.save()
self.assertRedirects(self.client.get(reverse('public-schedule')), conf.schedule_redirection_url, status_code=302, fetch_redirect_response=False)
def test_staff_schedule(self):
self.assertEqual(self.client.get(reverse('staff-schedule')).status_code, 302)
self.client.login(username='admin', password='admin')
self.assertEqual(self.client.get(reverse('staff-schedule')).status_code, 200)
def test_xml(self): def test_xml(self):
self.assertEqual(self.client.get(reverse('staff-schedule') + 'xml/').status_code, 302)
self.client.login(username='admin', password='admin') self.client.login(username='admin', password='admin')
response = self.client.get(reverse('staff-schedule') + 'xml/') response = self.client.get(reverse('staff-schedule') + 'xml/')
self.assertEquals(response.status_code, 200)
self.assertContains(response, 'Public tag') self.assertContains(response, 'Public tag')
self.assertNotContains(response, 'Private tag') self.assertNotContains(response, 'Private tag')
ET.fromstring(response.content) ET.fromstring(response.content)
def test_ics(self):
self.client.login(username='admin', password='admin')
response = self.client.get(reverse('staff-schedule') + 'ics/')
self.assertEquals(response.status_code, 200)
Calendar.from_ical(response.content)
def test_html(self):
self.client.login(username='admin', password='admin')
response = self.client.get(reverse('staff-schedule') + 'html/')
self.assertContains(response, 'Staff tag')
self.assertNotContains(response, 'Not staff tag')
self.assertEquals(response.status_code, 200)
def test_inexistent_format(self):
self.client.login(username='admin', password='admin')
self.assertEquals(self.client.get(reverse('staff-schedule') + 'inexistent/').status_code, 404)

View File

@ -43,18 +43,17 @@ def home(request):
def volunteer_enrole(request): def volunteer_enrole(request):
if request.user.is_authenticated() and Volunteer.objects.filter(site=request.conference.site, email=request.user.email).exists():
return redirect(reverse('volunteer-home'))
if not request.conference.volunteers_enrollment_is_open(): if not request.conference.volunteers_enrollment_is_open():
raise PermissionDenied raise PermissionDenied
initial = {} initial = {}
if request.user.is_authenticated(): if request.user.is_authenticated() and not request.POST:
if Volunteer.objects.filter(site=request.conference.site, email=request.user.email).exists(): initial.update({
return redirect(reverse('volunteer-home')) 'name': request.user.get_full_name(),
elif not request.POST: 'phone_number': request.user.profile.phone_number,
initial.update({ 'sms_prefered': request.user.profile.sms_prefered,
'name': request.user.get_full_name(), })
'phone_number': request.user.profile.phone_number,
'sms_prefered': request.user.profile.sms_prefered,
})
form = VolunteerForm(request.POST or None, initial=initial, conference=request.conference) form = VolunteerForm(request.POST or None, initial=initial, conference=request.conference)
if request.user.is_authenticated(): if request.user.is_authenticated():
form.fields.pop('email') form.fields.pop('email')