Refactor Proceedings Introduction pages tests and implementation. Commit ready for merge

- Legacy-Id: 12140
This commit is contained in:
Ryan Cross 2016-10-13 23:31:03 +00:00
parent 61945fd11b
commit 743ec4d7ff
6 changed files with 68 additions and 117 deletions

View file

@ -10,7 +10,6 @@ import debug # pyflakes:ignore
from django.core.urlresolvers import reverse as urlreverse
from django.conf import settings
from django.contrib.auth.models import User
from django.http import HttpRequest
from mock import patch
from pyquery import PyQuery
@ -268,42 +267,21 @@ class MeetingTests(TestCase):
self.assertEqual(r.status_code, 200)
def test_proceedings_acknowledgements(self):
meeting = make_meeting_test_data()
make_meeting_test_data()
meeting = MeetingFactory(type_id='ietf', date=datetime.date(2016,7,14), number="96")
meeting.acknowledgements = 'test acknowledgements'
meeting.save()
url = urlreverse('ietf.meeting.views.proceedings_acknowledgements',kwargs={'num':meeting.number})
login_testing_unauthorized(self,"secretary",url)
r = self.client.get(url)
self.assertEqual(r.status_code, 200)
response = self.client.get(url)
self.assertEqual(response.status_code, 200)
self.assertTrue('test acknowledgements' in response.content)
@patch('urllib2.urlopen')
def test_proceedings_attendees(self, mock_urlopen):
mock_urlopen.return_value = StringIO('[{"LastName":"Smith","FirstName":"John","Company":"ABC","Country":"US"}]')
make_meeting_test_data()
# add recent meeting
date = datetime.date(2016,4,3)
Meeting.objects.create(type_id='ietf',date=date,number=95)
url = urlreverse('ietf.secr.meetings.views.add')
post_data = dict(number='96',city='Berlin',date='2016-07-14',country='DE',
time_zone='Europe/Berlin',venue_name='Intercontinental Berlin',
venue_addr='',
idsubmit_cutoff_day_offset_00=13,
idsubmit_cutoff_day_offset_01=20,
idsubmit_cutoff_time_utc =datetime.timedelta(hours=23, minutes=59, seconds=59),
idsubmit_cutoff_warning_days =datetime.timedelta(days=21),
submission_start_day_offset=90,
submission_cutoff_day_offset=26,
submission_correction_day_offset=50,
)
self.client.login(username='secretary', password='secretary+password')
response = self.client.post(url, post_data)
self.assertRedirects(response,urlreverse('ietf.secr.meetings.views.main'))
self.assertTrue(Meeting.objects.filter(number=96).exists())
meeting = Meeting.objects.get(number=96)
# finalize the meeting proceedings
finalize(HttpRequest(),meeting)
# check attendees
meeting = MeetingFactory(type_id='ietf', date=datetime.date(2016,7,14), number="96")
finalize(meeting)
url = urlreverse('ietf.meeting.views.proceedings_attendees',kwargs={'num':96})
response = self.client.get(url)
self.assertEqual(response.status_code, 200)
@ -311,60 +289,23 @@ class MeetingTests(TestCase):
q = PyQuery(response.content)
self.assertEqual(1,len(q("#id_attendees tbody tr")))
def test_proceedings_overview(self):
'''Test proceedings IETF Overview page.
Note: old meetings aren't supported so need to add a new meeting then test.
'''
make_meeting_test_data()
# add meeting requires a previous meeting to work
date = datetime.date(2016,7,14)
Meeting.objects.create(type_id='ietf',date=date,number=96)
url = urlreverse('ietf.secr.meetings.views.add')
post_data = dict(number='97',city='Seoul',date='2016-11-13',country='KR',
time_zone='Asia/Seoul',venue_name='Conrad Seoul',
venue_addr='10 Gukjegeumyung-ro',
idsubmit_cutoff_day_offset_00=13,
idsubmit_cutoff_day_offset_01=20,
idsubmit_cutoff_time_utc =datetime.timedelta(hours=23, minutes=59, seconds=59),
idsubmit_cutoff_warning_days =datetime.timedelta(days=21),
submission_start_day_offset=90,
submission_cutoff_day_offset=26,
submission_correction_day_offset=50,
)
self.client.login(username='secretary', password='secretary+password')
response = self.client.post(url, post_data)
self.assertRedirects(response,urlreverse('ietf.secr.meetings.views.main'))
url = urlreverse('ietf.meeting.views.proceedings_overview',kwargs={'num':97})
meeting = MeetingFactory(type_id='ietf', date=datetime.date(2016,7,14), number="96")
finalize(meeting)
url = urlreverse('ietf.meeting.views.proceedings_overview',kwargs={'num':96})
response = self.client.get(url)
self.assertEqual(response.status_code, 200)
self.assertTrue('The Internet Engineering Task Force' in response.content)
def test_proceedings_progress_report(self):
make_meeting_test_data()
# add recent meeting
date = datetime.date(2016,4,3)
Meeting.objects.create(type_id='ietf',date=date,number=95)
url = urlreverse('ietf.secr.meetings.views.add')
post_data = dict(number='96',city='Berlin',date='2016-07-14',country='DE',
time_zone='Europe/Berlin',venue_name='Intercontinental Berlin',
venue_addr='',
idsubmit_cutoff_day_offset_00=13,
idsubmit_cutoff_day_offset_01=20,
idsubmit_cutoff_time_utc =datetime.timedelta(hours=23, minutes=59, seconds=59),
idsubmit_cutoff_warning_days =datetime.timedelta(days=21),
submission_start_day_offset=90,
submission_cutoff_day_offset=26,
submission_correction_day_offset=50,
)
self.client.login(username='secretary', password='secretary+password')
response = self.client.post(url, post_data)
self.assertRedirects(response,urlreverse('ietf.secr.meetings.views.main'))
self.assertTrue(Meeting.objects.filter(number=96).exists())
MeetingFactory(type_id='ietf', date=datetime.date(2016,4,3), number="95")
MeetingFactory(type_id='ietf', date=datetime.date(2016,7,14), number="96")
# check progress report
url = urlreverse('ietf.meeting.views.proceedings_progress_report',kwargs={'num':96})
response = self.client.get(url)
self.assertEqual(response.status_code, 200)

