more tests and small fixes

This commit is contained in:
Élie Bouttier 2017-11-21 21:28:55 +01:00
parent ec189bdc68
commit f2b369a65e
4 changed files with 233 additions and 40 deletions

View File

@ -3,6 +3,7 @@ from django.contrib.sites.models import Site
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from django.test import TestCase from django.test import TestCase
from django.utils import timezone from django.utils import timezone
from django.contrib import messages
from datetime import datetime, timedelta from datetime import datetime, timedelta
from xml.etree import ElementTree as ET from xml.etree import ElementTree as ET
@ -15,6 +16,9 @@ from .models import *
class VolunteersTests(TestCase): class VolunteersTests(TestCase):
def setUp(self): def setUp(self):
site = Site.objects.first() site = Site.objects.first()
conf = site.conference
conf.name = 'PonyConf'
conf.save()
a, b, c = (User.objects.create_user(guy, email='%s@example.org' % guy, password=guy) for guy in 'abc') a, b, c = (User.objects.create_user(guy, email='%s@example.org' % guy, password=guy) for guy in 'abc')
Volunteer.objects.create(site=site, name='A', email=a.email) Volunteer.objects.create(site=site, name='A', email=a.email)
Activity.objects.create(site=site, name='Everythings') Activity.objects.create(site=site, name='Everythings')
@ -37,7 +41,7 @@ class VolunteersTests(TestCase):
conf.volunteers_opening_date = None conf.volunteers_opening_date = None
self.assertFalse(conf.volunteers_enrollment_is_open()) self.assertFalse(conf.volunteers_enrollment_is_open())
def test_enrole(self): def test_enrole_logged_out(self):
self.assertEqual(self.client.get(reverse('volunteer-enrole')).status_code, 403) self.assertEqual(self.client.get(reverse('volunteer-enrole')).status_code, 403)
conf = Conference.objects.first() conf = Conference.objects.first()
conf.volunteers_opening_date = timezone.now() - timedelta(hours=1) conf.volunteers_opening_date = timezone.now() - timedelta(hours=1)
@ -95,17 +99,59 @@ class VolunteersTests(TestCase):
def test_volunteer_mail_token(self): def test_volunteer_mail_token(self):
v = Volunteer.objects.get(name='A') v = Volunteer.objects.get(name='A')
self.assertEqual(self.client.get(reverse('volunteer-mail-token')).status_code, 200) self.assertEqual(self.client.get(reverse('volunteer-mail-token')).status_code, 200)
response = self.client.post(reverse('volunteer-mail-token'), {'email': 'notfound@example.org'})
self.assertEqual(response.status_code, 200)
self.assertTrue(any(map(lambda m: m.level == messages.ERROR and 'do not know this email' in m.message, response.context['messages'])))
response = self.client.post(reverse('volunteer-mail-token'), {'email': 'a@example.org'})
self.assertRedirects(response, reverse('volunteer-mail-token'))
def test_volunteer_list(self): def test_volunteer_list(self):
url = reverse('volunteer-list')
self.assertRedirects(self.client.get(url), reverse('login') + '?next=' + url)
self.client.login(username='c', password='c') self.client.login(username='c', password='c')
self.assertEqual(self.client.get(reverse('volunteer-list')).status_code, 200) self.assertEqual(self.client.get(url).status_code, 200)
response = self.client.get(reverse('volunteer-list') + '?format=csv') response = self.client.get(url + '?format=csv')
self.assertEqual(response.status_code, 200) self.assertEqual(response.status_code, 200)
self.assertEqual(response.get('Content-Disposition'), 'attachment; filename="volunteers.csv"') self.assertEqual(response.get('Content-Disposition'), 'attachment; filename="volunteers.csv"')
def test_volunteer_details(self):
v = Volunteer.objects.get(name='A')
url = reverse('volunteer-details', kwargs=dict(volunteer_id=v.pk))
self.assertRedirects(self.client.get(url), reverse('login') + '?next=' + url)
self.client.login(username='c', password='c')
self.assertEqual(self.client.get(url).status_code, 200)
def test_activity_list(self):
url = reverse('activity-list')
self.assertRedirects(self.client.get(url), reverse('login') + '?next=' + url)
self.client.login(username='c', password='c')
response = self.client.get(url)
self.assertEquals(response.status_code, 200)
def test_activity_add(self):
url = reverse('activity-list')
self.assertRedirects(self.client.get(url), reverse('login') + '?next=' + url)
self.client.login(username='c', password='c')
response = self.client.get(url)
self.assertEquals(response.status_code, 200)
def test_activity_edit(self):
conf = Conference.objects.get(name='PonyConf')
activity = Activity.objects.filter(site=conf.site).first()
url = reverse('activity-edit', kwargs={'slug': activity.slug})
self.assertRedirects(self.client.get(url), reverse('login') + '?next=' + url)
self.client.login(username='c', password='c')
response = self.client.get(url)
self.assertEquals(response.status_code, 200)
def test_activity_remove(self):
pass
class ProposalTest(TestCase): class ProposalTest(TestCase):
def setUp(self): def setUp(self):
user = User.objects.create_user('jean-mi', email='jean-mi@example.org', password='jean-mi', first_name='Jean', last_name='Mi')
admin = User.objects.create_user('admin', email='admin@example.org', password='admin', is_superuser=True)
site = Site.objects.first() site = Site.objects.first()
conf = Conference.objects.get(site=site) conf = Conference.objects.get(site=site)
conf.name = 'PonyConf' conf.name = 'PonyConf'
@ -114,9 +160,12 @@ class ProposalTest(TestCase):
category_ws = TalkCategory.objects.create(site=site, name='Workshop', label='workshop') category_ws = TalkCategory.objects.create(site=site, name='Workshop', label='workshop')
speaker1 = Participant.objects.create(site=site, name='Speaker 1', email='1@example.org') speaker1 = Participant.objects.create(site=site, name='Speaker 1', email='1@example.org')
speaker2 = Participant.objects.create(site=site, name='Speaker 2', email='2@example.org') speaker2 = Participant.objects.create(site=site, name='Speaker 2', email='2@example.org')
talk = Talk.objects.create(site=site, category=category_conf, title='Talk', description='This is a talk.') speaker3 = Participant.objects.create(site=site, name='Speaker 3', email='3@example.org')
talk.speakers.add(speaker1) talk1 = Talk.objects.create(site=site, category=category_conf, title='Talk 1', description='This is a 1st talk.')
talk.speakers.add(speaker2) talk1.speakers.add(speaker1)
talk1.speakers.add(speaker2)
talk2 = Talk.objects.create(site=site, category=category_conf, title='Talk 2', description='This is a 2nd talk.')
talk2.speakers.add(speaker3)
def test_home(self): def test_home(self):
self.assertRedirects(self.client.get(reverse('home')), reverse('proposal-home'), status_code=302) self.assertRedirects(self.client.get(reverse('home')), reverse('proposal-home'), status_code=302)
@ -134,7 +183,14 @@ class ProposalTest(TestCase):
all_categories_pk = TalkCategory.objects.filter(site=conf.site).values_list('pk', flat=True) all_categories_pk = TalkCategory.objects.filter(site=conf.site).values_list('pk', flat=True)
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_closed(self):
conf = Conference.objects.get(name='PonyConf')
TalkCategory.objects.filter(site=conf.site).all().delete()
response = self.client.get(reverse('proposal-home'))
self.assertEqual(response.status_code, 200)
self.assertTemplateUsed(response, 'cfp/closed.html')
def test_proposal_logged_out(self):
conf = Conference.objects.get(name='PonyConf') conf = Conference.objects.get(name='PonyConf')
site = conf.site 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)
@ -151,6 +207,28 @@ class ProposalTest(TestCase):
self.assertRedirects(response, reverse('proposal-talk-details', kwargs=dict(speaker_token=speaker.token, talk_id=talk.pk)), 302) 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()) self.assertTrue(speaker in talk.speakers.all())
def test_proposal_logged_in(self):
self.client.login(username='jean-mi', password='jean-mi')
conf = Conference.objects.get(name='PonyConf')
site = conf.site
response = self.client.get(reverse('proposal-home'))
self.assertEqual(response.status_code, 200)
self.assertContains(response, 'Jean Mi')
response = self.client.post(reverse('proposal-home'), {
'name': 'Jean-Mi',
'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')
self.assertEquals(speaker.email, 'jean-mi@example.org')
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())
response = self.client.get(reverse('proposal-home'))
self.assertRedirects(response, reverse('proposal-dashboard'))
def test_proposal_dashboard(self): def test_proposal_dashboard(self):
speaker = Participant.objects.get(name='Speaker 1') speaker = Participant.objects.get(name='Speaker 1')
self.assertEqual(self.client.get(reverse('proposal-dashboard', kwargs=dict(speaker_token=speaker.token))).status_code, 200) self.assertEqual(self.client.get(reverse('proposal-dashboard', kwargs=dict(speaker_token=speaker.token))).status_code, 200)
@ -160,37 +238,166 @@ class ProposalTest(TestCase):
self.assertEqual(self.client.get(reverse('proposal-profile-edit', kwargs=dict(speaker_token=speaker.token))).status_code, 200) self.assertEqual(self.client.get(reverse('proposal-profile-edit', kwargs=dict(speaker_token=speaker.token))).status_code, 200)
def test_proposal_talk_details(self): def test_proposal_talk_details(self):
speaker1 = Participant.objects.get(name='Speaker 1')
speaker2 = Participant.objects.get(name='Speaker 2')
talk1 = Talk.objects.get(title='Talk 1')
talk2 = Talk.objects.get(title='Talk 2')
self.assertEqual(self.client.get(reverse('proposal-talk-details', kwargs=dict(speaker_token=speaker1.token, talk_id=talk1.pk))).status_code, 200)
self.assertEqual(self.client.get(reverse('proposal-talk-details', kwargs=dict(speaker_token=speaker2.token, talk_id=talk1.pk))).status_code, 200)
self.assertEqual(self.client.get(reverse('proposal-talk-details', kwargs=dict(speaker_token=speaker1.token, talk_id=talk2.pk))).status_code, 404)
def test_proposal_talk_add(self):
speaker = Participant.objects.get(name='Speaker 1') speaker = Participant.objects.get(name='Speaker 1')
talk = Talk.objects.get(title='Talk') self.assertEqual(self.client.get(reverse('proposal-talk-add', kwargs=dict(speaker_token=speaker.token))).status_code, 200)
self.assertEqual(self.client.get(reverse('proposal-talk-details', kwargs=dict(speaker_token=speaker.token, talk_id=talk.pk))).status_code, 200)
def test_proposal_talk_edit(self): def test_proposal_talk_edit(self):
speaker = Participant.objects.get(name='Speaker 1') speaker = Participant.objects.get(name='Speaker 1')
talk = Talk.objects.get(title='Talk') talk = Talk.objects.get(title='Talk 1')
self.assertEqual(self.client.get(reverse('proposal-talk-edit', kwargs=dict(speaker_token=speaker.token, talk_id=talk.pk))).status_code, 200) self.assertEqual(self.client.get(reverse('proposal-talk-edit', kwargs=dict(speaker_token=speaker.token, talk_id=talk.pk))).status_code, 200)
def test_proposal_speaker_add(self): def test_proposal_speaker_add(self):
speaker = Participant.objects.get(name='Speaker 1') speaker = Participant.objects.get(name='Speaker 1')
talk = Talk.objects.get(title='Talk') talk = Talk.objects.get(title='Talk 1')
self.assertEqual(self.client.get(reverse('proposal-speaker-add', kwargs=dict(speaker_token=speaker.token, talk_id=talk.pk))).status_code, 200) self.assertEqual(self.client.get(reverse('proposal-speaker-add', kwargs=dict(speaker_token=speaker.token, talk_id=talk.pk))).status_code, 200)
def test_proposal_speaker_edit(self): def test_proposal_speaker_edit(self):
speaker = Participant.objects.get(name='Speaker 1') speaker = Participant.objects.get(name='Speaker 1')
co_speaker = Participant.objects.get(name='Speaker 2') co_speaker = Participant.objects.get(name='Speaker 2')
talk = Talk.objects.get(title='Talk') talk = Talk.objects.get(title='Talk 1')
self.assertEqual(self.client.get(reverse('proposal-speaker-edit', kwargs=dict(speaker_token=speaker.token, talk_id=talk.pk, co_speaker_id=speaker.pk))).status_code, 200) self.assertEqual(self.client.get(reverse('proposal-speaker-edit', kwargs=dict(speaker_token=speaker.token, talk_id=talk.pk, co_speaker_id=speaker.pk))).status_code, 200)
self.assertEqual(self.client.get(reverse('proposal-speaker-edit', kwargs=dict(speaker_token=speaker.token, talk_id=talk.pk, co_speaker_id=co_speaker.pk))).status_code, 200) self.assertEqual(self.client.get(reverse('proposal-speaker-edit', kwargs=dict(speaker_token=speaker.token, talk_id=talk.pk, co_speaker_id=co_speaker.pk))).status_code, 200)
def test_proposal_speaker_remove(self): def test_proposal_speaker_remove(self):
speaker = Participant.objects.get(name='Speaker 1') speaker = Participant.objects.get(name='Speaker 1')
co_speaker = Participant.objects.get(name='Speaker 2') co_speaker = Participant.objects.get(name='Speaker 2')
talk = Talk.objects.get(title='Talk') talk = Talk.objects.get(title='Talk 1')
self.assertEqual(self.client.get(reverse('proposal-speaker-remove', kwargs=dict(speaker_token=speaker.token, talk_id=talk.pk, co_speaker_id=speaker.pk))).status_code, 403) self.assertEqual(self.client.get(reverse('proposal-speaker-remove', kwargs=dict(speaker_token=speaker.token, talk_id=talk.pk, co_speaker_id=speaker.pk))).status_code, 403)
self.assertRedirects( self.assertRedirects(
self.client.get(reverse('proposal-speaker-remove', kwargs=dict(speaker_token=speaker.token, talk_id=talk.pk, co_speaker_id=co_speaker.pk))), self.client.get(reverse('proposal-speaker-remove', kwargs=dict(speaker_token=speaker.token, talk_id=talk.pk, co_speaker_id=co_speaker.pk))),
reverse('proposal-talk-details', kwargs=dict(speaker_token=speaker.token, talk_id=talk.pk)), reverse('proposal-talk-details', kwargs=dict(speaker_token=speaker.token, talk_id=talk.pk)),
status_code=302) status_code=302)
def test_proposal_mail_token(self):
p = Participant.objects.get(name='Speaker 1')
self.assertEqual(self.client.get(reverse('proposal-mail-token')).status_code, 200)
response = self.client.post(reverse('proposal-mail-token'), {'email': 'notfound@example.org'})
self.assertEqual(response.status_code, 200)
self.assertTrue(any(map(lambda m: m.level == messages.ERROR and 'do not know this email' in m.message, response.context['messages'])))
response = self.client.post(reverse('proposal-mail-token'), {'email': p.email})
self.assertRedirects(response, reverse('proposal-mail-token'))
def test_speaker_list(self):
url = reverse('participant-list')
self.assertRedirects(self.client.get(url), reverse('login') + '?next=' + url)
self.client.login(username='admin', password='admin')
response = self.client.get(url)
self.assertEquals(response.status_code, 200)
self.assertContains(response, 'Speaker 1')
self.assertContains(response, 'Speaker 2')
response = self.client.get(url + '?format=csv')
self.assertEqual(response.status_code, 200)
self.assertEqual(response.get('Content-Disposition'), 'attachment; filename="participants.csv"')
def test_speaker_details(self):
speaker1 = Participant.objects.get(name='Speaker 1')
speaker2 = Participant.objects.get(name='Speaker 2')
url = reverse('participant-details', kwargs={'participant_id': speaker1.token})
self.assertRedirects(self.client.get(url), reverse('login') + '?next=' + url)
self.client.login(username='admin', password='admin')
response = self.client.get(url)
self.assertEquals(response.status_code, 200)
self.assertContains(response, 'Speaker 1')
self.assertContains(response, 'Speaker 2')
self.assertNotContains(response, 'Speaker 3')
self.assertContains(response, 'Talk 1')
self.assertNotContains(response, 'Talk 3')
def test_speaker_edit(self):
speaker = Participant.objects.get(name='Speaker 1')
url = reverse('participant-edit', kwargs={'participant_id': speaker.token})
self.assertRedirects(self.client.get(url), reverse('login') + '?next=' + url)
self.client.login(username='admin', password='admin')
response = self.client.get(url)
self.assertEquals(response.status_code, 200)
def test_speaker_add_talk(self):
speaker = Participant.objects.get(name='Speaker 1')
url = reverse('participant-add-talk', kwargs={'participant_id': speaker.pk})
self.assertRedirects(self.client.get(url), reverse('login') + '?next=' + url)
self.client.login(username='admin', password='admin')
response = self.client.get(url)
self.assertEquals(response.status_code, 200)
def test_talk_list(self):
url = reverse('talk-list')
self.assertRedirects(self.client.get(url), reverse('login') + '?next=' + url)
self.client.login(username='admin', password='admin')
response = self.client.get(url)
self.assertEquals(response.status_code, 200)
self.assertContains(response, 'Talk 1')
response = self.client.get(url + '?format=csv')
self.assertEqual(response.status_code, 200)
self.assertEqual(response.get('Content-Disposition'), 'attachment; filename="talks.csv"')
def test_talk_details(self):
talk = Talk.objects.get(title='Talk 1')
url = reverse('talk-details', kwargs=dict(talk_id=talk.token))
self.assertRedirects(self.client.get(url), reverse('login') + '?next=' + url)
self.client.login(username='admin', password='admin')
response = self.client.get(url)
self.assertEquals(response.status_code, 200)
self.assertContains(response, talk.title)
def test_talk_speaker_remove(self):
talk = Talk.objects.get(title='Talk 1')
count = talk.speakers.count()
to_remove = talk.speakers.first()
self.assertTrue(to_remove in talk.speakers.all())
url = reverse('talk-speaker-remove', kwargs={'talk_id': talk.pk, 'participant_id': to_remove.pk})
self.assertRedirects(self.client.get(url), reverse('login') + '?next=' + url)
self.client.login(username='admin', password='admin')
response = self.client.get(url)
self.assertRedirects(response, reverse('talk-details', kwargs={'talk_id': talk.token}))
talk = Talk.objects.get(title='Talk 1')
self.assertEquals(talk.speakers.count() + 1, count)
self.assertFalse(to_remove in talk.speakers.all())
def test_conference(self):
conf = Conference.objects.get(name='PonyConf')
url = reverse('conference')
self.assertRedirects(self.client.get(url), reverse('login') + '?next=' + url)
self.client.login(username='admin', password='admin')
response = self.client.get(url)
self.assertEquals(response.status_code, 200)
def test_category_list(self):
url = reverse('category-list')
self.assertRedirects(self.client.get(url), reverse('login') + '?next=' + url)
self.client.login(username='admin', password='admin')
response = self.client.get(url)
self.assertEquals(response.status_code, 200)
def test_category_add(self):
url = reverse('category-add')
self.assertRedirects(self.client.get(url), reverse('login') + '?next=' + url)
self.client.login(username='admin', password='admin')
response = self.client.get(url)
self.assertEquals(response.status_code, 200)
def test_tag_list(self):
url = reverse('tag-list')
self.assertRedirects(self.client.get(url), reverse('login') + '?next=' + url)
self.client.login(username='admin', password='admin')
response = self.client.get(url)
self.assertEquals(response.status_code, 200)
def test_tag_add(self):
url = reverse('tag-add')
self.assertRedirects(self.client.get(url), reverse('login') + '?next=' + url)
self.client.login(username='admin', password='admin')
response = self.client.get(url)
self.assertEquals(response.status_code, 200)
class ScheduleTest(TestCase): class ScheduleTest(TestCase):
def setUp(self): def setUp(self):

