summaryrefslogtreecommitdiff
path: root/aggregator
diff options
context:
space:
mode:
authorBaptiste Mispelon <bmispelon@gmail.com>2024-07-01 18:07:38 +0200
committerBaptiste Mispelon <bmispelon@gmail.com>2024-07-01 22:20:37 +0200
commitad589338ee9fe9a44a15c2b1d5cb9fcac7c08d09 (patch)
treedf4564a6cbbb0f6e0de1036bcff677a657b11119 /aggregator
parent043fb058ca045e3efb6b78511cb86d35aeb18425 (diff)
Fixed #1573 -- Hid non-approved feed items in RSS feeds
Diffstat (limited to 'aggregator')
-rw-r--r--aggregator/feeds.py10
-rw-r--r--aggregator/models.py9
-rw-r--r--aggregator/tests.py25
3 files changed, 38 insertions, 6 deletions
diff --git a/aggregator/feeds.py b/aggregator/feeds.py
index bf977d52..0c066a94 100644
--- a/aggregator/feeds.py
+++ b/aggregator/feeds.py
@@ -6,6 +6,9 @@ from .models import FeedItem, FeedType
class BaseCommunityAggregatorFeed(Feed):
+ def items(self):
+ return FeedItem.objects.approved().order_by("-date_modified")
+
def item_title(self, item):
return item.title
@@ -33,8 +36,8 @@ class CommunityAggregatorFeed(BaseCommunityAggregatorFeed):
return get_object_or_404(FeedType, slug=slug)
def items(self, obj):
- qs = FeedItem.objects.filter(feed__feed_type=obj)
- qs = qs.order_by("-date_modified")
+ qs = super().items()
+ qs = qs.filter(feed__feed_type=obj)
qs = qs.select_related("feed", "feed__feed_type")
return qs[:25]
@@ -56,5 +59,6 @@ class CommunityAggregatorFirehoseFeed(BaseCommunityAggregatorFeed):
return reverse("aggregator-firehose-feed", host="www")
def items(self):
- qs = FeedItem.objects.order_by("-date_modified").select_related("feed")
+ qs = super().items()
+ qs = qs.select_related("feed")
return qs[:50]
diff --git a/aggregator/models.py b/aggregator/models.py
index 8ccc220a..6f1f7bf2 100644
--- a/aggregator/models.py
+++ b/aggregator/models.py
@@ -22,8 +22,10 @@ class FeedType(models.Model):
return f"{self.name}"
def items(self):
- return FeedItem.objects.select_related("feed", "feed__feed_type").filter(
- feed__feed_type=self
+ return (
+ FeedItem.objects.approved()
+ .filter(feed__feed_type=self)
+ .select_related("feed", "feed__feed_type")
)
@@ -113,6 +115,9 @@ class FeedItemManager(models.Manager):
return item
+ def approved(self):
+ return self.filter(feed__approval_status=APPROVED_FEED)
+
class FeedItem(models.Model):
feed = models.ForeignKey(Feed, on_delete=models.CASCADE)
diff --git a/aggregator/tests.py b/aggregator/tests.py
index cd4633c5..f2573f59 100644
--- a/aggregator/tests.py
+++ b/aggregator/tests.py
@@ -1,4 +1,5 @@
import datetime
+from operator import attrgetter
import requests_mock
from django.conf import settings
@@ -11,7 +12,7 @@ from django.urls import reverse
from docs.models import DocumentRelease
from releases.models import Release
-from . import models
+from . import feeds, models
from .forms import FeedModelForm
@@ -120,6 +121,28 @@ class AggregatorTests(TestCase):
self.assertEqual(1, len(mail.outbox))
self.assertEqual(mail.outbox[0].to, [self.user.email])
+ def test_feeditem_approved(self):
+ self.assertQuerySetEqual(
+ models.FeedItem.objects.approved(),
+ ["Approved long URL Item", "Approved Item"],
+ transform=attrgetter("title"),
+ )
+
+ def test_community_feed_has_only_approved(self):
+ feed = feeds.CommunityAggregatorFeed()
+ self.assertQuerySetEqual(
+ feed.items(self.feed_type),
+ ["Approved long URL Item", "Approved Item"],
+ transform=attrgetter("title"),
+ )
+
+ def test_feedtype_items_has_only_approved(self):
+ self.assertQuerySetEqual(
+ self.feed_type.items(),
+ ["Approved long URL Item", "Approved Item"],
+ transform=attrgetter("title"),
+ )
+
class TestForms(SimpleTestCase):
def test_rejects_stackoverflow_questions(self):