Skip to content
This repository has been archived by the owner on Oct 30, 2018. It is now read-only.

fixes bug 1214919 - Feed with specifically NOT a channel #535

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
48 changes: 48 additions & 0 deletions airmozilla/main/tests/views/test_feeds.py
Expand Up @@ -115,6 +115,54 @@ def test_feed(self):
ok_('Test event' in response.content)
ok_('Second test event' in response.content)

def test_feed_with_NOT_channel(self):
cache.clear()
delay = datetime.timedelta(days=1)

event1 = Event.objects.get(title='Test event')
event1.status = Event.STATUS_SCHEDULED
event1.start_time -= delay
event1.archive_time = event1.start_time
event1.save()
eq_(Event.objects.archived().approved().count(), 1)
eq_(Event.objects.archived().count(), 1)

event = Event.objects.create(
title='Second test event',
description='Anything',
start_time=event1.start_time,
archive_time=event1.archive_time,
privacy=event1.privacy,
status=event1.status,
placeholder_img=event1.placeholder_img,
)
event.channels.add(self.main_channel)

eq_(Event.objects.archived().approved().count(), 2)
eq_(Event.objects.archived().count(), 2)

url = reverse('main:feed', args=('public',))
response = self.client.get(url)
eq_(response.status_code, 200)
ok_('Test event' in response.content)
ok_('Second test event' in response.content)

channel = Channel.objects.create(
name='Projects',
slug='projects',
)
event1.channels.add(channel)

url = reverse('main:not_feed', args=('public', 'xxx'))
response = self.client.get(url)
eq_(response.status_code, 404)

url = reverse('main:not_feed', args=('public', 'projects'))
response = self.client.get(url)
eq_(response.status_code, 200)
ok_('Test event' not in response.content)
ok_('Second test event' in response.content)

def test_feed_non_unique_titles(self):
event = Event.objects.get(title='Test event')
assert event.status == Event.STATUS_SCHEDULED
Expand Down
9 changes: 9 additions & 0 deletions airmozilla/main/urls.py
Expand Up @@ -49,6 +49,15 @@
'company|public|private|contributors)?/?$',
cache_page(60 * 60)(feeds.EventsFeed()),
name='feed'),
url(r'^feed/(?P<private_or_public>'
r'company|public|private|contributors)?/not/'
r'(?P<not_channel_slug>[-\w]+)$',
cache_page(60 * 60)(feeds.EventsFeed()),
name='not_feed'),
url(r'^feed/not/'
r'(?P<not_channel_slug>[-\w]+)$',
cache_page(60 * 60)(feeds.EventsFeed()),
name='not_feed'),
url(r'^feed/(?P<private_or_public>company|public|private|contributors)'
r'/(?P<format_type>webm)/?$',
cache_page(60 * 60)(feeds.EventsFeed()),
Expand Down
10 changes: 9 additions & 1 deletion airmozilla/main/views/feeds.py
Expand Up @@ -41,14 +41,20 @@ class EventsFeed(Feed):

def get_object(self, request, private_or_public='',
channel_slug=settings.DEFAULT_CHANNEL_SLUG,
format_type=None):
format_type=None, not_channel_slug=None):
if private_or_public == 'private':
# old URL
private_or_public = 'company'
self.private_or_public = private_or_public
self.format_type = format_type
self._root_url = get_base_url(request)
self._channel = get_object_or_404(Channel, slug=channel_slug)
self._not_channel = None
if not_channel_slug:
self._not_channel = get_object_or_404(
Channel,
slug=not_channel_slug,
)

def link(self):
return self._root_url + '/'
Expand All @@ -71,6 +77,8 @@ def items(self):
channels=self._channel)
.order_by('-start_time')
)
if self._not_channel:
qs = qs.exclude(channels=self._not_channel)
if not self.private_or_public or self.private_or_public == 'public':
qs = qs.approved()
qs = qs.filter(privacy=Event.PRIVACY_PUBLIC)
Expand Down