View File

@ -43,12 +43,12 @@ urlpatterns = [
url(r'^staff/talks/(?P<talk_id>[\w\-]+)/confirm/$', views.talk_acknowledgment, {'confirm': True}, name='talk-confirm-by-staff'), url(r'^staff/talks/(?P<talk_id>[\w\-]+)/confirm/$', views.talk_acknowledgment, {'confirm': True}, name='talk-confirm-by-staff'),
url(r'^staff/talks/(?P<talk_id>[\w\-]+)/desist/$', views.talk_acknowledgment, {'confirm': False}, name='talk-desist-by-staff'), url(r'^staff/talks/(?P<talk_id>[\w\-]+)/desist/$', views.talk_acknowledgment, {'confirm': False}, name='talk-desist-by-staff'),
url(r'^staff/talks/(?P<talk_id>[\w\-]+)/edit/$', views.TalkUpdate.as_view(), name='talk-edit'), url(r'^staff/talks/(?P<talk_id>[\w\-]+)/edit/$', views.TalkUpdate.as_view(), name='talk-edit'),
# url(r'^staff/talks/(?P<talk_id>[\w\-]+)/speaker/add/$', views.talk_speaker_add, name='talk-speaker-add'), TODO WIP # url(r'^staff/talks/(?P<talk_id>[0-9]+)/speaker/add/$', views.talk_speaker_add, name='talk-speaker-add'), TODO WIP
url(r'^staff/talks/(?P<talk_id>[\w\-]+)/speaker/remove/(?P<participant_id>[\w\-]+)/$', views.talk_speaker_remove, name='talk-speaker-remove'), url(r'^staff/talks/(?P<talk_id>[0-9]+)/speaker/remove/(?P<participant_id>[0-9]+)/$', views.talk_speaker_remove, name='talk-speaker-remove'),
url(r'^staff/speakers/$', views.participant_list, name='participant-list'), url(r'^staff/speakers/$', views.participant_list, name='participant-list'),
url(r'^staff/speakers/add/$', views.ParticipantCreate.as_view(), name='participant-add'), url(r'^staff/speakers/add/$', views.ParticipantCreate.as_view(), name='participant-add'),
url(r'^staff/speakers/(?P<participant_id>[\w\-]+)/$', views.participant_details, name='participant-details'), url(r'^staff/speakers/(?P<participant_id>[\w\-]+)/$', views.participant_details, name='participant-details'),
url(r'^staff/speakers/(?P<participant_id>[\w\-]+)/add-talk/$', views.participant_add_talk, name='participant-add-talk'), url(r'^staff/speakers/(?P<participant_id>[0-9]+)/add-talk/$', views.participant_add_talk, name='participant-add-talk'),
url(r'^staff/speakers/(?P<participant_id>[\w\-]+)/edit/$', views.ParticipantUpdate.as_view(), name='participant-edit'), url(r'^staff/speakers/(?P<participant_id>[\w\-]+)/edit/$', views.ParticipantUpdate.as_view(), name='participant-edit'),
url(r'^staff/tracks/$', views.TrackList.as_view(), name='track-list'), url(r'^staff/tracks/$', views.TrackList.as_view(), name='track-list'),
url(r'^staff/tracks/add/$', views.TrackCreate.as_view(), name='track-add'), url(r'^staff/tracks/add/$', views.TrackCreate.as_view(), name='track-add'),
@ -64,15 +64,15 @@ urlpatterns = [
url(r'^staff/select2/$', views.Select2View.as_view(), name='django_select2-json'), url(r'^staff/select2/$', views.Select2View.as_view(), name='django_select2-json'),
url(r'^admin/$', views.admin, name='admin'), url(r'^admin/$', views.admin, name='admin'),
url(r'^admin/conference/$', views.conference_edit, name='conference'), url(r'^admin/conference/$', views.conference_edit, name='conference'),
url(r'^staff/categories/$', views.TalkCategoryList.as_view(), name='category-list'), url(r'^admin/categories/$', views.TalkCategoryList.as_view(), name='category-list'),
url(r'^staff/categories/add/$', views.TalkCategoryCreate.as_view(), name='category-add'), url(r'^admin/categories/add/$', views.TalkCategoryCreate.as_view(), name='category-add'),
url(r'^staff/categories/(?P<pk>[0-9]+)/edit/$', views.TalkCategoryUpdate.as_view(), name='category-edit'), url(r'^admin/categories/(?P<pk>[0-9]+)/edit/$', views.TalkCategoryUpdate.as_view(), name='category-edit'),
url(r'^staff/tags/$', views.TagList.as_view(), name='tag-list'), url(r'^admin/tags/$', views.TagList.as_view(), name='tag-list'),
url(r'^staff/tags/add/$', views.TagCreate.as_view(), name='tag-add'), url(r'^admin/tags/add/$', views.TagCreate.as_view(), name='tag-add'),
url(r'^staff/tags/(?P<slug>[-\w]+)/edit/$', views.TagUpdate.as_view(), name='tag-edit'), url(r'^admin/tags/(?P<slug>[-\w]+)/edit/$', views.TagUpdate.as_view(), name='tag-edit'),
url(r'^staff/activities/$', views.ActivityList.as_view(), name='activity-list'), url(r'^admin/activities/$', views.ActivityList.as_view(), name='activity-list'),
url(r'^staff/activities/add/$', views.ActivityCreate.as_view(), name='activity-add'), url(r'^admin/activities/add/$', views.ActivityCreate.as_view(), name='activity-add'),
url(r'^staff/activities/(?P<slug>[-\w]+)/edit/$', views.ActivityUpdate.as_view(), name='activity-edit'), url(r'^admin/activities/(?P<slug>[-\w]+)/edit/$', views.ActivityUpdate.as_view(), name='activity-edit'),
url(r'^schedule/((?P<program_format>[\w]+)/)?$', views.public_schedule, name='public-schedule'), url(r'^schedule/((?P<program_format>[\w]+)/)?$', views.public_schedule, name='public-schedule'),
#url(r'^markdown/$', views.markdown_preview, name='markdown'), #url(r'^markdown/$', views.markdown_preview, name='markdown'),
] ]

