Skip to content

Commit 743ec4d

Browse files
committed
Refactor Proceedings Introduction pages tests and implementation. Commit ready for merge
- Legacy-Id: 12140
1 parent 61945fd commit 743ec4d

6 files changed

Lines changed: 70 additions & 119 deletions

File tree

ietf/meeting/tests_views.py

Lines changed: 15 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
from django.core.urlresolvers import reverse as urlreverse
1111
from django.conf import settings
1212
from django.contrib.auth.models import User
13-
from django.http import HttpRequest
1413

1514
from mock import patch
1615
from pyquery import PyQuery
@@ -268,103 +267,45 @@ def test_proceedings(self):
268267
self.assertEqual(r.status_code, 200)
269268

270269
def test_proceedings_acknowledgements(self):
271-
meeting = make_meeting_test_data()
270+
make_meeting_test_data()
271+
meeting = MeetingFactory(type_id='ietf', date=datetime.date(2016,7,14), number="96")
272+
meeting.acknowledgements = 'test acknowledgements'
273+
meeting.save()
272274
url = urlreverse('ietf.meeting.views.proceedings_acknowledgements',kwargs={'num':meeting.number})
273-
login_testing_unauthorized(self,"secretary",url)
274-
r = self.client.get(url)
275-
self.assertEqual(r.status_code, 200)
275+
response = self.client.get(url)
276+
self.assertEqual(response.status_code, 200)
277+
self.assertTrue('test acknowledgements' in response.content)
276278

277279
@patch('urllib2.urlopen')
278280
def test_proceedings_attendees(self, mock_urlopen):
279281
mock_urlopen.return_value = StringIO('[{"LastName":"Smith","FirstName":"John","Company":"ABC","Country":"US"}]')
280282
make_meeting_test_data()
281-
282-
# add recent meeting
283-
date = datetime.date(2016,4,3)
284-
Meeting.objects.create(type_id='ietf',date=date,number=95)
285-
url = urlreverse('ietf.secr.meetings.views.add')
286-
post_data = dict(number='96',city='Berlin',date='2016-07-14',country='DE',
287-
time_zone='Europe/Berlin',venue_name='Intercontinental Berlin',
288-
venue_addr='',
289-
idsubmit_cutoff_day_offset_00=13,
290-
idsubmit_cutoff_day_offset_01=20,
291-
idsubmit_cutoff_time_utc =datetime.timedelta(hours=23, minutes=59, seconds=59),
292-
idsubmit_cutoff_warning_days =datetime.timedelta(days=21),
293-
submission_start_day_offset=90,
294-
submission_cutoff_day_offset=26,
295-
submission_correction_day_offset=50,
296-
)
297-
self.client.login(username='secretary', password='secretary+password')
298-
response = self.client.post(url, post_data)
299-
self.assertRedirects(response,urlreverse('ietf.secr.meetings.views.main'))
300-
self.assertTrue(Meeting.objects.filter(number=96).exists())
301-
meeting = Meeting.objects.get(number=96)
302-
303-
# finalize the meeting proceedings
304-
finalize(HttpRequest(),meeting)
305-
306-
# check attendees
283+
meeting = MeetingFactory(type_id='ietf', date=datetime.date(2016,7,14), number="96")
284+
finalize(meeting)
307285
url = urlreverse('ietf.meeting.views.proceedings_attendees',kwargs={'num':96})
308286
response = self.client.get(url)
309287
self.assertEqual(response.status_code, 200)
310288
self.assertTrue('Attendee List' in response.content)
311289
q = PyQuery(response.content)
312290
self.assertEqual(1,len(q("#id_attendees tbody tr")))
313291

