Skip to content

Commit ad58933

Browse files
committed
Fixed #1573 -- Hid non-approved feed items in RSS feeds
1 parent 043fb05 commit ad58933

File tree

3 files changed

+38
-6
lines changed

3 files changed

+38
-6
lines changed

aggregator/feeds.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@
66

77

88
class BaseCommunityAggregatorFeed(Feed):
9+
def items(self):
10+
return FeedItem.objects.approved().order_by("-date_modified")
11+
912
def item_title(self, item):
1013
return item.title
1114

@@ -33,8 +36,8 @@ def get_object(self, request, slug=None):
3336
return get_object_or_404(FeedType, slug=slug)
3437

3538
def items(self, obj):
36-
qs = FeedItem.objects.filter(feed__feed_type=obj)
37-
qs = qs.order_by("-date_modified")
39+
qs = super().items()
40+
qs = qs.filter(feed__feed_type=obj)
3841
qs = qs.select_related("feed", "feed__feed_type")
3942
return qs[:25]
4043

@@ -56,5 +59,6 @@ def link(self):
5659
return reverse("aggregator-firehose-feed", host="www")
5760

5861
def items(self):
59-
qs = FeedItem.objects.order_by("-date_modified").select_related("feed")
62+
qs = super().items()
63+
qs = qs.select_related("feed")
6064
return qs[:50]

aggregator/models.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,10 @@ def __str__(self):
2222
return f"{self.name}"
2323

2424
def items(self):
25-
return FeedItem.objects.select_related("feed", "feed__feed_type").filter(
26-
feed__feed_type=self
25+
return (
26+
FeedItem.objects.approved()
27+
.filter(feed__feed_type=self)
28+
.select_related("feed", "feed__feed_type")
2729
)
2830

2931

@@ -113,6 +115,9 @@ def create_or_update_by_guid(self, guid, **kwargs):
113115

114116
return item
115117

118+
def approved(self):
119+
return self.filter(feed__approval_status=APPROVED_FEED)
120+
116121

117122
class FeedItem(models.Model):
118123
feed = models.ForeignKey(Feed, on_delete=models.CASCADE)

aggregator/tests.py

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import datetime
2+
from operator import attrgetter
23

34
import requests_mock
45
from django.conf import settings
@@ -11,7 +12,7 @@
1112
from docs.models import DocumentRelease
1213
from releases.models import Release
1314

14-
from . import models
15+
from . import feeds, models
1516
from .forms import FeedModelForm
1617

1718

@@ -120,6 +121,28 @@ def test_management_command_sends_email_with_pending_feeds(self):
120121
self.assertEqual(1, len(mail.outbox))
121122
self.assertEqual(mail.outbox[0].to, [self.user.email])
122123

124+
def test_feeditem_approved(self):
125+
self.assertQuerySetEqual(
126+
models.FeedItem.objects.approved(),
127+
["Approved long URL Item", "Approved Item"],
128+
transform=attrgetter("title"),
129+
)
130+
131+
def test_community_feed_has_only_approved(self):
132+
feed = feeds.CommunityAggregatorFeed()
133+
self.assertQuerySetEqual(
134+
feed.items(self.feed_type),
135+
["Approved long URL Item", "Approved Item"],
136+
transform=attrgetter("title"),
137+
)
138+
139+
def test_feedtype_items_has_only_approved(self):
140+
self.assertQuerySetEqual(
141+
self.feed_type.items(),
142+
["Approved long URL Item", "Approved Item"],
143+
transform=attrgetter("title"),
144+
)
145+
123146

124147
class TestForms(SimpleTestCase):
125148
def test_rejects_stackoverflow_questions(self):

0 commit comments

Comments
 (0)