View File

@ -331,10 +331,7 @@ def proposal_talk_edit(request, speaker, talk_id=None):
talk = get_object_or_404(Talk, site=request.conference.site, speakers__pk=speaker.pk, pk=talk_id) talk = get_object_or_404(Talk, site=request.conference.site, speakers__pk=speaker.pk, pk=talk_id)
else: else:
talk = None talk = None
if is_staff(request, request.user): categories = request.conference.opened_categories
categories = TalkCategory.objects.filter(site=request.conference.site)
else:
categories = request.conference.opened_categories
form = TalkForm(request.POST or None, request.FILES or None, categories=categories, instance=talk) form = TalkForm(request.POST or None, request.FILES or None, categories=categories, instance=talk)
if request.method == 'POST' and form.is_valid(): if request.method == 'POST' and form.is_valid():
talk = form.save(commit=False) talk = form.save(commit=False)

View File

@ -6,10 +6,6 @@ from markdown import markdown
import bleach import bleach
def enum_to_choices(enum):
return ((item.value, item.name.replace('_', ' ')) for item in list(enum))
class PonyConfModel(models.Model): class PonyConfModel(models.Model):
created = models.DateTimeField(auto_now_add=True) created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True) updated = models.DateTimeField(auto_now=True)
@ -17,13 +13,6 @@ class PonyConfModel(models.Model):
class Meta: class Meta:
abstract = True abstract = True
def full_link(self, request=None):
protocol = 'https' if request is None or request.is_secure() else 'http'
return '%s://%s%s' % (protocol, get_current_site(request), self.get_absolute_url())
def get_link(self):
return mark_safe('<a href="%s">%s</a>' % (self.get_absolute_url(), self))
def markdown_to_html(md): def markdown_to_html(md):
html = markdown(md) html = markdown(md)