314-
315292
def test_proceedings_overview(self):
316293
'''Test proceedings IETF Overview page.
317294
Note: old meetings aren't supported so need to add a new meeting then test.
318295
'''
319296
make_meeting_test_data()
320-
# add meeting requires a previous meeting to work
321-
date = datetime.date(2016,7,14)
322-
Meeting.objects.create(type_id='ietf',date=date,number=96)
323-
url = urlreverse('ietf.secr.meetings.views.add')
324-
post_data = dict(number='97',city='Seoul',date='2016-11-13',country='KR',
325-
time_zone='Asia/Seoul',venue_name='Conrad Seoul',
326-
venue_addr='10 Gukjegeumyung-ro',
327-
idsubmit_cutoff_day_offset_00=13,
328-
idsubmit_cutoff_day_offset_01=20,
329-
idsubmit_cutoff_time_utc =datetime.timedelta(hours=23, minutes=59, seconds=59),
330-
idsubmit_cutoff_warning_days =datetime.timedelta(days=21),
331-
submission_start_day_offset=90,
332-
submission_cutoff_day_offset=26,
333-
submission_correction_day_offset=50,
334-
)
335-
self.client.login(username='secretary', password='secretary+password')
336-
337-
response = self.client.post(url, post_data)
338-
self.assertRedirects(response,urlreverse('ietf.secr.meetings.views.main'))
339-
url = urlreverse('ietf.meeting.views.proceedings_overview',kwargs={'num':97})
297+
meeting = MeetingFactory(type_id='ietf', date=datetime.date(2016,7,14), number="96")
298+
finalize(meeting)
299+
url = urlreverse('ietf.meeting.views.proceedings_overview',kwargs={'num':96})
340300
response = self.client.get(url)
341301
self.assertEqual(response.status_code, 200)
342302
self.assertTrue('The Internet Engineering Task Force' in response.content)
343303

344304
def test_proceedings_progress_report(self):
345305
make_meeting_test_data()
346-
347-
# add recent meeting
348-
date = datetime.date(2016,4,3)
349-
Meeting.objects.create(type_id='ietf',date=date,number=95)
350-
url = urlreverse('ietf.secr.meetings.views.add')
351-
post_data = dict(number='96',city='Berlin',date='2016-07-14',country='DE',
352-
time_zone='Europe/Berlin',venue_name='Intercontinental Berlin',
353-
venue_addr='',
354-
idsubmit_cutoff_day_offset_00=13,
355-
idsubmit_cutoff_day_offset_01=20,
356-
idsubmit_cutoff_time_utc =datetime.timedelta(hours=23, minutes=59, seconds=59),
357-
idsubmit_cutoff_warning_days =datetime.timedelta(days=21),
358-
submission_start_day_offset=90,
359-
submission_cutoff_day_offset=26,
360-
submission_correction_day_offset=50,
361-
)
362-
self.client.login(username='secretary', password='secretary+password')
363-
response = self.client.post(url, post_data)
364-
self.assertRedirects(response,urlreverse('ietf.secr.meetings.views.main'))
365-
self.assertTrue(Meeting.objects.filter(number=96).exists())
366-
367-
# check progress report
306+
MeetingFactory(type_id='ietf', date=datetime.date(2016,4,3), number="95")
307+
MeetingFactory(type_id='ietf', date=datetime.date(2016,7,14), number="96")
308+
368309
url = urlreverse('ietf.meeting.views.proceedings_progress_report',kwargs={'num':96})
369310
response = self.client.get(url)
370311
self.assertEqual(response.status_code, 200)

ietf/meeting/utils.py

Lines changed: 27 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
import urlparse
55

66
from django.conf import settings
7-
from django.contrib import messages
87
from django.template.loader import render_to_string
98

109
from ietf.dbtemplate.models import DBTemplate
@@ -80,23 +79,13 @@ def time_sort_key(session):
8079

8180
return meeting_sorted
8281

83-
def finalize(request, meeting):
84-
end_date = meeting.end_date()
85-
end_time = datetime.datetime.combine(end_date, datetime.datetime.min.time())+datetime.timedelta(days=1)
86-
for session in meeting.session_set.all():
87-
for sp in session.sessionpresentation_set.filter(document__type='draft',rev=None):
88-
rev_before_end = [e for e in sp.document.docevent_set.filter(newrevisiondocevent__isnull=False).order_by('-time') if e.time <= end_time ]
89-
if rev_before_end:
90-
sp.rev = rev_before_end[-1].newrevisiondocevent.rev
91-
else:
92-
sp.rev = '00'
93-
sp.save()
94-
# get attendees
82+
def create_proceedings_templates(meeting):
83+
'''Create DBTemplates for meeting proceedings'''
84+
# Get meeting attendees from registration system
9585
url = urlparse.urljoin(settings.REGISTRATION_ATTENDEES_BASE_URL,meeting.number)
9686
try:
9787
attendees = json.load(urllib2.urlopen(url))
9888
except (ValueError, urllib2.HTTPError):
99-
messages.warning(request,'Could not retrieve attendee list from registration system (%s)' % url, fail_silently=True)
10089
attendees = []
10190

