diff --git a/src/newsreader/js/pages/homepage/App.js b/src/newsreader/js/pages/homepage/App.js
index bdf0149..91cfa4e 100644
--- a/src/newsreader/js/pages/homepage/App.js
+++ b/src/newsreader/js/pages/homepage/App.js
@@ -6,7 +6,7 @@ import { isEqual } from 'lodash';
import { fetchCategories } from './actions/categories';
import Sidebar from './components/sidebar/Sidebar.js';
-import FeedList from './components/feedlist/FeedList.js';
+import PostList from './components/postlist/PostList.js';
import PostModal from './components/PostModal.js';
import Messages from '../../components/Messages.js';
@@ -19,7 +19,7 @@ class App extends React.Component {
return (
<>
-
+
{this.props.error && (
diff --git a/src/newsreader/js/pages/homepage/components/feedlist/PostItem.js b/src/newsreader/js/pages/homepage/components/postlist/PostItem.js
similarity index 83%
rename from src/newsreader/js/pages/homepage/components/feedlist/PostItem.js
rename to src/newsreader/js/pages/homepage/components/postlist/PostItem.js
index a796916..9b64289 100644
--- a/src/newsreader/js/pages/homepage/components/feedlist/PostItem.js
+++ b/src/newsreader/js/pages/homepage/components/postlist/PostItem.js
@@ -1,7 +1,7 @@
import React from 'react';
import { connect } from 'react-redux';
-import { CATEGORY_TYPE, RULE_TYPE } from '../../constants.js';
+import { CATEGORY_TYPE, RULE_TYPE, FEED, SUBREDDIT } from '../../constants.js';
import { selectPost } from '../../actions/posts.js';
import { formatDatetime } from '../../../../utils.js';
@@ -14,6 +14,11 @@ class PostItem extends React.Component {
? 'posts__header posts__header--read'
: 'posts__header';
+ const ruleUrl =
+ rule.type === FEED
+ ? `/collection/rules/${rule.id}/`
+ : `/collection/rules/subreddits/${rule.id}/`;
+
return (
{this.props.selected.type == CATEGORY_TYPE && (
-
+
{rule.name}
diff --git a/src/newsreader/js/pages/homepage/components/feedlist/FeedList.js b/src/newsreader/js/pages/homepage/components/postlist/PostList.js
similarity index 95%
rename from src/newsreader/js/pages/homepage/components/feedlist/FeedList.js
rename to src/newsreader/js/pages/homepage/components/postlist/PostList.js
index e679eed..cd57d6d 100644
--- a/src/newsreader/js/pages/homepage/components/feedlist/FeedList.js
+++ b/src/newsreader/js/pages/homepage/components/postlist/PostList.js
@@ -8,7 +8,7 @@ import { filterPosts } from './filters.js';
import LoadingIndicator from '../../../../components/LoadingIndicator.js';
import PostItem from './PostItem.js';
-class FeedList extends React.Component {
+class PostList extends React.Component {
checkScrollHeight = ::this.checkScrollHeight;
componentDidMount() {
@@ -83,4 +83,4 @@ const mapDispatchToProps = dispatch => ({
fetchPostsBySection: (rule, page = false) => dispatch(fetchPostsBySection(rule, page)),
});
-export default connect(mapStateToProps, mapDispatchToProps)(FeedList);
+export default connect(mapStateToProps, mapDispatchToProps)(PostList);
diff --git a/src/newsreader/js/pages/homepage/components/feedlist/filters.js b/src/newsreader/js/pages/homepage/components/postlist/filters.js
similarity index 100%
rename from src/newsreader/js/pages/homepage/components/feedlist/filters.js
rename to src/newsreader/js/pages/homepage/components/postlist/filters.js
diff --git a/src/newsreader/js/pages/homepage/constants.js b/src/newsreader/js/pages/homepage/constants.js
index 0e3f3d3..66b6365 100644
--- a/src/newsreader/js/pages/homepage/constants.js
+++ b/src/newsreader/js/pages/homepage/constants.js
@@ -1,2 +1,5 @@
export const RULE_TYPE = 'RULE';
export const CATEGORY_TYPE = 'CATEGORY';
+
+export const SUBREDDIT = 'subreddit';
+export const FEED = 'feed';
diff --git a/src/newsreader/news/collection/admin.py b/src/newsreader/news/collection/admin.py
index e82dea5..c5a7c5c 100644
--- a/src/newsreader/news/collection/admin.py
+++ b/src/newsreader/news/collection/admin.py
@@ -6,7 +6,14 @@ from newsreader.news.collection.models import CollectionRule
class CollectionRuleAdmin(admin.ModelAdmin):
fields = ("url", "name", "timezone", "category", "favicon", "user")
- list_display = ("name", "category", "url", "last_suceeded", "succeeded")
+ list_display = (
+ "name",
+ "type_display",
+ "category",
+ "url",
+ "last_suceeded",
+ "succeeded",
+ )
list_filter = ("user",)
def save_model(self, request, obj, form, change):
@@ -14,5 +21,8 @@ class CollectionRuleAdmin(admin.ModelAdmin):
obj.user = request.user
obj.save()
+ def type_display(self, rule):
+ return rule.get_type_display()
+
admin.site.register(CollectionRule, CollectionRuleAdmin)
diff --git a/src/newsreader/news/collection/reddit.py b/src/newsreader/news/collection/reddit.py
index 5b54762..9081a29 100644
--- a/src/newsreader/news/collection/reddit.py
+++ b/src/newsreader/news/collection/reddit.py
@@ -10,6 +10,7 @@ from uuid import uuid4
from django.conf import settings
from django.core.cache import cache
from django.utils import timezone
+from django.utils.html import format_html
import bleach
import pytz
@@ -150,11 +151,18 @@ class RedditBuilder(Builder):
else ""
)
elif direct_url.endswith(REDDIT_IMAGE_EXTENSIONS):
- body = f''
+ body = format_html(
+ "",
+ url=direct_url,
+ title=title,
+ )
elif data["is_video"]:
video_info = data["secure_media"]["reddit_video"]
- body = f'
'
+ body = format_html(
+ "
",
+ url=video_info["fallback_url"],
+ )
elif direct_url.endswith(REDDIT_VIDEO_EXTENSIONS):
extension = next(
extension.replace(".", "")
@@ -163,11 +171,22 @@ class RedditBuilder(Builder):
)
if extension == "gifv":
- body = f'
'
+ body = format_html(
+ "
",
+ url=direct_url.replace(extension, "mp4"),
+ )
else:
- body = f'
'
+ body = format_html(
+ "
",
+ url=direct_url,
+ extension=extension,
+ )
else:
- body = f''
+ body = format_html(
+ "",
+ url=direct_url,
+ title=title,
+ )
try:
parsed_date = datetime.fromtimestamp(post["data"]["created_utc"])
diff --git a/src/newsreader/news/collection/serializers.py b/src/newsreader/news/collection/serializers.py
index 640d16e..04bdba5 100644
--- a/src/newsreader/news/collection/serializers.py
+++ b/src/newsreader/news/collection/serializers.py
@@ -12,4 +12,4 @@ class RuleSerializer(serializers.ModelSerializer):
class Meta:
model = CollectionRule
- fields = ("id", "name", "url", "favicon", "category", "user", "unread")
+ fields = ("id", "type", "name", "url", "favicon", "category", "user", "unread")
diff --git a/src/newsreader/news/collection/tests/endpoints/rule/detail/tests.py b/src/newsreader/news/collection/tests/endpoints/rule/detail/tests.py
index 02f7334..8dfe6ed 100644
--- a/src/newsreader/news/collection/tests/endpoints/rule/detail/tests.py
+++ b/src/newsreader/news/collection/tests/endpoints/rule/detail/tests.py
@@ -4,9 +4,9 @@ from django.test import TestCase
from django.urls import reverse
from newsreader.accounts.tests.factories import UserFactory
-from newsreader.news.collection.tests.factories import CollectionRuleFactory
+from newsreader.news.collection.tests.factories import FeedFactory
from newsreader.news.core.models import Post
-from newsreader.news.core.tests.factories import CategoryFactory, PostFactory
+from newsreader.news.core.tests.factories import CategoryFactory, FeedPostFactory
class CollectionRuleDetailViewTestCase(TestCase):
@@ -15,7 +15,7 @@ class CollectionRuleDetailViewTestCase(TestCase):
self.client.force_login(self.user)
def test_simple(self):
- rule = CollectionRuleFactory(user=self.user)
+ rule = FeedFactory(user=self.user)
response = self.client.get(
reverse("api:news:collection:rules-detail", args=[rule.pk])
@@ -29,6 +29,7 @@ class CollectionRuleDetailViewTestCase(TestCase):
self.assertTrue("url" in data)
self.assertTrue("favicon" in data)
self.assertTrue("category" in data)
+ self.assertTrue("type" in data)
def test_not_known(self):
response = self.client.get(
@@ -40,7 +41,7 @@ class CollectionRuleDetailViewTestCase(TestCase):
self.assertEquals(data["detail"], "Not found.")
def test_post(self):
- rule = CollectionRuleFactory(user=self.user)
+ rule = FeedFactory(user=self.user)
response = self.client.post(
reverse("api:news:collection:rules-detail", args=[rule.pk])
@@ -51,7 +52,7 @@ class CollectionRuleDetailViewTestCase(TestCase):
self.assertEquals(data["detail"], 'Method "POST" not allowed.')
def test_patch(self):
- rule = CollectionRuleFactory(name="BBC", user=self.user)
+ rule = FeedFactory(name="BBC", user=self.user)
response = self.client.patch(
reverse("api:news:collection:rules-detail", args=[rule.pk]),
@@ -67,7 +68,7 @@ class CollectionRuleDetailViewTestCase(TestCase):
old_category = CategoryFactory(user=self.user)
new_category = CategoryFactory(user=self.user)
- rule = CollectionRuleFactory(name="BBC", category=old_category, user=self.user)
+ rule = FeedFactory(name="BBC", category=old_category, user=self.user)
response = self.client.patch(
reverse("api:news:collection:rules-detail", args=[rule.pk]),
@@ -80,7 +81,7 @@ class CollectionRuleDetailViewTestCase(TestCase):
self.assertEquals(data["category"], new_category.pk)
def test_identifier_cannot_be_changed(self):
- rule = CollectionRuleFactory(user=self.user)
+ rule = FeedFactory(user=self.user)
response = self.client.patch(
reverse("api:news:collection:rules-detail", args=[rule.pk]),
@@ -93,7 +94,7 @@ class CollectionRuleDetailViewTestCase(TestCase):
self.assertEquals(data["id"], rule.pk)
def test_category_change(self):
- rule = CollectionRuleFactory(user=self.user)
+ rule = FeedFactory(user=self.user)
category = CategoryFactory(user=self.user)
response = self.client.patch(
@@ -108,7 +109,7 @@ class CollectionRuleDetailViewTestCase(TestCase):
self.assertEquals(data["category"], category.pk)
def test_put(self):
- rule = CollectionRuleFactory(name="BBC", user=self.user)
+ rule = FeedFactory(name="BBC", user=self.user)
response = self.client.put(
reverse("api:news:collection:rules-detail", args=[rule.pk]),
@@ -121,7 +122,7 @@ class CollectionRuleDetailViewTestCase(TestCase):
self.assertEquals(data["name"], "BBC")
def test_delete(self):
- rule = CollectionRuleFactory(user=self.user)
+ rule = FeedFactory(user=self.user)
response = self.client.delete(
reverse("api:news:collection:rules-detail", args=[rule.pk])
@@ -132,7 +133,7 @@ class CollectionRuleDetailViewTestCase(TestCase):
def test_rule_with_unauthenticated_user(self):
self.client.logout()
- rule = CollectionRuleFactory(name="BBC", user=self.user)
+ rule = FeedFactory(name="BBC", user=self.user)
response = self.client.patch(
reverse("api:news:collection:rules-detail", args=[rule.pk]),
@@ -144,7 +145,7 @@ class CollectionRuleDetailViewTestCase(TestCase):
def test_rule_with_unauthorized_user(self):
other_user = UserFactory()
- rule = CollectionRuleFactory(name="BBC", user=other_user)
+ rule = FeedFactory(name="BBC", user=other_user)
response = self.client.patch(
reverse("api:news:collection:rules-detail", args=[rule.pk]),
@@ -155,10 +156,10 @@ class CollectionRuleDetailViewTestCase(TestCase):
self.assertEquals(response.status_code, 403)
def test_read_count(self):
- rule = CollectionRuleFactory(user=self.user)
+ rule = FeedFactory(user=self.user)
- PostFactory.create_batch(size=20, read=False, rule=rule)
- PostFactory.create_batch(size=20, read=True, rule=rule)
+ FeedPostFactory.create_batch(size=20, read=False, rule=rule)
+ FeedPostFactory.create_batch(size=20, read=True, rule=rule)
response = self.client.get(
reverse("api:news:collection:rules-detail", args=[rule.pk])
@@ -175,9 +176,9 @@ class CollectionRuleReadTestCase(TestCase):
self.client.force_login(self.user)
def test_rule_read(self):
- rule = CollectionRuleFactory(user=self.user)
+ rule = FeedFactory(user=self.user)
- PostFactory.create_batch(size=20, read=False, rule=rule)
+ FeedPostFactory.create_batch(size=20, read=False, rule=rule)
response = self.client.post(
reverse("api:news:collection:rules-read", args=[rule.pk])
@@ -197,9 +198,9 @@ class CollectionRuleReadTestCase(TestCase):
def test_unauthenticated_user(self):
self.client.logout()
- rule = CollectionRuleFactory(user=self.user)
+ rule = FeedFactory(user=self.user)
- PostFactory.create_batch(size=20, read=False, rule=rule)
+ FeedPostFactory.create_batch(size=20, read=False, rule=rule)
response = self.client.post(
reverse("api:news:collection:rules-read", args=[rule.pk])
@@ -209,9 +210,9 @@ class CollectionRuleReadTestCase(TestCase):
def test_unauthorized_user(self):
other_user = UserFactory()
- rule = CollectionRuleFactory(user=other_user)
+ rule = FeedFactory(user=other_user)
- PostFactory.create_batch(size=20, read=False, rule=rule)
+ FeedPostFactory.create_batch(size=20, read=False, rule=rule)
response = self.client.post(
reverse("api:news:collection:rules-read", args=[rule.pk])
@@ -221,7 +222,7 @@ class CollectionRuleReadTestCase(TestCase):
self.assertEquals(Post.objects.filter(read=False).count(), 20)
def test_get(self):
- rule = CollectionRuleFactory(user=self.user)
+ rule = FeedFactory(user=self.user)
response = self.client.get(
reverse("api:news:collection:rules-read", args=[rule.pk])
@@ -230,7 +231,7 @@ class CollectionRuleReadTestCase(TestCase):
self.assertEquals(response.status_code, 405)
def test_patch(self):
- rule = CollectionRuleFactory(name="BBC", user=self.user)
+ rule = FeedFactory(name="BBC", user=self.user)
response = self.client.patch(
reverse("api:news:collection:rules-read", args=[rule.pk]),
@@ -241,7 +242,7 @@ class CollectionRuleReadTestCase(TestCase):
self.assertEquals(response.status_code, 405)
def test_put(self):
- rule = CollectionRuleFactory(name="BBC", user=self.user)
+ rule = FeedFactory(name="BBC", user=self.user)
response = self.client.put(
reverse("api:news:collection:rules-read", args=[rule.pk]),
@@ -252,7 +253,7 @@ class CollectionRuleReadTestCase(TestCase):
self.assertEquals(response.status_code, 405)
def test_delete(self):
- rule = CollectionRuleFactory(user=self.user)
+ rule = FeedFactory(user=self.user)
response = self.client.delete(
reverse("api:news:collection:rules-read", args=[rule.pk])
diff --git a/src/newsreader/news/collection/tests/endpoints/rule/list/tests.py b/src/newsreader/news/collection/tests/endpoints/rule/list/tests.py
index 19d2029..4d1ba8f 100644
--- a/src/newsreader/news/collection/tests/endpoints/rule/list/tests.py
+++ b/src/newsreader/news/collection/tests/endpoints/rule/list/tests.py
@@ -8,8 +8,8 @@ from django.urls import reverse
import pytz
from newsreader.accounts.tests.factories import UserFactory
-from newsreader.news.collection.tests.factories import CollectionRuleFactory
-from newsreader.news.core.tests.factories import CategoryFactory, PostFactory
+from newsreader.news.collection.tests.factories import FeedFactory
+from newsreader.news.core.tests.factories import CategoryFactory, FeedPostFactory
class RuleListViewTestCase(TestCase):
@@ -18,7 +18,7 @@ class RuleListViewTestCase(TestCase):
self.client.force_login(self.user)
def test_simple(self):
- CollectionRuleFactory.create_batch(size=3, user=self.user)
+ FeedFactory.create_batch(size=3, user=self.user)
response = self.client.get(reverse("api:news:collection:rules-list"))
data = response.json()
@@ -30,19 +30,19 @@ class RuleListViewTestCase(TestCase):
def test_ordering(self):
rules = [
- CollectionRuleFactory(
+ FeedFactory(
created=datetime.combine(
date(2019, 5, 20), time(hour=16, minute=7, second=37), pytz.utc
),
user=self.user,
),
- CollectionRuleFactory(
+ FeedFactory(
created=datetime.combine(
date(2019, 7, 20), time(hour=18, minute=7, second=37), pytz.utc
),
user=self.user,
),
- CollectionRuleFactory(
+ FeedFactory(
created=datetime.combine(
date(2019, 7, 20), time(hour=16, minute=7, second=37), pytz.utc
),
@@ -63,7 +63,7 @@ class RuleListViewTestCase(TestCase):
self.assertEquals(data["results"][2]["id"], rules[0].pk)
def test_pagination_count(self):
- CollectionRuleFactory.create_batch(size=80, user=self.user)
+ FeedFactory.create_batch(size=80, user=self.user)
response = self.client.get(
reverse("api:news:collection:rules-list"), {"count": 30}
@@ -124,7 +124,7 @@ class RuleListViewTestCase(TestCase):
def test_rules_with_unauthenticated_user(self):
self.client.logout()
- CollectionRuleFactory.create_batch(size=3, user=self.user)
+ FeedFactory.create_batch(size=3, user=self.user)
response = self.client.get(reverse("api:news:collection:rules-list"))
@@ -132,7 +132,7 @@ class RuleListViewTestCase(TestCase):
def test_rules_with_unauthorized_user(self):
other_user = UserFactory()
- CollectionRuleFactory.create_batch(size=3, user=other_user)
+ FeedFactory.create_batch(size=3, user=other_user)
response = self.client.get(reverse("api:news:collection:rules-list"))
data = response.json()
@@ -149,8 +149,8 @@ class NestedRuleListViewTestCase(TestCase):
self.client.force_login(self.user)
def test_simple(self):
- rule = CollectionRuleFactory.create(user=self.user)
- PostFactory.create_batch(size=5, rule=rule)
+ rule = FeedFactory.create(user=self.user)
+ FeedPostFactory.create_batch(size=5, rule=rule)
response = self.client.get(
reverse("api:news:collection:rules-nested-posts", kwargs={"pk": rule.pk})
@@ -164,8 +164,8 @@ class NestedRuleListViewTestCase(TestCase):
self.assertEquals(data["count"], 5)
def test_pagination(self):
- rule = CollectionRuleFactory.create(user=self.user)
- PostFactory.create_batch(size=80, rule=rule)
+ rule = FeedFactory.create(user=self.user)
+ FeedPostFactory.create_batch(size=80, rule=rule)
response = self.client.get(
reverse("api:news:collection:rules-nested-posts", kwargs={"pk": rule.pk}),
@@ -178,7 +178,7 @@ class NestedRuleListViewTestCase(TestCase):
self.assertEquals(len(data["results"]), 30)
def test_empty(self):
- rule = CollectionRuleFactory.create(user=self.user)
+ rule = FeedFactory.create(user=self.user)
response = self.client.get(
reverse("api:news:collection:rules-nested-posts", kwargs={"pk": rule.pk})
@@ -197,7 +197,7 @@ class NestedRuleListViewTestCase(TestCase):
self.assertEquals(response.status_code, 404)
def test_post(self):
- rule = CollectionRuleFactory.create(user=self.user)
+ rule = FeedFactory.create(user=self.user)
response = self.client.post(
reverse("api:news:collection:rules-nested-posts", kwargs={"pk": rule.pk}),
@@ -210,7 +210,7 @@ class NestedRuleListViewTestCase(TestCase):
self.assertEquals(data["detail"], 'Method "POST" not allowed.')
def test_patch(self):
- rule = CollectionRuleFactory.create(user=self.user)
+ rule = FeedFactory.create(user=self.user)
response = self.client.patch(
reverse("api:news:collection:rules-nested-posts", kwargs={"pk": rule.pk}),
@@ -223,7 +223,7 @@ class NestedRuleListViewTestCase(TestCase):
self.assertEquals(data["detail"], 'Method "PATCH" not allowed.')
def test_put(self):
- rule = CollectionRuleFactory.create(user=self.user)
+ rule = FeedFactory.create(user=self.user)
response = self.client.put(
reverse("api:news:collection:rules-nested-posts", kwargs={"pk": rule.pk}),
@@ -236,7 +236,7 @@ class NestedRuleListViewTestCase(TestCase):
self.assertEquals(data["detail"], 'Method "PUT" not allowed.')
def test_delete(self):
- rule = CollectionRuleFactory.create(user=self.user)
+ rule = FeedFactory.create(user=self.user)
response = self.client.delete(
reverse("api:news:collection:rules-nested-posts", kwargs={"pk": rule.pk}),
@@ -251,7 +251,7 @@ class NestedRuleListViewTestCase(TestCase):
def test_rule_with_unauthenticated_user(self):
self.client.logout()
- rule = CollectionRuleFactory(user=self.user)
+ rule = FeedFactory(user=self.user)
response = self.client.get(
reverse("api:news:collection:rules-nested-posts", kwargs={"pk": rule.pk})
@@ -261,7 +261,7 @@ class NestedRuleListViewTestCase(TestCase):
def test_rule_with_unauthorized_user(self):
other_user = UserFactory()
- rule = CollectionRuleFactory(user=other_user)
+ rule = FeedFactory(user=other_user)
response = self.client.get(
reverse("api:news:collection:rules-nested-posts", kwargs={"pk": rule.pk})
@@ -270,26 +270,24 @@ class NestedRuleListViewTestCase(TestCase):
self.assertEquals(response.status_code, 403)
def test_posts_ordering(self):
- rule = CollectionRuleFactory(
- user=self.user, category=CategoryFactory(user=self.user)
- )
+ rule = FeedFactory(user=self.user, category=CategoryFactory(user=self.user))
posts = [
- PostFactory(
+ FeedPostFactory(
title="I'm the first post",
rule=rule,
publication_date=datetime.combine(
date(2019, 5, 20), time(hour=16, minute=7, second=37), pytz.utc
),
),
- PostFactory(
+ FeedPostFactory(
title="I'm the second post",
rule=rule,
publication_date=datetime.combine(
date(2019, 7, 20), time(hour=18, minute=7, second=37), pytz.utc
),
),
- PostFactory(
+ FeedPostFactory(
title="I'm the third post",
rule=rule,
publication_date=datetime.combine(
@@ -313,11 +311,11 @@ class NestedRuleListViewTestCase(TestCase):
self.assertEquals(data["results"][2]["id"], posts[0].pk)
def test_only_posts_from_rule_are_returned(self):
- rule = CollectionRuleFactory.create(user=self.user)
- other_rule = CollectionRuleFactory.create(user=self.user)
+ rule = FeedFactory.create(user=self.user)
+ other_rule = FeedFactory.create(user=self.user)
- PostFactory.create_batch(size=5, rule=rule)
- PostFactory.create_batch(size=5, rule=other_rule)
+ FeedPostFactory.create_batch(size=5, rule=rule)
+ FeedPostFactory.create_batch(size=5, rule=other_rule)
response = self.client.get(
reverse("api:news:collection:rules-nested-posts", kwargs={"pk": rule.pk})
@@ -334,10 +332,10 @@ class NestedRuleListViewTestCase(TestCase):
self.assertEquals(post["rule"], rule.pk)
def test_unread_posts(self):
- rule = CollectionRuleFactory.create(user=self.user)
+ rule = FeedFactory.create(user=self.user)
- PostFactory.create_batch(size=10, rule=rule, read=False)
- PostFactory.create_batch(size=10, rule=rule, read=True)
+ FeedPostFactory.create_batch(size=10, rule=rule, read=False)
+ FeedPostFactory.create_batch(size=10, rule=rule, read=True)
response = self.client.get(
reverse("api:news:collection:rules-nested-posts", kwargs={"pk": rule.pk}),
@@ -354,10 +352,10 @@ class NestedRuleListViewTestCase(TestCase):
self.assertEquals(post["read"], False)
def test_read_posts(self):
- rule = CollectionRuleFactory.create(user=self.user)
+ rule = FeedFactory.create(user=self.user)
- PostFactory.create_batch(size=20, rule=rule, read=False)
- PostFactory.create_batch(size=10, rule=rule, read=True)
+ FeedPostFactory.create_batch(size=20, rule=rule, read=False)
+ FeedPostFactory.create_batch(size=10, rule=rule, read=True)
response = self.client.get(
reverse("api:news:collection:rules-nested-posts", kwargs={"pk": rule.pk}),
diff --git a/src/newsreader/news/collection/tests/feed/builder/tests.py b/src/newsreader/news/collection/tests/feed/builder/tests.py
index 7069f96..c3e60e0 100644
--- a/src/newsreader/news/collection/tests/feed/builder/tests.py
+++ b/src/newsreader/news/collection/tests/feed/builder/tests.py
@@ -11,7 +11,7 @@ from freezegun import freeze_time
from newsreader.news.collection.feed import FeedBuilder
from newsreader.news.collection.tests.factories import FeedFactory
from newsreader.news.core.models import Post
-from newsreader.news.core.tests.factories import PostFactory
+from newsreader.news.core.tests.factories import FeedPostFactory
from .mocks import *
@@ -287,11 +287,11 @@ class FeedBuilderTestCase(TestCase):
rule = FeedFactory()
mock_stream = MagicMock(rule=rule)
- existing_first_post = PostFactory.create(
+ existing_first_post = FeedPostFactory.create(
remote_identifier="28f79ae4-8f9a-11e9-b143-00163ef6bee7", rule=rule
)
- existing_second_post = PostFactory.create(
+ existing_second_post = FeedPostFactory.create(
remote_identifier="a5479c66-8fae-11e9-8422-00163ef6bee7", rule=rule
)
diff --git a/src/newsreader/news/collection/tests/feed/collector/tests.py b/src/newsreader/news/collection/tests/feed/collector/tests.py
index b0fc7cf..5a1bac1 100644
--- a/src/newsreader/news/collection/tests/feed/collector/tests.py
+++ b/src/newsreader/news/collection/tests/feed/collector/tests.py
@@ -21,7 +21,7 @@ from newsreader.news.collection.feed import FeedCollector
from newsreader.news.collection.tests.factories import FeedFactory
from newsreader.news.collection.utils import build_publication_date
from newsreader.news.core.models import Post
-from newsreader.news.core.tests.factories import PostFactory
+from newsreader.news.core.tests.factories import FeedPostFactory
from .mocks import duplicate_mock, empty_mock, multiple_mock, multiple_update_mock
@@ -143,7 +143,7 @@ class FeedCollectorTestCase(TestCase):
struct_time((2019, 5, 20, 16, 7, 37, 0, 140, 0)), pytz.utc
)
- first_post = PostFactory(
+ first_post = FeedPostFactory(
url="https://www.bbc.co.uk/news/world-us-canada-48338168",
title="Trump's 'genocidal taunts' will not end Iran - Zarif",
body="Foreign Minister Mohammad Javad Zarif says the US "
@@ -156,7 +156,7 @@ class FeedCollectorTestCase(TestCase):
struct_time((2019, 5, 20, 12, 19, 19, 0, 140, 0)), pytz.utc
)
- second_post = PostFactory(
+ second_post = FeedPostFactory(
url="https://www.bbc.co.uk/news/technology-48334739",
title="Huawei's Android loss: How it affects you",
body="Google's move to end business ties with Huawei will "
@@ -169,7 +169,7 @@ class FeedCollectorTestCase(TestCase):
struct_time((2019, 5, 20, 16, 32, 38, 0, 140, 0)), pytz.utc
)
- third_post = PostFactory(
+ third_post = FeedPostFactory(
url="https://www.bbc.co.uk/news/uk-england-birmingham-48339080",
title="Birmingham head teacher threatened over LGBT lessons",
body="Police are investigating the messages while an MP "
@@ -194,7 +194,7 @@ class FeedCollectorTestCase(TestCase):
self.mocked_parse.return_value = multiple_update_mock
rule = FeedFactory()
- first_post = PostFactory(
+ first_post = FeedPostFactory(
remote_identifier="https://www.bbc.co.uk/news/world-us-canada-48338168",
url="https://www.bbc.co.uk/",
title="Trump",
@@ -203,7 +203,7 @@ class FeedCollectorTestCase(TestCase):
rule=rule,
)
- second_post = PostFactory(
+ second_post = FeedPostFactory(
remote_identifier="https://www.bbc.co.uk/news/technology-48334739",
url="https://www.bbc.co.uk/",
title="Huawei's Android loss: How it affects you",
@@ -212,7 +212,7 @@ class FeedCollectorTestCase(TestCase):
rule=rule,
)
- third_post = PostFactory(
+ third_post = FeedPostFactory(
remote_identifier="https://www.bbc.co.uk/news/uk-england-birmingham-48339080",
url="https://www.bbc.co.uk/news/uk-england-birmingham-48339080",
title="Birmingham head teacher threatened over LGBT lessons",
diff --git a/src/newsreader/news/collection/tests/feed/duplicate_handler/tests.py b/src/newsreader/news/collection/tests/feed/duplicate_handler/tests.py
index 18a6c6c..941de66 100644
--- a/src/newsreader/news/collection/tests/feed/duplicate_handler/tests.py
+++ b/src/newsreader/news/collection/tests/feed/duplicate_handler/tests.py
@@ -8,7 +8,7 @@ from freezegun import freeze_time
from newsreader.news.collection.feed import FeedDuplicateHandler
from newsreader.news.collection.tests.factories import FeedFactory
from newsreader.news.core.models import Post
-from newsreader.news.core.tests.factories import PostFactory
+from newsreader.news.core.tests.factories import FeedPostFactory
@freeze_time("2019-10-30 12:30:00")
@@ -19,17 +19,17 @@ class FeedDuplicateHandlerTestCase(TestCase):
def test_duplicate_entries_with_remote_identifiers(self):
rule = FeedFactory()
- existing_post = PostFactory.create(
+ existing_post = FeedPostFactory.create(
remote_identifier="28f79ae4-8f9a-11e9-b143-00163ef6bee7", rule=rule
)
- new_posts = PostFactory.build_batch(
+ new_posts = FeedPostFactory.build_batch(
remote_identifier="28f79ae4-8f9a-11e9-b143-00163ef6bee7",
publication_date=timezone.now() - timedelta(days=7),
rule=rule,
size=5,
)
- last_post = PostFactory.build(
+ last_post = FeedPostFactory.build(
remote_identifier="28f79ae4-8f9a-11e9-b143-00163ef6bee7",
publication_date=timezone.now(),
rule=rule,
@@ -54,7 +54,7 @@ class FeedDuplicateHandlerTestCase(TestCase):
def test_duplicate_entries_with_different_remote_identifiers(self):
rule = FeedFactory()
- existing_post = PostFactory(
+ existing_post = FeedPostFactory(
remote_identifier="28f79ae4-8f9a-11e9-b143-00163ef6bee7",
url="https://bbc.com",
title="New post",
@@ -63,7 +63,7 @@ class FeedDuplicateHandlerTestCase(TestCase):
rule=rule,
)
- new_posts = PostFactory.build_batch(
+ new_posts = FeedPostFactory.build_batch(
remote_identifier="28f79ae4-8f9a-11e9-b143-00163ef6bee7Q",
url="https://bbc.com",
title="New post",
@@ -72,7 +72,7 @@ class FeedDuplicateHandlerTestCase(TestCase):
rule=rule,
size=5,
)
- last_post = PostFactory.build(
+ last_post = FeedPostFactory.build(
remote_identifier="28f79ae4-8f9a-11e9-b143-00163ef6bee7Q",
url="https://bbc.com",
title="New post",
@@ -100,7 +100,7 @@ class FeedDuplicateHandlerTestCase(TestCase):
def test_duplicate_entries_in_recent_database(self):
rule = FeedFactory()
- existing_post = PostFactory(
+ existing_post = FeedPostFactory(
url="https://www.bbc.co.uk/news/uk-england-birmingham-48339080",
title="Birmingham head teacher threatened over LGBT lessons",
body="Google's move to end business ties with Huawei will affect current devices",
@@ -109,7 +109,7 @@ class FeedDuplicateHandlerTestCase(TestCase):
rule=rule,
)
- new_posts = PostFactory.build_batch(
+ new_posts = FeedPostFactory.build_batch(
url="https://www.bbc.co.uk/news/uk-england-birmingham-48339080",
title="Birmingham head teacher threatened over LGBT lessons",
body="Google's move to end business ties with Huawei will affect current devices",
@@ -119,7 +119,7 @@ class FeedDuplicateHandlerTestCase(TestCase):
size=5,
)
- last_post = PostFactory.build(
+ last_post = FeedPostFactory.build(
url="https://www.bbc.co.uk/news/uk-england-birmingham-48339080",
title="Birmingham head teacher threatened over LGBT lessons",
body="Google's move to end business ties with Huawei will affect current devices",
@@ -147,17 +147,17 @@ class FeedDuplicateHandlerTestCase(TestCase):
def test_multiple_existing_entries_with_identifier(self):
rule = FeedFactory()
- PostFactory.create_batch(
+ FeedPostFactory.create_batch(
remote_identifier="28f79ae4-8f9a-11e9-b143-00163ef6bee7", rule=rule, size=5
)
- new_posts = PostFactory.build_batch(
+ new_posts = FeedPostFactory.build_batch(
remote_identifier="28f79ae4-8f9a-11e9-b143-00163ef6bee7",
publication_date=timezone.now() - timedelta(hours=5),
rule=rule,
size=5,
)
- last_post = PostFactory.build(
+ last_post = FeedPostFactory.build(
remote_identifier="28f79ae4-8f9a-11e9-b143-00163ef6bee7",
publication_date=timezone.now() - timedelta(minutes=5),
rule=rule,
@@ -189,7 +189,7 @@ class FeedDuplicateHandlerTestCase(TestCase):
def test_duplicate_entries_outside_time_slot(self):
rule = FeedFactory()
- existing_post = PostFactory(
+ existing_post = FeedPostFactory(
url="https://www.bbc.co.uk/news/uk-england-birmingham-48339080",
title="Birmingham head teacher threatened over LGBT lessons",
body="Google's move to end business ties with Huawei will affect current devices",
@@ -198,7 +198,7 @@ class FeedDuplicateHandlerTestCase(TestCase):
rule=rule,
)
- new_posts = PostFactory.build_batch(
+ new_posts = FeedPostFactory.build_batch(
url="https://www.bbc.co.uk/news/uk-england-birmingham-48339080",
title="Birmingham head teacher threatened over LGBT lessons",
body="Google's move to end business ties with Huawei will affect current devices",
@@ -207,7 +207,7 @@ class FeedDuplicateHandlerTestCase(TestCase):
rule=rule,
size=5,
)
- last_post = PostFactory.build(
+ last_post = FeedPostFactory.build(
url="https://www.bbc.co.uk/news/uk-england-birmingham-48339080",
title="Birmingham head teacher threatened over LGBT lessons",
body="Google's move to end business ties with Huawei will affect current devices",
@@ -235,14 +235,14 @@ class FeedDuplicateHandlerTestCase(TestCase):
def test_duplicate_entries_in_collected_entries(self):
rule = FeedFactory()
- post_1 = PostFactory.build(
+ post_1 = FeedPostFactory.build(
title="title got updated",
body="body",
url="https://bbc.com",
publication_date=timezone.now(),
rule=rule,
)
- duplicate_post_1 = PostFactory.build(
+ duplicate_post_1 = FeedPostFactory.build(
title="title got updated",
body="body",
url="https://bbc.com",
@@ -250,11 +250,11 @@ class FeedDuplicateHandlerTestCase(TestCase):
rule=rule,
)
- post_2 = PostFactory.build(
+ post_2 = FeedPostFactory.build(
remote_identifier="28f79ae4-8f9a-11e9-b143-00163ef6bee7",
publication_date=timezone.now(),
)
- duplicate_post_2 = PostFactory.build(
+ duplicate_post_2 = FeedPostFactory.build(
remote_identifier="28f79ae4-8f9a-11e9-b143-00163ef6bee7",
publication_date=timezone.now() - timedelta(minutes=5),
)
diff --git a/src/newsreader/news/collection/tests/reddit/builder/tests.py b/src/newsreader/news/collection/tests/reddit/builder/tests.py
index 0df0d37..9c1a046 100644
--- a/src/newsreader/news/collection/tests/reddit/builder/tests.py
+++ b/src/newsreader/news/collection/tests/reddit/builder/tests.py
@@ -255,7 +255,7 @@ class RedditBuilderTestCase(TestCase):
post.url,
)
self.assertEquals(
- f'', post.body
+ f"", post.body
)
def test_external_image_post(self):
@@ -277,7 +277,7 @@ class RedditBuilderTestCase(TestCase):
title = "Excited cows have a new brush!"
self.assertEquals(
- f'',
+ f"",
post.body,
)
self.assertEquals(
@@ -291,7 +291,7 @@ class RedditBuilderTestCase(TestCase):
title = "Novosibirsk Zoo welcomes 16 cobalt-eyed Pallas’s cat kittens"
self.assertEquals(
- f'', post.body
+ f"", post.body
)
self.assertEquals(
"https://www.reddit.com/r/aww/comments/huoldn/novosibirsk_zoo_welcomes_16_cobalteyed_pallass/",
@@ -320,7 +320,7 @@ class RedditBuilderTestCase(TestCase):
"https://www.reddit.com/r/aww/comments/hr1r00/cool_catt_and_his_clingy_girlfriend/",
)
self.assertEquals(
- f'
',
+ f"
",
post.body,
)
@@ -346,7 +346,7 @@ class RedditBuilderTestCase(TestCase):
url = "https://gfycat.com/excellentinfantileamericanwigeon"
self.assertEquals(
- f'',
+ f"",
post.body,
)
@@ -367,10 +367,8 @@ class RedditBuilderTestCase(TestCase):
post.url, "https://www.reddit.com/r/aww/comments/humdlf/if_i_fits_i_sits/"
)
- url = "https://i.imgur.com/grVh2AG.mp4"
-
self.assertEquals(
- f'
',
+ "
",
post.body,
)
@@ -389,7 +387,7 @@ class RedditBuilderTestCase(TestCase):
url = "https://keepassxc.org/blog/2020-07-07-2.6.0-released/"
self.assertIn(
- f'',
+ f"",
post.body,
)
diff --git a/src/newsreader/news/core/tests/endpoints/category/detail/tests.py b/src/newsreader/news/core/tests/endpoints/category/detail/tests.py
index 864a144..1f42a20 100644
--- a/src/newsreader/news/core/tests/endpoints/category/detail/tests.py
+++ b/src/newsreader/news/core/tests/endpoints/category/detail/tests.py
@@ -4,8 +4,8 @@ from django.test import TestCase
from django.urls import reverse
from newsreader.accounts.tests.factories import UserFactory
-from newsreader.news.collection.tests.factories import CollectionRuleFactory
-from newsreader.news.core.tests.factories import CategoryFactory, PostFactory
+from newsreader.news.collection.tests.factories import FeedFactory
+from newsreader.news.core.tests.factories import CategoryFactory, FeedPostFactory
class CategoryDetailViewTestCase(TestCase):
@@ -116,11 +116,11 @@ class CategoryDetailViewTestCase(TestCase):
def test_read_count(self):
category = CategoryFactory(user=self.user)
- unread_rule = CollectionRuleFactory(category=category)
- read_rule = CollectionRuleFactory(category=category)
+ unread_rule = FeedFactory(category=category)
+ read_rule = FeedFactory(category=category)
- PostFactory.create_batch(size=20, read=False, rule=unread_rule)
- PostFactory.create_batch(size=20, read=True, rule=read_rule)
+ FeedPostFactory.create_batch(size=20, read=False, rule=unread_rule)
+ FeedPostFactory.create_batch(size=20, read=True, rule=read_rule)
response = self.client.get(
reverse("api:news:core:categories-detail", args=[category.pk])
@@ -139,8 +139,8 @@ class CategoryReadTestCase(TestCase):
def test_category_read(self):
category = CategoryFactory(user=self.user)
rules = [
- PostFactory.create_batch(size=5, read=False, rule=rule)
- for rule in CollectionRuleFactory.create_batch(size=5, category=category)
+ FeedPostFactory.create_batch(size=5, read=False, rule=rule)
+ for rule in FeedFactory.create_batch(size=5, category=category)
]
response = self.client.post(
@@ -165,8 +165,8 @@ class CategoryReadTestCase(TestCase):
category = CategoryFactory(user=self.user)
rules = [
- PostFactory.create_batch(size=5, read=False, rule=rule)
- for rule in CollectionRuleFactory.create_batch(
+ FeedPostFactory.create_batch(size=5, read=False, rule=rule)
+ for rule in FeedFactory.create_batch(
size=5, category=category, user=self.user
)
]
@@ -182,8 +182,8 @@ class CategoryReadTestCase(TestCase):
category = CategoryFactory(user=other_user)
rules = [
- PostFactory.create_batch(size=5, read=False, rule=rule)
- for rule in CollectionRuleFactory.create_batch(
+ FeedPostFactory.create_batch(size=5, read=False, rule=rule)
+ for rule in FeedFactory.create_batch(
size=5, category=category, user=other_user
)
]
diff --git a/src/newsreader/news/core/tests/endpoints/category/list/tests.py b/src/newsreader/news/core/tests/endpoints/category/list/tests.py
index 4d5f0e6..15fb166 100644
--- a/src/newsreader/news/core/tests/endpoints/category/list/tests.py
+++ b/src/newsreader/news/core/tests/endpoints/category/list/tests.py
@@ -8,8 +8,8 @@ from django.urls import reverse
import pytz
from newsreader.accounts.tests.factories import UserFactory
-from newsreader.news.collection.tests.factories import CollectionRuleFactory
-from newsreader.news.core.tests.factories import CategoryFactory, PostFactory
+from newsreader.news.collection.tests.factories import FeedFactory
+from newsreader.news.core.tests.factories import CategoryFactory, FeedPostFactory
class CategoryListViewTestCase(TestCase):
@@ -125,7 +125,7 @@ class NestedCategoryListViewTestCase(TestCase):
def test_simple(self):
category = CategoryFactory.create(user=self.user)
- rules = CollectionRuleFactory.create_batch(size=5, category=category)
+ rules = FeedFactory.create_batch(size=5, category=category)
response = self.client.get(
reverse("api:news:core:categories-nested-rules", kwargs={"pk": category.pk})
@@ -219,7 +219,7 @@ class NestedCategoryListViewTestCase(TestCase):
self.client.logout()
category = CategoryFactory.create(user=self.user)
- rules = CollectionRuleFactory.create_batch(size=5, category=category)
+ rules = FeedFactory.create_batch(size=5, category=category)
response = self.client.get(
reverse("api:news:core:categories-nested-rules", kwargs={"pk": category.pk})
@@ -231,7 +231,7 @@ class NestedCategoryListViewTestCase(TestCase):
other_user = UserFactory.create()
category = CategoryFactory.create(user=other_user)
- rules = CollectionRuleFactory.create_batch(size=5, category=category)
+ rules = FeedFactory.create_batch(size=5, category=category)
response = self.client.get(
reverse("api:news:core:categories-nested-rules", kwargs={"pk": category.pk})
@@ -242,9 +242,9 @@ class NestedCategoryListViewTestCase(TestCase):
def test_ordering(self):
category = CategoryFactory.create(user=self.user)
rules = [
- CollectionRuleFactory.create(category=category, name="Durp"),
- CollectionRuleFactory.create(category=category, name="Slurp"),
- CollectionRuleFactory.create(category=category, name="Burp"),
+ FeedFactory.create(category=category, name="Durp"),
+ FeedFactory.create(category=category, name="Slurp"),
+ FeedFactory.create(category=category, name="Burp"),
]
response = self.client.get(
@@ -261,13 +261,13 @@ class NestedCategoryListViewTestCase(TestCase):
def test_only_rules_from_category_are_returned(self):
other_category = CategoryFactory(user=self.user)
- CollectionRuleFactory.create_batch(size=5, category=other_category)
+ FeedFactory.create_batch(size=5, category=other_category)
category = CategoryFactory.create(user=self.user)
rules = [
- CollectionRuleFactory.create(category=category, name="Durp"),
- CollectionRuleFactory.create(category=category, name="Slurp"),
- CollectionRuleFactory.create(category=category, name="Burp"),
+ FeedFactory.create(category=category, name="Durp"),
+ FeedFactory.create(category=category, name="Slurp"),
+ FeedFactory.create(category=category, name="Burp"),
]
response = self.client.get(
@@ -291,8 +291,8 @@ class NestedCategoryPostView(TestCase):
def test_simple(self):
category = CategoryFactory.create(user=self.user)
rules = {
- rule.pk: PostFactory.create_batch(size=5, rule=rule)
- for rule in CollectionRuleFactory.create_batch(
+ rule.pk: FeedPostFactory.create_batch(size=5, rule=rule)
+ for rule in FeedFactory.create_batch(
size=5, category=category, user=self.user
)
}
@@ -327,9 +327,7 @@ class NestedCategoryPostView(TestCase):
def test_no_posts(self):
category = CategoryFactory.create(user=self.user)
- rules = CollectionRuleFactory.create_batch(
- size=5, user=self.user, category=category
- )
+ rules = FeedFactory.create_batch(size=5, user=self.user, category=category)
response = self.client.get(
reverse("api:news:core:categories-nested-posts", kwargs={"pk": category.pk})
@@ -427,25 +425,23 @@ class NestedCategoryPostView(TestCase):
def test_ordering(self):
category = CategoryFactory.create(user=self.user)
- bbc_rule = CollectionRuleFactory.create(
- name="BBC", category=category, user=self.user
- )
- guardian_rule = CollectionRuleFactory.create(
+ bbc_rule = FeedFactory.create(name="BBC", category=category, user=self.user)
+ guardian_rule = FeedFactory.create(
name="The Guardian", category=category, user=self.user
)
- reuters_rule = CollectionRuleFactory.create(
+ reuters_rule = FeedFactory.create(
name="Reuters", category=category, user=self.user
)
reuters_rule = [
- PostFactory.create(
+ FeedPostFactory.create(
title="Second Reuters post",
rule=reuters_rule,
publication_date=datetime.combine(
date(2019, 5, 21), time(hour=16, minute=7, second=37), pytz.utc
),
),
- PostFactory.create(
+ FeedPostFactory.create(
title="First Reuters post",
rule=reuters_rule,
publication_date=datetime.combine(
@@ -455,14 +451,14 @@ class NestedCategoryPostView(TestCase):
]
guardian_posts = [
- PostFactory.create(
+ FeedPostFactory.create(
title="Second Guardian post",
rule=guardian_rule,
publication_date=datetime.combine(
date(2019, 5, 21), time(hour=16, minute=7, second=37), pytz.utc
),
),
- PostFactory.create(
+ FeedPostFactory.create(
title="First Guardian post",
rule=guardian_rule,
publication_date=datetime.combine(
@@ -472,14 +468,14 @@ class NestedCategoryPostView(TestCase):
]
bbc_posts = [
- PostFactory.create(
+ FeedPostFactory.create(
title="Second BBC post",
rule=bbc_rule,
publication_date=datetime.combine(
date(2019, 5, 21), time(hour=16, minute=7, second=37), pytz.utc
),
),
- PostFactory.create(
+ FeedPostFactory.create(
title="First BBC post",
rule=bbc_rule,
publication_date=datetime.combine(
@@ -509,19 +505,19 @@ class NestedCategoryPostView(TestCase):
category = CategoryFactory.create(user=self.user)
other_category = CategoryFactory.create(user=self.user)
- guardian_rule = CollectionRuleFactory.create(
+ guardian_rule = FeedFactory.create(
name="BBC", category=category, user=self.user
)
- other_rule = CollectionRuleFactory.create(name="The Guardian", user=self.user)
+ other_rule = FeedFactory.create(name="The Guardian", user=self.user)
guardian_posts = [
- PostFactory.create(rule=guardian_rule),
- PostFactory.create(rule=guardian_rule),
+ FeedPostFactory.create(rule=guardian_rule),
+ FeedPostFactory.create(rule=guardian_rule),
]
other_posts = [
- PostFactory.create(rule=other_rule),
- PostFactory.create(rule=other_rule),
+ FeedPostFactory.create(rule=other_rule),
+ FeedPostFactory.create(rule=other_rule),
]
response = self.client.get(
@@ -538,10 +534,10 @@ class NestedCategoryPostView(TestCase):
def test_unread_posts(self):
category = CategoryFactory.create(user=self.user)
- rule = CollectionRuleFactory(category=category)
+ rule = FeedFactory(category=category)
- PostFactory.create_batch(size=10, rule=rule, read=False)
- PostFactory.create_batch(size=10, rule=rule, read=True)
+ FeedPostFactory.create_batch(size=10, rule=rule, read=False)
+ FeedPostFactory.create_batch(size=10, rule=rule, read=True)
response = self.client.get(
reverse(
@@ -561,10 +557,10 @@ class NestedCategoryPostView(TestCase):
def test_read_posts(self):
category = CategoryFactory.create(user=self.user)
- rule = CollectionRuleFactory(category=category)
+ rule = FeedFactory(category=category)
- PostFactory.create_batch(size=20, rule=rule, read=False)
- PostFactory.create_batch(size=10, rule=rule, read=True)
+ FeedPostFactory.create_batch(size=20, rule=rule, read=False)
+ FeedPostFactory.create_batch(size=10, rule=rule, read=True)
response = self.client.get(
reverse(
diff --git a/src/newsreader/news/core/tests/endpoints/post/detail/tests.py b/src/newsreader/news/core/tests/endpoints/post/detail/tests.py
index c804ff5..2d25a89 100644
--- a/src/newsreader/news/core/tests/endpoints/post/detail/tests.py
+++ b/src/newsreader/news/core/tests/endpoints/post/detail/tests.py
@@ -4,8 +4,8 @@ from django.test import TestCase
from django.urls import reverse
from newsreader.accounts.tests.factories import UserFactory
-from newsreader.news.collection.tests.factories import CollectionRuleFactory
-from newsreader.news.core.tests.factories import CategoryFactory, PostFactory
+from newsreader.news.collection.tests.factories import FeedFactory
+from newsreader.news.core.tests.factories import CategoryFactory, FeedPostFactory
class PostDetailViewTestCase(TestCase):
@@ -14,10 +14,8 @@ class PostDetailViewTestCase(TestCase):
self.client.force_login(self.user)
def test_simple(self):
- rule = CollectionRuleFactory(
- user=self.user, category=CategoryFactory(user=self.user)
- )
- post = PostFactory(rule=rule)
+ rule = FeedFactory(user=self.user, category=CategoryFactory(user=self.user))
+ post = FeedPostFactory(rule=rule)
response = self.client.get(
reverse("api:news:core:posts-detail", args=[post.pk])
@@ -43,10 +41,8 @@ class PostDetailViewTestCase(TestCase):
self.assertEquals(data["detail"], "Not found.")
def test_post(self):
- rule = CollectionRuleFactory(
- user=self.user, category=CategoryFactory(user=self.user)
- )
- post = PostFactory(rule=rule)
+ rule = FeedFactory(user=self.user, category=CategoryFactory(user=self.user))
+ post = FeedPostFactory(rule=rule)
response = self.client.post(
reverse("api:news:core:posts-detail", args=[post.pk])
@@ -57,10 +53,8 @@ class PostDetailViewTestCase(TestCase):
self.assertEquals(data["detail"], 'Method "POST" not allowed.')
def test_patch(self):
- rule = CollectionRuleFactory(
- user=self.user, category=CategoryFactory(user=self.user)
- )
- post = PostFactory(title="This is clickbait for sure", rule=rule)
+ rule = FeedFactory(user=self.user, category=CategoryFactory(user=self.user))
+ post = FeedPostFactory(title="This is clickbait for sure", rule=rule)
response = self.client.patch(
reverse("api:news:core:posts-detail", args=[post.pk]),
@@ -73,10 +67,8 @@ class PostDetailViewTestCase(TestCase):
self.assertEquals(data["title"], "This title is very accurate")
def test_identifier_cannot_be_changed(self):
- rule = CollectionRuleFactory(
- user=self.user, category=CategoryFactory(user=self.user)
- )
- post = PostFactory(title="This is clickbait for sure", rule=rule)
+ rule = FeedFactory(user=self.user, category=CategoryFactory(user=self.user))
+ post = FeedPostFactory(title="This is clickbait for sure", rule=rule)
response = self.client.patch(
reverse("api:news:core:posts-detail", args=[post.pk]),
@@ -89,13 +81,9 @@ class PostDetailViewTestCase(TestCase):
self.assertEquals(data["id"], post.pk)
def test_rule_cannot_be_changed(self):
- rule = CollectionRuleFactory(
- user=self.user, category=CategoryFactory(user=self.user)
- )
- new_rule = CollectionRuleFactory(
- user=self.user, category=CategoryFactory(user=self.user)
- )
- post = PostFactory(title="This is clickbait for sure", rule=rule)
+ rule = FeedFactory(user=self.user, category=CategoryFactory(user=self.user))
+ new_rule = FeedFactory(user=self.user, category=CategoryFactory(user=self.user))
+ post = FeedPostFactory(title="This is clickbait for sure", rule=rule)
response = self.client.patch(
reverse("api:news:core:posts-detail", args=[post.pk]),
@@ -115,10 +103,8 @@ class PostDetailViewTestCase(TestCase):
self.assertTrue(data["rule"], rule.pk)
def test_put(self):
- rule = CollectionRuleFactory(
- user=self.user, category=CategoryFactory(user=self.user)
- )
- post = PostFactory(title="This is clickbait for sure", rule=rule)
+ rule = FeedFactory(user=self.user, category=CategoryFactory(user=self.user))
+ post = FeedPostFactory(title="This is clickbait for sure", rule=rule)
response = self.client.put(
reverse("api:news:core:posts-detail", args=[post.pk]),
@@ -131,10 +117,8 @@ class PostDetailViewTestCase(TestCase):
self.assertEquals(data["title"], "This title is very accurate")
def test_delete(self):
- rule = CollectionRuleFactory(
- user=self.user, category=CategoryFactory(user=self.user)
- )
- post = PostFactory(rule=rule)
+ rule = FeedFactory(user=self.user, category=CategoryFactory(user=self.user))
+ post = FeedPostFactory(rule=rule)
response = self.client.delete(
reverse("api:news:core:posts-detail", args=[post.pk])
@@ -147,8 +131,8 @@ class PostDetailViewTestCase(TestCase):
def test_post_with_unauthenticated_user_without_category(self):
self.client.logout()
- rule = CollectionRuleFactory(user=self.user, category=None)
- post = PostFactory(rule=rule)
+ rule = FeedFactory(user=self.user, category=None)
+ post = FeedPostFactory(rule=rule)
response = self.client.get(
reverse("api:news:core:posts-detail", args=[post.pk])
@@ -159,10 +143,8 @@ class PostDetailViewTestCase(TestCase):
def test_post_with_unauthenticated_user_with_category(self):
self.client.logout()
- rule = CollectionRuleFactory(
- user=self.user, category=CategoryFactory(user=self.user)
- )
- post = PostFactory(rule=rule)
+ rule = FeedFactory(user=self.user, category=CategoryFactory(user=self.user))
+ post = FeedPostFactory(rule=rule)
response = self.client.get(
reverse("api:news:core:posts-detail", args=[post.pk])
@@ -172,8 +154,8 @@ class PostDetailViewTestCase(TestCase):
def test_post_with_unauthorized_user_without_category(self):
other_user = UserFactory()
- rule = CollectionRuleFactory(user=other_user, category=None)
- post = PostFactory(rule=rule)
+ rule = FeedFactory(user=other_user, category=None)
+ post = FeedPostFactory(rule=rule)
response = self.client.get(
reverse("api:news:core:posts-detail", args=[post.pk])
@@ -183,10 +165,8 @@ class PostDetailViewTestCase(TestCase):
def test_post_with_unauthorized_user_with_category(self):
other_user = UserFactory()
- rule = CollectionRuleFactory(
- user=other_user, category=CategoryFactory(user=other_user)
- )
- post = PostFactory(rule=rule)
+ rule = FeedFactory(user=other_user, category=CategoryFactory(user=other_user))
+ post = FeedPostFactory(rule=rule)
response = self.client.get(
reverse("api:news:core:posts-detail", args=[post.pk])
@@ -196,10 +176,8 @@ class PostDetailViewTestCase(TestCase):
def test_post_with_different_user_for_category_and_rule(self):
other_user = UserFactory()
- rule = CollectionRuleFactory(
- user=self.user, category=CategoryFactory(user=other_user)
- )
- post = PostFactory(rule=rule)
+ rule = FeedFactory(user=self.user, category=CategoryFactory(user=other_user))
+ post = FeedPostFactory(rule=rule)
response = self.client.get(
reverse("api:news:core:posts-detail", args=[post.pk])
@@ -208,10 +186,8 @@ class PostDetailViewTestCase(TestCase):
self.assertEquals(response.status_code, 403)
def test_mark_read(self):
- rule = CollectionRuleFactory(
- user=self.user, category=CategoryFactory(user=self.user)
- )
- post = PostFactory(rule=rule, read=False)
+ rule = FeedFactory(user=self.user, category=CategoryFactory(user=self.user))
+ post = FeedPostFactory(rule=rule, read=False)
response = self.client.patch(
reverse("api:news:core:posts-detail", args=[post.pk]),
@@ -224,10 +200,8 @@ class PostDetailViewTestCase(TestCase):
self.assertEquals(data["read"], True)
def test_mark_unread(self):
- rule = CollectionRuleFactory(
- user=self.user, category=CategoryFactory(user=self.user)
- )
- post = PostFactory(rule=rule, read=True)
+ rule = FeedFactory(user=self.user, category=CategoryFactory(user=self.user))
+ post = FeedPostFactory(rule=rule, read=True)
response = self.client.patch(
reverse("api:news:core:posts-detail", args=[post.pk]),
diff --git a/src/newsreader/news/core/tests/endpoints/post/list/tests.py b/src/newsreader/news/core/tests/endpoints/post/list/tests.py
index 3800b64..3bf9d17 100644
--- a/src/newsreader/news/core/tests/endpoints/post/list/tests.py
+++ b/src/newsreader/news/core/tests/endpoints/post/list/tests.py
@@ -6,8 +6,8 @@ from django.urls import reverse
import pytz
from newsreader.accounts.tests.factories import UserFactory
-from newsreader.news.collection.tests.factories import CollectionRuleFactory
-from newsreader.news.core.tests.factories import CategoryFactory, PostFactory
+from newsreader.news.collection.tests.factories import FeedFactory
+from newsreader.news.core.tests.factories import CategoryFactory, FeedPostFactory
class PostListViewTestCase(TestCase):
@@ -16,10 +16,8 @@ class PostListViewTestCase(TestCase):
self.client.force_login(self.user)
def test_simple(self):
- rule = CollectionRuleFactory(
- user=self.user, category=CategoryFactory(user=self.user)
- )
- PostFactory.create_batch(size=3, rule=rule)
+ rule = FeedFactory(user=self.user, category=CategoryFactory(user=self.user))
+ FeedPostFactory.create_batch(size=3, rule=rule)
response = self.client.get(reverse("api:news:core:posts-list"))
data = response.json()
@@ -30,26 +28,24 @@ class PostListViewTestCase(TestCase):
self.assertEquals(data["count"], 3)
def test_ordering(self):
- rule = CollectionRuleFactory(
- user=self.user, category=CategoryFactory(user=self.user)
- )
+ rule = FeedFactory(user=self.user, category=CategoryFactory(user=self.user))
posts = [
- PostFactory(
+ FeedPostFactory(
title="I'm the first post",
rule=rule,
publication_date=datetime.combine(
date(2019, 5, 20), time(hour=16, minute=7, second=37), pytz.utc
),
),
- PostFactory(
+ FeedPostFactory(
title="I'm the second post",
rule=rule,
publication_date=datetime.combine(
date(2019, 7, 20), time(hour=18, minute=7, second=37), pytz.utc
),
),
- PostFactory(
+ FeedPostFactory(
title="I'm the third post",
rule=rule,
publication_date=datetime.combine(
@@ -71,10 +67,8 @@ class PostListViewTestCase(TestCase):
self.assertEquals(data["results"][2]["id"], posts[0].pk)
def test_pagination_count(self):
- rule = CollectionRuleFactory(
- user=self.user, category=CategoryFactory(user=self.user)
- )
- PostFactory.create_batch(size=80, rule=rule)
+ rule = FeedFactory(user=self.user, category=CategoryFactory(user=self.user))
+ FeedPostFactory.create_batch(size=80, rule=rule)
page_size = 50
response = self.client.get(reverse("api:news:core:posts-list"), {"count": 50})
@@ -126,7 +120,7 @@ class PostListViewTestCase(TestCase):
def test_posts_with_unauthenticated_user_without_category(self):
self.client.logout()
- PostFactory.create_batch(size=3, rule=CollectionRuleFactory(user=self.user))
+ FeedPostFactory.create_batch(size=3, rule=FeedFactory(user=self.user))
response = self.client.get(reverse("api:news:core:posts-list"))
@@ -137,8 +131,8 @@ class PostListViewTestCase(TestCase):
category = CategoryFactory(user=self.user)
- PostFactory.create_batch(
- size=3, rule=CollectionRuleFactory(user=self.user, category=category)
+ FeedPostFactory.create_batch(
+ size=3, rule=FeedFactory(user=self.user, category=category)
)
response = self.client.get(reverse("api:news:core:posts-list"))
@@ -148,8 +142,8 @@ class PostListViewTestCase(TestCase):
def test_posts_with_unauthorized_user_without_category(self):
other_user = UserFactory()
- rule = CollectionRuleFactory(user=other_user, category=None)
- PostFactory.create_batch(size=3, rule=rule)
+ rule = FeedFactory(user=other_user, category=None)
+ FeedPostFactory.create_batch(size=3, rule=rule)
response = self.client.get(reverse("api:news:core:posts-list"))
data = response.json()
@@ -162,8 +156,8 @@ class PostListViewTestCase(TestCase):
other_user = UserFactory()
category = CategoryFactory(user=other_user)
- PostFactory.create_batch(
- size=3, rule=CollectionRuleFactory(user=other_user, category=category)
+ FeedPostFactory.create_batch(
+ size=3, rule=FeedFactory(user=other_user, category=category)
)
response = self.client.get(reverse("api:news:core:posts-list"))
@@ -178,10 +172,8 @@ class PostListViewTestCase(TestCase):
def test_posts_with_authorized_rule_unauthorized_category(self):
other_user = UserFactory()
- rule = CollectionRuleFactory(
- user=self.user, category=CategoryFactory(user=other_user)
- )
- PostFactory.create_batch(size=3, rule=rule)
+ rule = FeedFactory(user=self.user, category=CategoryFactory(user=other_user))
+ FeedPostFactory.create_batch(size=3, rule=rule)
response = self.client.get(reverse("api:news:core:posts-list"))
data = response.json()
@@ -192,8 +184,8 @@ class PostListViewTestCase(TestCase):
self.assertEquals(data["count"], 0)
def test_posts_with_authorized_user_without_category(self):
- rule = CollectionRuleFactory(user=self.user, category=None)
- PostFactory.create_batch(size=3, rule=rule)
+ rule = FeedFactory(user=self.user, category=None)
+ FeedPostFactory.create_batch(size=3, rule=rule)
response = self.client.get(reverse("api:news:core:posts-list"))
data = response.json()
@@ -204,12 +196,10 @@ class PostListViewTestCase(TestCase):
self.assertEquals(data["count"], 3)
def test_unread_posts(self):
- rule = CollectionRuleFactory(
- user=self.user, category=CategoryFactory(user=self.user)
- )
+ rule = FeedFactory(user=self.user, category=CategoryFactory(user=self.user))
- PostFactory.create_batch(size=10, rule=rule, read=False)
- PostFactory.create_batch(size=10, rule=rule, read=True)
+ FeedPostFactory.create_batch(size=10, rule=rule, read=False)
+ FeedPostFactory.create_batch(size=10, rule=rule, read=True)
response = self.client.get(
reverse("api:news:core:posts-list"), {"read": "false"}
@@ -225,12 +215,10 @@ class PostListViewTestCase(TestCase):
self.assertEquals(post["read"], False)
def test_read_posts(self):
- rule = CollectionRuleFactory(
- user=self.user, category=CategoryFactory(user=self.user)
- )
+ rule = FeedFactory(user=self.user, category=CategoryFactory(user=self.user))
- PostFactory.create_batch(size=20, rule=rule, read=False)
- PostFactory.create_batch(size=10, rule=rule, read=True)
+ FeedPostFactory.create_batch(size=20, rule=rule, read=False)
+ FeedPostFactory.create_batch(size=10, rule=rule, read=True)
response = self.client.get(
reverse("api:news:core:posts-list"), {"read": "true"}
diff --git a/src/newsreader/news/core/tests/factories.py b/src/newsreader/news/core/tests/factories.py
index 966e70b..182db0e 100644
--- a/src/newsreader/news/core/tests/factories.py
+++ b/src/newsreader/news/core/tests/factories.py
@@ -33,8 +33,11 @@ class PostFactory(factory.django.DjangoModelFactory):
model = Post
+class FeedPostFactory(PostFactory):
+ rule = factory.SubFactory("newsreader.news.collection.tests.factories.FeedFactory")
+
+
class RedditPostFactory(PostFactory):
- remote_identifier = factory.Faker("uuid4")
url = factory.fuzzy.FuzzyText(length=10, prefix=f"{REDDIT_URL}/")
rule = factory.SubFactory(
"newsreader.news.collection.tests.factories.SubredditFactory"