Refactor Proceedings Introduction pages tests and implementation. Commit ready for merge
- Legacy-Id: 12140
This commit is contained in:
parent
61945fd11b
commit
743ec4d7ff
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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"
|
||||
|
|
Loading…
Reference in a new issue