10291
if attendees:
@@ -108,7 +97,30 @@ def finalize(request, meeting):
10897
title='IETF %s Attendee List' % meeting.number,
10998
type_id='django',
11099
content=content)
111-
100+
101+
# Make copy of default IETF Overview template
102+
if not meeting.overview:
103+
template = DBTemplate.objects.get(path='/meeting/proceedings/defaults/overview.rst')
104+
template.id = None
105+
template.path = '/meeting/proceedings/%s/overview.rst' % (meeting.number)
106+
template.title = 'IETF %s Proceedings Overview' % (meeting.number)
107+
template.save()
108+
meeting.overview = template
109+
meeting.save()
110+
111+
def finalize(meeting):
112+
end_date = meeting.end_date()
113+
end_time = datetime.datetime.combine(end_date, datetime.datetime.min.time())+datetime.timedelta(days=1)
114+
for session in meeting.session_set.all():
115+
for sp in session.sessionpresentation_set.filter(document__type='draft',rev=None):
116+
rev_before_end = [e for e in sp.document.docevent_set.filter(newrevisiondocevent__isnull=False).order_by('-time') if e.time <= end_time ]
117+
if rev_before_end:
118+
sp.rev = rev_before_end[-1].newrevisiondocevent.rev
119+
else:
120+
sp.rev = '00'
121+
sp.save()
122+
123+
create_proceedings_templates(meeting)
112124
meeting.proceedings_final = True
113125
meeting.save()
114126
return

ietf/meeting/views.py

Lines changed: 26 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
from django.conf import settings
2626
from django.forms.models import modelform_factory, inlineformset_factory
2727
from django.forms import ModelForm
28+
from django.template import TemplateDoesNotExist
2829
from django.template.loader import render_to_string
2930
from django.utils.functional import curry
3031
from django.views.decorators.cache import cache_page
@@ -1985,55 +1986,63 @@ def finalize_proceedings(request, num=None):
19851986
raise Http404
19861987

19871988
if request.method=='POST':
1988-
finalize(request, meeting)
1989+
finalize(meeting)
19891990
return HttpResponseRedirect(reverse('ietf.meeting.views.proceedings',kwargs={'num':meeting.number}))
19901991

19911992
return render(request, "meeting/finalize.html", {'meeting':meeting,})
19921993

1993-
@role_required('Secretariat')
19941994
def proceedings_acknowledgements(request, num=None):
1995-
1995+
'''Display Acknowledgements for meeting'''
19961996
meeting = get_meeting(num)
1997-
if meeting.number < 95:
1997+
if not num.isdigit():
1998+
raise Http404
1999+
if int(meeting.number) < settings.NEW_PROCEEDINGS_START:
19982000
return HttpResponseRedirect( 'https://www.ietf.org/proceedings/%s/acknowledgement.html' % num )
19992001
return render(request, "meeting/proceedings_acknowledgements.html", {
20002002
'meeting': meeting,
20012003
})
20022004

2003-
2004-
@role_required('Secretariat')
20052005
def proceedings_attendees(request, num=None):
2006-
2006+
'''Display list of meeting attendees'''
20072007
meeting = get_meeting(num)
2008-
if meeting.number < 95:
2008+
if not num.isdigit():
2009+
raise Http404
2010+
if int(meeting.number) < settings.NEW_PROCEEDINGS_START:
20092011
return HttpResponseRedirect( 'https://www.ietf.org/proceedings/%s/attendees.html' % num )
20102012
overview_template = '/meeting/proceedings/%s/attendees.html' % meeting.number
2011-
template = render_to_string(overview_template, {})
2012-
2013+
try:
2014+
template = render_to_string(overview_template, {})
2015+
except TemplateDoesNotExist:
2016+
raise Http404
20132017
return render(request, "meeting/proceedings_attendees.html", {
20142018
'meeting': meeting,
20152019
'template': template,
20162020
})
20172021

