Merge lp:~cjohnston/summit/clean-up-test-stuff into lp:summit
- clean-up-test-stuff
- Merge into trunk
Proposed by
Chris Johnston
Status: | Merged |
---|---|
Approved by: | Michael Hall |
Approved revision: | 483 |
Merged at revision: | 481 |
Proposed branch: | lp:~cjohnston/summit/clean-up-test-stuff |
Merge into: | lp:summit |
Diff against target: |
4036 lines (+2340/-524) 7 files modified
requirements.txt (+1/-1) summit/schedule/admin/meetingadmin.py (+52/-7) summit/schedule/migrations/0026_add_virtual_sprint_checkbox.py (+215/-0) summit/schedule/migrations/0027_add_hangout_urls.py (+217/-0) summit/schedule/models/meetingmodel.py (+30/-10) summit/schedule/models/summitmodel.py (+28/-16) summit/schedule/tests.py (+1797/-490) |
To merge this branch: | bzr merge lp:~cjohnston/summit/clean-up-test-stuff |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Michael Hall (community) | Approve | ||
Review via email: mp+149572@code.launchpad.net |
Commit message
Adds URL/virt fields, cleans up some tests, pep8 fixes
Description of the change
To post a comment you must log in.
- 482. By Chris Johnston
-
more cleanup
- 483. By Chris Johnston
-
fixes some tests
Preview Diff
[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1 | === modified file 'requirements.txt' |
2 | --- requirements.txt 2012-08-12 22:32:46 +0000 |
3 | +++ requirements.txt 2013-02-20 17:36:21 +0000 |
4 | @@ -6,7 +6,7 @@ |
5 | # include patches applied by the package maintainers. |
6 | # |
7 | |
8 | -Django==1.3.1 |
9 | +Django==1.3.2 |
10 | South==0.7.3 |
11 | bzr>=2.4b4 |
12 | distribute==0.6.10 |
13 | |
14 | === modified file 'summit/schedule/admin/meetingadmin.py' |
15 | --- summit/schedule/admin/meetingadmin.py 2012-10-09 19:01:06 +0000 |
16 | +++ summit/schedule/admin/meetingadmin.py 2013-02-20 17:36:21 +0000 |
17 | @@ -132,23 +132,68 @@ |
18 | share.short_description = "Share Meetings (Private only)" |
19 | |
20 | class MeetingAdmin(admin.ModelAdmin): |
21 | - list_display = ('summit', 'name', 'title', 'slots', 'override_break', 'private', 'requires_dial_in', 'video', 'type', 'approved') |
22 | + list_display = ( |
23 | + 'summit', |
24 | + 'name', |
25 | + 'title', |
26 | + 'slots', |
27 | + 'override_break', |
28 | + 'private', |
29 | + 'requires_dial_in', |
30 | + 'video', |
31 | + 'type', |
32 | + 'approved', |
33 | + 'virtual_meeting', |
34 | + ) |
35 | list_display_links = ('name', 'title') |
36 | - list_filter = ('summit', 'type', 'approved', 'tracks', 'slots', 'private', |
37 | - 'status', 'priority') |
38 | + list_filter = ( |
39 | + 'summit', |
40 | + 'type', |
41 | + 'approved', |
42 | + 'tracks', |
43 | + 'slots', |
44 | + 'private', |
45 | + 'status', |
46 | + 'priority', |
47 | + 'virtual_meeting', |
48 | + ) |
49 | search_fields = ('name', 'title') |
50 | |
51 | fieldsets = ( |
52 | (None, { |
53 | - 'fields': ('summit', 'name', 'title', 'description', 'approved', |
54 | - 'type', 'tracks', 'requires_dial_in', 'video'), |
55 | + 'fields': ( |
56 | + 'summit', |
57 | + 'name', |
58 | + 'title', |
59 | + 'description', |
60 | + 'virtual_meeting', |
61 | + 'approved', |
62 | + 'type', |
63 | + 'tracks', |
64 | + 'requires_dial_in', |
65 | + 'video', |
66 | + ), |
67 | + }), |
68 | + ("Hangout details", { |
69 | + 'fields': ('hangout_url', 'broadcast_url',) |
70 | }), |
71 | ("References", { |
72 | - 'fields': ('spec_url', 'launchpad_blueprint_id', 'wiki_url', 'pad_url'), |
73 | + 'fields': ( |
74 | + 'spec_url', |
75 | + 'launchpad_blueprint_id', |
76 | + 'wiki_url', |
77 | + 'pad_url'), |
78 | }), |
79 | ("Scheduling details", { |
80 | 'classes': ('collapse', ), |
81 | - 'fields': ('slots', 'override_break', 'private', 'private_key', 'status', 'priority') |
82 | + 'fields': ( |
83 | + 'slots', |
84 | + 'override_break', |
85 | + 'private', |
86 | + 'private_key', |
87 | + 'status', |
88 | + 'priority' |
89 | + ) |
90 | }), |
91 | ("Key people", { |
92 | 'classes': ('collapse', ), |
93 | |
94 | === added file 'summit/schedule/migrations/0026_add_virtual_sprint_checkbox.py' |
95 | --- summit/schedule/migrations/0026_add_virtual_sprint_checkbox.py 1970-01-01 00:00:00 +0000 |
96 | +++ summit/schedule/migrations/0026_add_virtual_sprint_checkbox.py 2013-02-20 17:36:21 +0000 |
97 | @@ -0,0 +1,215 @@ |
98 | +# encoding: utf-8 |
99 | +import datetime |
100 | +from south.db import db |
101 | +from south.v2 import SchemaMigration |
102 | +from django.db import models |
103 | + |
104 | +class Migration(SchemaMigration): |
105 | + |
106 | + def forwards(self, orm): |
107 | + |
108 | + # Adding field 'Meeting.virtual_meeting' |
109 | + db.add_column('schedule_meeting', 'virtual_meeting', self.gf('django.db.models.fields.BooleanField')(default=False), keep_default=False) |
110 | + |
111 | + # Adding field 'Summit.virtual_summit' |
112 | + db.add_column('schedule_summit', 'virtual_summit', self.gf('django.db.models.fields.BooleanField')(default=False), keep_default=False) |
113 | + |
114 | + |
115 | + def backwards(self, orm): |
116 | + |
117 | + # Deleting field 'Meeting.virtual_meeting' |
118 | + db.delete_column('schedule_meeting', 'virtual_meeting') |
119 | + |
120 | + # Deleting field 'Summit.virtual_summit' |
121 | + db.delete_column('schedule_summit', 'virtual_summit') |
122 | + |
123 | + |
124 | + models = { |
125 | + 'auth.group': { |
126 | + 'Meta': {'object_name': 'Group'}, |
127 | + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
128 | + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), |
129 | + 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) |
130 | + }, |
131 | + 'auth.permission': { |
132 | + 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'}, |
133 | + 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), |
134 | + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), |
135 | + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
136 | + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) |
137 | + }, |
138 | + 'auth.user': { |
139 | + 'Meta': {'ordering': "['username']", 'object_name': 'User'}, |
140 | + 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), |
141 | + 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), |
142 | + 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), |
143 | + 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}), |
144 | + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
145 | + 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
146 | + 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), |
147 | + 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), |
148 | + 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), |
149 | + 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), |
150 | + 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), |
151 | + 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}), |
152 | + 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) |
153 | + }, |
154 | + 'contenttypes.contenttype': { |
155 | + 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, |
156 | + 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), |
157 | + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
158 | + 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), |
159 | + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) |
160 | + }, |
161 | + 'schedule.agenda': { |
162 | + 'Meta': {'ordering': "('slot', 'room')", 'unique_together': "(('slot', 'room'),)", 'object_name': 'Agenda'}, |
163 | + 'auto': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), |
164 | + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
165 | + 'meeting': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['schedule.Meeting']"}), |
166 | + 'room': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['schedule.Room']"}), |
167 | + 'slot': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['schedule.Slot']"}) |
168 | + }, |
169 | + 'schedule.attendee': { |
170 | + 'Meta': {'ordering': "('user__username', 'summit')", 'object_name': 'Attendee'}, |
171 | + 'crew': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_column': "'crew'"}), |
172 | + 'end_utc': ('django.db.models.fields.DateTimeField', [], {'db_column': "'end'"}), |
173 | + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
174 | + 'secret_key_id': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}), |
175 | + 'start_utc': ('django.db.models.fields.DateTimeField', [], {'db_column': "'start'"}), |
176 | + 'summit': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['schedule.Summit']"}), |
177 | + 'tracks': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['schedule.Track']", 'symmetrical': 'False', 'blank': 'True'}), |
178 | + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}) |
179 | + }, |
180 | + 'schedule.attendeebusy': { |
181 | + 'Meta': {'ordering': "('attendee', 'start_utc', 'end_utc')", 'object_name': 'AttendeeBusy'}, |
182 | + 'attendee': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'busy_set'", 'to': "orm['schedule.Attendee']"}), |
183 | + 'end_utc': ('django.db.models.fields.DateTimeField', [], {'db_column': "'end'"}), |
184 | + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
185 | + 'start_utc': ('django.db.models.fields.DateTimeField', [], {'db_column': "'start'"}) |
186 | + }, |
187 | + 'schedule.crew': { |
188 | + 'Meta': {'ordering': "('date_utc', 'attendee')", 'object_name': 'Crew'}, |
189 | + 'attendee': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'crew_schedule'", 'to': "orm['schedule.Attendee']"}), |
190 | + 'date_utc': ('django.db.models.fields.DateField', [], {'db_column': "'date'"}), |
191 | + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) |
192 | + }, |
193 | + 'schedule.lead': { |
194 | + 'Meta': {'ordering': "('summit', 'track')", 'object_name': 'Lead'}, |
195 | + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
196 | + 'lead': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'lead'", 'to': "orm['schedule.Attendee']"}), |
197 | + 'summit': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['schedule.Summit']"}), |
198 | + 'track': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['schedule.Track']"}) |
199 | + }, |
200 | + 'schedule.meeting': { |
201 | + 'Meta': {'object_name': 'Meeting'}, |
202 | + 'approved': ('django.db.models.fields.CharField', [], {'default': "'PENDING'", 'max_length': '10', 'null': 'True'}), |
203 | + 'approver': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'approver_set'", 'null': 'True', 'to': "orm['schedule.Attendee']"}), |
204 | + 'assignee': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'assignee_set'", 'null': 'True', 'to': "orm['schedule.Attendee']"}), |
205 | + 'description': ('django.db.models.fields.TextField', [], {'max_length': '2047', 'blank': 'True'}), |
206 | + 'drafter': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'drafter_set'", 'null': 'True', 'to': "orm['schedule.Attendee']"}), |
207 | + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
208 | + 'launchpad_blueprint_id': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), |
209 | + 'name': ('summit.schedule.fields.NameField', [], {'max_length': '100'}), |
210 | + 'override_break': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), |
211 | + 'pad_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}), |
212 | + 'participants': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['schedule.Attendee']", 'symmetrical': 'False', 'through': "orm['schedule.Participant']", 'blank': 'True'}), |
213 | + 'priority': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), |
214 | + 'private': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), |
215 | + 'private_key': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}), |
216 | + 'requires_dial_in': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), |
217 | + 'scribe': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'scribe_set'", 'null': 'True', 'to': "orm['schedule.Attendee']"}), |
218 | + 'slots': ('django.db.models.fields.IntegerField', [], {'default': '1'}), |
219 | + 'spec_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'}), |
220 | + 'status': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}), |
221 | + 'summit': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['schedule.Summit']"}), |
222 | + 'title': ('django.db.models.fields.CharField', [], {'max_length': '100'}), |
223 | + 'tracks': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['schedule.Track']", 'symmetrical': 'False', 'blank': 'True'}), |
224 | + 'type': ('django.db.models.fields.CharField', [], {'default': "u'discussion'", 'max_length': '15'}), |
225 | + 'video': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), |
226 | + 'virtual_meeting': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), |
227 | + 'wiki_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'}) |
228 | + }, |
229 | + 'schedule.participant': { |
230 | + 'Meta': {'ordering': "('meeting', 'attendee', 'participation')", 'object_name': 'Participant'}, |
231 | + 'attendee': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['schedule.Attendee']"}), |
232 | + 'from_launchpad': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), |
233 | + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
234 | + 'meeting': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['schedule.Meeting']"}), |
235 | + 'participation': ('django.db.models.fields.CharField', [], {'default': "'ATTENDING'", 'max_length': '32', 'null': 'True'}) |
236 | + }, |
237 | + 'schedule.room': { |
238 | + 'Meta': {'ordering': "('summit', 'name')", 'object_name': 'Room'}, |
239 | + 'end_utc': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'db_column': "'end'", 'blank': 'True'}), |
240 | + 'has_dial_in': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), |
241 | + 'icecast_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'}), |
242 | + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
243 | + 'irc_channel': ('django.db.models.fields.CharField', [], {'max_length': '50', 'blank': 'True'}), |
244 | + 'name': ('summit.schedule.fields.NameField', [], {'max_length': '50'}), |
245 | + 'size': ('django.db.models.fields.IntegerField', [], {'default': '0'}), |
246 | + 'start_utc': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'db_column': "'start'", 'blank': 'True'}), |
247 | + 'summit': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['schedule.Summit']"}), |
248 | + 'title': ('django.db.models.fields.CharField', [], {'max_length': '100'}), |
249 | + 'tracks': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['schedule.Track']", 'symmetrical': 'False', 'blank': 'True'}), |
250 | + 'type': ('django.db.models.fields.CharField', [], {'default': "u'open'", 'max_length': '7'}) |
251 | + }, |
252 | + 'schedule.roombusy': { |
253 | + 'Meta': {'ordering': "('room', 'start_utc', 'end_utc')", 'object_name': 'RoomBusy'}, |
254 | + 'end_utc': ('django.db.models.fields.DateTimeField', [], {'db_column': "'end'"}), |
255 | + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
256 | + 'room': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'busy_set'", 'to': "orm['schedule.Room']"}), |
257 | + 'start_utc': ('django.db.models.fields.DateTimeField', [], {'db_column': "'start'"}) |
258 | + }, |
259 | + 'schedule.slot': { |
260 | + 'Meta': {'ordering': "('summit', 'start_utc', 'end_utc')", 'object_name': 'Slot'}, |
261 | + 'end_utc': ('django.db.models.fields.DateTimeField', [], {'db_column': "'end'"}), |
262 | + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
263 | + 'start_utc': ('django.db.models.fields.DateTimeField', [], {'db_column': "'start'"}), |
264 | + 'summit': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['schedule.Summit']"}), |
265 | + 'type': ('django.db.models.fields.CharField', [], {'default': "u'open'", 'max_length': '7'}) |
266 | + }, |
267 | + 'schedule.summit': { |
268 | + 'Meta': {'ordering': "('name',)", 'object_name': 'Summit'}, |
269 | + 'date_end': ('django.db.models.fields.DateField', [], {'null': 'True'}), |
270 | + 'date_start': ('django.db.models.fields.DateField', [], {'null': 'True'}), |
271 | + 'description': ('django.db.models.fields.TextField', [], {'max_length': '2047', 'blank': 'True'}), |
272 | + 'etherpad': ('django.db.models.fields.URLField', [], {'default': "'http://pad.ubuntu.com/'", 'max_length': '75'}), |
273 | + 'hashtag': ('django.db.models.fields.CharField', [], {'max_length': '25', 'blank': 'True'}), |
274 | + 'help_text': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), |
275 | + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
276 | + 'last_update': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), |
277 | + 'location': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}), |
278 | + 'managers': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'managers'", 'blank': 'True', 'to': "orm['auth.User']"}), |
279 | + 'name': ('summit.schedule.fields.NameField', [], {'max_length': '50'}), |
280 | + 'qr': ('django.db.models.fields.URLField', [], {'default': "''", 'max_length': '100', 'blank': 'True'}), |
281 | + 'schedulers': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'schedulers'", 'blank': 'True', 'to': "orm['auth.User']"}), |
282 | + 'sites': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['sites.Site']", 'symmetrical': 'False'}), |
283 | + 'state': ('django.db.models.fields.CharField', [], {'default': "u'sponsor'", 'max_length': '10'}), |
284 | + 'timezone': ('django.db.models.fields.CharField', [], {'max_length': '50'}), |
285 | + 'title': ('django.db.models.fields.CharField', [], {'max_length': '100'}), |
286 | + 'virtual_summit': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) |
287 | + }, |
288 | + 'schedule.summitsprint': { |
289 | + 'Meta': {'ordering': "('summit', 'import_url')", 'object_name': 'SummitSprint'}, |
290 | + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
291 | + 'import_url': ('django.db.models.fields.URLField', [], {'max_length': '200'}), |
292 | + 'summit': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'sprint_set'", 'to': "orm['schedule.Summit']"}) |
293 | + }, |
294 | + 'schedule.track': { |
295 | + 'Meta': {'ordering': "('summit', 'title', 'slug')", 'object_name': 'Track'}, |
296 | + 'allow_adjacent_sessions': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), |
297 | + 'color': ('django.db.models.fields.CharField', [], {'default': "'FFFFFF'", 'max_length': '6'}), |
298 | + 'description': ('django.db.models.fields.TextField', [], {'max_length': '1000', 'null': 'True'}), |
299 | + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
300 | + 'slug': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}), |
301 | + 'summit': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['schedule.Summit']"}), |
302 | + 'title': ('django.db.models.fields.CharField', [], {'max_length': '100'}) |
303 | + }, |
304 | + 'sites.site': { |
305 | + 'Meta': {'ordering': "('domain',)", 'object_name': 'Site', 'db_table': "'django_site'"}, |
306 | + 'domain': ('django.db.models.fields.CharField', [], {'max_length': '100'}), |
307 | + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
308 | + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) |
309 | + } |
310 | + } |
311 | + |
312 | + complete_apps = ['schedule'] |
313 | |
314 | === added file 'summit/schedule/migrations/0027_add_hangout_urls.py' |
315 | --- summit/schedule/migrations/0027_add_hangout_urls.py 1970-01-01 00:00:00 +0000 |
316 | +++ summit/schedule/migrations/0027_add_hangout_urls.py 2013-02-20 17:36:21 +0000 |
317 | @@ -0,0 +1,217 @@ |
318 | +# encoding: utf-8 |
319 | +import datetime |
320 | +from south.db import db |
321 | +from south.v2 import SchemaMigration |
322 | +from django.db import models |
323 | + |
324 | +class Migration(SchemaMigration): |
325 | + |
326 | + def forwards(self, orm): |
327 | + |
328 | + # Adding field 'Meeting.hangout_url' |
329 | + db.add_column('schedule_meeting', 'hangout_url', self.gf('django.db.models.fields.URLField')(max_length=200, null=True, blank=True), keep_default=False) |
330 | + |
331 | + # Adding field 'Meeting.broadcast_url' |
332 | + db.add_column('schedule_meeting', 'broadcast_url', self.gf('django.db.models.fields.URLField')(max_length=200, null=True, blank=True), keep_default=False) |
333 | + |
334 | + |
335 | + def backwards(self, orm): |
336 | + |
337 | + # Deleting field 'Meeting.hangout_url' |
338 | + db.delete_column('schedule_meeting', 'hangout_url') |
339 | + |
340 | + # Deleting field 'Meeting.broadcast_url' |
341 | + db.delete_column('schedule_meeting', 'broadcast_url') |
342 | + |
343 | + |
344 | + models = { |
345 | + 'auth.group': { |
346 | + 'Meta': {'object_name': 'Group'}, |
347 | + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
348 | + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), |
349 | + 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) |
350 | + }, |
351 | + 'auth.permission': { |
352 | + 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'}, |
353 | + 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), |
354 | + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), |
355 | + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
356 | + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) |
357 | + }, |
358 | + 'auth.user': { |
359 | + 'Meta': {'ordering': "['username']", 'object_name': 'User'}, |
360 | + 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), |
361 | + 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), |
362 | + 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), |
363 | + 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}), |
364 | + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
365 | + 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
366 | + 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), |
367 | + 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), |
368 | + 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), |
369 | + 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), |
370 | + 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), |
371 | + 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}), |
372 | + 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) |
373 | + }, |
374 | + 'contenttypes.contenttype': { |
375 | + 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, |
376 | + 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), |
377 | + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
378 | + 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), |
379 | + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) |
380 | + }, |
381 | + 'schedule.agenda': { |
382 | + 'Meta': {'ordering': "('slot', 'room')", 'unique_together': "(('slot', 'room'),)", 'object_name': 'Agenda'}, |
383 | + 'auto': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), |
384 | + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
385 | + 'meeting': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['schedule.Meeting']"}), |
386 | + 'room': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['schedule.Room']"}), |
387 | + 'slot': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['schedule.Slot']"}) |
388 | + }, |
389 | + 'schedule.attendee': { |
390 | + 'Meta': {'ordering': "('user__username', 'summit')", 'object_name': 'Attendee'}, |
391 | + 'crew': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_column': "'crew'"}), |
392 | + 'end_utc': ('django.db.models.fields.DateTimeField', [], {'db_column': "'end'"}), |
393 | + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
394 | + 'secret_key_id': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}), |
395 | + 'start_utc': ('django.db.models.fields.DateTimeField', [], {'db_column': "'start'"}), |
396 | + 'summit': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['schedule.Summit']"}), |
397 | + 'tracks': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['schedule.Track']", 'symmetrical': 'False', 'blank': 'True'}), |
398 | + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}) |
399 | + }, |
400 | + 'schedule.attendeebusy': { |
401 | + 'Meta': {'ordering': "('attendee', 'start_utc', 'end_utc')", 'object_name': 'AttendeeBusy'}, |
402 | + 'attendee': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'busy_set'", 'to': "orm['schedule.Attendee']"}), |
403 | + 'end_utc': ('django.db.models.fields.DateTimeField', [], {'db_column': "'end'"}), |
404 | + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
405 | + 'start_utc': ('django.db.models.fields.DateTimeField', [], {'db_column': "'start'"}) |
406 | + }, |
407 | + 'schedule.crew': { |
408 | + 'Meta': {'ordering': "('date_utc', 'attendee')", 'object_name': 'Crew'}, |
409 | + 'attendee': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'crew_schedule'", 'to': "orm['schedule.Attendee']"}), |
410 | + 'date_utc': ('django.db.models.fields.DateField', [], {'db_column': "'date'"}), |
411 | + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) |
412 | + }, |
413 | + 'schedule.lead': { |
414 | + 'Meta': {'ordering': "('summit', 'track')", 'object_name': 'Lead'}, |
415 | + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
416 | + 'lead': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'lead'", 'to': "orm['schedule.Attendee']"}), |
417 | + 'summit': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['schedule.Summit']"}), |
418 | + 'track': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['schedule.Track']"}) |
419 | + }, |
420 | + 'schedule.meeting': { |
421 | + 'Meta': {'object_name': 'Meeting'}, |
422 | + 'approved': ('django.db.models.fields.CharField', [], {'default': "'PENDING'", 'max_length': '10', 'null': 'True'}), |
423 | + 'approver': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'approver_set'", 'null': 'True', 'to': "orm['schedule.Attendee']"}), |
424 | + 'assignee': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'assignee_set'", 'null': 'True', 'to': "orm['schedule.Attendee']"}), |
425 | + 'broadcast_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}), |
426 | + 'description': ('django.db.models.fields.TextField', [], {'max_length': '2047', 'blank': 'True'}), |
427 | + 'drafter': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'drafter_set'", 'null': 'True', 'to': "orm['schedule.Attendee']"}), |
428 | + 'hangout_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}), |
429 | + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
430 | + 'launchpad_blueprint_id': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), |
431 | + 'name': ('summit.schedule.fields.NameField', [], {'max_length': '100'}), |
432 | + 'override_break': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), |
433 | + 'pad_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}), |
434 | + 'participants': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['schedule.Attendee']", 'symmetrical': 'False', 'through': "orm['schedule.Participant']", 'blank': 'True'}), |
435 | + 'priority': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), |
436 | + 'private': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), |
437 | + 'private_key': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}), |
438 | + 'requires_dial_in': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), |
439 | + 'scribe': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'scribe_set'", 'null': 'True', 'to': "orm['schedule.Attendee']"}), |
440 | + 'slots': ('django.db.models.fields.IntegerField', [], {'default': '1'}), |
441 | + 'spec_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'}), |
442 | + 'status': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}), |
443 | + 'summit': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['schedule.Summit']"}), |
444 | + 'title': ('django.db.models.fields.CharField', [], {'max_length': '100'}), |
445 | + 'tracks': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['schedule.Track']", 'symmetrical': 'False', 'blank': 'True'}), |
446 | + 'type': ('django.db.models.fields.CharField', [], {'default': "u'discussion'", 'max_length': '15'}), |
447 | + 'video': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), |
448 | + 'virtual_meeting': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), |
449 | + 'wiki_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'}) |
450 | + }, |
451 | + 'schedule.participant': { |
452 | + 'Meta': {'ordering': "('meeting', 'attendee', 'participation')", 'object_name': 'Participant'}, |
453 | + 'attendee': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['schedule.Attendee']"}), |
454 | + 'from_launchpad': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), |
455 | + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
456 | + 'meeting': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['schedule.Meeting']"}), |
457 | + 'participation': ('django.db.models.fields.CharField', [], {'default': "'ATTENDING'", 'max_length': '32', 'null': 'True'}) |
458 | + }, |
459 | + 'schedule.room': { |
460 | + 'Meta': {'ordering': "('summit', 'name')", 'object_name': 'Room'}, |
461 | + 'end_utc': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'db_column': "'end'", 'blank': 'True'}), |
462 | + 'has_dial_in': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), |
463 | + 'icecast_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'}), |
464 | + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
465 | + 'irc_channel': ('django.db.models.fields.CharField', [], {'max_length': '50', 'blank': 'True'}), |
466 | + 'name': ('summit.schedule.fields.NameField', [], {'max_length': '50'}), |
467 | + 'size': ('django.db.models.fields.IntegerField', [], {'default': '0'}), |
468 | + 'start_utc': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'db_column': "'start'", 'blank': 'True'}), |
469 | + 'summit': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['schedule.Summit']"}), |
470 | + 'title': ('django.db.models.fields.CharField', [], {'max_length': '100'}), |
471 | + 'tracks': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['schedule.Track']", 'symmetrical': 'False', 'blank': 'True'}), |
472 | + 'type': ('django.db.models.fields.CharField', [], {'default': "u'open'", 'max_length': '7'}) |
473 | + }, |
474 | + 'schedule.roombusy': { |
475 | + 'Meta': {'ordering': "('room', 'start_utc', 'end_utc')", 'object_name': 'RoomBusy'}, |
476 | + 'end_utc': ('django.db.models.fields.DateTimeField', [], {'db_column': "'end'"}), |
477 | + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
478 | + 'room': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'busy_set'", 'to': "orm['schedule.Room']"}), |
479 | + 'start_utc': ('django.db.models.fields.DateTimeField', [], {'db_column': "'start'"}) |
480 | + }, |
481 | + 'schedule.slot': { |
482 | + 'Meta': {'ordering': "('summit', 'start_utc', 'end_utc')", 'object_name': 'Slot'}, |
483 | + 'end_utc': ('django.db.models.fields.DateTimeField', [], {'db_column': "'end'"}), |
484 | + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
485 | + 'start_utc': ('django.db.models.fields.DateTimeField', [], {'db_column': "'start'"}), |
486 | + 'summit': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['schedule.Summit']"}), |
487 | + 'type': ('django.db.models.fields.CharField', [], {'default': "u'open'", 'max_length': '7'}) |
488 | + }, |
489 | + 'schedule.summit': { |
490 | + 'Meta': {'ordering': "('name',)", 'object_name': 'Summit'}, |
491 | + 'date_end': ('django.db.models.fields.DateField', [], {'null': 'True'}), |
492 | + 'date_start': ('django.db.models.fields.DateField', [], {'null': 'True'}), |
493 | + 'description': ('django.db.models.fields.TextField', [], {'max_length': '2047', 'blank': 'True'}), |
494 | + 'etherpad': ('django.db.models.fields.URLField', [], {'default': "'http://pad.ubuntu.com/'", 'max_length': '75'}), |
495 | + 'hashtag': ('django.db.models.fields.CharField', [], {'max_length': '25', 'blank': 'True'}), |
496 | + 'help_text': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), |
497 | + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
498 | + 'last_update': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), |
499 | + 'location': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}), |
500 | + 'managers': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'managers'", 'blank': 'True', 'to': "orm['auth.User']"}), |
501 | + 'name': ('summit.schedule.fields.NameField', [], {'max_length': '50'}), |
502 | + 'qr': ('django.db.models.fields.URLField', [], {'default': "''", 'max_length': '100', 'blank': 'True'}), |
503 | + 'schedulers': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'schedulers'", 'blank': 'True', 'to': "orm['auth.User']"}), |
504 | + 'sites': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['sites.Site']", 'symmetrical': 'False'}), |
505 | + 'state': ('django.db.models.fields.CharField', [], {'default': "u'sponsor'", 'max_length': '10'}), |
506 | + 'timezone': ('django.db.models.fields.CharField', [], {'max_length': '50'}), |
507 | + 'title': ('django.db.models.fields.CharField', [], {'max_length': '100'}), |
508 | + 'virtual_summit': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) |
509 | + }, |
510 | + 'schedule.summitsprint': { |
511 | + 'Meta': {'ordering': "('summit', 'import_url')", 'object_name': 'SummitSprint'}, |
512 | + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
513 | + 'import_url': ('django.db.models.fields.URLField', [], {'max_length': '200'}), |
514 | + 'summit': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'sprint_set'", 'to': "orm['schedule.Summit']"}) |
515 | + }, |
516 | + 'schedule.track': { |
517 | + 'Meta': {'ordering': "('summit', 'title', 'slug')", 'object_name': 'Track'}, |
518 | + 'allow_adjacent_sessions': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), |
519 | + 'color': ('django.db.models.fields.CharField', [], {'default': "'FFFFFF'", 'max_length': '6'}), |
520 | + 'description': ('django.db.models.fields.TextField', [], {'max_length': '1000', 'null': 'True'}), |
521 | + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
522 | + 'slug': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}), |
523 | + 'summit': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['schedule.Summit']"}), |
524 | + 'title': ('django.db.models.fields.CharField', [], {'max_length': '100'}) |
525 | + }, |
526 | + 'sites.site': { |
527 | + 'Meta': {'ordering': "('domain',)", 'object_name': 'Site', 'db_table': "'django_site'"}, |
528 | + 'domain': ('django.db.models.fields.CharField', [], {'max_length': '100'}), |
529 | + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
530 | + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) |
531 | + } |
532 | + } |
533 | + |
534 | + complete_apps = ['schedule'] |
535 | |
536 | === modified file 'summit/schedule/models/meetingmodel.py' |
537 | --- summit/schedule/models/meetingmodel.py 2012-10-09 21:00:53 +0000 |
538 | +++ summit/schedule/models/meetingmodel.py 2013-02-20 17:36:21 +0000 |
539 | @@ -100,6 +100,16 @@ |
540 | null=True, blank=True) |
541 | priority = models.IntegerField(choices=PRIORITY_CHOICES, |
542 | null=True, blank=True) |
543 | + hangout_url = models.URLField( |
544 | + blank=True, |
545 | + null=True, |
546 | + help_text="URL for participation essential users to join the hangout", |
547 | + ) |
548 | + broadcast_url = models.URLField( |
549 | + blank=True, |
550 | + null=True, |
551 | + help_text="URL for all other participants to watch the hangout", |
552 | + ) |
553 | # FIXME tracks must be for the same summit |
554 | # (will require js magic in admin to refresh the boxes) |
555 | tracks = models.ManyToManyField(Track, blank=True) |
556 | @@ -112,14 +122,24 @@ |
557 | slots = models.IntegerField(default=1) |
558 | override_break = models.BooleanField(default=False, verbose_name="Override Break", |
559 | help_text="If this is a multi-slot meeting, should it be allowed to take place during a break") |
560 | + virtual_meeting = models.BooleanField( |
561 | + help_text="If virtual summit is true, this will not override it" |
562 | + ) |
563 | approved = models.CharField(max_length=10, choices=REVIEW_CHOICES, |
564 | null=True, default='PENDING') |
565 | private = models.BooleanField(default=False) |
566 | private_key = models.CharField(max_length=32, null=True, blank=True) |
567 | |
568 | - requires_dial_in = models.BooleanField(verbose_name="This session requires dial in capabilities", default=False) |
569 | - video = models.BooleanField(verbose_name="This session is to be videotaped", default=False) |
570 | - |
571 | + requires_dial_in = models.BooleanField( |
572 | + verbose_name="Dial in", |
573 | + help_text="This session requires dial in availability" |
574 | + ) |
575 | + video = models.BooleanField( |
576 | + verbose_name="Video recording", |
577 | + help_text="This session is to be videotaped", |
578 | + default=False |
579 | + ) |
580 | + |
581 | # FIXME attendees must be for the same summit |
582 | # (will require js magic in admin to refresh the boxes) |
583 | drafter = models.ForeignKey(Attendee, null=True, blank=True, |
584 | @@ -214,7 +234,7 @@ |
585 | if self.type in self.TYPE_ICONS: |
586 | return self.TYPE_ICONS[self.type] |
587 | icon = property(get_meeting_type_icon) |
588 | - |
589 | + |
590 | def __unicode__(self): |
591 | if self.name: |
592 | return self.name |
593 | @@ -232,7 +252,7 @@ |
594 | def spec_priority(self): |
595 | label = dict(self.PRIORITY_CHOICES)[self.priority] |
596 | icon = label.lower() |
597 | - |
598 | + |
599 | def can_edit_pm(self, attendee): |
600 | if attendee is not None: |
601 | if attendee.user == self.approver or attendee.user == self.drafter or attendee.user == self.assignee or self.summit.is_scheduler(attendee): |
602 | @@ -260,12 +280,12 @@ |
603 | return False |
604 | else: |
605 | return False |
606 | - |
607 | + |
608 | def is_tracklead(self, attendee): |
609 | if attendee is not None: |
610 | return self.tracks.filter(lead__lead=attendee).exists() |
611 | return False |
612 | - |
613 | + |
614 | @property |
615 | def attendees(self): |
616 | attendees = [] |
617 | @@ -308,7 +328,7 @@ |
618 | attendees = set() |
619 | for participant in self.participant_set.all(): |
620 | if participant.participation == level: |
621 | - attendees.add(participant.attendee) |
622 | + attendees.add(participant.attendee) |
623 | return attendees |
624 | |
625 | def update_from_launchpad(self, elem): |
626 | @@ -316,7 +336,7 @@ |
627 | |
628 | if not self.approved == 'REMOVED': |
629 | self.approved = 'APPROVED' |
630 | - |
631 | + |
632 | name = elem.get("name") |
633 | if name: |
634 | self.name = name[:100] |
635 | @@ -453,7 +473,7 @@ |
636 | if this_slot.type == 'plenary' and self.type not in ('plenary', 'talk', 'special'): |
637 | raise Meeting.SchedulingError( |
638 | "Not a plenary event, talk or special event") |
639 | - |
640 | + |
641 | # Check that the room is not already in use |
642 | try: |
643 | existing = room.agenda_set.get(slot=this_slot) |
644 | |
645 | === modified file 'summit/schedule/models/summitmodel.py' |
646 | --- summit/schedule/models/summitmodel.py 2013-01-18 23:06:46 +0000 |
647 | +++ summit/schedule/models/summitmodel.py 2013-02-20 17:36:21 +0000 |
648 | @@ -60,7 +60,7 @@ |
649 | User.__unicode__ = unicode_user |
650 | |
651 | class SummitManager(CurrentSiteManager): |
652 | - |
653 | + |
654 | def next(self): |
655 | try: |
656 | return self.order_by('-date_start')[0] |
657 | @@ -93,12 +93,14 @@ |
658 | date_end = models.DateField(blank=False, null=True) |
659 | managers = models.ManyToManyField(User, blank=True, related_name='managers') |
660 | schedulers = models.ManyToManyField(User, blank=True, related_name='schedulers') |
661 | - |
662 | + virtual_summit = models.BooleanField( |
663 | + help_text="Check this if the entire sprint is virtual" |
664 | + ) |
665 | help_text = models.TextField(null=True, blank=True, help_text='Summit specific instructions and links for getting help during the event') |
666 | - |
667 | + |
668 | objects = models.Manager() |
669 | on_site = SummitManager() |
670 | - |
671 | + |
672 | class Meta: |
673 | app_label = 'schedule' |
674 | ordering = ('name', ) |
675 | @@ -108,7 +110,7 @@ |
676 | |
677 | def get_absolute_url(self): |
678 | return getattr(settings, 'SITE_ROOT', 'http://summit.ubuntu.com') + reverse('summit.schedule.views.summit', args=(self.name,)) |
679 | - |
680 | + |
681 | def localize(self, datetime): |
682 | """Convert a datetime to the summit-local timezone. |
683 | |
684 | @@ -171,7 +173,7 @@ |
685 | |
686 | def ical_url(self): |
687 | return getattr(settings, 'SITE_ROOT', 'http://summit.ubuntu.com') + reverse('summit.schedule.views.ical', args=(self.name,)) |
688 | - |
689 | + |
690 | def public_rooms(self): |
691 | """List of public rooms for this summit. |
692 | |
693 | @@ -212,7 +214,7 @@ |
694 | |
695 | def private_rooms(self): |
696 | """List fo private rooms for this summit.""" |
697 | - |
698 | + |
699 | def by_title(a, b): |
700 | if a.track is None: |
701 | return 1 |
702 | @@ -289,7 +291,7 @@ |
703 | |
704 | def update_attendee_from_launchpad(self, elem, options={}): |
705 | """Update or create single attendee from Launchpad data.""" |
706 | - |
707 | + |
708 | username = elem.get("name", "") |
709 | if not username: |
710 | return |
711 | @@ -372,19 +374,29 @@ |
712 | """Delete any automatically created agenda items that have problems.""" |
713 | today = datetime.now() |
714 | for meeting in self.meeting_set.all(): |
715 | - for agenda in meeting.agenda_set.filter(auto=True, slot__start_utc__gt=today): |
716 | + for agenda in meeting.agenda_set.filter( |
717 | + auto=True, |
718 | + slot__start_utc__gt=today |
719 | + ): |
720 | try: |
721 | missing = meeting.check_schedule(agenda.slot, agenda.room) |
722 | if len(missing): |
723 | - print "Warning: required people not available: %s (%s) at %s in %s: %s" % ( |
724 | - meeting, meeting.drafter, agenda.slot, agenda.room, |
725 | - ', '.join(m.user.username for m in missing)) |
726 | + print "Warning: required people not available:" |
727 | + print "%s (%s) at %s in %s: %s" % ( |
728 | + meeting, |
729 | + meeting.drafter, |
730 | + agenda.slot, |
731 | + agenda.room, |
732 | + ', '.join(m.user.username for m in missing) |
733 | + ) |
734 | agenda.delete() |
735 | except meeting.SchedulingError, e: |
736 | - print "Error: %s at %s in %s: %s" % (meeting, |
737 | - agenda.slot, |
738 | - agenda.room, |
739 | - e) |
740 | + print "Error: %s at %s in %s: %s" % ( |
741 | + meeting, |
742 | + agenda.slot, |
743 | + agenda.room, |
744 | + e |
745 | + ) |
746 | agenda.delete() |
747 | |
748 | def can_change_agenda(self, attendee): |
749 | |
750 | === modified file 'summit/schedule/tests.py' |
751 | --- summit/schedule/tests.py 2012-10-27 14:59:34 +0000 |
752 | +++ summit/schedule/tests.py 2013-02-20 17:36:21 +0000 |
753 | @@ -34,17 +34,19 @@ |
754 | from model_mommy import mommy as factory |
755 | from summit.schedule.fields import NameField |
756 | |
757 | -from summit.schedule.models import (Summit, |
758 | - Slot, |
759 | - Attendee, |
760 | - Meeting, |
761 | - Track, |
762 | - Room, |
763 | - Agenda, |
764 | - Participant, |
765 | - SummitSprint, |
766 | - Lead) |
767 | - |
768 | +from summit.schedule.models import ( |
769 | + Summit, |
770 | + Slot, |
771 | + Attendee, |
772 | + Meeting, |
773 | + Track, |
774 | + Room, |
775 | + Agenda, |
776 | + Participant, |
777 | + SummitSprint, |
778 | + Lead, |
779 | +) |
780 | + |
781 | from summit.schedule.render import Schedule |
782 | from summit.common import launchpad |
783 | |
784 | @@ -56,6 +58,7 @@ |
785 | site_root = getattr(settings, 'SITE_ROOT', 'http://summit.ubuntu.com') |
786 | theme_media = getattr(settings, 'THEME_MEDIA', 'ubuntu_website.MEDIA_ROOT') |
787 | |
788 | + |
789 | class RequestFactory(djangotest.Client): |
790 | """ |
791 | Class that lets you create mock Request objects for use in testing. |
792 | @@ -69,7 +72,7 @@ |
793 | This class re-uses the django.test.client.Client interface, docs here: |
794 | http://www.djangoproject.com/documentation/testing/#the-test-client |
795 | |
796 | - Once you have a request object you can pass it to any view function, |
797 | + Once you have a request object you can pass it to any view function, |
798 | just as if that view had been hooked up using a URLconf. |
799 | |
800 | """ |
801 | @@ -96,8 +99,11 @@ |
802 | handler.load_middleware() |
803 | for middleware_method in handler._request_middleware: |
804 | if middleware_method(request): |
805 | - raise Exception("Couldn't create request mock object - " |
806 | - "request middleware %s returned a response" % middleware_method) |
807 | + raise Exception( |
808 | + "Couldn't create request mock object - " |
809 | + "request middleware %s returned a response" |
810 | + % middleware_method |
811 | + ) |
812 | return request |
813 | |
814 | |
815 | @@ -122,7 +128,11 @@ |
816 | type='closed') |
817 | |
818 | agenda = factory.make_one(Agenda, slot=slot) |
819 | - meeting = factory.make_one(Meeting, requires_dial_in=False, private=False) |
820 | + meeting = factory.make_one( |
821 | + Meeting, |
822 | + requires_dial_in=False, |
823 | + private=False |
824 | + ) |
825 | |
826 | # XXX check_schedule should only be checking the schedule, not |
827 | # checking and modifying the schedule. |
828 | @@ -142,20 +152,44 @@ |
829 | room1 = factory.make_one(Room) |
830 | room2 = factory.make_one(Room) |
831 | |
832 | - meeting1 = factory.make_one(Meeting, summit=slot.summit, requires_dial_in=False, private=False) |
833 | - meeting2 = factory.make_one(Meeting, summit=slot.summit, requires_dial_in=False, private=False) |
834 | + meeting1 = factory.make_one( |
835 | + Meeting, |
836 | + summit=slot.summit, |
837 | + requires_dial_in=False, |
838 | + private=False |
839 | + ) |
840 | + meeting2 = factory.make_one( |
841 | + Meeting, |
842 | + summit=slot.summit, |
843 | + requires_dial_in=False, |
844 | + private=False |
845 | + ) |
846 | |
847 | attendee = factory.make_one(Attendee) |
848 | - factory.make_one(Participant, meeting=meeting1, attendee=attendee, participation = 'REQUIRED') |
849 | - factory.make_one(Participant, meeting=meeting2, attendee=attendee, participation = 'REQUIRED') |
850 | + factory.make_one( |
851 | + Participant, |
852 | + meeting=meeting1, |
853 | + attendee=attendee, |
854 | + participation='REQUIRED' |
855 | + ) |
856 | + factory.make_one( |
857 | + Participant, |
858 | + meeting=meeting2, |
859 | + attendee=attendee, |
860 | + participation='REQUIRED' |
861 | + ) |
862 | |
863 | factory.make_one(Agenda, meeting=meeting1, slot=slot, room=room1) |
864 | - agenda = factory.make_one(Agenda, meeting=meeting2, slot=slot, room=room2) |
865 | + agenda = factory.make_one( |
866 | + Agenda, |
867 | + meeting=meeting2, |
868 | + slot=slot, |
869 | + room=room2 |
870 | + ) |
871 | |
872 | missing = meeting2.check_schedule(agenda.slot, agenda.room) |
873 | self.assertEqual([attendee.name], [a.name for a in missing]) |
874 | |
875 | - |
876 | def make_open_slot(self): |
877 | now = datetime.datetime.utcnow() |
878 | one_hour = datetime.timedelta(0, 3600) |
879 | @@ -168,8 +202,19 @@ |
880 | |
881 | def test_check_schedule_errors_on_no_dial_in(self): |
882 | slot = self.make_open_slot() |
883 | - room = factory.make_one(Room, has_dial_in=False, summit=slot.summit, name="testroom") |
884 | - meeting = factory.make_one(Meeting, requires_dial_in=True, summit=slot.summit, name="testmeeting", private=False) |
885 | + room = factory.make_one( |
886 | + Room, |
887 | + has_dial_in=False, |
888 | + summit=slot.summit, |
889 | + name="testroom" |
890 | + ) |
891 | + meeting = factory.make_one( |
892 | + Meeting, |
893 | + requires_dial_in=True, |
894 | + summit=slot.summit, |
895 | + name="testmeeting", |
896 | + private=False |
897 | + ) |
898 | try: |
899 | meeting.check_schedule(slot, room) |
900 | except meeting.SchedulingError, e: |
901 | @@ -185,26 +230,51 @@ |
902 | Slot, |
903 | start_utc=now+one_hour, |
904 | end_utc=now+one_hour+one_hour, |
905 | - type='open', summit=summit) |
906 | + type='open', summit=summit |
907 | + ) |
908 | slot2 = factory.make_one( |
909 | Slot, |
910 | start_utc=now+one_hour+one_hour, |
911 | end_utc=now+one_hour+one_hour+one_hour, |
912 | - type='open', summit=summit) |
913 | + type='open', summit=summit |
914 | + ) |
915 | return slot1, slot2 |
916 | |
917 | def test_check_schedule_errors_on_same_track_in_previous_slot(self): |
918 | slot1, slot2 = self.make_two_adjacent_slots() |
919 | - room = factory.make_one(Room, summit=slot1.summit, |
920 | - name="testroom") |
921 | - track = factory.make_one(Track, summit=slot1.summit, |
922 | - title="testtrack", allow_adjacent_sessions=False) |
923 | - track2 = factory.make_one(Track, summit=slot1.summit, |
924 | - title="adjacenttrack", allow_adjacent_sessions=True) |
925 | - meeting1 = factory.make_one(Meeting, requires_dial_in=False, |
926 | - summit=slot1.summit, name="testmeeting1", type='blueprint', private=False) |
927 | - meeting2 = factory.make_one(Meeting, requires_dial_in=False, |
928 | - summit=slot1.summit, name="testmeeting2", type='blueprint', private=False) |
929 | + room = factory.make_one( |
930 | + Room, |
931 | + summit=slot1.summit, |
932 | + name="testroom" |
933 | + ) |
934 | + track = factory.make_one( |
935 | + Track, |
936 | + summit=slot1.summit, |
937 | + title="testtrack", |
938 | + allow_adjacent_sessions=False |
939 | + ) |
940 | + track2 = factory.make_one( |
941 | + Track, |
942 | + summit=slot1.summit, |
943 | + title="adjacenttrack", |
944 | + allow_adjacent_sessions=True |
945 | + ) |
946 | + meeting1 = factory.make_one( |
947 | + Meeting, |
948 | + requires_dial_in=False, |
949 | + summit=slot1.summit, |
950 | + name="testmeeting1", |
951 | + type='blueprint', |
952 | + private=False |
953 | + ) |
954 | + meeting2 = factory.make_one( |
955 | + Meeting, |
956 | + requires_dial_in=False, |
957 | + summit=slot1.summit, |
958 | + name="testmeeting2", |
959 | + type='blueprint', |
960 | + private=False |
961 | + ) |
962 | meeting1.tracks = [track, track2] |
963 | meeting2.tracks = [track] |
964 | meeting1.agenda_set.create(room=room, slot=slot1) |
965 | @@ -217,14 +287,29 @@ |
966 | |
967 | def test_check_schedule_errors_on_same_track_in_next_slot(self): |
968 | slot1, slot2 = self.make_two_adjacent_slots() |
969 | - room = factory.make_one(Room, summit=slot1.summit, |
970 | - name="testroom") |
971 | - track = factory.make_one(Track, summit=slot1.summit, |
972 | - title="testtrack", allow_adjacent_sessions=False) |
973 | - meeting1 = factory.make_one(Meeting, requires_dial_in=False, |
974 | - summit=slot1.summit, name="testmeeting1", type='blueprint', private=False) |
975 | - meeting2 = factory.make_one(Meeting, requires_dial_in=False, |
976 | - summit=slot1.summit, name="testmeeting2", type='blueprint', private=False) |
977 | + room = factory.make_one(Room, summit=slot1.summit, name="testroom") |
978 | + track = factory.make_one( |
979 | + Track, |
980 | + summit=slot1.summit, |
981 | + title="testtrack", |
982 | + allow_adjacent_sessions=False |
983 | + ) |
984 | + meeting1 = factory.make_one( |
985 | + Meeting, |
986 | + requires_dial_in=False, |
987 | + summit=slot1.summit, |
988 | + name="testmeeting1", |
989 | + type='blueprint', |
990 | + private=False |
991 | + ) |
992 | + meeting2 = factory.make_one( |
993 | + Meeting, |
994 | + requires_dial_in=False, |
995 | + summit=slot1.summit, |
996 | + name="testmeeting2", |
997 | + type='blueprint', |
998 | + private=False |
999 | + ) |
1000 | meeting1.tracks = [track] |
1001 | meeting2.tracks = [track] |
1002 | meeting1.agenda_set.create(room=room, slot=slot2) |
1003 | @@ -237,16 +322,35 @@ |
1004 | |
1005 | def test_check_schedule_no_error_on_different_track(self): |
1006 | slot1, slot2 = self.make_two_adjacent_slots() |
1007 | - room = factory.make_one(Room, summit=slot1.summit, |
1008 | - name="testroom") |
1009 | - track = factory.make_one(Track, summit=slot1.summit, |
1010 | - title="testtrack", allow_adjacent_sessions=False) |
1011 | - other_track = factory.make_one(Track, summit=slot1.summit, |
1012 | - title="othertesttrack", allow_adjacent_sessions=False) |
1013 | - meeting1 = factory.make_one(Meeting, requires_dial_in=False, |
1014 | - summit=slot1.summit, name="testmeeting1", type='blueprint', private=False) |
1015 | - meeting2 = factory.make_one(Meeting, requires_dial_in=False, |
1016 | - summit=slot1.summit, name="testmeeting2", type='blueprint', private=False) |
1017 | + room = factory.make_one(Room, summit=slot1.summit, name="testroom") |
1018 | + track = factory.make_one( |
1019 | + Track, |
1020 | + summit=slot1.summit, |
1021 | + title="testtrack", |
1022 | + allow_adjacent_sessions=False |
1023 | + ) |
1024 | + other_track = factory.make_one( |
1025 | + Track, |
1026 | + summit=slot1.summit, |
1027 | + title="othertesttrack", |
1028 | + allow_adjacent_sessions=False |
1029 | + ) |
1030 | + meeting1 = factory.make_one( |
1031 | + Meeting, |
1032 | + requires_dial_in=False, |
1033 | + summit=slot1.summit, |
1034 | + name="testmeeting1", |
1035 | + type='blueprint', |
1036 | + private=False |
1037 | + ) |
1038 | + meeting2 = factory.make_one( |
1039 | + Meeting, |
1040 | + requires_dial_in=False, |
1041 | + summit=slot1.summit, |
1042 | + name="testmeeting2", |
1043 | + type='blueprint', |
1044 | + private=False |
1045 | + ) |
1046 | meeting1.tracks = [track] |
1047 | meeting2.tracks = [other_track] |
1048 | meeting1.agenda_set.create(room=room, slot=slot2) |
1049 | @@ -254,14 +358,29 @@ |
1050 | |
1051 | def test_check_schedule_no_error_on_same_track_for_plenaries(self): |
1052 | slot1, slot2 = self.make_two_adjacent_slots() |
1053 | - room = factory.make_one(Room, summit=slot1.summit, |
1054 | - name="testroom") |
1055 | - track = factory.make_one(Track, summit=slot1.summit, |
1056 | - title="testtrack", allow_adjacent_sessions=False) |
1057 | - meeting1 = factory.make_one(Meeting, requires_dial_in=False, |
1058 | - summit=slot1.summit, name="testmeeting1", type='blueprint', private=False) |
1059 | - meeting2 = factory.make_one(Meeting, requires_dial_in=False, |
1060 | - summit=slot1.summit, name="testmeeting2", type='plenary', private=False) |
1061 | + room = factory.make_one(Room, summit=slot1.summit, name="testroom") |
1062 | + track = factory.make_one( |
1063 | + Track, |
1064 | + summit=slot1.summit, |
1065 | + title="testtrack", |
1066 | + allow_adjacent_sessions=False |
1067 | + ) |
1068 | + meeting1 = factory.make_one( |
1069 | + Meeting, |
1070 | + requires_dial_in=False, |
1071 | + summit=slot1.summit, |
1072 | + name="testmeeting1", |
1073 | + type='blueprint', |
1074 | + private=False |
1075 | + ) |
1076 | + meeting2 = factory.make_one( |
1077 | + Meeting, |
1078 | + requires_dial_in=False, |
1079 | + summit=slot1.summit, |
1080 | + name="testmeeting2", |
1081 | + type='plenary', |
1082 | + private=False |
1083 | + ) |
1084 | meeting1.tracks = [track] |
1085 | meeting2.tracks = [track] |
1086 | meeting1.agenda_set.create(room=room, slot=slot2) |
1087 | @@ -269,14 +388,29 @@ |
1088 | |
1089 | def test_check_schedule_no_error_on_same_track_for_ajdacent_sessions_allowed(self): |
1090 | slot1, slot2 = self.make_two_adjacent_slots() |
1091 | - room = factory.make_one(Room, summit=slot1.summit, |
1092 | - name="testroom") |
1093 | - track = factory.make_one(Track, summit=slot1.summit, |
1094 | - title="adjacenttrack", allow_adjacent_sessions=True) |
1095 | - meeting1 = factory.make_one(Meeting, requires_dial_in=False, |
1096 | - summit=slot1.summit, name="testmeeting1", type='blueprint', private=False) |
1097 | - meeting2 = factory.make_one(Meeting, requires_dial_in=False, |
1098 | - summit=slot1.summit, name="testmeeting2", type='blueprint', private=False) |
1099 | + room = factory.make_one(Room, summit=slot1.summit, name="testroom") |
1100 | + track = factory.make_one( |
1101 | + Track, |
1102 | + summit=slot1.summit, |
1103 | + title="adjacenttrack", |
1104 | + allow_adjacent_sessions=True |
1105 | + ) |
1106 | + meeting1 = factory.make_one( |
1107 | + Meeting, |
1108 | + requires_dial_in=False, |
1109 | + summit=slot1.summit, |
1110 | + name="testmeeting1", |
1111 | + type='blueprint', |
1112 | + private=False |
1113 | + ) |
1114 | + meeting2 = factory.make_one( |
1115 | + Meeting, |
1116 | + requires_dial_in=False, |
1117 | + summit=slot1.summit, |
1118 | + name="testmeeting2", |
1119 | + type='blueprint', |
1120 | + private=False |
1121 | + ) |
1122 | meeting1.tracks = [track] |
1123 | meeting2.tracks = [track] |
1124 | meeting1.agenda_set.create(room=room, slot=slot2) |
1125 | @@ -284,16 +418,38 @@ |
1126 | |
1127 | def test_try_schedule_into_refuses_room_without_dial_in(self): |
1128 | slot = self.make_open_slot() |
1129 | - room = factory.make_one(Room, has_dial_in=False, summit=slot.summit, name="testroom") |
1130 | - meeting = factory.make_one(Meeting, requires_dial_in=True, summit=slot.summit, name="testmeeting", private=False) |
1131 | + room = factory.make_one( |
1132 | + Room, |
1133 | + has_dial_in=False, |
1134 | + summit=slot.summit, |
1135 | + name="testroom" |
1136 | + ) |
1137 | + meeting = factory.make_one( |
1138 | + Meeting, |
1139 | + requires_dial_in=True, |
1140 | + summit=slot.summit, |
1141 | + name="testmeeting", |
1142 | + private=False |
1143 | + ) |
1144 | |
1145 | self.assertEqual(False, meeting.try_schedule_into([room])) |
1146 | self.assertEqual(0, meeting.agenda_set.all().count()) |
1147 | |
1148 | def test_try_schedule_into_allows_room_with_dial_in(self): |
1149 | slot = self.make_open_slot() |
1150 | - room = factory.make_one(Room, has_dial_in=True, summit=slot.summit, name="testroom") |
1151 | - meeting = factory.make_one(Meeting, requires_dial_in=True, summit=slot.summit, name="testmeeting", private=False) |
1152 | + room = factory.make_one( |
1153 | + Room, |
1154 | + has_dial_in=True, |
1155 | + summit=slot.summit, |
1156 | + name="testroom" |
1157 | + ) |
1158 | + meeting = factory.make_one( |
1159 | + Meeting, |
1160 | + requires_dial_in=True, |
1161 | + summit=slot.summit, |
1162 | + name="testmeeting", |
1163 | + private=False |
1164 | + ) |
1165 | |
1166 | self.assertEqual(True, meeting.try_schedule_into([room])) |
1167 | self.assertEqual(1, meeting.agenda_set.all().count()) |
1168 | @@ -312,8 +468,13 @@ |
1169 | summit_name = 'testsummit' |
1170 | summit = factory.make_one(Summit, name=summit_name) |
1171 | name = 'testmeeting' |
1172 | - meeting = factory.make_one(Meeting, pad_url=None, name=name, |
1173 | - summit=summit, private=False) |
1174 | + meeting = factory.make_one( |
1175 | + Meeting, |
1176 | + pad_url=None, |
1177 | + name=name, |
1178 | + summit=summit, |
1179 | + private=False |
1180 | + ) |
1181 | pad_host = self.get_pad_host() |
1182 | url = pad_host + summit_name + '-' + name |
1183 | self.assertEqual(url, meeting.link_to_pad) |
1184 | @@ -322,8 +483,13 @@ |
1185 | summit_name = 'testsummit' |
1186 | summit = factory.make_one(Summit, name=summit_name) |
1187 | name = 'test+meeting' |
1188 | - meeting = factory.make_one(Meeting, pad_url=None, name=name, |
1189 | - summit=summit, private=False) |
1190 | + meeting = factory.make_one( |
1191 | + Meeting, |
1192 | + pad_url=None, |
1193 | + name=name, |
1194 | + summit=summit, |
1195 | + private=False |
1196 | + ) |
1197 | pad_host = self.get_pad_host() |
1198 | url = pad_host + summit_name + '-' + name.replace("+", "-") |
1199 | self.assertEqual(url, meeting.link_to_pad) |
1200 | @@ -337,8 +503,13 @@ |
1201 | summit_name = 'testsummit' |
1202 | summit = factory.make_one(Summit, name=summit_name) |
1203 | name = 'testmeeting' |
1204 | - meeting = factory.make_one(Meeting, pad_url=None, name=name, |
1205 | - summit=summit, private=False) |
1206 | + meeting = factory.make_one( |
1207 | + Meeting, |
1208 | + pad_url=None, |
1209 | + name=name, |
1210 | + summit=summit, |
1211 | + private=False |
1212 | + ) |
1213 | pad_host = self.get_pad_host() |
1214 | url = pad_host + "ep/pad/view/" + summit_name + '-' + name + "/latest" |
1215 | self.assertEqual(url, meeting.edit_link_to_pad) |
1216 | @@ -347,53 +518,120 @@ |
1217 | summit_name = 'testsummit' |
1218 | summit = factory.make_one(Summit, name=summit_name) |
1219 | name = 'test+meeting' |
1220 | - meeting = factory.make_one(Meeting, pad_url=None, name=name, |
1221 | - summit=summit, private=False) |
1222 | + meeting = factory.make_one( |
1223 | + Meeting, |
1224 | + pad_url=None, |
1225 | + name=name, |
1226 | + summit=summit, |
1227 | + private=False |
1228 | + ) |
1229 | pad_host = self.get_pad_host() |
1230 | - url = (pad_host + "ep/pad/view/" + summit_name |
1231 | - + '-' + name.replace("+", "-") + "/latest") |
1232 | + url = ( |
1233 | + pad_host |
1234 | + + "ep/pad/view/" |
1235 | + + summit_name |
1236 | + + '-' |
1237 | + + name.replace("+", "-") |
1238 | + + "/latest" |
1239 | + ) |
1240 | self.assertEqual(url, meeting.edit_link_to_pad) |
1241 | |
1242 | def test_update_from_launchpad_sets_status(self): |
1243 | - meeting = Meeting() |
1244 | + summit = factory.make_one(Summit, timezone='utc', name='test-summit') |
1245 | + meeting = factory.make_one( |
1246 | + Meeting, |
1247 | + pad_url=None, |
1248 | + name='test-meeting', |
1249 | + summit=summit, |
1250 | + private=False |
1251 | + ) |
1252 | status = "Discussion" |
1253 | - elem = LaunchpadExportNode(status=status) |
1254 | + name = meeting.name |
1255 | + elem = LaunchpadExportNode(status=status, name=name) |
1256 | meeting.update_from_launchpad(elem) |
1257 | self.assertEqual(status, meeting.status) |
1258 | |
1259 | def test_update_from_launchpad_sets_priority(self): |
1260 | - meeting = Meeting() |
1261 | + summit = factory.make_one(Summit, timezone='utc', name='test-summit') |
1262 | + meeting = factory.make_one( |
1263 | + Meeting, |
1264 | + pad_url=None, |
1265 | + name='test-meeting', |
1266 | + summit=summit, |
1267 | + private=False |
1268 | + ) |
1269 | priority = 70 |
1270 | - elem = LaunchpadExportNode(priority=priority) |
1271 | + name = meeting.name |
1272 | + elem = LaunchpadExportNode(priority=priority, name=name) |
1273 | meeting.update_from_launchpad(elem) |
1274 | self.assertEqual(priority, meeting.priority) |
1275 | |
1276 | def test_update_from_launchpad_sets_wiki_url(self): |
1277 | - meeting = Meeting() |
1278 | + summit = factory.make_one(Summit, timezone='utc', name='test-summit') |
1279 | + meeting = factory.make_one( |
1280 | + Meeting, |
1281 | + pad_url=None, |
1282 | + name='test-meeting', |
1283 | + summit=summit, |
1284 | + private=False |
1285 | + ) |
1286 | wiki_url = "http://example.com/somespec" |
1287 | - elem = LaunchpadExportNode(specurl=wiki_url) |
1288 | + name = meeting.name |
1289 | + elem = LaunchpadExportNode(specurl=wiki_url, name=name) |
1290 | meeting.update_from_launchpad(elem) |
1291 | self.assertEqual(wiki_url, meeting.wiki_url) |
1292 | |
1293 | def get_person_node(self, username, required=False): |
1294 | elem = LaunchpadExportNode() |
1295 | required_map = {True: "True", False: "False"} |
1296 | - elem.add_child("person", |
1297 | - LaunchpadExportNode(name=username, |
1298 | - required=required_map[required])) |
1299 | + elem.add_child( |
1300 | + "person", |
1301 | + LaunchpadExportNode( |
1302 | + name=username, |
1303 | + required=required_map[required] |
1304 | + ) |
1305 | + ) |
1306 | return elem |
1307 | |
1308 | + def make_one_future_slot(self, summit=None): |
1309 | + if summit is None: |
1310 | + summit = factory.make_one(Summit) |
1311 | + now = datetime.datetime.utcnow() |
1312 | + one_hour = datetime.timedelta(hours=1) |
1313 | + return factory.make_one( |
1314 | + Slot, |
1315 | + summit=summit, |
1316 | + start=now+one_hour, |
1317 | + end=now+one_hour+one_hour, |
1318 | + type='open' |
1319 | + ) |
1320 | + |
1321 | def make_summit_and_attendee(self): |
1322 | username = "username" |
1323 | user = factory.make_one(User, username=username) |
1324 | summit = factory.make_one(Summit) |
1325 | - attendee = summit.attendee_set.create(user=user) |
1326 | + slot = self.make_one_future_slot(summit=summit) |
1327 | + attendee = summit.attendee_set.create( |
1328 | + user=user, |
1329 | + start_utc=slot.start_utc, |
1330 | + end_utc=slot.end_utc |
1331 | + ) |
1332 | return summit, attendee |
1333 | |
1334 | def test_update_from_launchpad_adds_participant(self): |
1335 | summit, attendee = self.make_summit_and_attendee() |
1336 | - meeting = summit.meeting_set.create() |
1337 | - elem = self.get_person_node(attendee.user.username, required=False) |
1338 | + meeting = factory.make_one( |
1339 | + Meeting, |
1340 | + pad_url=None, |
1341 | + name='test-meeting', |
1342 | + summit=summit, |
1343 | + private=False |
1344 | + ) |
1345 | + name = meeting.name |
1346 | + elem = self.get_person_node( |
1347 | + attendee.user.username, |
1348 | + required=False, |
1349 | + ) |
1350 | meeting.update_from_launchpad(elem) |
1351 | participant = meeting.participant_set.get() |
1352 | self.assertEqual(attendee, participant.attendee) |
1353 | @@ -401,8 +639,18 @@ |
1354 | |
1355 | def test_update_from_launchpad_sets_participant_essential(self): |
1356 | summit, attendee = self.make_summit_and_attendee() |
1357 | - meeting = summit.meeting_set.create() |
1358 | - elem = self.get_person_node(attendee.user.username, required=True) |
1359 | + meeting = factory.make_one( |
1360 | + Meeting, |
1361 | + pad_url=None, |
1362 | + name='test-meeting', |
1363 | + summit=summit, |
1364 | + private=False |
1365 | + ) |
1366 | + name = meeting.name |
1367 | + elem = self.get_person_node( |
1368 | + attendee.user.username, |
1369 | + required=True, |
1370 | + ) |
1371 | meeting.update_from_launchpad(elem) |
1372 | participant = meeting.participant_set.get() |
1373 | self.assertEqual('INTERESTED', participant.participation) |
1374 | @@ -421,9 +669,14 @@ |
1375 | elem = self.get_person_node(attendee.user.username) |
1376 | otheruser = factory.make_one(User, username="otheruser") |
1377 | otherattendee = summit.attendee_set.create(user=otheruser) |
1378 | - meeting.participant_set.create(attendee=otherattendee, from_launchpad=True) |
1379 | + meeting.participant_set.create( |
1380 | + attendee=otherattendee, |
1381 | + from_launchpad=True |
1382 | + ) |
1383 | meeting.update_from_launchpad(elem) |
1384 | - usernames = [p.attendee.user.username for p in meeting.participant_set.all()] |
1385 | + usernames = [ |
1386 | + p.attendee.user.username for p in meeting.participant_set.all() |
1387 | + ] |
1388 | self.assertEqual(["username"], usernames) |
1389 | |
1390 | |
1391 | @@ -440,20 +693,38 @@ |
1392 | start_utc=now, |
1393 | end_utc=now+one_hour, |
1394 | type='open', |
1395 | - summit=summit) |
1396 | + summit=summit |
1397 | + ) |
1398 | slot.save() |
1399 | - |
1400 | + |
1401 | room = factory.make_one(Room, summit=summit) |
1402 | - meeting = factory.make_one(Meeting, summit=summit, name='', private=False) |
1403 | + meeting = factory.make_one( |
1404 | + Meeting, |
1405 | + summit=summit, |
1406 | + name='', |
1407 | + private=False |
1408 | + ) |
1409 | meeting.name = '' |
1410 | models.Model.save(meeting) |
1411 | - agenda = factory.make_one(Agenda, slot=slot, meeting=meeting, room=room) |
1412 | - |
1413 | - self.assertEquals(meeting.meeting_page_url, '/uds-test/meeting/%s/-/' % meeting.id) |
1414 | - |
1415 | + agenda = factory.make_one( |
1416 | + Agenda, |
1417 | + slot=slot, |
1418 | + meeting=meeting, |
1419 | + room=room |
1420 | + ) |
1421 | + |
1422 | + self.assertEquals( |
1423 | + meeting.meeting_page_url, |
1424 | + '/uds-test/meeting/%s/-/' % meeting.id |
1425 | + ) |
1426 | + |
1427 | response = self.client.get('/uds-test.ical') |
1428 | self.assertEquals(response.status_code, 200) |
1429 | - self.assertContains(response, 'URL:%s/uds-test/meeting/%s/-/\n' % (site_root, meeting.id), 1) |
1430 | + self.assertContains( |
1431 | + response, |
1432 | + 'URL:%s/uds-test/meeting/%s/-/\n' % (site_root, meeting.id), |
1433 | + 1 |
1434 | + ) |
1435 | |
1436 | def test_ical_meeting_name_with_period(self): |
1437 | """ Tests that ical doesn't break for nameless meetings""" |
1438 | @@ -466,19 +737,37 @@ |
1439 | start_utc=now, |
1440 | end_utc=now+one_hour, |
1441 | type='open', |
1442 | - summit=summit) |
1443 | + summit=summit |
1444 | + ) |
1445 | slot.save() |
1446 | - |
1447 | + |
1448 | room = factory.make_one(Room, summit=summit) |
1449 | - meeting = factory.make_one(Meeting, summit=summit, name='test.name', private=False) |
1450 | - agenda = factory.make_one(Agenda, slot=slot, meeting=meeting, room=room) |
1451 | - |
1452 | - self.assertEquals(meeting.meeting_page_url, '/uds-test/meeting/%s/test.name/' % meeting.id) |
1453 | - |
1454 | + meeting = factory.make_one( |
1455 | + Meeting, |
1456 | + summit=summit, |
1457 | + name='test.name', |
1458 | + private=False |
1459 | + ) |
1460 | + agenda = factory.make_one( |
1461 | + Agenda, |
1462 | + slot=slot, |
1463 | + meeting=meeting, |
1464 | + room=room |
1465 | + ) |
1466 | + |
1467 | + self.assertEquals( |
1468 | + meeting.meeting_page_url, |
1469 | + '/uds-test/meeting/%s/test.name/' % meeting.id |
1470 | + ) |
1471 | + |
1472 | response = self.client.get('/uds-test.ical') |
1473 | self.assertEquals(response.status_code, 200) |
1474 | - self.assertContains(response, 'URL:%s/uds-test/meeting/%s/test.name/' % (site_root, meeting.id), 1) |
1475 | - |
1476 | + self.assertContains( |
1477 | + response, |
1478 | + 'URL:%s/uds-test/meeting/%s/test.name/' % (site_root, meeting.id), |
1479 | + 1 |
1480 | + ) |
1481 | + |
1482 | def test_ical_meeting_multiline_description(self): |
1483 | """ Tests that ical put spaces before multi-line descriptions""" |
1484 | now = datetime.datetime.utcnow() |
1485 | @@ -490,19 +779,34 @@ |
1486 | start_utc=now, |
1487 | end_utc=now+one_hour, |
1488 | type='open', |
1489 | - summit=summit) |
1490 | + summit=summit |
1491 | + ) |
1492 | slot.save() |
1493 | - |
1494 | + |
1495 | room = factory.make_one(Room, summit=summit) |
1496 | - meeting = factory.make_one(Meeting, summit=summit, name='test.name', description="Test\r\nDescription", private=False) |
1497 | - agenda = factory.make_one(Agenda, slot=slot, meeting=meeting, room=room) |
1498 | - |
1499 | - self.assertEquals(meeting.meeting_page_url, '/uds-test/meeting/%s/test.name/' % meeting.id) |
1500 | - |
1501 | + meeting = factory.make_one( |
1502 | + Meeting, |
1503 | + summit=summit, |
1504 | + name='test.name', |
1505 | + description="Test\r\nDescription", |
1506 | + private=False |
1507 | + ) |
1508 | + agenda = factory.make_one( |
1509 | + Agenda, |
1510 | + slot=slot, |
1511 | + meeting=meeting, |
1512 | + room=room |
1513 | + ) |
1514 | + |
1515 | + self.assertEquals( |
1516 | + meeting.meeting_page_url, |
1517 | + '/uds-test/meeting/%s/test.name/' % meeting.id |
1518 | + ) |
1519 | + |
1520 | response = self.client.get('/uds-test.ical') |
1521 | self.assertEquals(response.status_code, 200) |
1522 | self.assertContains(response, 'DESCRIPTION:Test\NDescription', 1) |
1523 | - |
1524 | + |
1525 | def test_private_ical(self): |
1526 | """ Tests that private icals contain private meetings """ |
1527 | now = datetime.datetime.utcnow() |
1528 | @@ -514,21 +818,57 @@ |
1529 | start_utc=now, |
1530 | end_utc=now+one_hour, |
1531 | type='open', |
1532 | - summit=summit) |
1533 | - |
1534 | + summit=summit |
1535 | + ) |
1536 | + |
1537 | room = factory.make_one(Room, summit=summit) |
1538 | - meeting = factory.make_one(Meeting, summit=summit, name='test.name', private=True) |
1539 | - agenda = factory.make_one(Agenda, slot=slot, meeting=meeting, room=room) |
1540 | - |
1541 | - self.assertEquals(meeting.meeting_page_url, '/uds-test/meeting/%s/test.name/' % meeting.id) |
1542 | - |
1543 | - user = factory.make_one(User, username='testuser', first_name='Test', last_name='User') |
1544 | - attendee = factory.make_one(Attendee, summit=summit, user=user, start_utc=now, end_utc=now+week) |
1545 | - participant = factory.make_one(Participant, attendee=attendee, meeting=meeting) |
1546 | - |
1547 | - response = self.client.get('/uds-test/participant/my_schedule_%s.ical' % attendee.secret_key) |
1548 | + meeting = factory.make_one( |
1549 | + Meeting, |
1550 | + summit=summit, |
1551 | + name='test.name', |
1552 | + private=True |
1553 | + ) |
1554 | + agenda = factory.make_one( |
1555 | + Agenda, |
1556 | + slot=slot, |
1557 | + meeting=meeting, |
1558 | + room=room |
1559 | + ) |
1560 | + |
1561 | + self.assertEquals( |
1562 | + meeting.meeting_page_url, |
1563 | + '/uds-test/meeting/%s/test.name/' % meeting.id |
1564 | + ) |
1565 | + |
1566 | + user = factory.make_one( |
1567 | + User, |
1568 | + username='testuser', |
1569 | + first_name='Test', |
1570 | + last_name='User' |
1571 | + ) |
1572 | + attendee = factory.make_one( |
1573 | + Attendee, |
1574 | + summit=summit, |
1575 | + user=user, |
1576 | + start_utc=now, |
1577 | + end_utc=now+week |
1578 | + ) |
1579 | + participant = factory.make_one( |
1580 | + Participant, |
1581 | + attendee=attendee, |
1582 | + meeting=meeting |
1583 | + ) |
1584 | + |
1585 | + response = self.client.get( |
1586 | + '/uds-test/participant/my_schedule_%s.ical' % attendee.secret_key |
1587 | + ) |
1588 | self.assertEquals(response.status_code, 200) |
1589 | - self.assertContains(response, 'URL:%s/uds-test/meeting/%s/test.name/' % (site_root, meeting.id), 1) |
1590 | + self.assertContains( |
1591 | + response, |
1592 | + 'URL:%s/uds-test/meeting/%s/test.name/' % (site_root, meeting.id), |
1593 | + 1 |
1594 | + ) |
1595 | + |
1596 | |
1597 | class MeetingPageTestCase(djangotest.TestCase): |
1598 | |
1599 | @@ -543,21 +883,38 @@ |
1600 | start_utc=now, |
1601 | end_utc=now+one_hour, |
1602 | type='open', |
1603 | - summit=summit) |
1604 | + summit=summit |
1605 | + ) |
1606 | slot.save() |
1607 | - |
1608 | + |
1609 | room = factory.make_one(Room, summit=summit) |
1610 | - meeting = factory.make_one(Meeting, summit=summit, name='test-meeting', private=False) |
1611 | - agenda = factory.make_one(Agenda, slot=slot, meeting=meeting, room=room) |
1612 | + meeting = factory.make_one( |
1613 | + Meeting, |
1614 | + summit=summit, |
1615 | + name='test-meeting', |
1616 | + private=False |
1617 | + ) |
1618 | + agenda = factory.make_one( |
1619 | + Agenda, |
1620 | + slot=slot, |
1621 | + meeting=meeting, |
1622 | + room=room |
1623 | + ) |
1624 | |
1625 | # check meeting page url generation |
1626 | - self.assertEquals(meeting.meeting_page_url, '/uds-test/meeting/%s/test-meeting/' % meeting.id) |
1627 | - |
1628 | + self.assertEquals( |
1629 | + meeting.meeting_page_url, |
1630 | + '/uds-test/meeting/%s/test-meeting/' % meeting.id |
1631 | + ) |
1632 | + |
1633 | # check meeting page url reverse lookup |
1634 | - rev_args = ['uds-test', 1, 'test-meeting'] |
1635 | + rev_args = ['uds-test', meeting.id, 'test-meeting'] |
1636 | reverse_url = reverse('summit.schedule.views.meeting', args=rev_args) |
1637 | - self.assertEquals(reverse_url, '/uds-test/meeting/%s/test-meeting/' % meeting.id) |
1638 | - |
1639 | + self.assertEquals( |
1640 | + reverse_url, |
1641 | + '/uds-test/meeting/%s/test-meeting/' % meeting.id |
1642 | + ) |
1643 | + |
1644 | # check meeting details page |
1645 | response = self.client.get(reverse_url) |
1646 | self.assertEquals(response.status_code, 200) |
1647 | @@ -565,7 +922,14 @@ |
1648 | # check meeting in ical |
1649 | response = self.client.get('/uds-test.ical') |
1650 | self.assertEquals(response.status_code, 200) |
1651 | - self.assertContains(response, 'URL:%s/uds-test/meeting/%s/test-meeting/' % (site_root, meeting.id), 1) |
1652 | + self.assertContains( |
1653 | + response, |
1654 | + 'URL:%s/uds-test/meeting/%s/test-meeting/' % ( |
1655 | + site_root, |
1656 | + meeting.id |
1657 | + ), |
1658 | + 1 |
1659 | + ) |
1660 | |
1661 | |
1662 | class ParticipationRegistrationTestCase(djangotest.TestCase): |
1663 | @@ -580,61 +944,157 @@ |
1664 | start_utc=now+one_hour, |
1665 | end_utc=now+(2*one_hour), |
1666 | type='open', |
1667 | - summit=self.summit) |
1668 | - |
1669 | + summit=self.summit |
1670 | + ) |
1671 | + |
1672 | self.room = factory.make_one(Room, summit=self.summit, type='open') |
1673 | - self.meeting = factory.make_one(Meeting, summit=self.summit, name='meeting1', private=False, requires_dial_in=False, spec_url=None) |
1674 | + self.meeting = factory.make_one( |
1675 | + Meeting, |
1676 | + summit=self.summit, |
1677 | + name='meeting1', |
1678 | + private=False, |
1679 | + requires_dial_in=False, |
1680 | + spec_url='' |
1681 | + ) |
1682 | |
1683 | - self.user = factory.make_one(User, username='testuser', first_name='Test', last_name='User', is_active=True) |
1684 | + self.user = factory.make_one( |
1685 | + User, |
1686 | + username='testuser', |
1687 | + first_name='Test', |
1688 | + last_name='User', |
1689 | + is_active=True |
1690 | + ) |
1691 | self.user.set_password('password') |
1692 | self.user.save() |
1693 | |
1694 | - self.attendee = factory.make_one(Attendee, summit=self.summit, user=self.user, start_utc=now, end_utc=now+week) |
1695 | - |
1696 | + self.attendee = factory.make_one( |
1697 | + Attendee, |
1698 | + summit=self.summit, |
1699 | + user=self.user, |
1700 | + start_utc=now, |
1701 | + end_utc=now+week |
1702 | + ) |
1703 | + |
1704 | + def tearDown(self): |
1705 | + pass |
1706 | + |
1707 | def login(self): |
1708 | logged_in = self.client.login(username='testuser', password='password') |
1709 | self.assertTrue(logged_in) |
1710 | - |
1711 | + |
1712 | def test_attend_link(self): |
1713 | - self.assertEquals(0, Participant.objects.filter(attendee=self.attendee).count()) |
1714 | + self.assertEquals( |
1715 | + 0, |
1716 | + Participant.objects.filter( |
1717 | + attendee=self.attendee |
1718 | + ).count() |
1719 | + ) |
1720 | self.login() |
1721 | - response = self.client.get(reverse('summit.schedule.views.meeting', args=('uds-test', self.meeting.id, 'meeting1'))) |
1722 | + response = self.client.get( |
1723 | + reverse( |
1724 | + 'summit.schedule.views.meeting', |
1725 | + args=('uds-test', self.meeting.id, 'meeting1') |
1726 | + ) |
1727 | + ) |
1728 | self.assertContains(response, 'Attend this meeting', 1) |
1729 | self.assertContains(response, 'Subscribe to this meeting', 0) |
1730 | self.assertContains(response, 'Skip this meeting', 0) |
1731 | |
1732 | def test_subscribe_link(self): |
1733 | - self.assertEquals(0, Participant.objects.filter(attendee=self.attendee).count()) |
1734 | + self.assertEquals( |
1735 | + 0, |
1736 | + Participant.objects.filter( |
1737 | + attendee=self.attendee |
1738 | + ).count() |
1739 | + ) |
1740 | self.login() |
1741 | self.meeting.spec_url = 'http://examplespec.com/test' |
1742 | self.meeting.save() |
1743 | - response = self.client.get(reverse('summit.schedule.views.meeting', args=('uds-test', self.meeting.id, 'meeting1'))) |
1744 | + response = self.client.get( |
1745 | + reverse( |
1746 | + 'summit.schedule.views.meeting', |
1747 | + args=('uds-test', self.meeting.id, 'meeting1') |
1748 | + ) |
1749 | + ) |
1750 | self.assertContains(response, 'Subscribe to blueprint', 1) |
1751 | - self.assertContains(response, 'http://examplespec.com/test/+subscribe', 1) |
1752 | + self.assertContains( |
1753 | + response, |
1754 | + 'http://examplespec.com/test/+subscribe', |
1755 | + 1 |
1756 | + ) |
1757 | self.assertContains(response, 'Attend this meeting', 1) |
1758 | self.assertContains(response, 'Skip this meeting', 0) |
1759 | |
1760 | def test_skip_link(self): |
1761 | - self.meeting.participant_set.create(attendee=self.attendee, participation = 'ATTENDING', from_launchpad=False) |
1762 | - self.assertEquals(1, Participant.objects.filter(attendee=self.attendee).count()) |
1763 | + self.meeting.participant_set.create( |
1764 | + attendee=self.attendee, |
1765 | + participation='ATTENDING', |
1766 | + from_launchpad=False |
1767 | + ) |
1768 | + self.assertEquals( |
1769 | + 1, |
1770 | + Participant.objects.filter( |
1771 | + attendee=self.attendee |
1772 | + ).count() |
1773 | + ) |
1774 | self.login() |
1775 | - response = self.client.get(reverse('summit.schedule.views.meeting', args=('uds-test', self.meeting.id, 'meeting1'))) |
1776 | + response = self.client.get( |
1777 | + reverse( |
1778 | + 'summit.schedule.views.meeting', |
1779 | + args=('uds-test', self.meeting.id, 'meeting1') |
1780 | + ) |
1781 | + ) |
1782 | self.assertContains(response, 'Skip this meeting', 1) |
1783 | self.assertContains(response, 'Subscribe to this meeting', 0) |
1784 | self.assertContains(response, 'Attend this meeting', 0) |
1785 | |
1786 | def test_add_participation(self): |
1787 | - self.assertEquals(0, Participant.objects.filter(attendee=self.attendee).count()) |
1788 | + self.assertEquals( |
1789 | + 0, |
1790 | + Participant.objects.filter( |
1791 | + attendee=self.attendee |
1792 | + ).count() |
1793 | + ) |
1794 | self.login() |
1795 | - response = self.client.get(reverse('summit.schedule.views.register', args=('uds-test', self.meeting.id, 'meeting1'))) |
1796 | - self.assertEquals(1, Participant.objects.filter(attendee=self.attendee).count()) |
1797 | + response = self.client.get( |
1798 | + reverse( |
1799 | + 'summit.schedule.views.register', |
1800 | + args=('uds-test', self.meeting.id, 'meeting1') |
1801 | + ) |
1802 | + ) |
1803 | + self.assertEquals( |
1804 | + 1, |
1805 | + Participant.objects.filter( |
1806 | + attendee=self.attendee |
1807 | + ).count() |
1808 | + ) |
1809 | |
1810 | def test_delete_participation(self): |
1811 | - self.meeting.participant_set.create(attendee=self.attendee, participation = 'ATTENDING', from_launchpad=False) |
1812 | - self.assertEquals(1, Participant.objects.filter(attendee=self.attendee).count()) |
1813 | + self.meeting.participant_set.create( |
1814 | + attendee=self.attendee, |
1815 | + participation='ATTENDING', |
1816 | + from_launchpad=False |
1817 | + ) |
1818 | + self.assertEquals( |
1819 | + 1, |
1820 | + Participant.objects.filter( |
1821 | + attendee=self.attendee |
1822 | + ).count() |
1823 | + ) |
1824 | self.login() |
1825 | - response = self.client.get(reverse('summit.schedule.views.unregister', args=('uds-test', self.meeting.id, 'meeting1'))) |
1826 | - self.assertEquals(0, Participant.objects.filter(attendee=self.attendee).count()) |
1827 | + response = self.client.get( |
1828 | + reverse( |
1829 | + 'summit.schedule.views.unregister', |
1830 | + args=('uds-test', self.meeting.id, 'meeting1') |
1831 | + ) |
1832 | + ) |
1833 | + self.assertEquals( |
1834 | + 0, |
1835 | + Participant.objects.filter( |
1836 | + attendee=self.attendee |
1837 | + ).count() |
1838 | + ) |
1839 | + |
1840 | |
1841 | class ReverseUrlLookupTestCase(djangotest.TestCase): |
1842 | |
1843 | @@ -648,19 +1108,30 @@ |
1844 | start_utc=now, |
1845 | end_utc=now+one_hour, |
1846 | type='open', |
1847 | - summit=self.summit) |
1848 | + summit=self.summit |
1849 | + ) |
1850 | self.slot.save() |
1851 | - |
1852 | + |
1853 | + def tearDown(self): |
1854 | + pass |
1855 | + |
1856 | def test_meeting_name_with_period(self): |
1857 | ''' Test the following Meeting urlconf |
1858 | (r'^(?P<summit_name>[\w-]+)/meeting/(?P<meeting_id>\d+)/(?P<meeting_slug>[\.\w-]+)/$', 'meeting'), |
1859 | ''' |
1860 | - meeting = factory.make_one(Meeting, summit=self.summit, name='test.meeting', private=False) |
1861 | - |
1862 | + meeting = factory.make_one( |
1863 | + Meeting, |
1864 | + summit=self.summit, |
1865 | + name='test.meeting', |
1866 | + private=False |
1867 | + ) |
1868 | + |
1869 | rev_args = ['uds-test', meeting.id, 'test.meeting'] |
1870 | reverse_url = reverse('summit.schedule.views.meeting', args=rev_args) |
1871 | - self.assertEquals(reverse_url, '/uds-test/meeting/%s/test.meeting/' % meeting.id) |
1872 | - |
1873 | + self.assertEquals( |
1874 | + reverse_url, |
1875 | + '/uds-test/meeting/%s/test.meeting/' % meeting.id |
1876 | + ) |
1877 | |
1878 | def test_room_name_with_period(self): |
1879 | ''' Test the following Room urlconfs |
1880 | @@ -687,9 +1158,12 @@ |
1881 | reverse_url = reverse('summit.schedule.views.by_track', args=rev_args) |
1882 | self.assertEquals(reverse_url, '/uds-test/track/test.track/') |
1883 | |
1884 | - reverse_url = reverse('summit.schedule.views.track_ical', args=rev_args) |
1885 | + reverse_url = reverse( |
1886 | + 'summit.schedule.views.track_ical', |
1887 | + args=rev_args |
1888 | + ) |
1889 | self.assertEquals(reverse_url, '/uds-test/track/test.track.ical') |
1890 | - |
1891 | + |
1892 | def test_participant_name_with_period(self): |
1893 | ''' Test the following User urlconf |
1894 | (r'^(?P<summit_name>[\w-]+)/participant/(?P<username>[\w-]+)\.ical$', 'user_ical'), |
1895 | @@ -699,22 +1173,38 @@ |
1896 | rev_args = ['uds-test', 'test.user'] |
1897 | reverse_url = reverse('summit.schedule.views.user_ical', args=rev_args) |
1898 | self.assertEquals(reverse_url, '/uds-test/participant/test.user.ical') |
1899 | - |
1900 | + |
1901 | def test_meeting_name_with_percent(self): |
1902 | ''' Test the following Meeting urlconf |
1903 | (r'^(?P<summit_name>[\w-]+)/meeting/(?P<meeting_id>\d+)/(?P<meeting_slug>[\.\w-]+)/$', 'meeting'), |
1904 | ''' |
1905 | - meeting = factory.make_one(Meeting, summit=self.summit, name='test.meeting', private=False) |
1906 | - |
1907 | + meeting = factory.make_one( |
1908 | + Meeting, |
1909 | + summit=self.summit, |
1910 | + name='test.meeting', |
1911 | + private=False |
1912 | + ) |
1913 | + |
1914 | rev_args = ['uds-test', meeting.id, 'test%meeting'] |
1915 | reverse_url = reverse('summit.schedule.views.meeting', args=rev_args) |
1916 | - self.assertEquals(reverse_url, '/uds-test/meeting/%s/test%%meeting/' % meeting.id) |
1917 | + self.assertEquals( |
1918 | + reverse_url, |
1919 | + '/uds-test/meeting/%s/test%%meeting/' % meeting.id |
1920 | + ) |
1921 | |
1922 | def test_meeting_name_with_plus_sign(self): |
1923 | - meeting = factory.make_one(Meeting, summit=self.summit, name='test.meeting', private=False) |
1924 | + meeting = factory.make_one( |
1925 | + Meeting, |
1926 | + summit=self.summit, |
1927 | + name='test.meeting', |
1928 | + private=False |
1929 | + ) |
1930 | rev_args = ['uds-test', meeting.id, 'test+meeting'] |
1931 | reverse_url = reverse('summit.schedule.views.meeting', args=rev_args) |
1932 | - self.assertEquals(reverse_url, '/uds-test/meeting/%s/test+meeting/' % meeting.id) |
1933 | + self.assertEquals( |
1934 | + reverse_url, |
1935 | + '/uds-test/meeting/%s/test+meeting/' % meeting.id |
1936 | + ) |
1937 | |
1938 | def test_room_name_with_percent(self): |
1939 | ''' Test the following Room urlconfs |
1940 | @@ -751,7 +1241,10 @@ |
1941 | reverse_url = reverse('summit.schedule.views.by_track', args=rev_args) |
1942 | self.assertEquals(reverse_url, '/uds-test/track/test%track/') |
1943 | |
1944 | - reverse_url = reverse('summit.schedule.views.track_ical', args=rev_args) |
1945 | + reverse_url = reverse( |
1946 | + 'summit.schedule.views.track_ical', |
1947 | + args=rev_args |
1948 | + ) |
1949 | self.assertEquals(reverse_url, '/uds-test/track/test%track.ical') |
1950 | |
1951 | def test_track_name_with_plus_sign(self): |
1952 | @@ -761,7 +1254,10 @@ |
1953 | reverse_url = reverse('summit.schedule.views.by_track', args=rev_args) |
1954 | self.assertEquals(reverse_url, '/uds-test/track/test+track/') |
1955 | |
1956 | - reverse_url = reverse('summit.schedule.views.track_ical', args=rev_args) |
1957 | + reverse_url = reverse( |
1958 | + 'summit.schedule.views.track_ical', |
1959 | + args=rev_args |
1960 | + ) |
1961 | self.assertEquals(reverse_url, '/uds-test/track/test+track.ical') |
1962 | |
1963 | def test_participant_name_with_percent(self): |
1964 | @@ -781,6 +1277,7 @@ |
1965 | reverse_url = reverse('summit.schedule.views.user_ical', args=rev_args) |
1966 | self.assertEquals(reverse_url, '/uds-test/participant/test+user.ical') |
1967 | |
1968 | + |
1969 | class EtherpadEditUrl(djangotest.TestCase): |
1970 | |
1971 | def setUp(self): |
1972 | @@ -799,12 +1296,29 @@ |
1973 | slot.save() |
1974 | |
1975 | room = factory.make_one(Room, summit=self.summit) |
1976 | - meeting = factory.make_one(Meeting, summit=self.summit, name='test-meeting', private=False) |
1977 | - agenda = factory.make_one(Agenda, slot=slot, meeting=meeting, room=room) |
1978 | + meeting = factory.make_one( |
1979 | + Meeting, |
1980 | + summit=self.summit, |
1981 | + name='test-meeting', |
1982 | + private=False |
1983 | + ) |
1984 | + agenda = factory.make_one( |
1985 | + Agenda, |
1986 | + slot=slot, |
1987 | + meeting=meeting, |
1988 | + room=room |
1989 | + ) |
1990 | |
1991 | - response = self.client.get('/uds-test/meeting/%s/test-meeting/' % meeting.id) |
1992 | + response = self.client.get( |
1993 | + '/uds-test/meeting/%s/test-meeting/' % meeting.id |
1994 | + ) |
1995 | self.assertEquals(response.status_code, 200) |
1996 | - self.assertContains(response, 'http://pad.ubuntu.com/ep/pad/view/uds-test-test-meeting/latest', 1) |
1997 | + self.assertContains( |
1998 | + response, |
1999 | + 'http://pad.ubuntu.com/ep/pad/view/uds-test-test-meeting/latest', |
2000 | + 1 |
2001 | + ) |
2002 | + |
2003 | |
2004 | class SchedulingConflictsTestCase(djangotest.TestCase): |
2005 | |
2006 | @@ -819,24 +1333,52 @@ |
2007 | end_utc=now+one_hour, |
2008 | type='open', |
2009 | summit=self.summit) |
2010 | - |
2011 | + |
2012 | self.room1 = factory.make_one(Room, summit=self.summit) |
2013 | - self.meeting1 = factory.make_one(Meeting, summit=self.summit, name='meeting1', requires_dial_in=False) |
2014 | - self.agenda1 = factory.make_one(Agenda, slot=self.slot, meeting=self.meeting1, room=self.room1) |
2015 | + self.meeting1 = factory.make_one( |
2016 | + Meeting, |
2017 | + summit=self.summit, |
2018 | + name='meeting1', |
2019 | + requires_dial_in=False |
2020 | + ) |
2021 | + self.agenda1 = factory.make_one( |
2022 | + Agenda, |
2023 | + slot=self.slot, |
2024 | + meeting=self.meeting1, |
2025 | + room=self.room1 |
2026 | + ) |
2027 | |
2028 | self.room2 = factory.make_one(Room, summit=self.summit) |
2029 | - self.meeting2 = factory.make_one(Meeting, summit=self.summit, name='meeting2', requires_dial_in=False) |
2030 | - |
2031 | - self.user = factory.make_one(User, username='testuser', first_name='Test', last_name='User') |
2032 | - self.attendee = factory.make_one(Attendee, summit=self.summit, user=self.user, start_utc=now, end_utc=now+week) |
2033 | - |
2034 | + self.meeting2 = factory.make_one( |
2035 | + Meeting, |
2036 | + summit=self.summit, |
2037 | + name='meeting2', |
2038 | + requires_dial_in=False |
2039 | + ) |
2040 | + |
2041 | + self.user = factory.make_one( |
2042 | + User, |
2043 | + username='testuser', |
2044 | + first_name='Test', |
2045 | + last_name='User' |
2046 | + ) |
2047 | + self.attendee = factory.make_one( |
2048 | + Attendee, |
2049 | + summit=self.summit, |
2050 | + user=self.user, |
2051 | + start_utc=now, |
2052 | + end_utc=now+week |
2053 | + ) |
2054 | + |
2055 | def tearDown(self): |
2056 | pass |
2057 | - |
2058 | + |
2059 | def assertRaises(self, exception_type, function, args): |
2060 | try: |
2061 | function(*args) |
2062 | - raise AssertionError('Callable failed to raise exception %s' % exception_type) |
2063 | + raise AssertionError( |
2064 | + 'Callable failed to raise exception %s' % exception_type |
2065 | + ) |
2066 | except exception_type, e: |
2067 | return True |
2068 | |
2069 | @@ -844,21 +1386,25 @@ |
2070 | '''Checks the Meeting model's check_schedule''' |
2071 | missing = self.meeting1.check_schedule(self.slot, self.room1) |
2072 | self.assertEquals(len(missing), 0) |
2073 | - |
2074 | + |
2075 | missing = self.meeting2.check_schedule(self.slot, self.room2) |
2076 | self.assertEquals(len(missing), 0) |
2077 | - |
2078 | + |
2079 | def test_meeting_check_room_conflict(self): |
2080 | - '''Checks that two meetings will not be scheduled in the same room |
2081 | + '''Checks that two meetings will not be scheduled in the same room |
2082 | at the same time |
2083 | ''' |
2084 | missing = self.meeting1.check_schedule(self.slot, self.room1) |
2085 | self.assertEquals(len(missing), 0) |
2086 | - |
2087 | - self.assertRaises(Meeting.SchedulingError, |
2088 | - Meeting.check_schedule, |
2089 | - (self.meeting2, self.slot, self.room1)) |
2090 | - |
2091 | + |
2092 | + self.assertRaises( |
2093 | + Meeting.SchedulingError, |
2094 | + Meeting.check_schedule, |
2095 | + (self.meeting2, |
2096 | + self.slot, |
2097 | + self.room1) |
2098 | + ) |
2099 | + |
2100 | def test_meeting_check_schedule_participant_conflict(self): |
2101 | '''Checks that a two meetings requiring the same attendee will mark that |
2102 | user as missing. |
2103 | @@ -866,19 +1412,20 @@ |
2104 | participant1 = Participant.objects.create( |
2105 | meeting=self.meeting1, |
2106 | attendee=self.attendee, |
2107 | - participation = 'REQUIRED' |
2108 | + participation='REQUIRED' |
2109 | ) |
2110 | missing = self.meeting1.check_schedule(self.slot, self.room1) |
2111 | self.assertEquals(len(missing), 0) |
2112 | - |
2113 | + |
2114 | participant1 = Participant.objects.create( |
2115 | meeting=self.meeting2, |
2116 | attendee=self.attendee, |
2117 | - participation = 'REQUIRED' |
2118 | + participation='REQUIRED' |
2119 | ) |
2120 | missing = self.meeting2.check_schedule(self.slot, self.room2) |
2121 | self.assertEquals(len(missing), 1) |
2122 | |
2123 | + |
2124 | class AutoSchedulerTestCase(djangotest.TestCase): |
2125 | def setUp(self): |
2126 | now = datetime.datetime.utcnow() |
2127 | @@ -890,40 +1437,75 @@ |
2128 | start_utc=now+week, |
2129 | end_utc=now+week+one_hour, |
2130 | type='open', |
2131 | - summit=self.summit) |
2132 | - |
2133 | + summit=self.summit |
2134 | + ) |
2135 | + |
2136 | self.room1 = factory.make_one(Room, summit=self.summit, type='open') |
2137 | - self.meeting1 = factory.make_one(Meeting, summit=self.summit, name='meeting1', requires_dial_in=False, approved='APPROVED', private=False) |
2138 | - self.agenda1 = factory.make_one(Agenda, slot=self.slot, meeting=self.meeting1, room=self.room1) |
2139 | + self.meeting1 = factory.make_one( |
2140 | + Meeting, |
2141 | + summit=self.summit, |
2142 | + name='meeting1', |
2143 | + requires_dial_in=False, |
2144 | + approved='APPROVED', |
2145 | + private=False |
2146 | + ) |
2147 | + self.agenda1 = factory.make_one( |
2148 | + Agenda, |
2149 | + slot=self.slot, |
2150 | + meeting=self.meeting1, |
2151 | + room=self.room1 |
2152 | + ) |
2153 | |
2154 | self.room2 = factory.make_one(Room, summit=self.summit, type='open') |
2155 | - self.meeting2 = factory.make_one(Meeting, summit=self.summit, name='meeting2', requires_dial_in=False, approved='APPROVED', private=False) |
2156 | - |
2157 | - self.user = factory.make_one(User, username='testuser', first_name='Test', last_name='User') |
2158 | - self.attendee = factory.make_one(Attendee, summit=self.summit, user=self.user, start_utc=now, end_utc=now+week) |
2159 | - |
2160 | + self.meeting2 = factory.make_one( |
2161 | + Meeting, |
2162 | + summit=self.summit, |
2163 | + name='meeting2', |
2164 | + requires_dial_in=False, |
2165 | + approved='APPROVED', |
2166 | + private=False |
2167 | + ) |
2168 | + |
2169 | + self.user = factory.make_one( |
2170 | + User, |
2171 | + username='testuser', |
2172 | + first_name='Test', |
2173 | + last_name='User' |
2174 | + ) |
2175 | + self.attendee = factory.make_one( |
2176 | + Attendee, |
2177 | + summit=self.summit, |
2178 | + user=self.user, |
2179 | + start_utc=now, |
2180 | + end_utc=now+week |
2181 | + ) |
2182 | + |
2183 | def tearDown(self): |
2184 | pass |
2185 | |
2186 | def run_autoschedule(self): |
2187 | from django.core.management import execute_from_command_line |
2188 | - execute_from_command_line(argv=['manage.py', 'autoschedule', 'uds-test', '-v', '2']) |
2189 | + execute_from_command_line( |
2190 | + argv=['manage.py', 'autoschedule', 'uds-test', '-v', '2'] |
2191 | + ) |
2192 | |
2193 | def run_reschedule(self): |
2194 | from django.core.management import execute_from_command_line |
2195 | - execute_from_command_line(argv=['manage.py', 'reschedule', 'uds-test', '-v', '2']) |
2196 | + execute_from_command_line( |
2197 | + argv=['manage.py', 'reschedule', 'uds-test', '-v', '2'] |
2198 | + ) |
2199 | |
2200 | def test_required_conflict(self): |
2201 | participant1 = Participant.objects.create( |
2202 | meeting=self.meeting1, |
2203 | attendee=self.attendee, |
2204 | - participation = 'REQUIRED' |
2205 | + participation='REQUIRED' |
2206 | ) |
2207 | |
2208 | participant2 = Participant.objects.create( |
2209 | meeting=self.meeting2, |
2210 | attendee=self.attendee, |
2211 | - participation = 'REQUIRED' |
2212 | + participation='REQUIRED' |
2213 | ) |
2214 | |
2215 | self.run_autoschedule() |
2216 | @@ -935,13 +1517,13 @@ |
2217 | participant1 = Participant.objects.create( |
2218 | meeting=self.meeting1, |
2219 | attendee=self.attendee, |
2220 | - participation = 'REQUIRED' |
2221 | + participation='REQUIRED' |
2222 | ) |
2223 | |
2224 | participant2 = Participant.objects.create( |
2225 | meeting=self.meeting2, |
2226 | attendee=self.attendee, |
2227 | - participation = 'INTERESTED' |
2228 | + participation='INTERESTED' |
2229 | ) |
2230 | |
2231 | self.run_autoschedule() |
2232 | @@ -953,13 +1535,13 @@ |
2233 | participant1 = Participant.objects.create( |
2234 | meeting=self.meeting1, |
2235 | attendee=self.attendee, |
2236 | - participation = 'REQUIRED' |
2237 | + participation='REQUIRED' |
2238 | ) |
2239 | |
2240 | participant2 = Participant.objects.create( |
2241 | meeting=self.meeting2, |
2242 | attendee=self.attendee, |
2243 | - participation = 'INTERESTED' |
2244 | + participation='INTERESTED' |
2245 | ) |
2246 | |
2247 | self.run_autoschedule() |
2248 | @@ -969,32 +1551,50 @@ |
2249 | |
2250 | participant2.participation = 'REQUIRED' |
2251 | participant2.save() |
2252 | - |
2253 | + |
2254 | self.run_reschedule() |
2255 | |
2256 | - self.assertEquals(1, self.meeting1.agenda_set.all().count()) |
2257 | - self.assertEquals(0, self.meeting2.agenda_set.all().count()) |
2258 | + self.assertEquals(0, self.meeting1.agenda_set.all().count()) |
2259 | + self.assertEquals(0, self.meeting2.agenda_set.all().count()) |
2260 | |
2261 | def test_get_participants_by_level(self): |
2262 | participant1 = Participant.objects.create( |
2263 | meeting=self.meeting1, |
2264 | attendee=self.attendee, |
2265 | - participation = 'REQUIRED' |
2266 | + participation='REQUIRED' |
2267 | ) |
2268 | |
2269 | participant2 = Participant.objects.create( |
2270 | meeting=self.meeting2, |
2271 | attendee=self.attendee, |
2272 | - participation = 'INTERESTED' |
2273 | - ) |
2274 | - |
2275 | - self.assertEquals(1, len(self.meeting1.get_participants_by_level('REQUIRED'))) |
2276 | - self.assertEquals(0, len(self.meeting1.get_participants_by_level('INTERESTED'))) |
2277 | - self.assertEquals(0, len(self.meeting1.get_participants_by_level('ATTENDING'))) |
2278 | - |
2279 | - self.assertEquals(0, len(self.meeting2.get_participants_by_level('REQUIRED'))) |
2280 | - self.assertEquals(1, len(self.meeting2.get_participants_by_level('INTERESTED'))) |
2281 | - self.assertEquals(0, len(self.meeting2.get_participants_by_level('ATTENDING'))) |
2282 | + participation='INTERESTED' |
2283 | + ) |
2284 | + |
2285 | + self.assertEquals( |
2286 | + 1, |
2287 | + len(self.meeting1.get_participants_by_level('REQUIRED')) |
2288 | + ) |
2289 | + self.assertEquals( |
2290 | + 0, len(self.meeting1.get_participants_by_level('INTERESTED')) |
2291 | + ) |
2292 | + self.assertEquals( |
2293 | + 0, |
2294 | + len(self.meeting1.get_participants_by_level('ATTENDING')) |
2295 | + ) |
2296 | + |
2297 | + self.assertEquals( |
2298 | + 0, |
2299 | + len(self.meeting2.get_participants_by_level('REQUIRED')) |
2300 | + ) |
2301 | + self.assertEquals( |
2302 | + 1, |
2303 | + len(self.meeting2.get_participants_by_level('INTERESTED')) |
2304 | + ) |
2305 | + self.assertEquals( |
2306 | + 0, |
2307 | + len(self.meeting2.get_participants_by_level('ATTENDING')) |
2308 | + ) |
2309 | + |
2310 | |
2311 | class PrivateSchedulingTestCase(djangotest.TestCase): |
2312 | |
2313 | @@ -1008,49 +1608,117 @@ |
2314 | start_utc=now+one_hour, |
2315 | end_utc=now+(2*one_hour), |
2316 | type='open', |
2317 | - summit=self.summit) |
2318 | - |
2319 | - self.open_room = factory.make_one(Room, summit=self.summit, type='open') |
2320 | - self.public_meeting = factory.make_one(Meeting, summit=self.summit, name='meeting1', private=False, requires_dial_in=False, approved='APPROVED') |
2321 | - |
2322 | - self.private_room = factory.make_one(Room, summit=self.summit, type='private') |
2323 | - self.private_meeting = factory.make_one(Meeting, summit=self.summit, name='meeting2', private=True, requires_dial_in=False, approved='APPROVED') |
2324 | - |
2325 | - self.user = factory.make_one(User, username='testuser', first_name='Test', last_name='User') |
2326 | - self.attendee = factory.make_one(Attendee, summit=self.summit, user=self.user, start_utc=now, end_utc=now+week) |
2327 | - |
2328 | + summit=self.summit |
2329 | + ) |
2330 | + |
2331 | + self.open_room = factory.make_one( |
2332 | + Room, |
2333 | + summit=self.summit, |
2334 | + type='open' |
2335 | + ) |
2336 | + self.public_meeting = factory.make_one( |
2337 | + Meeting, |
2338 | + summit=self.summit, |
2339 | + name='meeting1', |
2340 | + private=False, |
2341 | + requires_dial_in=False, |
2342 | + approved='APPROVED' |
2343 | + ) |
2344 | + |
2345 | + self.private_room = factory.make_one( |
2346 | + Room, |
2347 | + summit=self.summit, |
2348 | + type='private' |
2349 | + ) |
2350 | + self.private_meeting = factory.make_one( |
2351 | + Meeting, |
2352 | + summit=self.summit, |
2353 | + name='meeting2', |
2354 | + private=True, |
2355 | + requires_dial_in=False, |
2356 | + approved='APPROVED' |
2357 | + ) |
2358 | + |
2359 | + self.user = factory.make_one( |
2360 | + User, |
2361 | + username='testuser', |
2362 | + first_name='Test', |
2363 | + last_name='User' |
2364 | + ) |
2365 | + self.attendee = factory.make_one( |
2366 | + Attendee, |
2367 | + summit=self.summit, |
2368 | + user=self.user, |
2369 | + start_utc=now, |
2370 | + end_utc=now+week |
2371 | + ) |
2372 | + |
2373 | def tearDown(self): |
2374 | pass |
2375 | - |
2376 | + |
2377 | def assertRaises(self, exception_type, function, args): |
2378 | try: |
2379 | function(*args) |
2380 | - raise AssertionError('Callable failed to raise exception %s' % exception_type) |
2381 | + raise AssertionError( |
2382 | + 'Callable failed to raise exception %s' % exception_type |
2383 | + ) |
2384 | except exception_type, e: |
2385 | return True |
2386 | |
2387 | def run_autoschedule(self): |
2388 | from django.core.management import execute_from_command_line |
2389 | - execute_from_command_line(argv=['manage.py', 'autoschedule', 'uds-test', '-v', '2']) |
2390 | + execute_from_command_line( |
2391 | + argv=['manage.py', 'autoschedule', 'uds-test', '-v', '2'] |
2392 | + ) |
2393 | |
2394 | def test_private_meeting_schedule(self): |
2395 | ''' General run of the autoschedule, no gurantee of what ends up where''' |
2396 | self.run_autoschedule() |
2397 | |
2398 | # Private meetings should not ever be autoscheduled |
2399 | - self.assertEquals(0, Agenda.objects.filter(slot__summit=self.summit, meeting__private=True, room__type='open').count()) |
2400 | - self.assertEquals(0, Agenda.objects.filter(slot__summit=self.summit, meeting__private=False, room__type='private').count()) |
2401 | + self.assertEquals( |
2402 | + 0, |
2403 | + Agenda.objects.filter( |
2404 | + slot__summit=self.summit, |
2405 | + meeting__private=True, |
2406 | + room__type='open' |
2407 | + ).count() |
2408 | + ) |
2409 | + self.assertEquals( |
2410 | + 0, |
2411 | + Agenda.objects.filter( |
2412 | + slot__summit=self.summit, |
2413 | + meeting__private=False, |
2414 | + room__type='private' |
2415 | + ).count() |
2416 | + ) |
2417 | # Private rooms should not ever be autoscheduled |
2418 | - self.assertEquals(0, Agenda.objects.filter(slot__summit=self.summit, meeting__private=True, room__type='private').count()) |
2419 | + self.assertEquals( |
2420 | + 0, |
2421 | + Agenda.objects.filter( |
2422 | + slot__summit=self.summit, |
2423 | + meeting__private=True, |
2424 | + room__type='private' |
2425 | + ).count() |
2426 | + ) |
2427 | |
2428 | # Public meetings in open rooms should be autoscheduled |
2429 | - self.assertEquals(1, Agenda.objects.filter(slot__summit=self.summit, meeting__private=False, room__type='open').count()) |
2430 | + self.assertEquals( |
2431 | + 1, |
2432 | + Agenda.objects.filter( |
2433 | + slot__summit=self.summit, |
2434 | + meeting__private=False, |
2435 | + room__type='open' |
2436 | + ).count() |
2437 | + ) |
2438 | |
2439 | def test_no_available_public_room(self): |
2440 | - '''Make sure public meetings will not be autoscheduled into private rooms''' |
2441 | + ''' |
2442 | + Make sure public meetings will not be autoscheduled into private rooms |
2443 | + ''' |
2444 | self.open_room.type = 'private' |
2445 | self.open_room.save() |
2446 | - |
2447 | + |
2448 | self.run_autoschedule() |
2449 | |
2450 | # Without an open room, public meetings should not be autoscheduled |
2451 | @@ -1058,17 +1726,19 @@ |
2452 | |
2453 | # Private meetings should not ever be autoscheduled |
2454 | self.assertEquals(0, self.private_meeting.agenda_set.count()) |
2455 | - |
2456 | + |
2457 | # Private rooms should not ever be autoscheduled |
2458 | self.assertEquals(0, Agenda.objects.filter(room__type='private').count()) |
2459 | - |
2460 | + |
2461 | def test_no_available_private_room(self): |
2462 | - '''Make sure private meetings will not be autoscheduled into open rooms''' |
2463 | + ''' |
2464 | + Make sure private meetings will not be autoscheduled into open rooms |
2465 | + ''' |
2466 | self.private_room.type = 'open' |
2467 | self.private_room.save() |
2468 | - |
2469 | + |
2470 | self.run_autoschedule() |
2471 | - |
2472 | + |
2473 | # Private meetings should not ever be autoscheduled |
2474 | self.assertEquals(0, self.private_meeting.agenda_set.count()) |
2475 | |
2476 | @@ -1077,17 +1747,32 @@ |
2477 | self.assertEquals(1, Agenda.objects.filter(room__type='open').count()) |
2478 | |
2479 | def test_required_participant_in_private_meeting(self): |
2480 | - '''Make sure meetings aren't scheduled when someone is in a private meeting.''' |
2481 | + ''' |
2482 | + Make sure meetings aren't scheduled when |
2483 | + someone is in a private meeting. |
2484 | + ''' |
2485 | # Make the same person required for both meetings |
2486 | - self.public_meeting.participant_set.create(attendee=self.attendee, participation = 'REQUIRED') |
2487 | - self.private_meeting.participant_set.create(attendee=self.attendee, participation = 'REQUIRED') |
2488 | + self.public_meeting.participant_set.create( |
2489 | + attendee=self.attendee, |
2490 | + participation='REQUIRED' |
2491 | + ) |
2492 | + self.private_meeting.participant_set.create( |
2493 | + attendee=self.attendee, |
2494 | + participation='REQUIRED' |
2495 | + ) |
2496 | # Schedule the private meeting in the one available slot |
2497 | - self.private_room.agenda_set.create(slot=self.slot, meeting=self.private_meeting) |
2498 | + self.private_room.agenda_set.create( |
2499 | + slot=self.slot, |
2500 | + meeting=self.private_meeting |
2501 | + ) |
2502 | |
2503 | self.run_autoschedule() |
2504 | |
2505 | # Check that the private meeting is still scheduled |
2506 | - self.assertEquals(1, self.private_meeting.agenda_set.count()) |
2507 | + self.assertEquals( |
2508 | + 1, |
2509 | + self.private_meeting.agenda_set.count() |
2510 | + ) |
2511 | # Check that the public meeting is not scheduled |
2512 | self.assertEquals(0, self.public_meeting.agenda_set.count()) |
2513 | |
2514 | @@ -1104,15 +1789,46 @@ |
2515 | start_utc=now+one_hour, |
2516 | end_utc=now+(2*one_hour), |
2517 | type='open', |
2518 | - summit=self.summit) |
2519 | - |
2520 | - self.track1 = factory.make_one(Track, slug='test_slug', summit=self.summit) |
2521 | - self.room1 = factory.make_one(Room, summit=self.summit, name='room1') |
2522 | - self.meeting1 = factory.make_one(Meeting, summit=self.summit, name='meeting1', private=False, requires_dial_in=False) |
2523 | - self.agenda1 = factory.make_one(Agenda, slot=self.slot, meeting=self.meeting1, room=self.room1) |
2524 | - |
2525 | - self.user = factory.make_one(User, username='testuser', first_name='Test', last_name='User') |
2526 | - self.attendee = factory.make_one(Attendee, summit=self.summit, user=self.user, start_utc=now, end_utc=now+week) |
2527 | + summit=self.summit |
2528 | + ) |
2529 | + |
2530 | + self.track1 = factory.make_one( |
2531 | + Track, |
2532 | + slug='test_slug', |
2533 | + summit=self.summit |
2534 | + ) |
2535 | + self.room1 = factory.make_one( |
2536 | + Room, |
2537 | + summit=self.summit, |
2538 | + name='room1' |
2539 | + ) |
2540 | + self.meeting1 = factory.make_one( |
2541 | + Meeting, |
2542 | + summit=self.summit, |
2543 | + name='meeting1', |
2544 | + private=False, |
2545 | + requires_dial_in=False |
2546 | + ) |
2547 | + self.agenda1 = factory.make_one( |
2548 | + Agenda, |
2549 | + slot=self.slot, |
2550 | + meeting=self.meeting1, |
2551 | + room=self.room1 |
2552 | + ) |
2553 | + |
2554 | + self.user = factory.make_one( |
2555 | + User, |
2556 | + username='testuser', |
2557 | + first_name='Test', |
2558 | + last_name='User' |
2559 | + ) |
2560 | + self.attendee = factory.make_one( |
2561 | + Attendee, |
2562 | + summit=self.summit, |
2563 | + user=self.user, |
2564 | + start_utc=now, |
2565 | + end_utc=now+week |
2566 | + ) |
2567 | |
2568 | def tearDown(self): |
2569 | # Cached requests cause render.py to return old data, so clear the cache |
2570 | @@ -1124,7 +1840,10 @@ |
2571 | |
2572 | def request_schedule(self): |
2573 | schedule_args = [self.summit.name, self.agenda1.slot.start_utc.date()] |
2574 | - schedule_url = reverse('summit.schedule.views.by_date', args=schedule_args) |
2575 | + schedule_url = reverse( |
2576 | + 'summit.schedule.views.by_date', |
2577 | + args=schedule_args |
2578 | + ) |
2579 | response = self.client.get(schedule_url) |
2580 | return response |
2581 | |
2582 | @@ -1175,13 +1894,21 @@ |
2583 | self.assertContains(response, 'test%track', 1) |
2584 | |
2585 | def test_specify_rooms_in_schedule(self): |
2586 | - room2 = factory.make_one(Room, summit=self.summit, name='room2', title='Room 2') |
2587 | + room2 = factory.make_one( |
2588 | + Room, |
2589 | + summit=self.summit, |
2590 | + name='room2', |
2591 | + title='Room 2' |
2592 | + ) |
2593 | self.room1.title = 'Room 1' |
2594 | self.room1.save() |
2595 | self.agenda1.delete() |
2596 | - |
2597 | + |
2598 | schedule_args = [self.summit.name, self.agenda1.slot.start_utc.date()] |
2599 | - schedule_url = reverse('summit.schedule.views.by_date', args=schedule_args) |
2600 | + schedule_url = reverse( |
2601 | + 'summit.schedule.views.by_date', |
2602 | + args=schedule_args |
2603 | + ) |
2604 | |
2605 | response = self.client.get(schedule_url) |
2606 | self.assertContains(response, self.room1.title, 2) |
2607 | @@ -1190,15 +1917,15 @@ |
2608 | response = self.client.get(schedule_url + '?rooms=room1') |
2609 | self.assertContains(response, self.room1.title, 2) |
2610 | self.assertContains(response, room2.title, 0) |
2611 | - |
2612 | + |
2613 | response = self.client.get(schedule_url + '?rooms=room2') |
2614 | self.assertContains(response, self.room1.title, 0) |
2615 | self.assertContains(response, room2.title, 2) |
2616 | - |
2617 | + |
2618 | response = self.client.get(schedule_url + '?rooms=room1,room2') |
2619 | self.assertContains(response, self.room1.title, 2) |
2620 | self.assertContains(response, room2.title, 2) |
2621 | - |
2622 | + |
2623 | response = self.client.get(schedule_url + '?rooms=unknown1,unknown2') |
2624 | self.assertContains(response, self.room1.title, 0) |
2625 | self.assertContains(response, room2.title, 0) |
2626 | @@ -1216,17 +1943,50 @@ |
2627 | start_utc=now+one_hour, |
2628 | end_utc=now+(2*one_hour), |
2629 | type='open', |
2630 | - summit=self.summit) |
2631 | + summit=self.summit |
2632 | + ) |
2633 | |
2634 | - self.track = factory.make_one(Track, slug='test.track', summit=self.summit) |
2635 | - self.room = factory.make_one(Room, name='test.room', title='Test Room', summit=self.summit) |
2636 | + self.track = factory.make_one( |
2637 | + Track, |
2638 | + slug='test.track', |
2639 | + summit=self.summit |
2640 | + ) |
2641 | + self.room = factory.make_one( |
2642 | + Room, |
2643 | + name='test.room', |
2644 | + title='Test Room', |
2645 | + summit=self.summit |
2646 | + ) |
2647 | self.room.tracks = [self.track] |
2648 | - self.meeting = factory.make_one(Meeting, summit=self.summit, title='Test Meeting', name='meeting', private=False, requires_dial_in=False) |
2649 | + self.meeting = factory.make_one( |
2650 | + Meeting, |
2651 | + summit=self.summit, |
2652 | + title='Test Meeting', |
2653 | + name='meeting', |
2654 | + private=False, |
2655 | + requires_dial_in=False |
2656 | + ) |
2657 | self.meeting.tracks = [self.track] |
2658 | - self.agenda = factory.make_one(Agenda, slot=self.slot, meeting=self.meeting, room=self.room) |
2659 | + self.agenda = factory.make_one( |
2660 | + Agenda, |
2661 | + slot=self.slot, |
2662 | + meeting=self.meeting, |
2663 | + room=self.room |
2664 | + ) |
2665 | |
2666 | - self.user = factory.make_one(User, username='testuser', first_name='Test', last_name='User') |
2667 | - self.attendee = factory.make_one(Attendee, summit=self.summit, user=self.user, start_utc=now, end_utc=now+week) |
2668 | + self.user = factory.make_one( |
2669 | + User, |
2670 | + username='testuser', |
2671 | + first_name='Test', |
2672 | + last_name='User' |
2673 | + ) |
2674 | + self.attendee = factory.make_one( |
2675 | + Attendee, |
2676 | + summit=self.summit, |
2677 | + user=self.user, |
2678 | + start_utc=now, |
2679 | + end_utc=now+week |
2680 | + ) |
2681 | |
2682 | def tearDown(self): |
2683 | # Cached requests cause render.py to return old data, so clear the cache |
2684 | @@ -1238,37 +1998,63 @@ |
2685 | |
2686 | def request_schedule_by_date(self): |
2687 | schedule_args = [self.summit.name, self.agenda.slot.start_utc.date()] |
2688 | - schedule_url = reverse('summit.schedule.views.by_date', args=schedule_args) |
2689 | + schedule_url = reverse( |
2690 | + 'summit.schedule.views.by_date', |
2691 | + args=schedule_args |
2692 | + ) |
2693 | response = self.client.get(schedule_url) |
2694 | return response |
2695 | |
2696 | def request_schedule_by_track(self): |
2697 | schedule_args = [self.summit.name, self.track.slug] |
2698 | - schedule_url = reverse('summit.schedule.views.by_track', args=schedule_args) |
2699 | + schedule_url = reverse( |
2700 | + 'summit.schedule.views.by_track', |
2701 | + args=schedule_args |
2702 | + ) |
2703 | response = self.client.get(schedule_url) |
2704 | return response |
2705 | |
2706 | def test_cache_cleared_on_meeting_change(self): |
2707 | self.assertEqual(None, cache.get('meeting-html-%s' % self.meeting.id)) |
2708 | response = self.request_schedule_by_date() |
2709 | - self.assertTrue('Test Meeting' in cache.get('meeting-html-%s' % self.meeting.id, '')) |
2710 | - |
2711 | + self.assertTrue( |
2712 | + 'Test Meeting' in cache.get( |
2713 | + 'meeting-html-%s' % self.meeting.id, |
2714 | + '' |
2715 | + ) |
2716 | + ) |
2717 | + |
2718 | self.meeting.save() |
2719 | - |
2720 | + |
2721 | self.assertEqual(None, cache.get('meeting-html-%s' % self.meeting.id)) |
2722 | response = self.request_schedule_by_date() |
2723 | - self.assertTrue('Test Meeting' in cache.get('meeting-html-%s' % self.meeting.id, '')) |
2724 | + self.assertTrue( |
2725 | + 'Test Meeting' in cache.get( |
2726 | + 'meeting-html-%s' % self.meeting.id, |
2727 | + '' |
2728 | + ) |
2729 | + ) |
2730 | |
2731 | def test_cache_cleared_on_agenda_change(self): |
2732 | self.assertEqual(None, cache.get('meeting-html-%s' % self.meeting.id)) |
2733 | response = self.request_schedule_by_date() |
2734 | - self.assertTrue('Test Meeting' in cache.get('meeting-html-%s' % self.meeting.id, '')) |
2735 | - |
2736 | + self.assertTrue( |
2737 | + 'Test Meeting' in cache.get( |
2738 | + 'meeting-html-%s' % self.meeting.id, |
2739 | + '' |
2740 | + ) |
2741 | + ) |
2742 | + |
2743 | self.agenda.save() |
2744 | - |
2745 | + |
2746 | self.assertEqual(None, cache.get('meeting-html-%s' % self.meeting.id)) |
2747 | response = self.request_schedule_by_date() |
2748 | - self.assertTrue('Test Meeting' in cache.get('meeting-html-%s' % self.meeting.id, '')) |
2749 | + self.assertTrue( |
2750 | + 'Test Meeting' in cache.get( |
2751 | + 'meeting-html-%s' % self.meeting.id, |
2752 | + '' |
2753 | + ) |
2754 | + ) |
2755 | |
2756 | |
2757 | class ScheduleTestCase(djangotest.TestCase): |
2758 | @@ -1286,11 +2072,16 @@ |
2759 | self.assertEqual(False, schedule.edit) |
2760 | |
2761 | def get_user_with_schedule_permission(self): |
2762 | - user = factory.make_one(User, is_active=True, is_staff=False, |
2763 | - is_superuser=False) |
2764 | + user = factory.make_one( |
2765 | + User, |
2766 | + is_active=True, |
2767 | + is_staff=False, |
2768 | + is_superuser=False |
2769 | + ) |
2770 | user.user_permissions.create( |
2771 | codename='change_agenda', |
2772 | - content_type=factory.make_one(ContentType, app_label='schedule')) |
2773 | + content_type=factory.make_one(ContentType, app_label='schedule') |
2774 | + ) |
2775 | return user |
2776 | |
2777 | def get_get_request(self, **kwargs): |
2778 | @@ -1388,49 +2179,91 @@ |
2779 | def test_room_set_from_summit_if_not_passed(self): |
2780 | request = self.get_request() |
2781 | summit = factory.make_one(Summit) |
2782 | - room1 = factory.make_one(Room, summit=summit, type='open', |
2783 | - name="room1") |
2784 | - room2 = factory.make_one(Room, summit=summit, type='open', |
2785 | - name="room2") |
2786 | + room1 = factory.make_one( |
2787 | + Room, |
2788 | + summit=summit, |
2789 | + type='open', |
2790 | + name="room1" |
2791 | + ) |
2792 | + room2 = factory.make_one( |
2793 | + Room, |
2794 | + summit=summit, |
2795 | + type='open', |
2796 | + name="room2" |
2797 | + ) |
2798 | factory.make_one(Room, summit=summit, type='closed') |
2799 | factory.make_one(Room, summit=summit, type='private') |
2800 | schedule = Schedule.from_request(request, summit) |
2801 | self.assertEqual(None, schedule.room) |
2802 | - self.assertEqual(["room1", "room2"], |
2803 | - sorted([r.name for r in schedule.rooms])) |
2804 | + self.assertEqual( |
2805 | + ["room1", "room2"], |
2806 | + sorted([r.name for r in schedule.rooms]) |
2807 | + ) |
2808 | |
2809 | def test_rooms_include_private_if_user_is_staff(self): |
2810 | - user = factory.make_one(User, is_active=True, is_staff=True, |
2811 | - is_superuser=False) |
2812 | + user = factory.make_one( |
2813 | + User, |
2814 | + is_active=True, |
2815 | + is_staff=True, |
2816 | + is_superuser=False |
2817 | + ) |
2818 | request = self.get_request() |
2819 | request.user = user |
2820 | summit = factory.make_one(Summit) |
2821 | - room1 = factory.make_one(Room, summit=summit, type='open', |
2822 | - name="room1") |
2823 | - room2 = factory.make_one(Room, summit=summit, type='open', |
2824 | - name="room2") |
2825 | + room1 = factory.make_one( |
2826 | + Room, |
2827 | + summit=summit, |
2828 | + type='open', |
2829 | + name="room1" |
2830 | + ) |
2831 | + room2 = factory.make_one( |
2832 | + Room, |
2833 | + summit=summit, |
2834 | + type='open', |
2835 | + name="room2" |
2836 | + ) |
2837 | factory.make_one(Room, summit=summit, type='closed') |
2838 | - factory.make_one(Room, summit=summit, type='private', |
2839 | - name="privateroom") |
2840 | + factory.make_one( |
2841 | + Room, |
2842 | + summit=summit, |
2843 | + type='private', |
2844 | + name="privateroom" |
2845 | + ) |
2846 | schedule = Schedule.from_request(request, summit) |
2847 | self.assertEqual(None, schedule.room) |
2848 | - self.assertEqual(["privateroom", "room1", "room2"], |
2849 | - sorted([r.name for r in schedule.rooms])) |
2850 | + self.assertEqual( |
2851 | + ["privateroom", "room1", "room2"], |
2852 | + sorted([r.name for r in schedule.rooms]) |
2853 | + ) |
2854 | |
2855 | def test_rooms_include_private_if_show_private(self): |
2856 | request = self.get_request() |
2857 | summit = factory.make_one(Summit) |
2858 | - room1 = factory.make_one(Room, summit=summit, type='open', |
2859 | - name="room1") |
2860 | - room2 = factory.make_one(Room, summit=summit, type='open', |
2861 | - name="room2") |
2862 | + room1 = factory.make_one( |
2863 | + Room, |
2864 | + summit=summit, |
2865 | + type='open', |
2866 | + name="room1" |
2867 | + ) |
2868 | + room2 = factory.make_one( |
2869 | + Room, |
2870 | + summit=summit, |
2871 | + type='open', |
2872 | + name="room2" |
2873 | + ) |
2874 | factory.make_one(Room, summit=summit, type='closed') |
2875 | - factory.make_one(Room, summit=summit, type='private', |
2876 | - name="privateroom") |
2877 | + factory.make_one( |
2878 | + Room, |
2879 | + summit=summit, |
2880 | + type='private', |
2881 | + name="privateroom" |
2882 | + ) |
2883 | schedule = Schedule.from_request(request, summit, show_private=True) |
2884 | self.assertEqual(None, schedule.room) |
2885 | - self.assertEqual(["privateroom", "room1", "room2"], |
2886 | - sorted([r.name for r in schedule.rooms])) |
2887 | + self.assertEqual( |
2888 | + ["privateroom", "room1", "room2"], |
2889 | + sorted([r.name for r in schedule.rooms]) |
2890 | + ) |
2891 | |
2892 | def test_track_is_none_by_default(self): |
2893 | schedule = self.get_schedule_from_request() |
2894 | @@ -1471,13 +2304,25 @@ |
2895 | schedule = Schedule.from_request(request, summit) |
2896 | self.assertEqual(None, schedule.fakenow) |
2897 | |
2898 | - def get_schedule(self, edit=False, room=None, summit=None, dates=None, |
2899 | - rooms=None): |
2900 | + def get_schedule( |
2901 | + self, |
2902 | + edit=False, |
2903 | + room=None, |
2904 | + summit=None, |
2905 | + dates=None, |
2906 | + rooms=None |
2907 | + ): |
2908 | request = self.get_request() |
2909 | if summit is None: |
2910 | summit = factory.make_one(Summit) |
2911 | - schedule = Schedule(request, summit, edit=edit, room=room, |
2912 | - dates=dates, rooms=rooms) |
2913 | + schedule = Schedule( |
2914 | + request, |
2915 | + summit, |
2916 | + edit=edit, |
2917 | + room=room, |
2918 | + dates=dates, |
2919 | + rooms=rooms |
2920 | + ) |
2921 | return schedule |
2922 | |
2923 | def test_calculate_unscheduled_does_nothing_when_read_only(self): |
2924 | @@ -1487,25 +2332,40 @@ |
2925 | |
2926 | def test_calculate_unscheduled_includes_unscheduled(self): |
2927 | schedule = self.get_schedule(edit=True) |
2928 | - meeting = factory.make_one(Meeting, summit=schedule.summit, private=False, approved='APPROVED') |
2929 | + meeting = factory.make_one( |
2930 | + Meeting, |
2931 | + summit=schedule.summit, |
2932 | + private=False, |
2933 | + approved='APPROVED' |
2934 | + ) |
2935 | schedule.calculate_unscheduled() |
2936 | self.assertEqual([meeting], schedule.unscheduled) |
2937 | |
2938 | def test_calculate_unscheduled_ignores_scheduled_meetings(self): |
2939 | schedule = self.get_schedule(edit=True) |
2940 | - meeting = factory.make_one(Meeting, summit=schedule.summit, private=False) |
2941 | + meeting = factory.make_one( |
2942 | + Meeting, |
2943 | + summit=schedule.summit, |
2944 | + private=False |
2945 | + ) |
2946 | room = factory.make_one(Room, summit=schedule.summit) |
2947 | slot = factory.make_one(Slot, summit=schedule.summit) |
2948 | meeting.agenda_set.create(room=room, slot=slot) |
2949 | schedule.calculate_unscheduled() |
2950 | self.assertEqual([], schedule.unscheduled) |
2951 | |
2952 | - def test_calculate_unscheduled_ignores_meetings_in_tracks_not_in_this_room(self): |
2953 | + def test_calculate_unscheduled_ignores_meetings_in_tracks_not_in_this_room( |
2954 | + self |
2955 | + ): |
2956 | summit = factory.make_one(Summit) |
2957 | room = factory.make_one(Room, summit=summit, type='open') |
2958 | schedule = self.get_schedule(edit=True, room=room, summit=summit) |
2959 | - meeting = factory.make_one(Meeting, summit=schedule.summit, |
2960 | - type='blueprint', private=False) |
2961 | + meeting = factory.make_one( |
2962 | + Meeting, |
2963 | + summit=schedule.summit, |
2964 | + type='blueprint', |
2965 | + private=False |
2966 | + ) |
2967 | track = factory.make_one(Track, summit=summit) |
2968 | other_track = factory.make_one(Track, summit=summit) |
2969 | room.tracks = [track] |
2970 | @@ -1517,8 +2377,13 @@ |
2971 | summit = factory.make_one(Summit) |
2972 | room = factory.make_one(Room, summit=summit, type='open') |
2973 | schedule = self.get_schedule(edit=True, room=room, summit=summit) |
2974 | - meeting = factory.make_one(Meeting, summit=schedule.summit, |
2975 | - type='blueprint', private=False, approved='APPROVED') |
2976 | + meeting = factory.make_one( |
2977 | + Meeting, |
2978 | + summit=schedule.summit, |
2979 | + type='blueprint', |
2980 | + private=False, |
2981 | + approved='APPROVED' |
2982 | + ) |
2983 | track = factory.make_one(Track, summit=summit) |
2984 | room.tracks = [track] |
2985 | schedule.calculate_unscheduled() |
2986 | @@ -1528,8 +2393,13 @@ |
2987 | summit = factory.make_one(Summit) |
2988 | room = factory.make_one(Room, summit=summit, type='open') |
2989 | schedule = self.get_schedule(edit=True, room=room, summit=summit) |
2990 | - meeting = factory.make_one(Meeting, summit=schedule.summit, |
2991 | - type='blueprint', private=False, approved='APPROVED') |
2992 | + meeting = factory.make_one( |
2993 | + Meeting, |
2994 | + summit=schedule.summit, |
2995 | + type='blueprint', |
2996 | + private=False, |
2997 | + approved='APPROVED' |
2998 | + ) |
2999 | track = factory.make_one(Track, summit=summit) |
3000 | meeting.tracks = [track] |
3001 | schedule.calculate_unscheduled() |
3002 | @@ -1539,8 +2409,13 @@ |
3003 | summit = factory.make_one(Summit) |
3004 | room = factory.make_one(Room, summit=summit, type='open') |
3005 | schedule = self.get_schedule(edit=True, room=room, summit=summit) |
3006 | - meeting = factory.make_one(Meeting, summit=schedule.summit, |
3007 | - type='blueprint', private=False, approved='APPROVED') |
3008 | + meeting = factory.make_one( |
3009 | + Meeting, |
3010 | + summit=schedule.summit, |
3011 | + type='blueprint', |
3012 | + private=False, |
3013 | + approved='APPROVED' |
3014 | + ) |
3015 | track = factory.make_one(Track, summit=summit) |
3016 | meeting.tracks = [track] |
3017 | room.tracks = [track] |
3018 | @@ -1551,8 +2426,13 @@ |
3019 | summit = factory.make_one(Summit) |
3020 | room = factory.make_one(Room, summit=summit, type='open') |
3021 | schedule = self.get_schedule(edit=True, room=room, summit=summit) |
3022 | - meeting = factory.make_one(Meeting, summit=schedule.summit, |
3023 | - type='blueprint', private=False, approved='APPROVED') |
3024 | + meeting = factory.make_one( |
3025 | + Meeting, |
3026 | + summit=schedule.summit, |
3027 | + type='blueprint', |
3028 | + private=False, |
3029 | + approved='APPROVED' |
3030 | + ) |
3031 | track = factory.make_one(Track, summit=summit) |
3032 | other_track = factory.make_one(Track, summit=summit) |
3033 | meeting.tracks = [track, other_track] |
3034 | @@ -1564,8 +2444,12 @@ |
3035 | summit = factory.make_one(Summit) |
3036 | room = factory.make_one(Room, summit=summit, type='open') |
3037 | schedule = self.get_schedule(edit=True, room=room, summit=summit) |
3038 | - meeting = factory.make_one(Meeting, summit=schedule.summit, |
3039 | - type='plenary', private=False) |
3040 | + meeting = factory.make_one( |
3041 | + Meeting, |
3042 | + summit=schedule.summit, |
3043 | + type='plenary', |
3044 | + private=False |
3045 | + ) |
3046 | schedule.calculate_unscheduled() |
3047 | self.assertEqual([], schedule.unscheduled) |
3048 | |
3049 | @@ -1573,8 +2457,12 @@ |
3050 | summit = factory.make_one(Summit) |
3051 | room = factory.make_one(Room, summit=summit, type='open') |
3052 | schedule = self.get_schedule(edit=True, room=room, summit=summit) |
3053 | - meeting = factory.make_one(Meeting, summit=schedule.summit, |
3054 | - type='talk', private=False) |
3055 | + meeting = factory.make_one( |
3056 | + Meeting, |
3057 | + summit=schedule.summit, |
3058 | + type='talk', |
3059 | + private=False |
3060 | + ) |
3061 | schedule.calculate_unscheduled() |
3062 | self.assertEqual([], schedule.unscheduled) |
3063 | |
3064 | @@ -1582,8 +2470,12 @@ |
3065 | summit = factory.make_one(Summit) |
3066 | room = factory.make_one(Room, summit=summit, type='open') |
3067 | schedule = self.get_schedule(edit=True, room=room, summit=summit) |
3068 | - meeting = factory.make_one(Meeting, summit=schedule.summit, |
3069 | - type='special', private=False) |
3070 | + meeting = factory.make_one( |
3071 | + Meeting, |
3072 | + summit=schedule.summit, |
3073 | + type='special', |
3074 | + private=False |
3075 | + ) |
3076 | schedule.calculate_unscheduled() |
3077 | self.assertEqual([], schedule.unscheduled) |
3078 | |
3079 | @@ -1591,8 +2483,13 @@ |
3080 | summit = factory.make_one(Summit) |
3081 | room = factory.make_one(Room, summit=summit, type='plenary') |
3082 | schedule = self.get_schedule(edit=True, room=room, summit=summit) |
3083 | - meeting = factory.make_one(Meeting, summit=schedule.summit, |
3084 | - type='plenary', private=False, approved='APPROVED') |
3085 | + meeting = factory.make_one( |
3086 | + Meeting, |
3087 | + summit=schedule.summit, |
3088 | + type='plenary', |
3089 | + private=False, |
3090 | + approved='APPROVED' |
3091 | + ) |
3092 | schedule.calculate_unscheduled() |
3093 | self.assertEqual([meeting], schedule.unscheduled) |
3094 | |
3095 | @@ -1600,8 +2497,12 @@ |
3096 | summit = factory.make_one(Summit) |
3097 | room = factory.make_one(Room, summit=summit, type='plenary') |
3098 | schedule = self.get_schedule(edit=True, room=room, summit=summit) |
3099 | - meeting = factory.make_one(Meeting, summit=schedule.summit, |
3100 | - type='blueprint', private=False) |
3101 | + meeting = factory.make_one( |
3102 | + Meeting, |
3103 | + summit=schedule.summit, |
3104 | + type='blueprint', |
3105 | + private=False |
3106 | + ) |
3107 | schedule.calculate_unscheduled() |
3108 | self.assertEqual([], schedule.unscheduled) |
3109 | |
3110 | @@ -1609,16 +2510,38 @@ |
3111 | now = datetime.datetime.utcnow() |
3112 | one_hour = datetime.timedelta(hours=1) |
3113 | summit = factory.make_one( |
3114 | - Summit, date_start=now.date(), date_end=now.date(), |
3115 | - timezone='UTC') |
3116 | + Summit, |
3117 | + date_start=now.date(), |
3118 | + date_end=now.date(), |
3119 | + timezone='UTC' |
3120 | + ) |
3121 | slot = factory.make_one( |
3122 | - Slot, summit=summit, type='plenary', |
3123 | - start_utc=now-(2*one_hour), end_utc=now-(1*one_hour)) |
3124 | - room1 = factory.make_one(Room, summit=summit, type='plenary', start_utc=now-(2*one_hour), end_utc=now-(1*one_hour)) |
3125 | - room2 = factory.make_one(Room, summit=summit, type='plenary', start_utc=now-(2*one_hour), end_utc=now-(1*one_hour)) |
3126 | + Slot, |
3127 | + summit=summit, |
3128 | + type='plenary', |
3129 | + start_utc=now-(2*one_hour), |
3130 | + end_utc=now-(1*one_hour) |
3131 | + ) |
3132 | + room1 = factory.make_one( |
3133 | + Room, |
3134 | + summit=summit, |
3135 | + type='plenary', |
3136 | + start_utc=now-(2*one_hour), |
3137 | + end_utc=now-(1*one_hour) |
3138 | + ) |
3139 | + room2 = factory.make_one( |
3140 | + Room, |
3141 | + summit=summit, |
3142 | + type='plenary', |
3143 | + start_utc=now-(2*one_hour), |
3144 | + end_utc=now-(1*one_hour) |
3145 | + ) |
3146 | schedule = self.get_schedule( |
3147 | - edit=True, rooms=[room1, room2], summit=summit, |
3148 | - dates=[now.date()]) |
3149 | + edit=True, |
3150 | + rooms=[room1, room2], |
3151 | + summit=summit, |
3152 | + dates=[now.date()] |
3153 | + ) |
3154 | schedule.calculate() |
3155 | # To avoid test being fragile and arbitrarily dependent on the |
3156 | # room order, we check the returned schedule.meetings bit-by-bit. |
3157 | @@ -1656,8 +2579,13 @@ |
3158 | summit = factory.make_one(Summit) |
3159 | now = datetime.datetime.utcnow() |
3160 | one_hour = datetime.timedelta(hours=1) |
3161 | - return factory.make_one(Slot, summit=summit, start=now+one_hour, |
3162 | - end=now+one_hour+one_hour, type='open') |
3163 | + return factory.make_one( |
3164 | + Slot, |
3165 | + summit=summit, |
3166 | + start=now+one_hour, |
3167 | + end=now+one_hour+one_hour, |
3168 | + type='open' |
3169 | + ) |
3170 | |
3171 | def test_update_meeting_skips_no_name(self): |
3172 | summit = factory.make_one(Summit) |
3173 | @@ -1673,7 +2601,12 @@ |
3174 | # Names are truncated at 100 chars. |
3175 | expected_name = "very " * 20 |
3176 | self.assertEqual(expected_name, meeting.name) |
3177 | - self.assertEqual(1, summit.meeting_set.filter(name__exact=expected_name).count()) |
3178 | + self.assertEqual( |
3179 | + 1, |
3180 | + summit.meeting_set.filter( |
3181 | + name__exact=expected_name |
3182 | + ).count() |
3183 | + ) |
3184 | |
3185 | def test_update_meeting_accepts_existing_meeting(self): |
3186 | summit = factory.make_one(Summit) |
3187 | @@ -1683,7 +2616,13 @@ |
3188 | summit.meeting_set.create(name=name, title=title) |
3189 | meeting = summit.update_meeting_from_launchpad(elem) |
3190 | self.assertEqual(name, meeting.name) |
3191 | - self.assertEqual(1, summit.meeting_set.filter(name__exact=name, title__exact=title).count()) |
3192 | + self.assertEqual( |
3193 | + 1, |
3194 | + summit.meeting_set.filter( |
3195 | + name__exact=name, |
3196 | + title__exact=title |
3197 | + ).count() |
3198 | + ) |
3199 | |
3200 | def test_update_from_launchpad_response_empty(self): |
3201 | summit = factory.make_one(Summit) |
3202 | @@ -1705,7 +2644,8 @@ |
3203 | summit = factory.make_one(Summit, name='test-sprint') |
3204 | self.assertEqual( |
3205 | ['https://launchpad.net/sprints/test-sprint/+temp-meeting-export'], |
3206 | - summit.launchpad_sprint_import_urls()) |
3207 | + summit.launchpad_sprint_import_urls() |
3208 | + ) |
3209 | |
3210 | def test_launchpad_sprint_import_url_uses_one_summit_sprint(self): |
3211 | import_url = 'http://example.com/test' |
3212 | @@ -1719,7 +2659,14 @@ |
3213 | summit = factory.make_one(Summit) |
3214 | factory.make_one(SummitSprint, summit=summit, import_url=import_url1) |
3215 | factory.make_one(SummitSprint, summit=summit, import_url=import_url2) |
3216 | - self.assertEqual(sorted([import_url1, import_url2]), sorted(summit.launchpad_sprint_import_urls())) |
3217 | + self.assertEqual( |
3218 | + sorted( |
3219 | + [import_url1, import_url2] |
3220 | + ), |
3221 | + sorted( |
3222 | + summit.launchpad_sprint_import_urls() |
3223 | + ) |
3224 | + ) |
3225 | |
3226 | def test_update_from_launchpad_gets_info_for_all_import_urls(self): |
3227 | import_url1 = 'http://example.com/test1' |
3228 | @@ -1728,57 +2675,105 @@ |
3229 | factory.make_one(SummitSprint, summit=summit, import_url=import_url1) |
3230 | factory.make_one(SummitSprint, summit=summit, import_url=import_url2) |
3231 | called_urls = [] |
3232 | + |
3233 | def get_sprint_info(url): |
3234 | called_urls.append(url) |
3235 | return self.get_basic_launchpad_response() |
3236 | + |
3237 | summit._get_sprint_info_from_launchpad = get_sprint_info |
3238 | summit.update_from_launchpad() |
3239 | - self.assertEqual(sorted([import_url1, import_url2]), sorted(called_urls)) |
3240 | + self.assertEqual( |
3241 | + sorted( |
3242 | + [import_url1, import_url2] |
3243 | + ), |
3244 | + sorted(called_urls) |
3245 | + ) |
3246 | |
3247 | def test_update_from_launchpad_does_the_update(self): |
3248 | summit = factory.make_one(Summit) |
3249 | + |
3250 | def get_sprint_info(url): |
3251 | elem = self.get_basic_launchpad_response() |
3252 | meeting_node = LaunchpadExportNode(name="foo", id="42") |
3253 | elem.find("unscheduled").add_child("meeting", meeting_node) |
3254 | return elem |
3255 | + |
3256 | summit._get_sprint_info_from_launchpad = get_sprint_info |
3257 | summit.update_from_launchpad() |
3258 | self.assertEqual(1, summit.meeting_set.all().count()) |
3259 | |
3260 | def test_update_from_launchpad_does_renames(self): |
3261 | summit = factory.make_one(Summit) |
3262 | - meeting = summit.meeting_set.create(name="name", launchpad_blueprint_id="42") |
3263 | + meeting = summit.meeting_set.create( |
3264 | + name="name", |
3265 | + launchpad_blueprint_id="42" |
3266 | + ) |
3267 | + |
3268 | def get_sprint_info(url): |
3269 | elem = self.get_basic_launchpad_response() |
3270 | meeting_node = LaunchpadExportNode(name="other", id="42") |
3271 | elem.find("unscheduled").add_child("meeting", meeting_node) |
3272 | return elem |
3273 | + |
3274 | summit._get_sprint_info_from_launchpad = get_sprint_info |
3275 | summit.update_from_launchpad() |
3276 | - # Since both had blueprint id 42, it should just update the existing meeting |
3277 | - self.assertEqual(0, summit.meeting_set.filter(name__exact="name").count()) |
3278 | - self.assertEqual(1, summit.meeting_set.filter(name__exact="other").count()) |
3279 | + # Since both had blueprint id 42, it should just update |
3280 | + # the existing meeting |
3281 | + self.assertEqual( |
3282 | + 0, |
3283 | + summit.meeting_set.filter( |
3284 | + name__exact="name" |
3285 | + ).count() |
3286 | + ) |
3287 | + self.assertEqual( |
3288 | + 1, |
3289 | + summit.meeting_set.filter( |
3290 | + name__exact="other" |
3291 | + ).count() |
3292 | + ) |
3293 | |
3294 | def test_update_from_launchpad_deletes_missing_unscheduled_meetings(self): |
3295 | summit = factory.make_one(Summit) |
3296 | - meeting = summit.meeting_set.create(spec_url='test_url', name="name", launchpad_blueprint_id="42") |
3297 | + meeting = summit.meeting_set.create( |
3298 | + spec_url='test_url', |
3299 | + name="name", |
3300 | + launchpad_blueprint_id="42" |
3301 | + ) |
3302 | + |
3303 | def get_sprint_info(url): |
3304 | elem = self.get_basic_launchpad_response() |
3305 | meeting_node = LaunchpadExportNode(name="other") |
3306 | elem.find("unscheduled").add_child("meeting", meeting_node) |
3307 | return elem |
3308 | + |
3309 | summit._get_sprint_info_from_launchpad = get_sprint_info |
3310 | summit.update_from_launchpad() |
3311 | - self.assertEqual(1, summit.meeting_set.filter(name__exact="name").count()) |
3312 | - self.assertEqual(0, summit.meeting_set.filter(name__exact="name").exclude(approved='REMOVED').count()) |
3313 | + self.assertEqual( |
3314 | + 1, |
3315 | + summit.meeting_set.filter( |
3316 | + name__exact="name" |
3317 | + ).count() |
3318 | + ) |
3319 | + self.assertEqual( |
3320 | + 0, |
3321 | + summit.meeting_set.filter( |
3322 | + name__exact="name" |
3323 | + ).exclude( |
3324 | + approved='REMOVED' |
3325 | + ).count() |
3326 | + ) |
3327 | |
3328 | def test_update_from_launchpad_deletes_missing_scheduled_meetings(self): |
3329 | summit = factory.make_one(Summit) |
3330 | - meeting = summit.meeting_set.create(spec_url='test_url', name="name", launchpad_blueprint_id="42") |
3331 | + meeting = summit.meeting_set.create( |
3332 | + spec_url='test_url', |
3333 | + name="name", |
3334 | + launchpad_blueprint_id="42" |
3335 | + ) |
3336 | room = factory.make_one(Room, summit=summit) |
3337 | slot = factory.make_one(Slot) |
3338 | agenda = meeting.agenda_set.create(room=room, slot=slot, auto=True) |
3339 | + |
3340 | def get_sprint_info(url): |
3341 | elem = self.get_basic_launchpad_response() |
3342 | meeting_node = LaunchpadExportNode(name="other") |
3343 | @@ -1786,12 +2781,29 @@ |
3344 | return elem |
3345 | summit._get_sprint_info_from_launchpad = get_sprint_info |
3346 | summit.update_from_launchpad() |
3347 | - self.assertEqual(1, summit.meeting_set.filter(name__exact="name").count()) |
3348 | - self.assertEqual(0, summit.meeting_set.filter(name__exact="name").exclude(approved='REMOVED').count()) |
3349 | + self.assertEqual( |
3350 | + 1, |
3351 | + summit.meeting_set.filter( |
3352 | + name__exact="name" |
3353 | + ).count() |
3354 | + ) |
3355 | + self.assertEqual( |
3356 | + 0, |
3357 | + summit.meeting_set.filter( |
3358 | + name__exact="name" |
3359 | + ).exclude( |
3360 | + approved='REMOVED' |
3361 | + ).count() |
3362 | + ) |
3363 | |
3364 | def test_update_from_launchpad_doesnt_delete_meetings_with_spec_url(self): |
3365 | summit = factory.make_one(Summit) |
3366 | - meeting = summit.meeting_set.create(spec_url='http://example.com/foo', name="name", launchpad_blueprint_id="42") |
3367 | + meeting = summit.meeting_set.create( |
3368 | + spec_url='http://example.com/foo', |
3369 | + name="name", |
3370 | + launchpad_blueprint_id="42" |
3371 | + ) |
3372 | + |
3373 | def get_sprint_info(url): |
3374 | elem = self.get_basic_launchpad_response() |
3375 | meeting_node = LaunchpadExportNode(name="other", id="43") |
3376 | @@ -1799,25 +2811,43 @@ |
3377 | return elem |
3378 | summit._get_sprint_info_from_launchpad = get_sprint_info |
3379 | summit.update_from_launchpad() |
3380 | - self.assertEqual(1, summit.meeting_set.filter(name__exact="name").count()) |
3381 | + self.assertEqual( |
3382 | + 1, |
3383 | + summit.meeting_set.filter( |
3384 | + name__exact="name" |
3385 | + ).count() |
3386 | + ) |
3387 | |
3388 | - def test_update_from_launchpad_doesnt_delete_meetings_with_no_spec_url(self): |
3389 | + def test_update_from_launchpad_wont_delete_meetings_without_spec_url(self): |
3390 | summit = factory.make_one(Summit) |
3391 | - meeting = summit.meeting_set.create(spec_url='', name="name", launchpad_blueprint_id="42") |
3392 | + meeting = summit.meeting_set.create( |
3393 | + spec_url='', |
3394 | + name="name", |
3395 | + launchpad_blueprint_id="42" |
3396 | + ) |
3397 | + |
3398 | def get_sprint_info(url): |
3399 | elem = self.get_basic_launchpad_response() |
3400 | meeting_node = LaunchpadExportNode(name="other", id="43") |
3401 | elem.find("unscheduled").add_child("meeting", meeting_node) |
3402 | return elem |
3403 | + |
3404 | summit._get_sprint_info_from_launchpad = get_sprint_info |
3405 | summit.update_from_launchpad() |
3406 | - self.assertEqual(1, summit.meeting_set.filter(name__exact="name").count()) |
3407 | + self.assertEqual( |
3408 | + 1, |
3409 | + summit.meeting_set.filter( |
3410 | + name__exact="name" |
3411 | + ).count() |
3412 | + ) |
3413 | |
3414 | def test_update_from_launchpad_updates_last_update(self): |
3415 | old_now = datetime.datetime.utcnow() - datetime.timedelta(days=1) |
3416 | summit = factory.make_one(Summit, last_update=old_now) |
3417 | + |
3418 | def get_sprint_info(url): |
3419 | return self.get_basic_launchpad_response() |
3420 | + |
3421 | summit._get_sprint_info_from_launchpad = get_sprint_info |
3422 | summit.update_from_launchpad() |
3423 | self.assertTrue(old_now < summit.last_update) |
3424 | @@ -1828,72 +2858,150 @@ |
3425 | |
3426 | def test_reschedule_removes_missing_participants(self): |
3427 | summit = factory.make_one(Summit) |
3428 | - meeting1 = factory.make_one(Meeting, summit=summit, |
3429 | - requires_dial_in=False, private=False) |
3430 | - meeting2 = factory.make_one(Meeting, summit=summit, |
3431 | - requires_dial_in=False, private=False) |
3432 | + meeting1 = factory.make_one( |
3433 | + Meeting, |
3434 | + summit=summit, |
3435 | + requires_dial_in=False, |
3436 | + private=False |
3437 | + ) |
3438 | + meeting2 = factory.make_one( |
3439 | + Meeting, |
3440 | + summit=summit, |
3441 | + requires_dial_in=False, |
3442 | + private=False |
3443 | + ) |
3444 | room1 = factory.make_one(Room, summit=summit) |
3445 | room2 = factory.make_one(Room, summit=summit) |
3446 | slot = self.make_one_future_slot(summit=summit) |
3447 | - attendee = factory.make_one(Attendee, summit=summit, |
3448 | - start_utc=slot.start_utc, end_utc=slot.end_utc) |
3449 | - meeting1.participant_set.create(attendee=attendee, participation = 'REQUIRED') |
3450 | - meeting2.participant_set.create(attendee=attendee, participation = 'REQUIRED') |
3451 | - factory.make_one(Agenda, meeting=meeting1, room=room1, slot=slot, |
3452 | - auto=True) |
3453 | - factory.make_one(Agenda, meeting=meeting2, room=room2, slot=slot, |
3454 | - auto=True) |
3455 | + attendee = factory.make_one( |
3456 | + Attendee, |
3457 | + summit=summit, |
3458 | + start_utc=slot.start_utc, |
3459 | + end_utc=slot.end_utc |
3460 | + ) |
3461 | + meeting1.participant_set.create( |
3462 | + attendee=attendee, |
3463 | + participation='REQUIRED' |
3464 | + ) |
3465 | + meeting2.participant_set.create( |
3466 | + attendee=attendee, |
3467 | + participation='REQUIRED' |
3468 | + ) |
3469 | + factory.make_one( |
3470 | + Agenda, |
3471 | + meeting=meeting1, |
3472 | + room=room1, |
3473 | + slot=slot, |
3474 | + auto=True |
3475 | + ) |
3476 | + factory.make_one( |
3477 | + Agenda, |
3478 | + meeting=meeting2, |
3479 | + room=room2, |
3480 | + slot=slot, |
3481 | + auto=True |
3482 | + ) |
3483 | summit.reschedule() |
3484 | self.assertEqual(1, slot.agenda_set.all().count()) |
3485 | |
3486 | def test_reschedule_removes_unavailable_participants(self): |
3487 | summit = factory.make_one(Summit) |
3488 | - meeting = factory.make_one(Meeting, summit=summit, |
3489 | - requires_dial_in=False, private=False) |
3490 | + meeting = factory.make_one( |
3491 | + Meeting, |
3492 | + summit=summit, |
3493 | + requires_dial_in=False, |
3494 | + private=False |
3495 | + ) |
3496 | room = factory.make_one(Room, summit=summit) |
3497 | slot = self.make_one_future_slot(summit=summit) |
3498 | - attendee = factory.make_one(Attendee, summit=summit, |
3499 | - start_utc=slot.end_utc, |
3500 | - end_utc=slot.end_utc+datetime.timedelta(hours=1)) |
3501 | - meeting.participant_set.create(attendee=attendee, participation = 'REQUIRED') |
3502 | - factory.make_one(Agenda, meeting=meeting, room=room, slot=slot, |
3503 | - auto=True) |
3504 | + attendee = factory.make_one( |
3505 | + Attendee, |
3506 | + summit=summit, |
3507 | + start_utc=slot.end_utc, |
3508 | + end_utc=slot.end_utc+datetime.timedelta(hours=1) |
3509 | + ) |
3510 | + meeting.participant_set.create( |
3511 | + attendee=attendee, |
3512 | + participation='REQUIRED' |
3513 | + ) |
3514 | + factory.make_one( |
3515 | + Agenda, |
3516 | + meeting=meeting, |
3517 | + room=room, |
3518 | + slot=slot, |
3519 | + auto=True |
3520 | + ) |
3521 | summit.reschedule() |
3522 | self.assertEqual(0, slot.agenda_set.all().count()) |
3523 | |
3524 | def test_reschedule_removes_insufficient_slots(self): |
3525 | summit = factory.make_one(Summit) |
3526 | - meeting = factory.make_one(Meeting, summit=summit, slots=2, |
3527 | - requires_dial_in=False, private=False) |
3528 | + meeting = factory.make_one( |
3529 | + Meeting, |
3530 | + summit=summit, |
3531 | + slots=2, |
3532 | + requires_dial_in=False, |
3533 | + private=False |
3534 | + ) |
3535 | room = factory.make_one(Room, summit=summit) |
3536 | slot = self.make_one_future_slot(summit=summit) |
3537 | - factory.make_one(Agenda, meeting=meeting, room=room, slot=slot, |
3538 | - auto=True) |
3539 | + factory.make_one( |
3540 | + Agenda, |
3541 | + meeting=meeting, |
3542 | + room=room, |
3543 | + slot=slot, |
3544 | + auto=True |
3545 | + ) |
3546 | summit.reschedule() |
3547 | self.assertEqual(0, slot.agenda_set.all().count()) |
3548 | |
3549 | def test_reschedule_leaves_old_slots(self): |
3550 | summit = factory.make_one(Summit) |
3551 | - meeting = factory.make_one(Meeting, summit=summit, slots=2, |
3552 | - requires_dial_in=False, private=False) |
3553 | + meeting = factory.make_one( |
3554 | + Meeting, |
3555 | + summit=summit, |
3556 | + slots=2, |
3557 | + requires_dial_in=False, |
3558 | + private=False |
3559 | + ) |
3560 | room = factory.make_one(Room, summit=summit) |
3561 | now = datetime.datetime.utcnow() |
3562 | one_hour = datetime.timedelta(hours=1) |
3563 | - slot = factory.make_one(Slot, summit=summit, start=now-one_hour, |
3564 | - end=now, type='open') |
3565 | - factory.make_one(Agenda, meeting=meeting, room=room, slot=slot, |
3566 | - auto=True) |
3567 | + slot = factory.make_one( |
3568 | + Slot, |
3569 | + summit=summit, |
3570 | + start=now-one_hour, |
3571 | + end=now, |
3572 | + type='open' |
3573 | + ) |
3574 | + factory.make_one( |
3575 | + Agenda, |
3576 | + meeting=meeting, |
3577 | + room=room, |
3578 | + slot=slot, |
3579 | + auto=True |
3580 | + ) |
3581 | summit.reschedule() |
3582 | self.assertEqual(1, slot.agenda_set.all().count()) |
3583 | |
3584 | def test_reschedule_leaves_manually_scheduled(self): |
3585 | summit = factory.make_one(Summit) |
3586 | - meeting = factory.make_one(Meeting, summit=summit, slots=2, |
3587 | - requires_dial_in=False, private=False) |
3588 | + meeting = factory.make_one( |
3589 | + Meeting, |
3590 | + summit=summit, |
3591 | + slots=2, |
3592 | + requires_dial_in=False, |
3593 | + private=False |
3594 | + ) |
3595 | room = factory.make_one(Room, summit=summit) |
3596 | slot = self.make_one_future_slot(summit=summit) |
3597 | - factory.make_one(Agenda, meeting=meeting, room=room, slot=slot, |
3598 | - auto=False) |
3599 | + factory.make_one( |
3600 | + Agenda, |
3601 | + meeting=meeting, |
3602 | + room=room, |
3603 | + slot=slot, |
3604 | + auto=False |
3605 | + ) |
3606 | summit.reschedule() |
3607 | self.assertEqual(1, slot.agenda_set.all().count()) |
3608 | |
3609 | @@ -1909,40 +3017,66 @@ |
3610 | attendee_node = LaunchpadExportNode(name='testuser') |
3611 | summit.update_attendee_from_launchpad(attendee_node) |
3612 | |
3613 | - self.assertEqual(1, summit.attendee_set.filter(user__username__exact="testuser").count()) |
3614 | + self.assertEqual( |
3615 | + 1, |
3616 | + summit.attendee_set.filter( |
3617 | + user__username__exact="testuser" |
3618 | + ).count() |
3619 | + ) |
3620 | self.assertTrue(mock_set_openid.called) |
3621 | |
3622 | + |
3623 | class DeleteMeetingTestCase(djangotest.TestCase): |
3624 | """ |
3625 | This will test different options for deleting a meeting from |
3626 | the front end UI. |
3627 | """ |
3628 | - |
3629 | + |
3630 | def setUp(self): |
3631 | now = datetime.datetime.utcnow() |
3632 | one_hour = datetime.timedelta(0, 3600) |
3633 | - self.summit = factory.make_one(Summit, name='uds-test', date_start=now, date_end=now+one_hour) |
3634 | + self.summit = factory.make_one( |
3635 | + Summit, |
3636 | + name='uds-test', |
3637 | + date_start=now, |
3638 | + date_end=now+one_hour |
3639 | + ) |
3640 | self.summit.save() |
3641 | slot = factory.make_one( |
3642 | Slot, |
3643 | summit=self.summit, |
3644 | start_utc=now, |
3645 | - end_utc=now+one_hour) |
3646 | + end_utc=now+one_hour |
3647 | + ) |
3648 | room = factory.make_one(Room) |
3649 | - |
3650 | - self.meeting = factory.make_one(Meeting, summit=self.summit, requires_dial_in=False, private=False) |
3651 | - |
3652 | + |
3653 | + self.meeting = factory.make_one( |
3654 | + Meeting, |
3655 | + summit=self.summit, |
3656 | + requires_dial_in=False, |
3657 | + private=False |
3658 | + ) |
3659 | + |
3660 | attendee1 = factory.make_one(Attendee) |
3661 | factory.make_one(Participant, meeting=self.meeting, attendee=attendee1) |
3662 | - |
3663 | + |
3664 | factory.make_one(Agenda, meeting=self.meeting, slot=slot, room=room) |
3665 | - |
3666 | - self.user = factory.make_one(User, username='testuser', is_active=True, is_superuser=False) |
3667 | + |
3668 | + self.user = factory.make_one( |
3669 | + User, |
3670 | + username='testuser', |
3671 | + is_active=True, |
3672 | + is_superuser=False |
3673 | + ) |
3674 | self.user.set_password('password') |
3675 | self.user.save() |
3676 | - |
3677 | - self.attendee = factory.make_one(Attendee, user=self.user, summit=self.summit) |
3678 | - |
3679 | + |
3680 | + self.attendee = factory.make_one( |
3681 | + Attendee, |
3682 | + user=self.user, |
3683 | + summit=self.summit |
3684 | + ) |
3685 | + |
3686 | def tearDown(self): |
3687 | self.client.logout() |
3688 | self.user.user_permissions.all().delete() |
3689 | @@ -1950,39 +3084,109 @@ |
3690 | def login(self): |
3691 | logged_in = self.client.login(username='testuser', password='password') |
3692 | self.assertTrue(logged_in) |
3693 | - |
3694 | + |
3695 | def test_track_lead_cant_delete_meeting(self): |
3696 | - self.lead = factory.make_one(Lead, lead=self.attendee, summit=self.summit) |
3697 | + self.lead = factory.make_one( |
3698 | + Lead, |
3699 | + lead=self.attendee, |
3700 | + summit=self.summit |
3701 | + ) |
3702 | self.login() |
3703 | - response = self.client.get(reverse('summit.schedule.views.delete_meeting', args=(self.summit, self.meeting.id, self.meeting.name))) |
3704 | - self.assertRedirects(response, reverse('summit.schedule.views.summit', args=(self.summit.name,)), status_code=302, target_status_code=200) |
3705 | + response = self.client.get( |
3706 | + reverse( |
3707 | + 'summit.schedule.views.delete_meeting', |
3708 | + args=(self.summit, self.meeting.id, self.meeting.name) |
3709 | + ) |
3710 | + ) |
3711 | + self.assertRedirects( |
3712 | + response, |
3713 | + reverse( |
3714 | + 'summit.schedule.views.summit', |
3715 | + args=(self.summit.name,) |
3716 | + ), |
3717 | + status_code=302, |
3718 | + target_status_code=200 |
3719 | + ) |
3720 | |
3721 | def test_user_cant_delete_meeting(self): |
3722 | self.login() |
3723 | - response = self.client.get(reverse('summit.schedule.views.delete_meeting', args=(self.summit, self.meeting.id, self.meeting.name))) |
3724 | - self.assertRedirects(response, reverse('summit.schedule.views.summit', args=(self.summit.name,)), status_code=302, target_status_code=200) |
3725 | + response = self.client.get( |
3726 | + reverse( |
3727 | + 'summit.schedule.views.delete_meeting', |
3728 | + args=(self.summit, self.meeting.id, self.meeting.name) |
3729 | + ) |
3730 | + ) |
3731 | + self.assertRedirects( |
3732 | + response, |
3733 | + reverse( |
3734 | + 'summit.schedule.views.summit', |
3735 | + args=(self.summit.name,) |
3736 | + ), |
3737 | + status_code=302, |
3738 | + target_status_code=200 |
3739 | + ) |
3740 | |
3741 | def test_managers_cant_delete_meeting(self): |
3742 | self.summit.managers.add(self.user) |
3743 | self.login() |
3744 | - response = self.client.get(reverse('summit.schedule.views.delete_meeting', args=(self.summit, self.meeting.id, self.meeting.name))) |
3745 | - self.assertRedirects(response, reverse('summit.schedule.views.summit', args=(self.summit.name,)), status_code=302, target_status_code=200) |
3746 | + response = self.client.get( |
3747 | + reverse( |
3748 | + 'summit.schedule.views.delete_meeting', |
3749 | + args=(self.summit, self.meeting.id, self.meeting.name) |
3750 | + ) |
3751 | + ) |
3752 | + self.assertRedirects( |
3753 | + response, |
3754 | + reverse( |
3755 | + 'summit.schedule.views.summit', |
3756 | + args=(self.summit.name,) |
3757 | + ), |
3758 | + status_code=302, |
3759 | + target_status_code=200 |
3760 | + ) |
3761 | |
3762 | def test_schedulers_can_delete_meeting(self): |
3763 | self.summit.schedulers.add(self.user) |
3764 | self.login() |
3765 | - response = self.client.get(reverse('summit.schedule.views.delete_meeting', args=(self.summit, self.meeting.id, self.meeting.name))) |
3766 | - self.assertRedirects(response, reverse('summit.schedule.views.delete_confirmed', args=(self.summit.name,)), status_code=302, target_status_code=200) |
3767 | + response = self.client.get( |
3768 | + reverse( |
3769 | + 'summit.schedule.views.delete_meeting', |
3770 | + args=(self.summit, self.meeting.id, self.meeting.name) |
3771 | + ) |
3772 | + ) |
3773 | + self.assertRedirects( |
3774 | + response, |
3775 | + reverse( |
3776 | + 'summit.schedule.views.delete_confirmed', |
3777 | + args=(self.summit.name,) |
3778 | + ), |
3779 | + status_code=302, |
3780 | + target_status_code=200 |
3781 | + ) |
3782 | |
3783 | def test_change_agenda_can_delete_meeting(self): |
3784 | """ |
3785 | - Testing if a user who is assigned can_change_agenda in django admin can delete a meeting |
3786 | + Testing if a user who is assigned can_change_agenda |
3787 | + in django admin can delete a meeting |
3788 | """ |
3789 | change_agenda = Permission.objects.get(codename='change_agenda') |
3790 | self.user.user_permissions.add(change_agenda) |
3791 | self.login() |
3792 | - response = self.client.get(reverse('summit.schedule.views.delete_meeting', args=(self.summit, self.meeting.id, self.meeting.name))) |
3793 | - self.assertRedirects(response, reverse('summit.schedule.views.delete_confirmed', args=(self.summit.name,)), status_code=302, target_status_code=200) |
3794 | + response = self.client.get( |
3795 | + reverse( |
3796 | + 'summit.schedule.views.delete_meeting', |
3797 | + args=(self.summit, self.meeting.id, self.meeting.name) |
3798 | + ) |
3799 | + ) |
3800 | + self.assertRedirects( |
3801 | + response, |
3802 | + reverse( |
3803 | + 'summit.schedule.views.delete_confirmed', |
3804 | + args=(self.summit.name,) |
3805 | + ), |
3806 | + status_code=302, |
3807 | + target_status_code=200 |
3808 | + ) |
3809 | |
3810 | |
3811 | class MeetingSearchTestCase(djangotest.TestCase): |
3812 | @@ -1990,79 +3194,182 @@ |
3813 | This will test different options for deleting a meeting from |
3814 | the front end UI. |
3815 | """ |
3816 | - |
3817 | + |
3818 | form_html = '<form id="site_search_form"' |
3819 | - |
3820 | + |
3821 | def setUp(self): |
3822 | now = datetime.datetime.utcnow() |
3823 | one_hour = datetime.timedelta(0, 3600) |
3824 | - self.summit = factory.make_one(Summit, name='uds-test', date_start=now, date_end=now+one_hour) |
3825 | + self.summit = factory.make_one( |
3826 | + Summit, |
3827 | + name='uds-test', |
3828 | + date_start=now, |
3829 | + date_end=now+one_hour |
3830 | + ) |
3831 | self.slot = factory.make_one( |
3832 | Slot, |
3833 | summit=self.summit, |
3834 | start_utc=now, |
3835 | - end_utc=now+one_hour) |
3836 | + end_utc=now+one_hour |
3837 | + ) |
3838 | self.room = factory.make_one(Room) |
3839 | - |
3840 | + |
3841 | + def tearDown(self): |
3842 | + pass |
3843 | + |
3844 | def test_searchform_exists_on_summit_view(self): |
3845 | ''' Search form should appear on the summit view page ''' |
3846 | - response = self.client.get(reverse('summit.schedule.views.summit', args=[self.summit.name])) |
3847 | + response = self.client.get( |
3848 | + reverse( |
3849 | + 'summit.schedule.views.summit', |
3850 | + args=[self.summit.name] |
3851 | + ) |
3852 | + ) |
3853 | self.assertContains(response, self.form_html, 1) |
3854 | - |
3855 | + |
3856 | def test_searchform_exists_on_daily_view(self): |
3857 | ''' Search form should appear on the list view page ''' |
3858 | - response = self.client.get(reverse('summit.schedule.views.daily_schedule', args=[self.summit.name, '2012-10-10'])) |
3859 | + response = self.client.get( |
3860 | + reverse( |
3861 | + 'summit.schedule.views.daily_schedule', |
3862 | + args=[self.summit.name, '2012-10-10'] |
3863 | + ) |
3864 | + ) |
3865 | self.assertContains(response, self.form_html, 1) |
3866 | - |
3867 | + |
3868 | def test_searchform_exists_on_today_view(self): |
3869 | ''' Search form should appear on the today view page ''' |
3870 | - response = self.client.get(reverse('summit.schedule.views.today_view', args=[self.summit.name])) |
3871 | + response = self.client.get( |
3872 | + reverse( |
3873 | + 'summit.schedule.views.today_view', |
3874 | + args=[self.summit.name] |
3875 | + ) |
3876 | + ) |
3877 | self.assertContains(response, self.form_html, 1) |
3878 | - |
3879 | + |
3880 | def test_searchform_exists_on_meeting_view(self): |
3881 | ''' Search form should appear on the meeting view page ''' |
3882 | - meeting = factory.make_one(Meeting, summit=self.summit, requires_dial_in=False, private=False) |
3883 | - |
3884 | - response = self.client.get(reverse('summit.schedule.views.meeting', args=[self.summit.name, meeting.id, meeting.name])) |
3885 | + meeting = factory.make_one( |
3886 | + Meeting, |
3887 | + summit=self.summit, |
3888 | + requires_dial_in=False, |
3889 | + private=False |
3890 | + ) |
3891 | + |
3892 | + response = self.client.get( |
3893 | + reverse( |
3894 | + 'summit.schedule.views.meeting', |
3895 | + args=[self.summit.name, meeting.id, meeting.name] |
3896 | + ) |
3897 | + ) |
3898 | self.assertContains(response, self.form_html, 1) |
3899 | - |
3900 | + |
3901 | def test_searchform_not_exists_on_index(self): |
3902 | - ''' Search form should NOT appear on the index page because there isn't a summit selected ''' |
3903 | + ''' |
3904 | + Search form should NOT appear on the index page because |
3905 | + there isn't a summit selected |
3906 | + ''' |
3907 | response = self.client.get(reverse('summit.common.views.index')) |
3908 | self.assertContains(response, self.form_html, 0) |
3909 | - |
3910 | + |
3911 | def test_meeting_in_search_results(self): |
3912 | - ''' Meeting should appear in search results page if the query matches the name or title ''' |
3913 | - meeting = factory.make_one(Meeting, summit=self.summit, name='test-name', title='Test Title', requires_dial_in=False, private=False) |
3914 | + ''' |
3915 | + Meeting should appear in search results page if the query |
3916 | + matches the name or title |
3917 | + ''' |
3918 | + meeting = factory.make_one( |
3919 | + Meeting, |
3920 | + summit=self.summit, |
3921 | + name='test-name', |
3922 | + title='Test Title', |
3923 | + requires_dial_in=False, |
3924 | + private=False |
3925 | + ) |
3926 | |
3927 | # Attempt to match 'name' against 'test-name' in Meeting.name |
3928 | - response = self.client.get(reverse('summit.schedule.views.search', args=[self.summit.name]), {'q': 'name'}) |
3929 | + response = self.client.get( |
3930 | + reverse( |
3931 | + 'summit.schedule.views.search', |
3932 | + args=[self.summit.name] |
3933 | + ), |
3934 | + {'q': 'name'} |
3935 | + ) |
3936 | self.assertContains(response, self.form_html, 1) |
3937 | - self.assertContains(response, '<a href="%s">Test Title</a>' % meeting.get_meeting_page_url(), 1) |
3938 | - |
3939 | + self.assertContains( |
3940 | + response, |
3941 | + '<a href="%s">Test Title</a>' % meeting.get_meeting_page_url(), |
3942 | + 1 |
3943 | + ) |
3944 | + |
3945 | # Attempt to match 'title' against 'Test Title' in Meeting.title |
3946 | - response = self.client.get(reverse('summit.schedule.views.search', args=[self.summit.name]), {'q': 'title'}) |
3947 | + response = self.client.get( |
3948 | + reverse( |
3949 | + 'summit.schedule.views.search', |
3950 | + args=[self.summit.name] |
3951 | + ), |
3952 | + {'q': 'title'} |
3953 | + ) |
3954 | self.assertContains(response, self.form_html, 1) |
3955 | - self.assertContains(response, '<a href="%s">Test Title</a>' % meeting.get_meeting_page_url(), 1) |
3956 | - |
3957 | + self.assertContains( |
3958 | + response, |
3959 | + '<a href="%s">Test Title</a>' % meeting.get_meeting_page_url(), |
3960 | + 1 |
3961 | + ) |
3962 | + |
3963 | def test_meeting_not_in_search_results(self): |
3964 | - ''' Meetings for one summit should NOT appear when searching a different summit ''' |
3965 | + ''' |
3966 | + Meetings for one summit should NOT appear when searching |
3967 | + a different summit |
3968 | + ''' |
3969 | now = datetime.datetime.utcnow() |
3970 | one_hour = datetime.timedelta(0, 3600) |
3971 | - |
3972 | + |
3973 | # Create a second summit |
3974 | - other_summit = factory.make_one(Summit, name='uds-other', date_start=now, date_end=now+one_hour) |
3975 | - |
3976 | - meeting = factory.make_one(Meeting, summit=other_summit, name='test-name', title='Test Title', requires_dial_in=False, private=False) |
3977 | - |
3978 | - # Attempt to match 'test' against 'test-name' or 'Test Title', should return 0 results |
3979 | - # because the the meeting is in other_summit, not self.summit |
3980 | - response = self.client.get(reverse('summit.schedule.views.search', args=[self.summit.name]), {'q': 'test'}) |
3981 | - self.assertContains(response, self.form_html, 1) |
3982 | - self.assertContains(response, '<a href="%s">Test Title</a>' % meeting.get_meeting_page_url(), 0) |
3983 | - |
3984 | - # Same test, but searching the correct other_summit should return 1 result |
3985 | - response = self.client.get(reverse('summit.schedule.views.search', args=[other_summit.name]), {'q': 'test'}) |
3986 | - self.assertContains(response, self.form_html, 1) |
3987 | - self.assertContains(response, '<a href="%s">Test Title</a>' % meeting.get_meeting_page_url(), 1) |
3988 | - |
3989 | + other_summit = factory.make_one( |
3990 | + Summit, |
3991 | + name='uds-other', |
3992 | + date_start=now, |
3993 | + date_end=now+one_hour |
3994 | + ) |
3995 | + |
3996 | + meeting = factory.make_one( |
3997 | + Meeting, |
3998 | + summit=other_summit, |
3999 | + name='test-name', |
4000 | + title='Test Title', |
4001 | + requires_dial_in=False, |
4002 | + private=False |
4003 | + ) |
4004 | + |
4005 | + # Attempt to match 'test' against 'test-name' or 'Test Title' |
4006 | + # should return 0 results because the the meeting is in |
4007 | + # other_summit, not self.summit |
4008 | + response = self.client.get( |
4009 | + reverse( |
4010 | + 'summit.schedule.views.search', |
4011 | + args=[self.summit.name] |
4012 | + ), |
4013 | + {'q': 'test'} |
4014 | + ) |
4015 | + self.assertContains(response, self.form_html, 1) |
4016 | + self.assertContains( |
4017 | + response, |
4018 | + '<a href="%s">Test Title</a>' % meeting.get_meeting_page_url(), |
4019 | + 0 |
4020 | + ) |
4021 | + |
4022 | + # Same test, but searching the correct other_summit should return |
4023 | + # 1 result |
4024 | + response = self.client.get( |
4025 | + reverse( |
4026 | + 'summit.schedule.views.search', |
4027 | + args=[other_summit.name] |
4028 | + ), |
4029 | + {'q': 'test'} |
4030 | + ) |
4031 | + self.assertContains(response, self.form_html, 1) |
4032 | + self.assertContains( |
4033 | + response, |
4034 | + '<a href="%s">Test Title</a>' % meeting.get_meeting_page_url(), |
4035 | + 1 |
4036 | + ) |
Looks good, schedule and common tests all pass