Merge lp:~mhall119/summit/show-hangout-url-to-all into lp:summit

Proposed by Michael Hall
Status: Merged
Approved by: Chris Johnston
Approved revision: 563
Merged at revision: 562
Proposed branch: lp:~mhall119/summit/show-hangout-url-to-all
Merge into: lp:summit
Prerequisite: lp:~mhall119/summit/fix-edit-meeting-link-1248193
Diff against target: 191 lines (+130/-1)
6 files modified
summit/schedule/models/meetingmodel.py (+7/-0)
summit/schedule/models/slotmodel.py (+8/-0)
summit/schedule/templates/schedule/virtual_meeting.html (+1/-1)
summit/schedule/tests/meeting_model.py (+27/-0)
summit/schedule/tests/meeting_page.py (+86/-0)
summit/schedule/views.py (+1/-0)
To merge this branch: bzr merge lp:~mhall119/summit/show-hangout-url-to-all
Reviewer Review Type Date Requested Status
Joe Talbott Approve
Review via email: mp+194008@code.launchpad.net

Commit message

Show the link to join a hangout to any attendee of the summit, but only show it if during the time the meeting takes place, not before or after

Description of the change

Show the link to join a hangout to any attendee of the summit, but only show it if during the time the meeting takes place, not before or after

To post a comment you must log in.
Revision history for this message
Joe Talbott (joetalbott) :
review: Approve
Revision history for this message
Chris Johnston (cjohnston) wrote :
Revision history for this message
Chris Johnston (cjohnston) wrote :

The `tree_dir` option for the target branch is not a lightweight checkout. Please ask a project administrator to resolve the issue, and try again.

Revision history for this message
Chris Johnston (cjohnston) wrote :

