diff --git a/src/newsreader/conf/base.py b/src/newsreader/conf/base.py index 3692deb..6bc2840 100644 --- a/src/newsreader/conf/base.py +++ b/src/newsreader/conf/base.py @@ -31,6 +31,7 @@ INSTALLED_APPS = [ "axes", # app modules "newsreader.accounts", + "newsreader.news", "newsreader.news.core", "newsreader.news.collection", ] diff --git a/src/newsreader/news/apps.py b/src/newsreader/news/apps.py new file mode 100644 index 0000000..42c63ba --- /dev/null +++ b/src/newsreader/news/apps.py @@ -0,0 +1,5 @@ +from django.apps import AppConfig + + +class NewsConfig(AppConfig): + name = "news" diff --git a/src/newsreader/news/collection/models.py b/src/newsreader/news/collection/models.py index a5bfdfb..3ab9c0d 100644 --- a/src/newsreader/news/collection/models.py +++ b/src/newsreader/news/collection/models.py @@ -10,7 +10,9 @@ class CollectionRule(TimeStampedModel): name = models.CharField(max_length=100) url = models.URLField(max_length=1024) - website_url = models.URLField(max_length=1024, editable=False, blank=True, null=True) + website_url = models.URLField( + max_length=1024, editable=False, blank=True, null=True + ) favicon = models.URLField(blank=True, null=True) timezone = models.CharField( diff --git a/src/newsreader/news/collection/templates/collection/import.html b/src/newsreader/news/collection/templates/collection/import.html index ac8317d..0ca15ab 100644 --- a/src/newsreader/news/collection/templates/collection/import.html +++ b/src/newsreader/news/collection/templates/collection/import.html @@ -28,7 +28,7 @@
- Cancel + Cancel
diff --git a/src/newsreader/news/collection/templates/collection/rule.html b/src/newsreader/news/collection/templates/collection/rule.html index 32aa370..c7f56f4 100644 --- a/src/newsreader/news/collection/templates/collection/rule.html +++ b/src/newsreader/news/collection/templates/collection/rule.html @@ -46,7 +46,7 @@
- Cancel + Cancel {% block confirm-button %}{% endblock %}
diff --git a/src/newsreader/news/collection/templates/collection/rules.html b/src/newsreader/news/collection/templates/collection/rules.html index 23b3fe7..ee6d539 100644 --- a/src/newsreader/news/collection/templates/collection/rules.html +++ b/src/newsreader/news/collection/templates/collection/rules.html @@ -9,9 +9,9 @@ {% csrf_token %}
- - - + + +
@@ -37,7 +37,7 @@ {% endfor %} 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 1c281d9..02f7334 100644 --- a/src/newsreader/news/collection/tests/endpoints/rule/detail/tests.py +++ b/src/newsreader/news/collection/tests/endpoints/rule/detail/tests.py @@ -17,7 +17,9 @@ class CollectionRuleDetailViewTestCase(TestCase): def test_simple(self): rule = CollectionRuleFactory(user=self.user) - response = self.client.get(reverse("api:rules-detail", args=[rule.pk])) + response = self.client.get( + reverse("api:news:collection:rules-detail", args=[rule.pk]) + ) data = response.json() self.assertEquals(response.status_code, 200) @@ -29,7 +31,9 @@ class CollectionRuleDetailViewTestCase(TestCase): self.assertTrue("category" in data) def test_not_known(self): - response = self.client.get(reverse("api:rules-detail", args=[100])) + response = self.client.get( + reverse("api:news:collection:rules-detail", args=[100]) + ) data = response.json() self.assertEquals(response.status_code, 404) @@ -38,7 +42,9 @@ class CollectionRuleDetailViewTestCase(TestCase): def test_post(self): rule = CollectionRuleFactory(user=self.user) - response = self.client.post(reverse("api:rules-detail", args=[rule.pk])) + response = self.client.post( + reverse("api:news:collection:rules-detail", args=[rule.pk]) + ) data = response.json() self.assertEquals(response.status_code, 405) @@ -48,7 +54,7 @@ class CollectionRuleDetailViewTestCase(TestCase): rule = CollectionRuleFactory(name="BBC", user=self.user) response = self.client.patch( - reverse("api:rules-detail", args=[rule.pk]), + reverse("api:news:collection:rules-detail", args=[rule.pk]), data=json.dumps({"name": "The guardian"}), content_type="application/json", ) @@ -64,7 +70,7 @@ class CollectionRuleDetailViewTestCase(TestCase): rule = CollectionRuleFactory(name="BBC", category=old_category, user=self.user) response = self.client.patch( - reverse("api:rules-detail", args=[rule.pk]), + reverse("api:news:collection:rules-detail", args=[rule.pk]), data=json.dumps({"category": absolute_url}), content_type="application/json", ) @@ -77,7 +83,7 @@ class CollectionRuleDetailViewTestCase(TestCase): rule = CollectionRuleFactory(user=self.user) response = self.client.patch( - reverse("api:rules-detail", args=[rule.pk]), + reverse("api:news:collection:rules-detail", args=[rule.pk]), data=json.dumps({"id": 44}), content_type="application/json", ) @@ -91,7 +97,7 @@ class CollectionRuleDetailViewTestCase(TestCase): category = CategoryFactory(user=self.user) response = self.client.patch( - reverse("api:rules-detail", args=[rule.pk]), + reverse("api:news:collection:rules-detail", args=[rule.pk]), data=json.dumps({"category": category.pk}), content_type="application/json", ) @@ -105,7 +111,7 @@ class CollectionRuleDetailViewTestCase(TestCase): rule = CollectionRuleFactory(name="BBC", user=self.user) response = self.client.put( - reverse("api:rules-detail", args=[rule.pk]), + reverse("api:news:collection:rules-detail", args=[rule.pk]), data=json.dumps({"name": "BBC", "url": "https://www.bbc.co.uk"}), content_type="application/json", ) @@ -117,7 +123,9 @@ class CollectionRuleDetailViewTestCase(TestCase): def test_delete(self): rule = CollectionRuleFactory(user=self.user) - response = self.client.delete(reverse("api:rules-detail", args=[rule.pk])) + response = self.client.delete( + reverse("api:news:collection:rules-detail", args=[rule.pk]) + ) self.assertEquals(response.status_code, 204) @@ -127,7 +135,7 @@ class CollectionRuleDetailViewTestCase(TestCase): rule = CollectionRuleFactory(name="BBC", user=self.user) response = self.client.patch( - reverse("api:rules-detail", args=[rule.pk]), + reverse("api:news:collection:rules-detail", args=[rule.pk]), data=json.dumps({"name": "The guardian"}), content_type="application/json", ) @@ -139,7 +147,7 @@ class CollectionRuleDetailViewTestCase(TestCase): rule = CollectionRuleFactory(name="BBC", user=other_user) response = self.client.patch( - reverse("api:rules-detail", args=[rule.pk]), + reverse("api:news:collection:rules-detail", args=[rule.pk]), data=json.dumps({"name": "The guardian"}), content_type="application/json", ) @@ -152,7 +160,9 @@ class CollectionRuleDetailViewTestCase(TestCase): PostFactory.create_batch(size=20, read=False, rule=rule) PostFactory.create_batch(size=20, read=True, rule=rule) - response = self.client.get(reverse("api:rules-detail", args=[rule.pk])) + response = self.client.get( + reverse("api:news:collection:rules-detail", args=[rule.pk]) + ) data = response.json() self.assertEquals(response.status_code, 200) @@ -169,14 +179,18 @@ class CollectionRuleReadTestCase(TestCase): PostFactory.create_batch(size=20, read=False, rule=rule) - response = self.client.post(reverse("api:rules-read", args=[rule.pk])) + response = self.client.post( + reverse("api:news:collection:rules-read", args=[rule.pk]) + ) data = response.json() self.assertEquals(response.status_code, 201) self.assertEquals(data["unread"], 0) def test_rule_unknown(self): - response = self.client.post(reverse("api:rules-read", args=[101])) + response = self.client.post( + reverse("api:news:collection:rules-read", args=[101]) + ) self.assertEquals(response.status_code, 404) @@ -187,7 +201,9 @@ class CollectionRuleReadTestCase(TestCase): PostFactory.create_batch(size=20, read=False, rule=rule) - response = self.client.post(reverse("api:rules-read", args=[rule.pk])) + response = self.client.post( + reverse("api:news:collection:rules-read", args=[rule.pk]) + ) self.assertEquals(response.status_code, 403) @@ -197,7 +213,9 @@ class CollectionRuleReadTestCase(TestCase): PostFactory.create_batch(size=20, read=False, rule=rule) - response = self.client.post(reverse("api:rules-read", args=[rule.pk])) + response = self.client.post( + reverse("api:news:collection:rules-read", args=[rule.pk]) + ) self.assertEquals(response.status_code, 403) self.assertEquals(Post.objects.filter(read=False).count(), 20) @@ -205,7 +223,9 @@ class CollectionRuleReadTestCase(TestCase): def test_get(self): rule = CollectionRuleFactory(user=self.user) - response = self.client.get(reverse("api:rules-read", args=[rule.pk])) + response = self.client.get( + reverse("api:news:collection:rules-read", args=[rule.pk]) + ) self.assertEquals(response.status_code, 405) @@ -213,7 +233,7 @@ class CollectionRuleReadTestCase(TestCase): rule = CollectionRuleFactory(name="BBC", user=self.user) response = self.client.patch( - reverse("api:rules-read", args=[rule.pk]), + reverse("api:news:collection:rules-read", args=[rule.pk]), data=json.dumps({"name": "Not possible"}), content_type="application/json", ) @@ -224,7 +244,7 @@ class CollectionRuleReadTestCase(TestCase): rule = CollectionRuleFactory(name="BBC", user=self.user) response = self.client.put( - reverse("api:rules-read", args=[rule.pk]), + reverse("api:news:collection:rules-read", args=[rule.pk]), data=json.dumps({"name": "Not possible"}), content_type="application/json", ) @@ -234,6 +254,8 @@ class CollectionRuleReadTestCase(TestCase): def test_delete(self): rule = CollectionRuleFactory(user=self.user) - response = self.client.delete(reverse("api:rules-read", args=[rule.pk])) + response = self.client.delete( + reverse("api:news:collection:rules-read", args=[rule.pk]) + ) self.assertEquals(response.status_code, 405) 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 0e2a269..19d2029 100644 --- a/src/newsreader/news/collection/tests/endpoints/rule/list/tests.py +++ b/src/newsreader/news/collection/tests/endpoints/rule/list/tests.py @@ -20,7 +20,7 @@ class RuleListViewTestCase(TestCase): def test_simple(self): CollectionRuleFactory.create_batch(size=3, user=self.user) - response = self.client.get(reverse("api:rules-list")) + response = self.client.get(reverse("api:news:collection:rules-list")) data = response.json() self.assertEquals(response.status_code, 200) @@ -50,7 +50,7 @@ class RuleListViewTestCase(TestCase): ), ] - response = self.client.get(reverse("api:rules-list")) + response = self.client.get(reverse("api:news:collection:rules-list")) data = response.json() self.assertEquals(response.status_code, 200) @@ -65,7 +65,9 @@ class RuleListViewTestCase(TestCase): def test_pagination_count(self): CollectionRuleFactory.create_batch(size=80, user=self.user) - response = self.client.get(reverse("api:rules-list"), {"count": 30}) + response = self.client.get( + reverse("api:news:collection:rules-list"), {"count": 30} + ) data = response.json() self.assertEquals(response.status_code, 200) @@ -73,7 +75,7 @@ class RuleListViewTestCase(TestCase): self.assertEquals(len(data["results"]), 30) def test_empty(self): - response = self.client.get(reverse("api:rules-list")) + response = self.client.get(reverse("api:news:collection:rules-list")) data = response.json() self.assertEquals(response.status_code, 200) @@ -89,7 +91,7 @@ class RuleListViewTestCase(TestCase): data = {"name": "BBC", "url": "https://www.bbc.co.uk", "category": category.pk} response = self.client.post( - reverse("api:rules-list"), + reverse("api:news:collection:rules-list"), data=json.dumps(data), content_type="application/json", ) @@ -99,21 +101,21 @@ class RuleListViewTestCase(TestCase): self.assertEquals(data["detail"], 'Method "POST" not allowed.') def test_patch(self): - response = self.client.patch(reverse("api:rules-list")) + response = self.client.patch(reverse("api:news:collection:rules-list")) data = response.json() self.assertEquals(response.status_code, 405) self.assertEquals(data["detail"], 'Method "PATCH" not allowed.') def test_put(self): - response = self.client.put(reverse("api:rules-list")) + response = self.client.put(reverse("api:news:collection:rules-list")) data = response.json() self.assertEquals(response.status_code, 405) self.assertEquals(data["detail"], 'Method "PUT" not allowed.') def test_delete(self): - response = self.client.delete(reverse("api:rules-list")) + response = self.client.delete(reverse("api:news:collection:rules-list")) data = response.json() self.assertEquals(response.status_code, 405) @@ -124,7 +126,7 @@ class RuleListViewTestCase(TestCase): CollectionRuleFactory.create_batch(size=3, user=self.user) - response = self.client.get(reverse("api:rules-list")) + response = self.client.get(reverse("api:news:collection:rules-list")) self.assertEquals(response.status_code, 403) @@ -132,7 +134,7 @@ class RuleListViewTestCase(TestCase): other_user = UserFactory() CollectionRuleFactory.create_batch(size=3, user=other_user) - response = self.client.get(reverse("api:rules-list")) + response = self.client.get(reverse("api:news:collection:rules-list")) data = response.json() self.assertEquals(response.status_code, 200) @@ -151,7 +153,7 @@ class NestedRuleListViewTestCase(TestCase): PostFactory.create_batch(size=5, rule=rule) response = self.client.get( - reverse("api:rules-nested-posts", kwargs={"pk": rule.pk}) + reverse("api:news:collection:rules-nested-posts", kwargs={"pk": rule.pk}) ) data = response.json() @@ -166,7 +168,8 @@ class NestedRuleListViewTestCase(TestCase): PostFactory.create_batch(size=80, rule=rule) response = self.client.get( - reverse("api:rules-nested-posts", kwargs={"pk": rule.pk}), {"count": 30} + reverse("api:news:collection:rules-nested-posts", kwargs={"pk": rule.pk}), + {"count": 30}, ) data = response.json() @@ -178,7 +181,7 @@ class NestedRuleListViewTestCase(TestCase): rule = CollectionRuleFactory.create(user=self.user) response = self.client.get( - reverse("api:rules-nested-posts", kwargs={"pk": rule.pk}) + reverse("api:news:collection:rules-nested-posts", kwargs={"pk": rule.pk}) ) data = response.json() @@ -187,7 +190,9 @@ class NestedRuleListViewTestCase(TestCase): self.assertEquals(len(data["results"]), 0) def test_not_known(self): - response = self.client.get(reverse("api:rules-nested-posts", kwargs={"pk": 0})) + response = self.client.get( + reverse("api:news:collection:rules-nested-posts", kwargs={"pk": 0}) + ) self.assertEquals(response.status_code, 404) @@ -195,7 +200,7 @@ class NestedRuleListViewTestCase(TestCase): rule = CollectionRuleFactory.create(user=self.user) response = self.client.post( - reverse("api:rules-nested-posts", kwargs={"pk": rule.pk}), + reverse("api:news:collection:rules-nested-posts", kwargs={"pk": rule.pk}), data=json.dumps({}), content_type="application/json", ) @@ -208,7 +213,7 @@ class NestedRuleListViewTestCase(TestCase): rule = CollectionRuleFactory.create(user=self.user) response = self.client.patch( - reverse("api:rules-nested-posts", kwargs={"pk": rule.pk}), + reverse("api:news:collection:rules-nested-posts", kwargs={"pk": rule.pk}), data=json.dumps({}), content_type="application/json", ) @@ -221,7 +226,7 @@ class NestedRuleListViewTestCase(TestCase): rule = CollectionRuleFactory.create(user=self.user) response = self.client.put( - reverse("api:rules-nested-posts", kwargs={"pk": rule.pk}), + reverse("api:news:collection:rules-nested-posts", kwargs={"pk": rule.pk}), data=json.dumps({}), content_type="application/json", ) @@ -234,7 +239,7 @@ class NestedRuleListViewTestCase(TestCase): rule = CollectionRuleFactory.create(user=self.user) response = self.client.delete( - reverse("api:rules-nested-posts", kwargs={"pk": rule.pk}), + reverse("api:news:collection:rules-nested-posts", kwargs={"pk": rule.pk}), data=json.dumps({}), content_type="application/json", ) @@ -249,7 +254,7 @@ class NestedRuleListViewTestCase(TestCase): rule = CollectionRuleFactory(user=self.user) response = self.client.get( - reverse("api:rules-nested-posts", kwargs={"pk": rule.pk}) + reverse("api:news:collection:rules-nested-posts", kwargs={"pk": rule.pk}) ) self.assertEquals(response.status_code, 403) @@ -259,7 +264,7 @@ class NestedRuleListViewTestCase(TestCase): rule = CollectionRuleFactory(user=other_user) response = self.client.get( - reverse("api:rules-nested-posts", kwargs={"pk": rule.pk}) + reverse("api:news:collection:rules-nested-posts", kwargs={"pk": rule.pk}) ) self.assertEquals(response.status_code, 403) @@ -294,7 +299,7 @@ class NestedRuleListViewTestCase(TestCase): ] response = self.client.get( - reverse("api:rules-nested-posts", kwargs={"pk": rule.pk}) + reverse("api:news:collection:rules-nested-posts", kwargs={"pk": rule.pk}) ) data = response.json() @@ -315,7 +320,7 @@ class NestedRuleListViewTestCase(TestCase): PostFactory.create_batch(size=5, rule=other_rule) response = self.client.get( - reverse("api:rules-nested-posts", kwargs={"pk": rule.pk}) + reverse("api:news:collection:rules-nested-posts", kwargs={"pk": rule.pk}) ) data = response.json() @@ -335,7 +340,8 @@ class NestedRuleListViewTestCase(TestCase): PostFactory.create_batch(size=10, rule=rule, read=True) response = self.client.get( - reverse("api:rules-nested-posts", kwargs={"pk": rule.pk}), {"read": "false"} + reverse("api:news:collection:rules-nested-posts", kwargs={"pk": rule.pk}), + {"read": "false"}, ) data = response.json() @@ -354,7 +360,8 @@ class NestedRuleListViewTestCase(TestCase): PostFactory.create_batch(size=10, rule=rule, read=True) response = self.client.get( - reverse("api:rules-nested-posts", kwargs={"pk": rule.pk}), {"read": "true"} + reverse("api:news:collection:rules-nested-posts", kwargs={"pk": rule.pk}), + {"read": "true"}, ) data = response.json() diff --git a/src/newsreader/news/collection/tests/views/test_bulk_views.py b/src/newsreader/news/collection/tests/views/test_bulk_views.py index 7679907..1cbc8ca 100644 --- a/src/newsreader/news/collection/tests/views/test_bulk_views.py +++ b/src/newsreader/news/collection/tests/views/test_bulk_views.py @@ -1,20 +1,16 @@ - -from django.conf import settings from django.test import TestCase from django.urls import reverse from django.utils.translation import gettext_lazy as _ -import pytz from newsreader.accounts.tests.factories import UserFactory from newsreader.news.collection.models import CollectionRule from newsreader.news.collection.tests.factories import CollectionRuleFactory -from newsreader.news.core.tests.factories import CategoryFactory class CollectionRuleBulkViewTestCase: def setUp(self): - self.redirect_url = reverse("rules") + self.redirect_url = reverse("news:collection:rules") self.user = UserFactory() self.client.force_login(self.user) @@ -24,7 +20,7 @@ class CollectionRuleBulkEnableViewTestCase(CollectionRuleBulkViewTestCase, TestC def setUp(self): super().setUp() - self.url = reverse("rules-enable") + self.url = reverse("news:collection:rules-enable") self.rules = CollectionRuleFactory.create_batch( size=5, user=self.user, enabled=False @@ -88,7 +84,8 @@ class CollectionRuleBulkEnableViewTestCase(CollectionRuleBulkViewTestCase, TestC ) self.assertRedirects( - response, f"{reverse('accounts:login')}?next={reverse('rules-enable')}" + response, + f"{reverse('accounts:login')}?next={reverse('news:collection:rules-enable')}", ) rules = CollectionRule.objects.filter(user=self.user) @@ -102,7 +99,7 @@ class CollectionRuleBulkDisableViewTestCase(CollectionRuleBulkViewTestCase, Test def setUp(self): super().setUp() - self.url = reverse("rules-disable") + self.url = reverse("news:collection:rules-disable") self.rules = CollectionRuleFactory.create_batch( size=5, user=self.user, enabled=True @@ -166,7 +163,8 @@ class CollectionRuleBulkDisableViewTestCase(CollectionRuleBulkViewTestCase, Test ) self.assertRedirects( - response, f"{reverse('accounts:login')}?next={reverse('rules-disable')}" + response, + f"{reverse('accounts:login')}?next={reverse('news:collection:rules-disable')}", ) rules = CollectionRule.objects.filter(user=self.user) @@ -180,7 +178,7 @@ class CollectionRuleBulkDeleteViewTestCase(CollectionRuleBulkViewTestCase, TestC def setUp(self): super().setUp() - self.url = reverse("rules-delete") + self.url = reverse("news:collection:rules-delete") self.rules = CollectionRuleFactory.create_batch(size=5, user=self.user) @@ -236,7 +234,8 @@ class CollectionRuleBulkDeleteViewTestCase(CollectionRuleBulkViewTestCase, TestC ) self.assertRedirects( - response, f"{reverse('accounts:login')}?next={reverse('rules-delete')}" + response, + f"{reverse('accounts:login')}?next={reverse('news:collection:rules-delete')}", ) rules = CollectionRule.objects.filter(user=self.user) diff --git a/src/newsreader/news/collection/tests/views/test_import_view.py b/src/newsreader/news/collection/tests/views/test_import_view.py index 57ac502..776e4c6 100644 --- a/src/newsreader/news/collection/tests/views/test_import_view.py +++ b/src/newsreader/news/collection/tests/views/test_import_view.py @@ -5,12 +5,9 @@ from django.test import TestCase from django.urls import reverse from django.utils.translation import gettext_lazy as _ -import pytz - from newsreader.accounts.tests.factories import UserFactory from newsreader.news.collection.models import CollectionRule from newsreader.news.collection.tests.factories import CollectionRuleFactory -from newsreader.news.core.tests.factories import CategoryFactory class OPMLImportTestCase(TestCase): @@ -39,7 +36,9 @@ class OPMLImportTestCase(TestCase): self.assertEquals(len(rules), 4) def test_existing_rules(self): - CollectionRuleFactory(url="http://www.engadget.com/rss-full.xml", user=self.user) + CollectionRuleFactory( + url="http://www.engadget.com/rss-full.xml", user=self.user + ) CollectionRuleFactory(url="https://news.ycombinator.com/rss", user=self.user) CollectionRuleFactory( url="http://feeds.feedburner.com/Techcrunch", user=self.user @@ -61,7 +60,9 @@ class OPMLImportTestCase(TestCase): self.assertEquals(len(rules), 8) def test_skip_existing_rules(self): - CollectionRuleFactory(url="http://www.engadget.com/rss-full.xml", user=self.user) + CollectionRuleFactory( + url="http://www.engadget.com/rss-full.xml", user=self.user + ) CollectionRuleFactory(url="https://news.ycombinator.com/rss", user=self.user) CollectionRuleFactory( url="http://feeds.feedburner.com/Techcrunch", user=self.user diff --git a/src/newsreader/news/collection/views.py b/src/newsreader/news/collection/views.py index ca531fb..3580951 100644 --- a/src/newsreader/news/collection/views.py +++ b/src/newsreader/news/collection/views.py @@ -26,7 +26,7 @@ class CollectionRuleViewMixin: class CollectionRuleDetailMixin: - success_url = reverse_lazy("rules") + success_url = reverse_lazy("news:collection:rules") form_class = CollectionRuleForm def get_context_data(self, **kwargs): @@ -69,7 +69,7 @@ class CollectionRuleBulkView(FormView): form_class = CollectionRuleBulkForm def get_redirect_url(self): - return reverse("rules") + return reverse("news:collection:rules") def get_success_url(self): return self.get_redirect_url() @@ -121,7 +121,7 @@ class CollectionRuleBulkDeleteView(CollectionRuleBulkView): class OPMLImportView(FormView): form_class = OPMLImportForm - success_url = reverse_lazy("rules") + success_url = reverse_lazy("news:collection:rules") template_name = "collection/import.html" def form_valid(self, form): diff --git a/src/newsreader/news/core/templates/core/category.html b/src/newsreader/news/core/templates/core/category.html index 0771345..bee0585 100644 --- a/src/newsreader/news/core/templates/core/category.html +++ b/src/newsreader/news/core/templates/core/category.html @@ -53,7 +53,7 @@
- Cancel + Cancel {% block confirm-button %}{% endblock %}
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 2bd6bcb..864a144 100644 --- a/src/newsreader/news/core/tests/endpoints/category/detail/tests.py +++ b/src/newsreader/news/core/tests/endpoints/category/detail/tests.py @@ -16,7 +16,9 @@ class CategoryDetailViewTestCase(TestCase): def test_simple(self): category = CategoryFactory(user=self.user) - response = self.client.get(reverse("api:categories-detail", args=[category.pk])) + response = self.client.get( + reverse("api:news:core:categories-detail", args=[category.pk]) + ) data = response.json() self.assertEquals(response.status_code, 200) @@ -24,7 +26,9 @@ class CategoryDetailViewTestCase(TestCase): self.assertTrue("name" in data) def test_not_known(self): - response = self.client.get(reverse("api:categories-detail", args=[100])) + response = self.client.get( + reverse("api:news:core:categories-detail", args=[100]) + ) data = response.json() self.assertEquals(response.status_code, 404) @@ -34,7 +38,7 @@ class CategoryDetailViewTestCase(TestCase): category = CategoryFactory(user=self.user) response = self.client.post( - reverse("api:categories-detail", args=[category.pk]) + reverse("api:news:core:categories-detail", args=[category.pk]) ) data = response.json() @@ -45,7 +49,7 @@ class CategoryDetailViewTestCase(TestCase): category = CategoryFactory(name="Clickbait", user=self.user) response = self.client.patch( - reverse("api:categories-detail", args=[category.pk]), + reverse("api:news:core:categories-detail", args=[category.pk]), data=json.dumps({"name": "Interesting posts"}), content_type="application/json", ) @@ -58,7 +62,7 @@ class CategoryDetailViewTestCase(TestCase): category = CategoryFactory(user=self.user) response = self.client.patch( - reverse("api:categories-detail", args=[category.pk]), + reverse("api:news:core:categories-detail", args=[category.pk]), data=json.dumps({"id": 44}), content_type="application/json", ) @@ -71,7 +75,7 @@ class CategoryDetailViewTestCase(TestCase): category = CategoryFactory(name="Clickbait", user=self.user) response = self.client.put( - reverse("api:categories-detail", args=[category.pk]), + reverse("api:news:core:categories-detail", args=[category.pk]), data=json.dumps({"name": "Interesting posts"}), content_type="application/json", ) @@ -84,7 +88,7 @@ class CategoryDetailViewTestCase(TestCase): category = CategoryFactory(user=self.user) response = self.client.delete( - reverse("api:categories-detail", args=[category.pk]) + reverse("api:news:core:categories-detail", args=[category.pk]) ) self.assertEquals(response.status_code, 204) @@ -94,7 +98,9 @@ class CategoryDetailViewTestCase(TestCase): category = CategoryFactory(user=self.user) - response = self.client.get(reverse("api:categories-detail", args=[category.pk])) + response = self.client.get( + reverse("api:news:core:categories-detail", args=[category.pk]) + ) self.assertEquals(response.status_code, 403) @@ -102,7 +108,9 @@ class CategoryDetailViewTestCase(TestCase): other_user = UserFactory() category = CategoryFactory(user=other_user) - response = self.client.get(reverse("api:categories-detail", args=[category.pk])) + response = self.client.get( + reverse("api:news:core:categories-detail", args=[category.pk]) + ) self.assertEquals(response.status_code, 403) @@ -114,7 +122,9 @@ class CategoryDetailViewTestCase(TestCase): PostFactory.create_batch(size=20, read=False, rule=unread_rule) PostFactory.create_batch(size=20, read=True, rule=read_rule) - response = self.client.get(reverse("api:categories-detail", args=[category.pk])) + response = self.client.get( + reverse("api:news:core:categories-detail", args=[category.pk]) + ) data = response.json() self.assertEquals(response.status_code, 200) @@ -133,7 +143,9 @@ class CategoryReadTestCase(TestCase): for rule in CollectionRuleFactory.create_batch(size=5, category=category) ] - response = self.client.post(reverse("api:categories-read", args=[category.pk])) + response = self.client.post( + reverse("api:news:core:categories-read", args=[category.pk]) + ) data = response.json() @@ -142,7 +154,9 @@ class CategoryReadTestCase(TestCase): self.assertEquals(data["id"], category.pk) def test_category_unknown(self): - response = self.client.post(reverse("api:categories-read", args=[101])) + response = self.client.post( + reverse("api:news:core:categories-read", args=[101]) + ) self.assertEquals(response.status_code, 404) @@ -157,7 +171,9 @@ class CategoryReadTestCase(TestCase): ) ] - response = self.client.post(reverse("api:categories-read", args=[category.pk])) + response = self.client.post( + reverse("api:news:core:categories-read", args=[category.pk]) + ) self.assertEquals(response.status_code, 403) @@ -172,14 +188,18 @@ class CategoryReadTestCase(TestCase): ) ] - response = self.client.post(reverse("api:categories-read", args=[category.pk])) + response = self.client.post( + reverse("api:news:core:categories-read", args=[category.pk]) + ) self.assertEquals(response.status_code, 403) def test_get(self): category = CategoryFactory(name="Clickbait", user=self.user) - response = self.client.get(reverse("api:categories-read", args=[category.pk])) + response = self.client.get( + reverse("api:news:core:categories-read", args=[category.pk]) + ) self.assertEquals(response.status_code, 405) @@ -187,7 +207,7 @@ class CategoryReadTestCase(TestCase): category = CategoryFactory(name="Clickbait", user=self.user) response = self.client.patch( - reverse("api:categories-read", args=[category.pk]), + reverse("api:news:core:categories-read", args=[category.pk]), data=json.dumps({"name": "Not possible"}), content_type="application/json", ) @@ -198,7 +218,7 @@ class CategoryReadTestCase(TestCase): category = CategoryFactory(name="Clickbait", user=self.user) response = self.client.put( - reverse("api:categories-read", args=[category.pk]), + reverse("api:news:core:categories-read", args=[category.pk]), data=json.dumps({"name": "Not possible"}), content_type="application/json", ) @@ -209,7 +229,7 @@ class CategoryReadTestCase(TestCase): category = CategoryFactory(name="Clickbait", user=self.user) response = self.client.delete( - reverse("api:categories-read", args=[category.pk]) + reverse("api:news:core:categories-read", args=[category.pk]) ) self.assertEquals(response.status_code, 405) 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 d44f204..aedd5e1 100644 --- a/src/newsreader/news/core/tests/endpoints/category/list/tests.py +++ b/src/newsreader/news/core/tests/endpoints/category/list/tests.py @@ -20,7 +20,7 @@ class CategoryListViewTestCase(TestCase): def test_simple(self): CategoryFactory.create_batch(size=3, user=self.user) - response = self.client.get(reverse("api:categories-list")) + response = self.client.get(reverse("api:news:core:categories-list")) data = response.json() self.assertEquals(response.status_code, 200) @@ -48,7 +48,7 @@ class CategoryListViewTestCase(TestCase): ), ] - response = self.client.get(reverse("api:categories-list")) + response = self.client.get(reverse("api:news:core:categories-list")) data = response.json() self.assertEquals(response.status_code, 200) @@ -58,7 +58,7 @@ class CategoryListViewTestCase(TestCase): self.assertEquals(data[2]["id"], categories[0].pk) def test_empty(self): - response = self.client.get(reverse("api:categories-list")) + response = self.client.get(reverse("api:news:core:categories-list")) data = response.json() self.assertEquals(response.status_code, 200) @@ -68,7 +68,7 @@ class CategoryListViewTestCase(TestCase): data = {"name": "Tech"} response = self.client.post( - reverse("api:categories-list"), + reverse("api:news:core:categories-list"), data=json.dumps(data), content_type="application/json", ) @@ -78,21 +78,21 @@ class CategoryListViewTestCase(TestCase): self.assertEquals(response_data["detail"], 'Method "POST" not allowed.') def test_patch(self): - response = self.client.patch(reverse("api:categories-list")) + response = self.client.patch(reverse("api:news:core:categories-list")) data = response.json() self.assertEquals(response.status_code, 405) self.assertEquals(data["detail"], 'Method "PATCH" not allowed.') def test_put(self): - response = self.client.put(reverse("api:categories-list")) + response = self.client.put(reverse("api:news:core:categories-list")) data = response.json() self.assertEquals(response.status_code, 405) self.assertEquals(data["detail"], 'Method "PUT" not allowed.') def test_delete(self): - response = self.client.delete(reverse("api:categories-list")) + response = self.client.delete(reverse("api:news:core:categories-list")) data = response.json() self.assertEquals(response.status_code, 405) @@ -103,7 +103,7 @@ class CategoryListViewTestCase(TestCase): CategoryFactory.create_batch(size=3, user=self.user) - response = self.client.get(reverse("api:categories-list")) + response = self.client.get(reverse("api:news:core:categories-list")) self.assertEquals(response.status_code, 403) @@ -111,7 +111,7 @@ class CategoryListViewTestCase(TestCase): other_user = UserFactory() CategoryFactory.create_batch(size=3, user=other_user) - response = self.client.get(reverse("api:categories-list")) + response = self.client.get(reverse("api:news:core:categories-list")) data = response.json() self.assertEquals(response.status_code, 200) @@ -128,7 +128,7 @@ class NestedCategoryListViewTestCase(TestCase): rules = CollectionRuleFactory.create_batch(size=5, category=category) response = self.client.get( - reverse("api:categories-nested-rules", kwargs={"pk": category.pk}) + reverse("api:news:core:categories-nested-rules", kwargs={"pk": category.pk}) ) data = response.json() @@ -145,7 +145,7 @@ class NestedCategoryListViewTestCase(TestCase): category = CategoryFactory.create(user=self.user) response = self.client.get( - reverse("api:categories-nested-rules", kwargs={"pk": category.pk}) + reverse("api:news:core:categories-nested-rules", kwargs={"pk": category.pk}) ) data = response.json() @@ -155,14 +155,14 @@ class NestedCategoryListViewTestCase(TestCase): def test_not_known(self): response = self.client.get( - reverse("api:categories-nested-rules", kwargs={"pk": 100}) + reverse("api:news:core:categories-nested-rules", kwargs={"pk": 100}) ) self.assertEquals(response.status_code, 404) def test_post(self): response = self.client.post( - reverse("api:categories-nested-rules", kwargs={"pk": 100}), + reverse("api:news:core:categories-nested-rules", kwargs={"pk": 100}), data=json.dumps({}), content_type="application/json", ) @@ -175,7 +175,9 @@ class NestedCategoryListViewTestCase(TestCase): category = CategoryFactory.create(user=self.user) response = self.client.patch( - reverse("api:categories-nested-rules", kwargs={"pk": category.pk}), + reverse( + "api:news:core:categories-nested-rules", kwargs={"pk": category.pk} + ), data=json.dumps({"name": "test"}), content_type="application/json", ) @@ -188,7 +190,9 @@ class NestedCategoryListViewTestCase(TestCase): category = CategoryFactory.create(user=self.user) response = self.client.put( - reverse("api:categories-nested-rules", kwargs={"pk": category.pk}), + reverse( + "api:news:core:categories-nested-rules", kwargs={"pk": category.pk} + ), data=json.dumps({"name": "test"}), content_type="application/json", ) @@ -201,7 +205,9 @@ class NestedCategoryListViewTestCase(TestCase): category = CategoryFactory.create(user=self.user) response = self.client.delete( - reverse("api:categories-nested-rules", kwargs={"pk": category.pk}), + reverse( + "api:news:core:categories-nested-rules", kwargs={"pk": category.pk} + ), content_type="application/json", ) data = response.json() @@ -216,7 +222,7 @@ class NestedCategoryListViewTestCase(TestCase): rules = CollectionRuleFactory.create_batch(size=5, category=category) response = self.client.get( - reverse("api:categories-nested-rules", kwargs={"pk": category.pk}) + reverse("api:news:core:categories-nested-rules", kwargs={"pk": category.pk}) ) self.assertEquals(response.status_code, 403) @@ -228,7 +234,7 @@ class NestedCategoryListViewTestCase(TestCase): rules = CollectionRuleFactory.create_batch(size=5, category=category) response = self.client.get( - reverse("api:categories-nested-rules", kwargs={"pk": category.pk}) + reverse("api:news:core:categories-nested-rules", kwargs={"pk": category.pk}) ) self.assertEquals(response.status_code, 403) @@ -242,7 +248,7 @@ class NestedCategoryListViewTestCase(TestCase): ] response = self.client.get( - reverse("api:categories-nested-rules", kwargs={"pk": category.pk}) + reverse("api:news:core:categories-nested-rules", kwargs={"pk": category.pk}) ) data = response.json() @@ -265,7 +271,7 @@ class NestedCategoryListViewTestCase(TestCase): ] response = self.client.get( - reverse("api:categories-nested-rules", kwargs={"pk": category.pk}) + reverse("api:news:core:categories-nested-rules", kwargs={"pk": category.pk}) ) data = response.json() @@ -292,7 +298,7 @@ class NestedCategoryPostView(TestCase): } response = self.client.get( - reverse("api:categories-nested-posts", kwargs={"pk": category.pk}) + reverse("api:news:core:categories-nested-posts", kwargs={"pk": category.pk}) ) data = response.json() posts = data["results"] @@ -310,7 +316,7 @@ class NestedCategoryPostView(TestCase): category = CategoryFactory.create(user=self.user) response = self.client.get( - reverse("api:categories-nested-posts", kwargs={"pk": category.pk}) + reverse("api:news:core:categories-nested-posts", kwargs={"pk": category.pk}) ) data = response.json() posts = data["results"] @@ -326,7 +332,7 @@ class NestedCategoryPostView(TestCase): ) response = self.client.get( - reverse("api:categories-nested-posts", kwargs={"pk": category.pk}) + reverse("api:news:core:categories-nested-posts", kwargs={"pk": category.pk}) ) data = response.json() posts = data["results"] @@ -337,14 +343,14 @@ class NestedCategoryPostView(TestCase): def test_not_known(self): response = self.client.get( - reverse("api:categories-nested-posts", kwargs={"pk": 100}) + reverse("api:news:core:categories-nested-posts", kwargs={"pk": 100}) ) self.assertEquals(response.status_code, 404) def test_post(self): response = self.client.post( - reverse("api:categories-nested-posts", kwargs={"pk": 100}), + reverse("api:news:core:categories-nested-posts", kwargs={"pk": 100}), data=json.dumps({}), content_type="application/json", ) @@ -357,7 +363,9 @@ class NestedCategoryPostView(TestCase): category = CategoryFactory.create(user=self.user) response = self.client.patch( - reverse("api:categories-nested-posts", kwargs={"pk": category.pk}), + reverse( + "api:news:core:categories-nested-posts", kwargs={"pk": category.pk} + ), data=json.dumps({}), content_type="application/json", ) @@ -370,7 +378,9 @@ class NestedCategoryPostView(TestCase): category = CategoryFactory.create(user=self.user) response = self.client.put( - reverse("api:categories-nested-posts", kwargs={"pk": category.pk}), + reverse( + "api:news:core:categories-nested-posts", kwargs={"pk": category.pk} + ), data=json.dumps({}), content_type="application/json", ) @@ -383,7 +393,9 @@ class NestedCategoryPostView(TestCase): category = CategoryFactory.create(user=self.user) response = self.client.delete( - reverse("api:categories-nested-posts", kwargs={"pk": category.pk}), + reverse( + "api:news:core:categories-nested-posts", kwargs={"pk": category.pk} + ), content_type="application/json", ) data = response.json() @@ -397,7 +409,7 @@ class NestedCategoryPostView(TestCase): category = CategoryFactory.create(user=self.user) response = self.client.get( - reverse("api:categories-nested-posts", kwargs={"pk": category.pk}) + reverse("api:news:core:categories-nested-posts", kwargs={"pk": category.pk}) ) self.assertEquals(response.status_code, 403) @@ -407,7 +419,7 @@ class NestedCategoryPostView(TestCase): category = CategoryFactory.create(user=other_user) response = self.client.get( - reverse("api:categories-nested-posts", kwargs={"pk": category.pk}) + reverse("api:news:core:categories-nested-posts", kwargs={"pk": category.pk}) ) self.assertEquals(response.status_code, 403) @@ -477,7 +489,7 @@ class NestedCategoryPostView(TestCase): ] response = self.client.get( - reverse("api:categories-nested-posts", kwargs={"pk": category.pk}) + reverse("api:news:core:categories-nested-posts", kwargs={"pk": category.pk}) ) data = response.json() posts = data["results"] @@ -514,7 +526,7 @@ class NestedCategoryPostView(TestCase): ] response = self.client.get( - reverse("api:categories-nested-posts", kwargs={"pk": category.pk}) + reverse("api:news:core:categories-nested-posts", kwargs={"pk": category.pk}) ) data = response.json() posts = data["results"] @@ -533,7 +545,9 @@ class NestedCategoryPostView(TestCase): PostFactory.create_batch(size=10, rule=rule, read=True) response = self.client.get( - reverse("api:categories-nested-posts", kwargs={"pk": category.pk}), + reverse( + "api:news:core:categories-nested-posts", kwargs={"pk": category.pk} + ), {"read": "false"}, ) @@ -554,7 +568,9 @@ class NestedCategoryPostView(TestCase): PostFactory.create_batch(size=10, rule=rule, read=True) response = self.client.get( - reverse("api:categories-nested-posts", kwargs={"pk": category.pk}), + reverse( + "api:news:core:categories-nested-posts", kwargs={"pk": category.pk} + ), {"read": "true"}, ) 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 7c8c31e..c804ff5 100644 --- a/src/newsreader/news/core/tests/endpoints/post/detail/tests.py +++ b/src/newsreader/news/core/tests/endpoints/post/detail/tests.py @@ -19,7 +19,9 @@ class PostDetailViewTestCase(TestCase): ) post = PostFactory(rule=rule) - response = self.client.get(reverse("api:posts-detail", args=[post.pk])) + response = self.client.get( + reverse("api:news:core:posts-detail", args=[post.pk]) + ) data = response.json() self.assertEquals(response.status_code, 200) @@ -34,7 +36,7 @@ class PostDetailViewTestCase(TestCase): self.assertTrue("remoteIdentifier" in data) def test_not_known(self): - response = self.client.get(reverse("api:posts-detail", args=[100])) + response = self.client.get(reverse("api:news:core:posts-detail", args=[100])) data = response.json() self.assertEquals(response.status_code, 404) @@ -46,7 +48,9 @@ class PostDetailViewTestCase(TestCase): ) post = PostFactory(rule=rule) - response = self.client.post(reverse("api:posts-detail", args=[post.pk])) + response = self.client.post( + reverse("api:news:core:posts-detail", args=[post.pk]) + ) data = response.json() self.assertEquals(response.status_code, 405) @@ -59,7 +63,7 @@ class PostDetailViewTestCase(TestCase): post = PostFactory(title="This is clickbait for sure", rule=rule) response = self.client.patch( - reverse("api:posts-detail", args=[post.pk]), + reverse("api:news:core:posts-detail", args=[post.pk]), data=json.dumps({"title": "This title is very accurate"}), content_type="application/json", ) @@ -75,7 +79,7 @@ class PostDetailViewTestCase(TestCase): post = PostFactory(title="This is clickbait for sure", rule=rule) response = self.client.patch( - reverse("api:posts-detail", args=[post.pk]), + reverse("api:news:core:posts-detail", args=[post.pk]), data=json.dumps({"id": 44}), content_type="application/json", ) @@ -94,8 +98,14 @@ class PostDetailViewTestCase(TestCase): post = PostFactory(title="This is clickbait for sure", rule=rule) response = self.client.patch( - reverse("api:posts-detail", args=[post.pk]), - data=json.dumps({"rule": reverse("api:rules-detail", args=[new_rule.pk])}), + reverse("api:news:core:posts-detail", args=[post.pk]), + data=json.dumps( + { + "rule": reverse( + "api:news:collection:rules-detail", args=[new_rule.pk] + ) + } + ), content_type="application/json", ) data = response.json() @@ -111,7 +121,7 @@ class PostDetailViewTestCase(TestCase): post = PostFactory(title="This is clickbait for sure", rule=rule) response = self.client.put( - reverse("api:posts-detail", args=[post.pk]), + reverse("api:news:core:posts-detail", args=[post.pk]), data=json.dumps({"title": "This title is very accurate"}), content_type="application/json", ) @@ -126,7 +136,9 @@ class PostDetailViewTestCase(TestCase): ) post = PostFactory(rule=rule) - response = self.client.delete(reverse("api:posts-detail", args=[post.pk])) + response = self.client.delete( + reverse("api:news:core:posts-detail", args=[post.pk]) + ) data = response.json() self.assertEquals(response.status_code, 405) @@ -138,7 +150,9 @@ class PostDetailViewTestCase(TestCase): rule = CollectionRuleFactory(user=self.user, category=None) post = PostFactory(rule=rule) - response = self.client.get(reverse("api:posts-detail", args=[post.pk])) + response = self.client.get( + reverse("api:news:core:posts-detail", args=[post.pk]) + ) self.assertEquals(response.status_code, 403) @@ -150,7 +164,9 @@ class PostDetailViewTestCase(TestCase): ) post = PostFactory(rule=rule) - response = self.client.get(reverse("api:posts-detail", args=[post.pk])) + response = self.client.get( + reverse("api:news:core:posts-detail", args=[post.pk]) + ) self.assertEquals(response.status_code, 403) @@ -159,7 +175,9 @@ class PostDetailViewTestCase(TestCase): rule = CollectionRuleFactory(user=other_user, category=None) post = PostFactory(rule=rule) - response = self.client.get(reverse("api:posts-detail", args=[post.pk])) + response = self.client.get( + reverse("api:news:core:posts-detail", args=[post.pk]) + ) self.assertEquals(response.status_code, 403) @@ -170,7 +188,9 @@ class PostDetailViewTestCase(TestCase): ) post = PostFactory(rule=rule) - response = self.client.get(reverse("api:posts-detail", args=[post.pk])) + response = self.client.get( + reverse("api:news:core:posts-detail", args=[post.pk]) + ) self.assertEquals(response.status_code, 403) @@ -181,7 +201,9 @@ class PostDetailViewTestCase(TestCase): ) post = PostFactory(rule=rule) - response = self.client.get(reverse("api:posts-detail", args=[post.pk])) + response = self.client.get( + reverse("api:news:core:posts-detail", args=[post.pk]) + ) self.assertEquals(response.status_code, 403) @@ -192,7 +214,7 @@ class PostDetailViewTestCase(TestCase): post = PostFactory(rule=rule, read=False) response = self.client.patch( - reverse("api:posts-detail", args=[post.pk]), + reverse("api:news:core:posts-detail", args=[post.pk]), data=json.dumps({"read": True}), content_type="application/json", ) @@ -208,7 +230,7 @@ class PostDetailViewTestCase(TestCase): post = PostFactory(rule=rule, read=True) response = self.client.patch( - reverse("api:posts-detail", args=[post.pk]), + reverse("api:news:core:posts-detail", args=[post.pk]), data=json.dumps({"read": False}), content_type="application/json", ) 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 f3639bf..3800b64 100644 --- a/src/newsreader/news/core/tests/endpoints/post/list/tests.py +++ b/src/newsreader/news/core/tests/endpoints/post/list/tests.py @@ -21,7 +21,7 @@ class PostListViewTestCase(TestCase): ) PostFactory.create_batch(size=3, rule=rule) - response = self.client.get(reverse("api:posts-list")) + response = self.client.get(reverse("api:news:core:posts-list")) data = response.json() self.assertEquals(response.status_code, 200) @@ -58,7 +58,7 @@ class PostListViewTestCase(TestCase): ), ] - response = self.client.get(reverse("api:posts-list")) + response = self.client.get(reverse("api:news:core:posts-list")) data = response.json() self.assertEquals(response.status_code, 200) @@ -77,7 +77,7 @@ class PostListViewTestCase(TestCase): PostFactory.create_batch(size=80, rule=rule) page_size = 50 - response = self.client.get(reverse("api:posts-list"), {"count": 50}) + response = self.client.get(reverse("api:news:core:posts-list"), {"count": 50}) data = response.json() self.assertEquals(response.status_code, 200) @@ -85,7 +85,7 @@ class PostListViewTestCase(TestCase): self.assertEquals(len(data["results"]), page_size) def test_empty(self): - response = self.client.get(reverse("api:posts-list")) + response = self.client.get(reverse("api:news:core:posts-list")) data = response.json() self.assertEquals(response.status_code, 200) @@ -96,28 +96,28 @@ class PostListViewTestCase(TestCase): self.assertEquals(len(data["results"]), 0) def test_post(self): - response = self.client.post(reverse("api:posts-list")) + response = self.client.post(reverse("api:news:core:posts-list")) data = response.json() self.assertEquals(response.status_code, 405) self.assertEquals(data["detail"], 'Method "POST" not allowed.') def test_patch(self): - response = self.client.patch(reverse("api:posts-list")) + response = self.client.patch(reverse("api:news:core:posts-list")) data = response.json() self.assertEquals(response.status_code, 405) self.assertEquals(data["detail"], 'Method "PATCH" not allowed.') def test_put(self): - response = self.client.put(reverse("api:posts-list")) + response = self.client.put(reverse("api:news:core:posts-list")) data = response.json() self.assertEquals(response.status_code, 405) self.assertEquals(data["detail"], 'Method "PUT" not allowed.') def test_delete(self): - response = self.client.delete(reverse("api:posts-list")) + response = self.client.delete(reverse("api:news:core:posts-list")) data = response.json() self.assertEquals(response.status_code, 405) @@ -128,7 +128,7 @@ class PostListViewTestCase(TestCase): PostFactory.create_batch(size=3, rule=CollectionRuleFactory(user=self.user)) - response = self.client.get(reverse("api:posts-list")) + response = self.client.get(reverse("api:news:core:posts-list")) self.assertEquals(response.status_code, 403) @@ -141,7 +141,7 @@ class PostListViewTestCase(TestCase): size=3, rule=CollectionRuleFactory(user=self.user, category=category) ) - response = self.client.get(reverse("api:posts-list")) + response = self.client.get(reverse("api:news:core:posts-list")) self.assertEquals(response.status_code, 403) @@ -151,7 +151,7 @@ class PostListViewTestCase(TestCase): rule = CollectionRuleFactory(user=other_user, category=None) PostFactory.create_batch(size=3, rule=rule) - response = self.client.get(reverse("api:posts-list")) + response = self.client.get(reverse("api:news:core:posts-list")) data = response.json() self.assertEquals(response.status_code, 200) @@ -166,7 +166,7 @@ class PostListViewTestCase(TestCase): size=3, rule=CollectionRuleFactory(user=other_user, category=category) ) - response = self.client.get(reverse("api:posts-list")) + response = self.client.get(reverse("api:news:core:posts-list")) data = response.json() self.assertEquals(response.status_code, 200) @@ -183,7 +183,7 @@ class PostListViewTestCase(TestCase): ) PostFactory.create_batch(size=3, rule=rule) - response = self.client.get(reverse("api:posts-list")) + response = self.client.get(reverse("api:news:core:posts-list")) data = response.json() self.assertEquals(response.status_code, 200) @@ -195,7 +195,7 @@ class PostListViewTestCase(TestCase): rule = CollectionRuleFactory(user=self.user, category=None) PostFactory.create_batch(size=3, rule=rule) - response = self.client.get(reverse("api:posts-list")) + response = self.client.get(reverse("api:news:core:posts-list")) data = response.json() self.assertEquals(response.status_code, 200) @@ -211,7 +211,9 @@ class PostListViewTestCase(TestCase): PostFactory.create_batch(size=10, rule=rule, read=False) PostFactory.create_batch(size=10, rule=rule, read=True) - response = self.client.get(reverse("api:posts-list"), {"read": "false"}) + response = self.client.get( + reverse("api:news:core:posts-list"), {"read": "false"} + ) data = response.json() posts = data["results"] @@ -230,7 +232,9 @@ class PostListViewTestCase(TestCase): PostFactory.create_batch(size=20, rule=rule, read=False) PostFactory.create_batch(size=10, rule=rule, read=True) - response = self.client.get(reverse("api:posts-list"), {"read": "true"}) + response = self.client.get( + reverse("api:news:core:posts-list"), {"read": "true"} + ) data = response.json() posts = data["results"] diff --git a/src/newsreader/news/core/tests/test_views.py b/src/newsreader/news/core/tests/test_views.py index e4bf458..2601b4a 100644 --- a/src/newsreader/news/core/tests/test_views.py +++ b/src/newsreader/news/core/tests/test_views.py @@ -22,7 +22,7 @@ class CategoryCreateViewTestCase(CategoryViewTestCase, TestCase): def setUp(self): super().setUp() - self.url = reverse("category-create") + self.url = reverse("news:core:category-create") def test_creation(self): rules = CollectionRuleFactory.create_batch(size=4, user=self.user) @@ -88,7 +88,7 @@ class CategoryUpdateViewTestCase(CategoryViewTestCase, TestCase): super().setUp() self.category = CategoryFactory(name="category", user=self.user) - self.url = reverse("category-update", args=[self.category.pk]) + self.url = reverse("news:core:category-update", args=[self.category.pk]) def test_name_change(self): data = {"name": "durp", "user": self.user.pk} @@ -172,7 +172,7 @@ class CategoryUpdateViewTestCase(CategoryViewTestCase, TestCase): other_category.rules.set([*other_rules]) data = {"name": "durp", "user": other_user.pk} - other_url = reverse("category-update", args=[other_category.pk]) + other_url = reverse("news:core:category-update", args=[other_category.pk]) response = self.client.post(other_url, data) self.assertEquals(response.status_code, 404) @@ -218,7 +218,7 @@ class CategoryUpdateViewTestCase(CategoryViewTestCase, TestCase): def test_unique_together(self): other_category = CategoryFactory(name="other category", user=self.user) - url = reverse("category-update", args=[other_category.pk]) + url = reverse("news:core:category-update", args=[other_category.pk]) data = {"name": "category", "user": self.user.pk, "rules": []} response = self.client.post(url, data) diff --git a/src/newsreader/news/core/urls.py b/src/newsreader/news/core/urls.py index 4b92428..8096cf8 100644 --- a/src/newsreader/news/core/urls.py +++ b/src/newsreader/news/core/urls.py @@ -19,7 +19,6 @@ from newsreader.news.core.views import ( urlpatterns = [ - path("", login_required(NewsView.as_view()), name="index"), path("categories/", login_required(CategoryListView.as_view()), name="categories"), path( "categories//", diff --git a/src/newsreader/news/core/views.py b/src/newsreader/news/core/views.py index fde3974..2a75ea7 100644 --- a/src/newsreader/news/core/views.py +++ b/src/newsreader/news/core/views.py @@ -39,7 +39,7 @@ class CategoryViewMixin: class CategoryDetailMixin: - success_url = reverse_lazy("categories") + success_url = reverse_lazy("news:core:categories") form_class = CategoryForm def get_context_data(self, **kwargs): diff --git a/src/newsreader/news/urls.py b/src/newsreader/news/urls.py new file mode 100644 index 0000000..3e16f7e --- /dev/null +++ b/src/newsreader/news/urls.py @@ -0,0 +1,19 @@ +from django.urls import include, path + +from newsreader.news.collection.urls import endpoints as collection_endpoints +from newsreader.news.collection.urls import urlpatterns as collection_urls +from newsreader.news.core.urls import endpoints as core_endpoints +from newsreader.news.core.urls import urlpatterns as core_urls + + +app_name = "news" + +urlpatterns = [ + path("core/", include((core_urls, "core"))), + path("collection/", include((collection_urls, "collection"))), +] + +endpoints = [ + path("", include((core_endpoints, "core"))), + path("", include((collection_endpoints, "collection"))), +] diff --git a/src/newsreader/templates/base.html b/src/newsreader/templates/base.html index 42d438b..cb5ef53 100644 --- a/src/newsreader/templates/base.html +++ b/src/newsreader/templates/base.html @@ -15,8 +15,8 @@
    {% if request.user.is_authenticated %} - - + + {% else %} diff --git a/src/newsreader/urls.py b/src/newsreader/urls.py index c609d91..0779b29 100644 --- a/src/newsreader/urls.py +++ b/src/newsreader/urls.py @@ -1,29 +1,26 @@ from django.conf import settings from django.contrib import admin +from django.contrib.auth.decorators import login_required from django.urls import include, path from drf_yasg import openapi from drf_yasg.views import get_schema_view from newsreader.accounts.urls import urlpatterns as login_urls -from newsreader.news.collection.urls import endpoints as collection_endpoints -from newsreader.news.collection.urls import urlpatterns as collection_patterns -from newsreader.news.core.urls import endpoints as core_endpoints -from newsreader.news.core.urls import urlpatterns as core_patterns +from newsreader.news.core.views import NewsView +from newsreader.news.urls import endpoints as news_endpoints +from newsreader.news.urls import urlpatterns as news_patterns -apipatterns = [ - path("api/", include(core_endpoints)), - path("api/", include(collection_endpoints)), -] +api_patterns = [path("api/", include((news_endpoints, "news")))] schema_info = openapi.Info(title="Newsreader API", default_version="v1") -schema_view = get_schema_view(schema_info, patterns=apipatterns) +schema_view = get_schema_view(schema_info, patterns=api_patterns) urlpatterns = [ - path("", include(core_patterns)), - path("", include(collection_patterns)), - path("", include((apipatterns, "api")), name="api"), + path("", login_required(NewsView.as_view()), name="index"), + path("", include((news_patterns, "news"))), + path("", include((api_patterns, "api"))), path("accounts/", include((login_urls, "accounts")), name="accounts"), path("admin/", admin.site.urls, name="admin"), path("api/", schema_view.with_ui("swagger"), name="api"),
{{ rule.succeeded }} {{ rule.enabled }} - +