Fixes #2172. Add Requested Resources and People who must be there, to email notifications of session requests. Commit ready for merge.

- Legacy-Id: 12748
This commit is contained in:
Ryan Cross 2017-01-27 23:32:52 +00:00
parent 68bd38d22d
commit eeb35e997d
3 changed files with 57 additions and 16 deletions

View file

@ -2,10 +2,10 @@ from django.core.urlresolvers import reverse
from ietf.utils.test_utils import TestCase, unicontent
from ietf.group.models import Group
#from ietf.meeting.models import Session
#from ietf.utils.test_data import make_test_data
from ietf.meeting.test_data import make_meeting_test_data as make_test_data
from ietf.meeting.models import Meeting, Session
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
@ -13,7 +13,7 @@ SECR_USER='secretary'
class SreqUrlTests(TestCase):
def test_urls(self):
make_test_data()
make_meeting_test_data()
self.client.login(username="secretary", password="secretary+password")
@ -29,7 +29,7 @@ class SreqUrlTests(TestCase):
class SessionRequestTestCase(TestCase):
def test_main(self):
make_test_data()
make_meeting_test_data()
url = reverse('sessions')
self.client.login(username="secretary", password="secretary+password")
r = self.client.get(url)
@ -42,8 +42,8 @@ class SessionRequestTestCase(TestCase):
class SubmitRequestCase(TestCase):
def test_submit_request(self):
make_test_data()
acronym = Group.objects.all()[0].acronym
url = reverse('sessions_new',kwargs={'acronym':acronym})
group = Group.objects.get(acronym='mars')
url = reverse('sessions_new',kwargs={'acronym':group.acronym})
post_data = {'num_session':'1',
'length_session1':'3600',
'attendees':'10',
@ -51,11 +51,11 @@ class SubmitRequestCase(TestCase):
'comments':'need projector'}
self.client.login(username="secretary", password="secretary+password")
r = self.client.post(url,post_data)
self.assertEqual(r.status_code, 302)
self.assertRedirects(r, reverse('sessions_confirm', kwargs={'acronym':group.acronym}))
def test_submit_request_invalid(self):
make_test_data()
group = Group.objects.filter(type='wg').first()
group = Group.objects.get(acronym='mars')
url = reverse('sessions_new',kwargs={'acronym':group.acronym})
post_data = {'num_session':'2',
'length_session1':'3600',
@ -69,9 +69,41 @@ class SubmitRequestCase(TestCase):
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
url = reverse('sessions_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':'1'}
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_test_data()
meeting = make_meeting_test_data()
meeting.session_request_lock_message='locked'
meeting.save()
group = Group.objects.get(acronym='mars')
@ -83,7 +115,7 @@ class LockAppTestCase(TestCase):
self.assertEqual(len(q(':disabled[name="submit"]')), 1)
def test_view_request(self):
meeting = make_test_data()
meeting = make_meeting_test_data()
meeting.session_request_lock_message='locked'
meeting.save()
group = Group.objects.get(acronym='mars')
@ -95,7 +127,7 @@ class LockAppTestCase(TestCase):
self.assertEqual(len(q(':disabled[name="edit"]')), 1)
def test_new_request(self):
meeting = make_test_data()
meeting = make_meeting_test_data()
meeting.session_request_lock_message='locked'
meeting.save()
group = Group.objects.get(acronym='mars')
@ -121,8 +153,7 @@ class EditRequestCase(TestCase):
class NotMeetingCase(TestCase):
def test_not_meeting(self):
make_test_data()
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")

View file

@ -13,6 +13,12 @@ Conflicts to Avoid:
{% if session.conflict3 %} Third Priority: {{ session.conflict3 }}{% endif %}
People who must be present:
{% for person in session.bethere %} {{ person.ascii_name }}
{% endfor %}
Resources Requested:
{% for resource in session.resources %} {{ resource.desc }}
{% endfor %}
Special Requests:
{{ session.comments }}
---------------------------------------------------------

View file

@ -10,8 +10,8 @@ from ietf.doc.models import Document, DocAlias, State, DocumentAuthor, BallotTyp
from ietf.group.models import Group, GroupHistory, Role, RoleHistory
from ietf.iesg.models import TelechatDate
from ietf.ipr.models import HolderIprDisclosure, IprDocRel, IprDisclosureStateName, IprLicenseTypeName
from ietf.meeting.models import Meeting
from ietf.name.models import StreamName, DocRelationshipName
from ietf.meeting.models import Meeting, ResourceAssociation
from ietf.name.models import StreamName, DocRelationshipName, RoomResourceName
from ietf.person.models import Person, Email
from ietf.group.utils import setup_default_community_list_for_group
from ietf.review.models import (ReviewRequest, ReviewerSettings, ReviewResultName, ReviewTypeName, ReviewTeamSettings )
@ -377,6 +377,10 @@ def make_test_data():
rfc_for_status_change_test_factory('draft-ietf-random-otherthing',9998,'inf')
rfc_for_status_change_test_factory('draft-was-never-issued',14,'unkn')
# Session Request ResourceAssociation
name = RoomResourceName.objects.get(slug='project')
ResourceAssociation.objects.create(name=name,icon='projector.png',desc='Projector in room')
# Instances of the remaining document types
# (Except liaison, liai-att, and recording which the code in ietf.doc does not use...)
# Meeting-related documents are created in make_meeting_test_data, and