From ad589338ee9fe9a44a15c2b1d5cb9fcac7c08d09 Mon Sep 17 00:00:00 2001 From: Baptiste Mispelon Date: Mon, 1 Jul 2024 18:07:38 +0200 Subject: [PATCH] Fixed #1573 -- Hid non-approved feed items in RSS feeds --- aggregator/feeds.py | 10 +++++++--- aggregator/models.py | 9 +++++++-- aggregator/tests.py | 25 ++++++++++++++++++++++++- 3 files changed, 38 insertions(+), 6 deletions(-) diff --git a/aggregator/feeds.py b/aggregator/feeds.py index bf977d52f..0c066a943 100644 --- a/aggregator/feeds.py +++ b/aggregator/feeds.py @@ -6,6 +6,9 @@ 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 @@ def get_object(self, request, slug=None): 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 @@ def link(self): 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 8ccc220a4..6f1f7bf20 100644 --- a/aggregator/models.py +++ b/aggregator/models.py @@ -22,8 +22,10 @@ def __str__(self): 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 @@ def create_or_update_by_guid(self, guid, **kwargs): 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 cd4633c53..f2573f597 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 docs.models import DocumentRelease from releases.models import Release -from . import models +from . import feeds, models from .forms import FeedModelForm @@ -120,6 +121,28 @@ def test_management_command_sends_email_with_pending_feeds(self): 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):