View file

@ -4,7 +4,6 @@ import urllib2
import urlparse
from django.conf import settings
from django.contrib import messages
from django.template.loader import render_to_string
from ietf.dbtemplate.models import DBTemplate
@ -80,23 +79,13 @@ def sort_sessions(sessions):
return meeting_sorted
def finalize(request, meeting):
end_date = meeting.end_date()
end_time = datetime.datetime.combine(end_date, datetime.datetime.min.time())+datetime.timedelta(days=1)
for session in meeting.session_set.all():
for sp in session.sessionpresentation_set.filter(document__type='draft',rev=None):
rev_before_end = [e for e in sp.document.docevent_set.filter(newrevisiondocevent__isnull=False).order_by('-time') if e.time <= end_time ]
if rev_before_end:
sp.rev = rev_before_end[-1].newrevisiondocevent.rev
else:
sp.rev = '00'
sp.save()
# get attendees
def create_proceedings_templates(meeting):
'''Create DBTemplates for meeting proceedings'''
# Get meeting attendees from registration system
url = urlparse.urljoin(settings.REGISTRATION_ATTENDEES_BASE_URL,meeting.number)
try:
attendees = json.load(urllib2.urlopen(url))
except (ValueError, urllib2.HTTPError):
messages.warning(request,'Could not retrieve attendee list from registration system (%s)' % url, fail_silently=True)
attendees = []
if attendees:
@ -108,7 +97,30 @@ def finalize(request, meeting):
title='IETF %s Attendee List' % meeting.number,
type_id='django',
content=content)
# Make copy of default IETF Overview template
if not meeting.overview:
template = DBTemplate.objects.get(path='/meeting/proceedings/defaults/overview.rst')
template.id = None
template.path = '/meeting/proceedings/%s/overview.rst' % (meeting.number)
template.title = 'IETF %s Proceedings Overview' % (meeting.number)
template.save()
meeting.overview = template
meeting.save()
def finalize(meeting):
end_date = meeting.end_date()
end_time = datetime.datetime.combine(end_date, datetime.datetime.min.time())+datetime.timedelta(days=1)
for session in meeting.session_set.all():
for sp in session.sessionpresentation_set.filter(document__type='draft',rev=None):
rev_before_end = [e for e in sp.document.docevent_set.filter(newrevisiondocevent__isnull=False).order_by('-time') if e.time <= end_time ]
if rev_before_end:
sp.rev = rev_before_end[-1].newrevisiondocevent.rev
else:
sp.rev = '00'
sp.save()
create_proceedings_templates(meeting)
meeting.proceedings_final = True
meeting.save()
return

View file

