Merge lp:~mhall119/summit/777171-percentage-problem-tests into lp:summit

Proposed by Michael Hall
Status: Merged
Approved by: James Westby
Approved revision: 167
Merged at revision: 167
Proposed branch: lp:~mhall119/summit/777171-percentage-problem-tests
Merge into: lp:summit
Diff against target: 221 lines (+161/-9)
2 files modified
summit/schedule/tests.py (+155/-3)
summit/urls.py (+6/-6)
To merge this branch: bzr merge lp:~mhall119/summit/777171-percentage-problem-tests
Reviewer Review Type Date Requested Status
James Westby (community) Approve
Review via email: mp+75360@code.launchpad.net

Commit message

Adds test cases to make sure % signs are being properly escaped in render.py

Description of the change

Adds test cases to make sure % signs are being properly escaped in render.py

Once Nigel's branch passes these tests, it'll be ready to land.

To post a comment you must log in.
Revision history for this message
James Westby (james-w) wrote :

Looks good.

I won't overall-approve so that tarmac doesn't waste time on it.

Thanks,

James

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'summit/schedule/tests.py'
2--- summit/schedule/tests.py 2011-09-14 01:00:37 +0000
3+++ summit/schedule/tests.py 2011-09-14 14:53:23 +0000
4@@ -66,6 +66,7 @@
5 Meeting.SchedulingError,
6 meeting.check_schedule, agenda.slot, agenda.room)
7
8+
9 class ICalTestCase(djangotest.TestCase):
10
11 def test_ical_meeting_without_name(self):
12@@ -110,11 +111,11 @@
13 meeting = factory.make_one(Meeting, summit=summit, name='test.name')
14 agenda = factory.make_one(Agenda, slot=slot, meeting=meeting, room=room)
15
16- self.assertEquals(meeting.meeting_page_url, '/uds-test/meeting/%s/test-name/' % meeting.id)
17+ self.assertEquals(meeting.meeting_page_url, '/uds-test/meeting/%s/test.name/' % meeting.id)
18
19 response = self.client.get('/uds-test.ical')
20 self.assertEquals(response.status_code, 200)
21- self.assertContains(response, 'URL:http://summit.ubuntu.com/uds-test/meeting/%s/test-name/' % meeting.id, 1)
22+ self.assertContains(response, 'URL:http://summit.ubuntu.com/uds-test/meeting/%s/test.name/' % meeting.id, 1)
23
24 class MeetingPageTestCase(djangotest.TestCase):
25
26@@ -179,6 +180,7 @@
27 reverse_url = reverse('summit.schedule.views.meeting', args=rev_args)
28 self.assertEquals(reverse_url, '/uds-test/meeting/%s/test.meeting/' % meeting.id)
29
30+
31 def test_room_name_with_period(self):
32 ''' Test the following Room urlconfs
33 (r'^(?P<summit_name>[\w-]+)/(?P<room_name>[\w-]+)/$', 'by_room'),
34@@ -217,6 +219,55 @@
35 reverse_url = reverse('summit.schedule.views.user_ical', args=rev_args)
36 self.assertEquals(reverse_url, '/uds-test/participant/test.user.ical')
37
38+ def test_meeting_name_with_percent(self):
39+ ''' Test the following Meeting urlconf
40+ (r'^(?P<summit_name>[\w-]+)/meeting/(?P<meeting_id>\d+)/(?P<meeting_slug>[\.\w-]+)/$', 'meeting'),
41+ '''
42+ meeting = factory.make_one(Meeting, summit=self.summit, name='test.meeting')
43+
44+ rev_args = ['uds-test', meeting.id, 'test%meeting']
45+ reverse_url = reverse('summit.schedule.views.meeting', args=rev_args)
46+ self.assertEquals(reverse_url, '/uds-test/meeting/%s/test%%meeting/' % meeting.id)
47+
48+ def test_room_name_with_percent(self):
49+ ''' Test the following Room urlconfs
50+ (r'^(?P<summit_name>[\w-]+)/(?P<room_name>[\.\w-]+)/$', 'by_room'),
51+ (r'^(?P<summit_name>[\w-]+)/room/(?P<room_name>[\.\w-]+).ical$', 'room_ical'),
52+ '''
53+ room = factory.make_one(Room, summit=self.summit, name='test.room')
54+
55+ rev_args = ['uds-test', 'test%room']
56+ reverse_url = reverse('summit.schedule.views.by_room', args=rev_args)
57+ self.assertEquals(reverse_url, '/uds-test/test%room/')
58+
59+ reverse_url = reverse('summit.schedule.views.room_ical', args=rev_args)
60+ self.assertEquals(reverse_url, '/uds-test/room/test%room.ical')
61+
62+ def test_track_name_with_percent(self):
63+ ''' Test the following Track urlconfs
64+ (r'^(?P<summit_name>[\w-]+)/track/(?P<track_slug>[\.\w-]+)/$', 'by_track'),
65+ (r'^(?P<summit_name>[\w-]+)/track/(?P<track_slug>[\.\w-]+).ical$', 'track_ical'),
66+ '''
67+ track = factory.make_one(Track, summit=self.summit, slug='test.track')
68+
69+ rev_args = ['uds-test', 'test%track']
70+ reverse_url = reverse('summit.schedule.views.by_track', args=rev_args)
71+ self.assertEquals(reverse_url, '/uds-test/track/test%track/')
72+
73+ reverse_url = reverse('summit.schedule.views.track_ical', args=rev_args)
74+ self.assertEquals(reverse_url, '/uds-test/track/test%track.ical')
75+
76+ def test_participant_name_with_percent(self):
77+ ''' Test the following User urlconf
78+ (r'^(?P<summit_name>[\w-]+)/participant/(?P<username>[\.\w-]+)\.ical$', 'user_ical'),
79+ '''
80+ user = factory.make_one(User, username='test.user')
81+
82+ rev_args = ['uds-test', 'test%user']
83+ reverse_url = reverse('summit.schedule.views.user_ical', args=rev_args)
84+ self.assertEquals(reverse_url, '/uds-test/participant/test%user.ical')
85+
86+
87 class EtherpadEditUrl(djangotest.TestCase):
88
89 def setUp(self):
90@@ -398,4 +449,105 @@
91 # Public meeting should be autoscheduled into one of the two open rooms
92 self.assertEquals(1, self.public_meeting.agenda_set.count())
93 self.assertEquals(1, Agenda.objects.filter(room__type='open').count())
94-
95+
96+
97+class RenderScheduleTestCase(djangotest.TestCase):
98+
99+ def setUp(self):
100+ now = datetime.datetime.utcnow()
101+ one_hour = datetime.timedelta(0, 3600)
102+ week = datetime.timedelta(days=5)
103+ self.summit = factory.make_one(Summit, name='uds-test', timezone='UTC')
104+ self.slot = factory.make_one(
105+ Slot,
106+ start_utc=now+one_hour,
107+ end_utc=now+(2*one_hour),
108+ type='open',
109+ summit=self.summit)
110+
111+ self.track1 = factory.make_one(Track, summit=self.summit)
112+ self.room1 = factory.make_one(Room, summit=self.summit)
113+ self.meeting1 = factory.make_one(Meeting, summit=self.summit, name='meeting1', private=False)
114+ self.agenda1 = factory.make_one(Agenda, slot=self.slot, meeting=self.meeting1, room=self.room1)
115+
116+ self.user = factory.make_one(User, username='testuser', first_name='Test', last_name='User')
117+ self.attendee = factory.make_one(Attendee, summit=self.summit, user=self.user, start_utc=now, end_utc=now+week)
118+
119+ def tearDown(self):
120+ # Cached requests cause render.py to return old data, so clear the cache
121+ if hasattr(cache, 'clear'):
122+ cache.clear()
123+ # Older django didn't have .clear, but locmem cache did have ._cull
124+ elif hasattr(cache, '_cull'):
125+ cache._cull()
126+
127+ def test_percent_in_meeting_name(self):
128+ self.meeting1.name = 'test%meeting'
129+ self.meeting1.save()
130+
131+ schedule_args = ['uds-test', self.agenda1.slot.start_utc.date()]
132+ schedule_url = reverse('summit.schedule.views.by_date', args=schedule_args)
133+ response = self.client.get(schedule_url)
134+
135+ self.assertContains(response, 'test%meeting', 1)
136+
137+ def test_percent_in_meeting_title(self):
138+ self.meeting1.title = 'test % meeting'
139+ self.meeting1.save()
140+
141+ schedule_args = ['uds-test', self.agenda1.slot.start_utc.date()]
142+ schedule_url = reverse('summit.schedule.views.by_date', args=schedule_args)
143+ response = self.client.get(schedule_url)
144+
145+ self.assertContains(response, 'test % meeting', 1)
146+
147+ def test_percent_in_room_name(self):
148+ self.room1.title = 'test % room'
149+ self.room1.save()
150+
151+ schedule_args = ['uds-test', self.agenda1.slot.start_utc.date()]
152+ schedule_url = reverse('summit.schedule.views.by_date', args=schedule_args)
153+ response = self.client.get(schedule_url)
154+
155+ # Room name is displayed at top and bottom of the schedule, and also
156+ # on the meeting div for self.meeting1 which is scheduled for that room
157+ self.assertContains(response, 'test % room', 3)
158+
159+ def test_percent_in_meeting_track_title(self):
160+ self.track1.title = 'test % track'
161+ self.track1.save()
162+ self.meeting1.tracks.add(self.track1)
163+
164+ schedule_args = ['uds-test', self.agenda1.slot.start_utc.date()]
165+ schedule_url = reverse('summit.schedule.views.by_date', args=schedule_args)
166+ response = self.client.get(schedule_url)
167+
168+ self.assertContains(response, 'test % track', 1)
169+
170+ def test_percent_in_room_track_title(self):
171+ self.track1.title = 'test % track'
172+ self.track1.save()
173+ self.room1.tracks.add(self.track1)
174+
175+ schedule_args = ['uds-test', self.agenda1.slot.start_utc.date()]
176+ schedule_url = reverse('summit.schedule.views.by_date', args=schedule_args)
177+ response = self.client.get(schedule_url)
178+
179+ # Displayed above the room name at the top and bottom of the schedule
180+ self.assertContains(response, 'test % track', 2)
181+
182+ def test_percent_in_attendee_username(self):
183+ self.attendee.user.username = 'test%user'
184+ self.attendee.user.first_name = 'Test %'
185+ self.attendee.user.save()
186+ participant = factory.make_one(Participant, meeting=self.meeting1, attendee=self.attendee, required=True)
187+
188+ schedule_args = ['uds-test', self.agenda1.slot.start_utc.date()]
189+ schedule_url = reverse('summit.schedule.views.by_date', args=schedule_args)
190+ response = self.client.get(schedule_url)
191+
192+ # Displayed inside the self.meeting1 div with LP link
193+ self.assertContains(response, 'test%user', 2)
194+ self.assertContains(response, 'Test % User', 1)
195+
196+
197
198=== modified file 'summit/urls.py'
199--- summit/urls.py 2011-09-14 00:31:06 +0000
200+++ summit/urls.py 2011-09-14 14:53:23 +0000
201@@ -62,14 +62,14 @@
202
203 (r'^(?P<summit_name>[\w-]+)/next$', 'next_session'),
204 (r'^(?P<summit_name>[\w-]+)/(?P<date>[\d-]+)/$', 'by_date'),
205- (r'^(?P<summit_name>[\w-]+)/(?P<room_name>[\.\w-]+)/$', 'by_room'),
206- (r'^(?P<summit_name>[\w-]+)/track/(?P<track_slug>[\.\w-]+)/$', 'by_track'),
207- (r'^(?P<summit_name>[\w-]+)/meeting/(?P<meeting_id>\d+)/(?P<meeting_slug>[\.\w-]+)/$', 'meeting'),
208+ (r'^(?P<summit_name>[\w-]+)/(?P<room_name>[%\.\w-]+)/$', 'by_room'),
209+ (r'^(?P<summit_name>[\w-]+)/track/(?P<track_slug>[%\.\w-]+)/$', 'by_track'),
210+ (r'^(?P<summit_name>[\w-]+)/meeting/(?P<meeting_id>\d+)/(?P<meeting_slug>[%\.\w-]+)/$', 'meeting'),
211 (r'^(?P<summit_name>[\w-]+)\.csv$', 'csv'),
212 (r'^(?P<summit_name>[\w-]+)\.ical$', 'ical'),
213- (r'^(?P<summit_name>[\w-]+)/participant/(?P<username>[\.\w-]+)\.ical$', 'user_ical'),
214- (r'^(?P<summit_name>[\w-]+)/room/(?P<room_name>[\.\w-]+).ical$', 'room_ical'),
215- (r'^(?P<summit_name>[\w-]+)/track/(?P<track_slug>[\.\w-]+).ical$', 'track_ical'),
216+ (r'^(?P<summit_name>[\w-]+)/participant/(?P<username>[%\.\w-]+)\.ical$', 'user_ical'),
217+ (r'^(?P<summit_name>[\w-]+)/room/(?P<room_name>[%\.\w-]+).ical$', 'room_ical'),
218+ (r'^(?P<summit_name>[\w-]+)/track/(?P<track_slug>[%\.\w-]+).ical$', 'track_ical'),
219 )
220
221 if settings.DEBUG or settings.SERVE_STATIC:

Subscribers

People subscribed via source and target branches