Merge lp:~mhall119/summit/search-private into lp:summit

Proposed by Chris Johnston
Status: Merged
Approved by: Chris Johnston
Approved revision: 489
Merged at revision: 489
Proposed branch: lp:~mhall119/summit/search-private
Merge into: lp:summit
Diff against target: 84 lines (+46/-11)
2 files modified
summit/schedule/tests/tests.py (+38/-2)
summit/schedule/views.py (+8/-9)
To merge this branch: bzr merge lp:~mhall119/summit/search-private
Reviewer Review Type Date Requested Status
Chris Johnston Approve
Review via email: mp+150706@code.launchpad.net

This proposal supersedes a proposal from 2012-10-28.

Commit message

Show private meetings in search results only if the attendee is participating in that meeting

Description of the change

Show private meetings in search results only if the attendee is participating in that meeting

To post a comment you must log in.
lp:~mhall119/summit/search-private updated
488. By Michael Hall

[r=daker] Don't expose hangout_url over the API

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

Conflicts need to be fixed please.

review: Needs Fixing
lp:~mhall119/summit/search-private updated
489. By Michael Hall

Update from trunk

Revision history for this message
Chris Johnston (cjohnston) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'summit/schedule/tests/tests.py'
2--- summit/schedule/tests/tests.py 2013-02-26 20:00:45 +0000
3+++ summit/schedule/tests/tests.py 2013-02-27 03:21:20 +0000
4@@ -3221,8 +3221,8 @@
5 self.room = factory.make_one(Room)
6
7 def tearDown(self):
8- pass
9-
10+ self.client.logout()
11+
12 def test_searchform_exists_on_summit_view(self):
13 ''' Search form should appear on the summit view page '''
14 response = self.client.get(
15@@ -3379,3 +3379,39 @@
16 '<a href="%s">Test Title</a>' % meeting.get_meeting_page_url(),
17 1
18 )
19+
20+ def test_private_meeting_not_shown(self):
21+ ''' Private meetings should not be in the results if the attendee is not attending it'''
22+ now = datetime.datetime.now()
23+ week = datetime.timedelta(days=7)
24+ meeting = factory.make_one(Meeting, summit=self.summit, name='test-name', title='Test Title', requires_dial_in=False, private=True)
25+ user = factory.make_one(User, username='testuser', first_name='Test', last_name='User', is_active=True)
26+ user.set_password('password')
27+ user.save()
28+ attendee = factory.make_one(Attendee, summit=self.summit, user=user, start_utc=now, end_utc=now+week)
29+ participant = factory.make_one(Participant, meeting=meeting, attendee=attendee, participation='ATTENDING', from_launchpad=False)
30+
31+ # Attempt to match 'name' against 'test-name' in Meeting.name
32+ response = self.client.get(reverse('summit.schedule.views.search', args=[self.summit.name]), {'q': 'test'})
33+ self.assertContains(response, self.form_html, 1)
34+ self.assertContains(response, '<a href="%s">Test Title</a>' % meeting.get_meeting_page_url(), 0)
35+
36+ def test_private_meeting_with_attendee_shown(self):
37+ ''' Private meetings should be in the results if the attendee is attending it'''
38+ now = datetime.datetime.now()
39+ week = datetime.timedelta(days=7)
40+ meeting = factory.make_one(Meeting, summit=self.summit, name='test-name', title='Test Title', requires_dial_in=False, private=True)
41+ user = factory.make_one(User, username='testuser', first_name='Test', last_name='User', is_active=True)
42+ user.set_password('password')
43+ user.save()
44+ attendee = factory.make_one(Attendee, summit=self.summit, user=user, start_utc=now, end_utc=now+week)
45+ participant = factory.make_one(Participant, meeting=meeting, attendee=attendee, participation='ATTENDING', from_launchpad=False)
46+
47+ logged_in = self.client.login(username='testuser', password='password')
48+ self.assertTrue(logged_in)
49+
50+ # Attempt to match 'name' against 'test-name' in Meeting.name
51+ response = self.client.get(reverse('summit.schedule.views.search', args=[self.summit.name]), {'q': 'test'})
52+ self.assertContains(response, self.form_html, 1)
53+ self.assertContains(response, '<a href="%s">Test Title</a>' % meeting.get_meeting_page_url(), 1)
54+
55
56=== modified file 'summit/schedule/views.py'
57--- summit/schedule/views.py 2013-02-26 20:00:45 +0000
58+++ summit/schedule/views.py 2013-02-27 03:21:20 +0000
59@@ -83,17 +83,16 @@
60 return render_to_response("schedule/summit.html", context,
61 context_instance=RequestContext(request))
62
63-
64-@summit_only_required
65-def search(request, summit):
66+@summit_required
67+def search(request, summit, attendee):
68 query = request.GET.get('q', None)
69+ meetings = []
70 if query:
71- meetings = summit.meeting_set.filter(
72- Q(name__icontains=query) | Q(title__icontains=query)
73- )
74- else:
75- meetings = []
76-
77+ matches = summit.meeting_set.filter(Q(name__icontains=query) | Q(title__icontains=query))
78+ for m in matches:
79+ if not m.private or m.can_view_pm(attendee):
80+ meetings.append(m)
81+
82 context = {
83 'summit': summit,
84 'query': query,

Subscribers

People subscribed via source and target branches