2018-
2019-
@role_required('Secretariat')
20202022
def proceedings_overview(request, num=None):
20212023
'''Display Overview for given meeting'''
20222024
meeting = get_meeting(num)
2023-
if meeting.number < 95:
2025+
if not num.isdigit():
2026+
raise Http404
2027+
if int(meeting.number) < settings.NEW_PROCEEDINGS_START:
20242028
return HttpResponseRedirect( 'https://www.ietf.org/proceedings/%s/overview.html' % num )
20252029
overview_template = '/meeting/proceedings/%s/overview.rst' % meeting.number
2026-
template = render_to_string(overview_template, {})
2027-
2030+
try:
2031+
template = render_to_string(overview_template, {})
2032+
except TemplateDoesNotExist:
2033+
raise Http404
20282034
return render(request, "meeting/proceedings_overview.html", {
20292035
'meeting': meeting,
20302036
'template': template,
20312037
})
20322038

2033-
@role_required('Secretariat')
2039+
@cache_page( 60 * 60 )
20342040
def proceedings_progress_report(request, num=None):
2041+
'''Display Progress Report (stats since last meeting)'''
20352042
meeting = get_meeting(num)
2036-
if meeting.number < 95:
2043+
if not num.isdigit():
2044+
raise Http404
2045+
if int(meeting.number) < settings.NEW_PROCEEDINGS_START:
20372046
return HttpResponseRedirect( 'https://www.ietf.org/proceedings/%s/progress-report.html' % num )
20382047
sdate = meeting.previous_meeting().date
20392048
edate = meeting.date

ietf/secr/meetings/tests.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,8 +85,6 @@ def test_add_meeting(self):
8585
response = self.client.post(url, post_data, follow=True)
8686
self.assertEqual(response.status_code, 200)
8787
self.assertEqual(Meeting.objects.count(),count + 1)
88-
meeting = Meeting.objects.order_by('id').last()
89-
self.assertEqual(meeting.overview.path,'/meeting/proceedings/%s/overview.rst' % meeting.number)
9088

9189
def test_edit_meeting(self):
9290
"Edit Meeting"

ietf/secr/meetings/views.py

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
from django.template import RequestContext
1515
from django.utils.functional import curry
1616

17-
from ietf.dbtemplate.models import DBTemplate
1817
from ietf.ietfauth.utils import role_required
1918
from ietf.utils.mail import send_mail
2019
from ietf.meeting.helpers import get_meeting, make_materials_directories
@@ -317,16 +316,7 @@ def add(request):
317316

318317
# Create Physical new meeting directory and subdirectories
319318
make_materials_directories(meeting)
320-
321-
# Make copy of IETF Overview template
322-
template = DBTemplate.objects.get(path='/meeting/proceedings/defaults/overview.rst')
323-
template.id = None
324-
template.path = '/meeting/proceedings/%s/overview.rst' % (meeting.number)
325-
template.title = 'IETF %s Proceedings Overview' % (meeting.number)
326-
template.save()
327-
meeting.overview = template
328-
meeting.save()
329-
319+
330320
messages.success(request, 'The Meeting was created successfully!')
331321
return redirect('meetings')
332322
else:

ietf/settings.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -600,6 +600,7 @@ def skip_unreadable_post(record):
600600
SECR_PROCEEDINGS_DIR = '/a/www/www6s/proceedings/'
601601
SECR_PPT2PDF_COMMAND = ['/usr/bin/soffice','--headless','--convert-to','pdf','--outdir']
602602
REGISTRATION_ATTENDEES_BASE_URL = 'https://ietf.org/registration/attendees/'
603+
NEW_PROCEEDINGS_START = 95
603604
USE_ETAGS=True
604605

605606
PRODUCTION_TIMEZONE = "America/Los_Angeles"

0 commit comments

Comments
 (0)