The `tree_dir` option for the target branch is not a lightweight checkout. Please ask a project administrator to resolve the issue, and try again.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'summit/schedule/models/meetingmodel.py'
2--- summit/schedule/models/meetingmodel.py 2013-05-14 01:08:35 +0000
3+++ summit/schedule/models/meetingmodel.py 2013-11-05 20:58:24 +0000
4@@ -715,3 +715,10 @@
5 )
6
7 return False
8+
9+ @property
10+ def current(self):
11+ for agenda in self.agenda_set.all():
12+ if agenda.slot.current:
13+ return True
14+ return False
15
16=== modified file 'summit/schedule/models/slotmodel.py'
17--- summit/schedule/models/slotmodel.py 2013-02-26 19:31:21 +0000
18+++ summit/schedule/models/slotmodel.py 2013-11-05 20:58:24 +0000
19@@ -124,3 +124,11 @@
20 except IndexError:
21 prev_slot = None
22 return prev_slot
23+
24+ @property
25+ def current(self):
26+ now = datetime.utcnow()
27+ if now >= self.start_utc and now <= self.end_utc:
28+ return True
29+ else:
30+ return False
31
32=== modified file 'summit/schedule/templates/schedule/virtual_meeting.html'
33--- summit/schedule/templates/schedule/virtual_meeting.html 2013-11-05 20:58:24 +0000
34+++ summit/schedule/templates/schedule/virtual_meeting.html 2013-11-05 20:58:24 +0000
35@@ -93,7 +93,7 @@
36 {% endif %}
37 <div id="description">
38 {{ meeting.description|markdown:'safe' }}
39- {% if required and meeting.hangout_url %}
40+ {% if meeting.current and attendee and meeting.hangout_url %}
41 <h3><a href="{{ meeting.hangout_url }}">Join the Hangout on Air</a></h3>
42 {% endif %}
43 </div>
44
45=== modified file 'summit/schedule/tests/meeting_model.py'
46--- summit/schedule/tests/meeting_model.py 2013-05-14 01:38:55 +0000
47+++ summit/schedule/tests/meeting_model.py 2013-11-05 20:58:24 +0000
48@@ -824,3 +824,30 @@
49 approved='REMOVED'
50 ).count()
51 )
52+
53+ def test_meetings_current(self):
54+ # A meeting without an agenda is never current
55+ self.assertFalse(self.meeting.current)
56+
57+ now = datetime.datetime.utcnow()
58+ one_hour = datetime.timedelta(0, 3600)
59+ # A meeting in a future slot is not current
60+ slot = factory.make_one(
61+ Slot,
62+ start_utc=now + one_hour,
63+ end_utc=now + one_hour + one_hour,
64+ type='open')
65+ agenda = factory.make_one(Agenda, meeting=self.meeting, slot=slot)
66+ self.assertFalse(self.meeting.current)
67+
68+ # A meeting in a past slot is not current
69+ slot.start_utc = now - one_hour - one_hour
70+ slot.end_utc = now - one_hour
71+ slot.save()
72+ self.assertFalse(self.meeting.current)
73+
74+ # A meeting happening now is current
75+ slot.start_utc = now
76+ slot.end_utc = now + one_hour
77+ slot.save()
78+ self.assertTrue(self.meeting.current)
79
80=== modified file 'summit/schedule/tests/meeting_page.py'
81--- summit/schedule/tests/meeting_page.py 2013-11-05 20:58:24 +0000
82+++ summit/schedule/tests/meeting_page.py 2013-11-05 20:58:24 +0000
83@@ -33,6 +33,7 @@
84 Attendee,
85 Track,
86 Lead,
87+ Participant,
88 )
89
90 site_root = getattr(settings, 'SITE_ROOT', 'http://summit.ubuntu.com')
91@@ -192,3 +193,88 @@
92 'Edit meeting',
93 1
94 )
95+
96+ def test_join_hangout_link_visible_if_attending(self):
97+ """ Tests that the link to join a hangout is present if the user is attending the summit """
98+ now = datetime.datetime.utcnow()
99+ one_hour = datetime.timedelta(0, 3600)
100+ summit = factory.make_one(Summit, name='uds-test', virtual_summit=True)
101+ summit.save()
102+ slot = factory.make_one(
103+ Slot,
104+ start_utc=now,
105+ end_utc=now+one_hour,
106+ type='open',
107+ summit=summit
108+ )
109+ slot.save()
110+
111+ room = factory.make_one(Room, summit=summit)
112+
113+ meeting = factory.make_one(
114+ Meeting,
115+ summit=summit,
116+ name='test-meeting',
117+ private=False,
118+ hangout_url='http://test.com/test'
119+ )
120+ agenda = factory.make_one(
121+ Agenda,
122+ slot=slot,
123+ meeting=meeting,
124+ room=room
125+ )
126+
127+ user = factory.make_one(
128+ User,
129+ username='testuser',
130+ first_name='Test',
131+ last_name='User',
132+ is_active=True,
133+ is_staff=False,
134+ is_superuser=False,
135+ )
136+ user.set_password('password')
137+ user.save()
138+
139+ # get meeting page url
140+ rev_args = ['uds-test', meeting.id, 'test-meeting']
141+ reverse_url = reverse('summit.schedule.views.meeting', args=rev_args)
142+
143+ # check before logging in
144+ response = self.client.get(reverse_url)
145+ self.assertEquals(response.status_code, 200)
146+ self.assertContains(
147+ response,
148+ '<a href="%s">Join the Hangout on Air</a>' % meeting.hangout_url,
149+ 0
150+ )
151+
152+ logged_in = self.client.login(username='testuser', password='password')
153+ self.assertTrue(logged_in)
154+
155+ # check after logging in, but not attending
156+ response = self.client.get(reverse_url)
157+ self.assertEquals(response.status_code, 200)
158+ self.assertContains(
159+ response,
160+ '<a href="%s">Join the Hangout on Air</a>' % meeting.hangout_url,
161+ 0
162+ )
163+
164+ attendee = factory.make_one(
165+ Attendee,
166+ summit=summit,
167+ user=user,
168+ start_utc=now,
169+ end_utc=now+one_hour
170+ )
171+
172+ # check after logging in and attending
173+ response = self.client.get(reverse_url)
174+ self.assertEquals(response.status_code, 200)
175+ self.assertContains(
176+ response,
177+ '<a href="%s">Join the Hangout on Air</a>' % meeting.hangout_url,
178+ 1
179+ )
180
181=== modified file 'summit/schedule/views.py'
182--- summit/schedule/views.py 2013-05-10 15:03:51 +0000
183+++ summit/schedule/views.py 2013-11-05 20:58:24 +0000
184@@ -486,6 +486,7 @@
185 context = {
186 'summit': summit,
187 'meeting': meeting,
188+ 'attendee': attendee,
189 'agenda_items': agendaitems,
190 'participants': participants,
191 'attendees': attendees,

Subscribers

People subscribed via source and target branches