in order to autogenerate dotted path url pattern names. Updated a number of url reverses to use dotted path, and removed explicit url pattern names as needed. Changed some imports to prevent import of ietf.urls before django initialization was complete. Changed 3 cases of form classes being curried to functions; django 1.10 didn't accept that. Started converting old-style middleware classes to new-style middleware functions (incomplete). Tweaked a nomcom decorator to preserve function names and attributes, like a good decorator should. Replaced the removed django templatetag 'removetags' with our own version which uses bleach, and does sanitizing in addition to removing explicitly mentionied html tags. Rewrote the filename argument handling in a management command which had broken with the upgrade. - Legacy-Id: 12818
192 lines
7.8 KiB
Python
192 lines
7.8 KiB
Python
from django.core.urlresolvers import reverse
|
|
|
|
import debug # pyflakes:ignore
|
|
|
|
from ietf.utils.test_utils import TestCase, unicontent
|
|
from ietf.group.models import Group
|
|
from ietf.meeting.models import Meeting, Session, ResourceAssociation
|
|
from ietf.meeting.test_data import make_meeting_test_data
|
|
from ietf.utils.mail import outbox, empty_outbox
|
|
from ietf.utils.test_data import make_test_data
|
|
|
|
from pyquery import PyQuery
|
|
|
|
SECR_USER='secretary'
|
|
|
|
class SreqUrlTests(TestCase):
|
|
def test_urls(self):
|
|
make_meeting_test_data()
|
|
|
|
self.client.login(username="secretary", password="secretary+password")
|
|
|
|
r = self.client.get("/secr/")
|
|
self.assertEqual(r.status_code, 200)
|
|
|
|
r = self.client.get("/secr/sreq/")
|
|
self.assertEqual(r.status_code, 200)
|
|
|
|
testgroup=Group.objects.filter(type_id='wg').first()
|
|
r = self.client.get("/secr/sreq/%s/new/" % testgroup.acronym)
|
|
self.assertEqual(r.status_code, 200)
|
|
|
|
class SessionRequestTestCase(TestCase):
|
|
def test_main(self):
|
|
make_meeting_test_data()
|
|
url = reverse('sessions')
|
|
self.client.login(username="secretary", password="secretary+password")
|
|
r = self.client.get(url)
|
|
self.assertEqual(r.status_code, 200)
|
|
sched = r.context['scheduled_groups']
|
|
unsched = r.context['unscheduled_groups']
|
|
self.assertEqual(len(unsched),2)
|
|
self.assertEqual(len(sched),2)
|
|
|
|
class SubmitRequestCase(TestCase):
|
|
def test_submit_request(self):
|
|
make_test_data()
|
|
group = Group.objects.get(acronym='mars')
|
|
url = reverse('ietf.secr.sreq.views.new',kwargs={'acronym':group.acronym})
|
|
post_data = {'num_session':'1',
|
|
'length_session1':'3600',
|
|
'attendees':'10',
|
|
'conflict1':'',
|
|
'comments':'need projector'}
|
|
self.client.login(username="secretary", password="secretary+password")
|
|
r = self.client.post(url,post_data)
|
|
self.assertRedirects(r, reverse('sessions_confirm', kwargs={'acronym':group.acronym}))
|
|
|
|
def test_submit_request_invalid(self):
|
|
make_test_data()
|
|
group = Group.objects.get(acronym='mars')
|
|
url = reverse('ietf.secr.sreq.views.new',kwargs={'acronym':group.acronym})
|
|
post_data = {'num_session':'2',
|
|
'length_session1':'3600',
|
|
'attendees':'10',
|
|
'conflict1':'',
|
|
'comments':'need projector'}
|
|
self.client.login(username="secretary", password="secretary+password")
|
|
r = self.client.post(url,post_data)
|
|
self.assertEqual(r.status_code, 200)
|
|
q = PyQuery(r.content)
|
|
self.assertEqual(len(q('#session-request-form')),1)
|
|
self.assertTrue('You must enter a length for all sessions' in unicontent(r))
|
|
|
|
def test_request_notification(self):
|
|
make_test_data()
|
|
meeting = Meeting.objects.filter(type='ietf').first()
|
|
group = Group.objects.get(acronym='ames')
|
|
ad = group.parent.role_set.filter(name='ad').first().person
|
|
resource = ResourceAssociation.objects.first()
|
|
url = reverse('ietf.secr.sreq.views.new',kwargs={'acronym':group.acronym})
|
|
confirm_url = reverse('sessions_confirm',kwargs={'acronym':group.acronym})
|
|
len_before = len(outbox)
|
|
post_data = {'num_session':'1',
|
|
'length_session1':'3600',
|
|
'attendees':'10',
|
|
'bethere':str(ad.pk),
|
|
'conflict1':'',
|
|
'comments':'',
|
|
'resources': resource.pk}
|
|
self.client.login(username="ameschairman", password="ameschairman+password")
|
|
# submit
|
|
r = self.client.post(url,post_data)
|
|
self.assertRedirects(r, confirm_url)
|
|
# confirm
|
|
r = self.client.post(confirm_url,{'submit':'Submit'})
|
|
self.assertRedirects(r, reverse('sessions'))
|
|
self.assertEqual(len(outbox),len_before+1)
|
|
notification = outbox[-1]
|
|
notification_payload = unicode(notification.get_payload(decode=True),"utf-8","replace")
|
|
session = Session.objects.get(meeting=meeting,group=group)
|
|
self.assertEqual(session.resources.count(),1)
|
|
self.assertEqual(session.people_constraints.count(),1)
|
|
resource = session.resources.first()
|
|
self.assertTrue(resource.desc in notification_payload)
|
|
self.assertTrue(ad.ascii_name() in notification_payload)
|
|
|
|
class LockAppTestCase(TestCase):
|
|
def test_edit_request(self):
|
|
meeting = make_meeting_test_data()
|
|
meeting.session_request_lock_message='locked'
|
|
meeting.save()
|
|
group = Group.objects.get(acronym='mars')
|
|
url = reverse('sessions_edit',kwargs={'acronym':group.acronym})
|
|
self.client.login(username="secretary", password="secretary+password")
|
|
r = self.client.get(url)
|
|
self.assertEqual(r.status_code, 200)
|
|
q = PyQuery(r.content)
|
|
self.assertEqual(len(q(':disabled[name="submit"]')), 1)
|
|
|
|
def test_view_request(self):
|
|
meeting = make_meeting_test_data()
|
|
meeting.session_request_lock_message='locked'
|
|
meeting.save()
|
|
group = Group.objects.get(acronym='mars')
|
|
url = reverse('sessions_view',kwargs={'acronym':group.acronym})
|
|
self.client.login(username="secretary", password="secretary+password")
|
|
r = self.client.get(url,follow=True)
|
|
self.assertEqual(r.status_code, 200)
|
|
q = PyQuery(r.content)
|
|
self.assertEqual(len(q(':disabled[name="edit"]')), 1)
|
|
|
|
def test_new_request(self):
|
|
meeting = make_meeting_test_data()
|
|
meeting.session_request_lock_message='locked'
|
|
meeting.save()
|
|
group = Group.objects.get(acronym='mars')
|
|
url = reverse('ietf.secr.sreq.views.new',kwargs={'acronym':group.acronym})
|
|
|
|
# try as WG Chair
|
|
self.client.login(username="marschairman", password="marschairman+password")
|
|
r = self.client.get(url,follow=True)
|
|
self.assertEqual(r.status_code, 200)
|
|
q = PyQuery(r.content)
|
|
self.assertEqual(len(q('#session-request-form')),0)
|
|
|
|
# try as Secretariat
|
|
self.client.login(username="secretary", password="secretary+password")
|
|
r = self.client.get(url,follow=True)
|
|
self.assertEqual(r.status_code, 200)
|
|
q = PyQuery(r.content)
|
|
self.assertEqual(len(q('#session-request-form')),1)
|
|
|
|
class EditRequestCase(TestCase):
|
|
pass
|
|
|
|
class NotMeetingCase(TestCase):
|
|
|
|
def test_not_meeting(self):
|
|
make_meeting_test_data()
|
|
group = Group.objects.get(acronym='mars')
|
|
url = reverse('sessions_no_session',kwargs={'acronym':group.acronym})
|
|
self.client.login(username="secretary", password="secretary+password")
|
|
|
|
empty_outbox()
|
|
|
|
r = self.client.get(url,follow=True)
|
|
# If the view invoked by that get throws an exception (such as an integrity error),
|
|
# the traceback from this test will talk about a TransactionManagementError and
|
|
# yell about executing queries before the end of an 'atomic' block
|
|
|
|
# This is a sign of a problem - a get shouldn't have a side-effect like this one does
|
|
self.assertEqual(r.status_code, 200)
|
|
self.assertTrue('A message was sent to notify not having a session' in unicontent(r))
|
|
|
|
r = self.client.get(url,follow=True)
|
|
self.assertEqual(r.status_code, 200)
|
|
self.assertTrue('is already marked as not meeting' in unicontent(r))
|
|
|
|
self.assertEqual(len(outbox),1)
|
|
self.assertTrue('Not having a session' in outbox[0]['Subject'])
|
|
self.assertTrue('session-request@' in outbox[0]['To'])
|
|
|
|
class RetrievePreviousCase(TestCase):
|
|
pass
|
|
|
|
|
|
|
|
# test error if already scheduled
|
|
# test get previous exists/doesn't exist
|
|
# test that groups scheduled and unscheduled add up to total groups
|
|
# test access by unauthorized
|