@ -25,6 +25,7 @@ from django.db.models import Min, Max
from django.conf import settings
from django.forms.models import modelform_factory, inlineformset_factory
from django.forms import ModelForm
from django.template import TemplateDoesNotExist
from django.template.loader import render_to_string
from django.utils.functional import curry
from django.views.decorators.cache import cache_page
@ -1985,55 +1986,63 @@ def finalize_proceedings(request, num=None):
raise Http404
if request.method=='POST':
finalize(request, meeting)
finalize(meeting)
return HttpResponseRedirect(reverse('ietf.meeting.views.proceedings',kwargs={'num':meeting.number}))
return render(request, "meeting/finalize.html", {'meeting':meeting,})
@role_required('Secretariat')
def proceedings_acknowledgements(request, num=None):
'''Display Acknowledgements for meeting'''
meeting = get_meeting(num)
if meeting.number < 95:
if not num.isdigit():
raise Http404
if int(meeting.number) < settings.NEW_PROCEEDINGS_START:
return HttpResponseRedirect( 'https://www.ietf.org/proceedings/%s/acknowledgement.html' % num )
return render(request, "meeting/proceedings_acknowledgements.html", {
'meeting': meeting,
})
@role_required('Secretariat')
def proceedings_attendees(request, num=None):
'''Display list of meeting attendees'''
meeting = get_meeting(num)
if meeting.number < 95:
if not num.isdigit():
raise Http404
if int(meeting.number) < settings.NEW_PROCEEDINGS_START:
return HttpResponseRedirect( 'https://www.ietf.org/proceedings/%s/attendees.html' % num )
overview_template = '/meeting/proceedings/%s/attendees.html' % meeting.number
template = render_to_string(overview_template, {})
try:
template = render_to_string(overview_template, {})
except TemplateDoesNotExist:
raise Http404
return render(request, "meeting/proceedings_attendees.html", {
'meeting': meeting,
'template': template,
})
@role_required('Secretariat')
def proceedings_overview(request, num=None):
'''Display Overview for given meeting'''
meeting = get_meeting(num)
if meeting.number < 95:
if not num.isdigit():
raise Http404
if int(meeting.number) < settings.NEW_PROCEEDINGS_START:
return HttpResponseRedirect( 'https://www.ietf.org/proceedings/%s/overview.html' % num )
overview_template = '/meeting/proceedings/%s/overview.rst' % meeting.number
template = render_to_string(overview_template, {})
try:
template = render_to_string(overview_template, {})
except TemplateDoesNotExist:
raise Http404
return render(request, "meeting/proceedings_overview.html", {
'meeting': meeting,
'template': template,
})
@role_required('Secretariat')
@cache_page( 60 * 60 )
def proceedings_progress_report(request, num=None):
'''Display Progress Report (stats since last meeting)'''
meeting = get_meeting(num)
if meeting.number < 95:
if not num.isdigit():
raise Http404
if int(meeting.number) < settings.NEW_PROCEEDINGS_START:
return HttpResponseRedirect( 'https://www.ietf.org/proceedings/%s/progress-report.html' % num )
sdate = meeting.previous_meeting().date
edate = meeting.date

View file

@ -85,8 +85,6 @@ class SecrMeetingTestCase(TestCase):
response = self.client.post(url, post_data, follow=True)
self.assertEqual(response.status_code, 200)
self.assertEqual(Meeting.objects.count(),count + 1)
meeting = Meeting.objects.order_by('id').last()
self.assertEqual(meeting.overview.path,'/meeting/proceedings/%s/overview.rst' % meeting.number)
def test_edit_meeting(self):
"Edit Meeting"

View file

@ -14,7 +14,6 @@ from django.shortcuts import render_to_response, get_object_or_404, redirect
from django.template import RequestContext
from django.utils.functional import curry
from ietf.dbtemplate.models import DBTemplate
from ietf.ietfauth.utils import role_required
from ietf.utils.mail import send_mail
from ietf.meeting.helpers import get_meeting, make_materials_directories
@ -317,16 +316,7 @@ def add(request):
# Create Physical new meeting directory and subdirectories
make_materials_directories(meeting)
# Make copy of IETF Overview template
template = DBTemplate.objects.get(path='/meeting/proceedings/defaults/overview.rst')
template.id = None
template.path = '/meeting/proceedings/%s/overview.rst' % (meeting.number)
template.title = 'IETF %s Proceedings Overview' % (meeting.number)
template.save()
meeting.overview = template
meeting.save()
messages.success(request, 'The Meeting was created successfully!')
return redirect('meetings')
else:

View file

@ -600,6 +600,7 @@ SECR_MAX_UPLOAD_SIZE = 40960000
SECR_PROCEEDINGS_DIR = '/a/www/www6s/proceedings/'
SECR_PPT2PDF_COMMAND = ['/usr/bin/soffice','--headless','--convert-to','pdf','--outdir']
REGISTRATION_ATTENDEES_BASE_URL = 'https://ietf.org/registration/attendees/'
NEW_PROCEEDINGS_START = 95
USE_ETAGS=True
PRODUCTION_TIMEZONE = "America/Los_Angeles"