Skip to content

Commit 502dede

Browse files
committed
Second try on ietf-tools#1425. Returns to agenda and uses message. Commit ready for merge.
- Legacy-Id: 8614
1 parent c0c608a commit 502dede

2 files changed

Lines changed: 39 additions & 12 deletions

File tree

ietf/meeting/tests_views.py

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
import os
22
import shutil
33
import datetime
4+
import urlparse
45

56
from django.core.urlresolvers import reverse as urlreverse
67
from django.conf import settings
8+
from django.contrib import messages
79

810
from pyquery import PyQuery
911

@@ -179,6 +181,8 @@ def test_save_agenda_as_and_read_permissions(self):
179181
'saveas': "saveas",
180182
})
181183
self.assertEqual(r.status_code, 302)
184+
# Verify that we actually got redirected to a new place.
185+
self.assertNotEqual(urlparse.urlparse(r.url).path, url)
182186

183187
# get
184188
schedule = meeting.get_schedule_by_name("foo")
@@ -223,12 +227,26 @@ def test_save_agenda_broken_names(self):
223227
'savename': "/no/this/should/not/work/it/is/too/long",
224228
'saveas': "saveas",
225229
})
226-
self.assertEqual(r.status_code, 404)
227-
#r = self.client.post(url, {
228-
# 'savename': "/invalid/chars/",
229-
# 'saveas': "saveas",
230-
# })
231-
#self.assertEqual(r.status_code, 404)
230+
self.assertEqual(r.status_code, 302)
231+
self.assertEqual(urlparse.urlparse(r.url).path, url)
232+
# TODO: Verify that an error message was in fact returned.
233+
234+
r = self.client.post(url, {
235+
'savename': "/invalid/chars/",
236+
'saveas': "saveas",
237+
})
238+
# TODO: Verify that an error message was in fact returned.
239+
self.assertEqual(r.status_code, 302)
240+
self.assertEqual(urlparse.urlparse(r.url).path, url)
241+
242+
# Non-ASCII alphanumeric characters
243+
r = self.client.post(url, {
244+
'savename': u"f\u00E9ling",
245+
'saveas': "saveas",
246+
})
247+
# TODO: Verify that an error message was in fact returned.
248+
self.assertEqual(r.status_code, 302)
249+
self.assertEqual(urlparse.urlparse(r.url).path, url)
232250

233251

234252
def test_edit_timeslots(self):

ietf/meeting/views.py

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# Copyright The IETF Trust 2007, All Rights Reserved
2-
2+
import curses
33
import datetime
44
import os
55
import re
@@ -12,6 +12,7 @@
1212
from django import forms
1313
from django.shortcuts import render_to_response, redirect
1414
from django.http import HttpResponse, HttpResponseRedirect, HttpResponseForbidden, Http404
15+
from django.contrib import messages
1516
from django.core.urlresolvers import reverse
1617
from django.db.models import Q
1718
from django.template import RequestContext
@@ -88,6 +89,9 @@ def get_user_agent(request):
8889
user_agent = ""
8990
return user_agent
9091

92+
def ascii_alphanumeric(string):
93+
return re.match(r'^[a-zA-Z0-9]*$', string)
94+
9195
class SaveAsForm(forms.Form):
9296
savename = forms.CharField(max_length=16)
9397

@@ -99,25 +103,30 @@ def agenda_create(request, num=None, owner=None, name=None):
99103

100104
if schedule is None:
101105
# here we have to return some ajax to display an error.
102-
raise Http404("No meeting information for meeting %s owner %s schedule %s available" % (num, owner, name))
106+
messages.error("Error: No meeting information for meeting %s owner %s schedule %s available" % (num, owner, name))
107+
return redirect(edit_agenda, num=num, owner=owner, name=name)
103108

104109
# authorization was enforced by the @group_require decorator above.
105110

106111
saveasform = SaveAsForm(request.POST)
107112
if not saveasform.is_valid():
108-
return HttpResponse(status=404)
113+
messages.info(request, "This name is not valid. Please choose another one.")
114+
return redirect(edit_agenda, num=num, owner=owner, name=name)
109115

110116
savedname = saveasform.cleaned_data['savename']
111117

112-
if not savedname.isalnum():
113-
return HttpResponse("Asked to save with invalid name", status=404)
118+
if not ascii_alphanumeric(savedname):
119+
messages.info(request, "This name contains illegal characters. Please choose another one.")
120+
return redirect(edit_agenda, num=num, owner=owner, name=name)
114121

115122
# create the new schedule, and copy the scheduledsessions
116123
try:
117124
sched = meeting.schedule_set.get(name=savedname, owner=request.user.person)
118125
if sched:
119-
# XXX needs to record a session error and redirect to where?
120126
return redirect(edit_agenda, meeting.number, sched.name)
127+
else:
128+
messages.info(request, "Agenda creation failed. Please try again.")
129+
return redirect(edit_agenda, num=num, owner=owner, name=name)
121130

122131
except Schedule.DoesNotExist:
123132
pass

0 commit comments

Comments
 (0)