0.2.3 #99

Merged
sonny merged 112 commits from development into master 2020-05-23 16:58:42 +02:00
22 changed files with 289 additions and 175 deletions
Showing only changes of commit 7ee727e96e - Show all commits

View file

@ -31,6 +31,7 @@ INSTALLED_APPS = [
"axes", "axes",
# app modules # app modules
"newsreader.accounts", "newsreader.accounts",
"newsreader.news",
"newsreader.news.core", "newsreader.news.core",
"newsreader.news.collection", "newsreader.news.collection",
] ]

View file

@ -0,0 +1,5 @@
from django.apps import AppConfig
class NewsConfig(AppConfig):
name = "news"

View file

@ -10,7 +10,9 @@ class CollectionRule(TimeStampedModel):
name = models.CharField(max_length=100) name = models.CharField(max_length=100)
url = models.URLField(max_length=1024) 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) favicon = models.URLField(blank=True, null=True)
timezone = models.CharField( timezone = models.CharField(

View file

@ -28,7 +28,7 @@
</fieldset> </fieldset>
<fieldset class="form__fieldset import-form__fieldset"> <fieldset class="form__fieldset import-form__fieldset">
<a class="link button button--cancel" href="{% url 'rules' %}">Cancel</a> <a class="link button button--cancel" href="{% url 'news:collection:rules' %}">Cancel</a>
<button class="button button--confirm">Import</button> <button class="button button--confirm">Import</button>
</fieldset> </fieldset>
</section> </section>

View file

@ -46,7 +46,7 @@
<section class="section form__section rule-form__section"> <section class="section form__section rule-form__section">
<fieldset class="form__fieldset rule-form__fieldset"> <fieldset class="form__fieldset rule-form__fieldset">
<a class="link button button--cancel" href="{% url 'rules' %}">Cancel</a> <a class="link button button--cancel" href="{% url 'news:collection:rules' %}">Cancel</a>
{% block confirm-button %}{% endblock %} {% block confirm-button %}{% endblock %}
</fieldset> </fieldset>
</section> </section>

View file

@ -9,9 +9,9 @@
{% csrf_token %} {% csrf_token %}
<div class="form__actions"> <div class="form__actions">
<input type="submit" class="button button--primary" formaction="{% url "rules-enable" %}" formmethod="post" value="{% trans "Enable" %}" /> <input type="submit" class="button button--primary" formaction="{% url "news:collection:rules-enable" %}" formmethod="post" value="{% trans "Enable" %}" />
<input type="submit" class="button button--primary" formaction="{% url "rules-disable" %}" formmethod="post" value="{% trans "Disable" %}" /> <input type="submit" class="button button--primary" formaction="{% url "news:collection:rules-disable" %}" formmethod="post" value="{% trans "Disable" %}" />
<input type="submit" class="button button--error" formaction="{% url "rules-delete" %}" formmethod="post" value="{% trans "Delete" %}"/> <input type="submit" class="button button--error" formaction="{% url "news:collection:rules-delete" %}" formmethod="post" value="{% trans "Delete" %}"/>
</div> </div>
<table class="table rules-table"> <table class="table rules-table">
<thead class="table__header rules-table__header"> <thead class="table__header rules-table__header">
@ -37,7 +37,7 @@
<td class="table__item rules-table__item" title="{{ rule.succeeded }}">{{ rule.succeeded }}</td> <td class="table__item rules-table__item" title="{{ rule.succeeded }}">{{ rule.succeeded }}</td>
<td class="table__item rules-table__item" title="{{ rule.enabled }}">{{ rule.enabled }}</td> <td class="table__item rules-table__item" title="{{ rule.enabled }}">{{ rule.enabled }}</td>
<td class="table__item rules-table__item"> <td class="table__item rules-table__item">
<a class="link" href="{% url "rule-update" rule.pk %}"><i class="gg-pen"></i></a> <a class="link" href="{% url "news:collection:rule-update" rule.pk %}"><i class="gg-pen"></i></a>
</td> </td>
</tr> </tr>
{% endfor %} {% endfor %}

View file

@ -17,7 +17,9 @@ class CollectionRuleDetailViewTestCase(TestCase):
def test_simple(self): def test_simple(self):
rule = CollectionRuleFactory(user=self.user) 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() data = response.json()
self.assertEquals(response.status_code, 200) self.assertEquals(response.status_code, 200)
@ -29,7 +31,9 @@ class CollectionRuleDetailViewTestCase(TestCase):
self.assertTrue("category" in data) self.assertTrue("category" in data)
def test_not_known(self): 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() data = response.json()
self.assertEquals(response.status_code, 404) self.assertEquals(response.status_code, 404)
@ -38,7 +42,9 @@ class CollectionRuleDetailViewTestCase(TestCase):
def test_post(self): def test_post(self):
rule = CollectionRuleFactory(user=self.user) 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() data = response.json()
self.assertEquals(response.status_code, 405) self.assertEquals(response.status_code, 405)
@ -48,7 +54,7 @@ class CollectionRuleDetailViewTestCase(TestCase):
rule = CollectionRuleFactory(name="BBC", user=self.user) rule = CollectionRuleFactory(name="BBC", user=self.user)
response = self.client.patch( 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"}), data=json.dumps({"name": "The guardian"}),
content_type="application/json", content_type="application/json",
) )
@ -64,7 +70,7 @@ class CollectionRuleDetailViewTestCase(TestCase):
rule = CollectionRuleFactory(name="BBC", category=old_category, user=self.user) rule = CollectionRuleFactory(name="BBC", category=old_category, user=self.user)
response = self.client.patch( 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}), data=json.dumps({"category": absolute_url}),
content_type="application/json", content_type="application/json",
) )
@ -77,7 +83,7 @@ class CollectionRuleDetailViewTestCase(TestCase):
rule = CollectionRuleFactory(user=self.user) rule = CollectionRuleFactory(user=self.user)
response = self.client.patch( 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}), data=json.dumps({"id": 44}),
content_type="application/json", content_type="application/json",
) )
@ -91,7 +97,7 @@ class CollectionRuleDetailViewTestCase(TestCase):
category = CategoryFactory(user=self.user) category = CategoryFactory(user=self.user)
response = self.client.patch( 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}), data=json.dumps({"category": category.pk}),
content_type="application/json", content_type="application/json",
) )
@ -105,7 +111,7 @@ class CollectionRuleDetailViewTestCase(TestCase):
rule = CollectionRuleFactory(name="BBC", user=self.user) rule = CollectionRuleFactory(name="BBC", user=self.user)
response = self.client.put( 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"}), data=json.dumps({"name": "BBC", "url": "https://www.bbc.co.uk"}),
content_type="application/json", content_type="application/json",
) )
@ -117,7 +123,9 @@ class CollectionRuleDetailViewTestCase(TestCase):
def test_delete(self): def test_delete(self):
rule = CollectionRuleFactory(user=self.user) 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) self.assertEquals(response.status_code, 204)
@ -127,7 +135,7 @@ class CollectionRuleDetailViewTestCase(TestCase):
rule = CollectionRuleFactory(name="BBC", user=self.user) rule = CollectionRuleFactory(name="BBC", user=self.user)
response = self.client.patch( 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"}), data=json.dumps({"name": "The guardian"}),
content_type="application/json", content_type="application/json",
) )
@ -139,7 +147,7 @@ class CollectionRuleDetailViewTestCase(TestCase):
rule = CollectionRuleFactory(name="BBC", user=other_user) rule = CollectionRuleFactory(name="BBC", user=other_user)
response = self.client.patch( 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"}), data=json.dumps({"name": "The guardian"}),
content_type="application/json", 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=False, rule=rule)
PostFactory.create_batch(size=20, read=True, 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() data = response.json()
self.assertEquals(response.status_code, 200) self.assertEquals(response.status_code, 200)
@ -169,14 +179,18 @@ class CollectionRuleReadTestCase(TestCase):
PostFactory.create_batch(size=20, read=False, rule=rule) 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() data = response.json()
self.assertEquals(response.status_code, 201) self.assertEquals(response.status_code, 201)
self.assertEquals(data["unread"], 0) self.assertEquals(data["unread"], 0)
def test_rule_unknown(self): 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) self.assertEquals(response.status_code, 404)
@ -187,7 +201,9 @@ class CollectionRuleReadTestCase(TestCase):
PostFactory.create_batch(size=20, read=False, rule=rule) 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(response.status_code, 403)
@ -197,7 +213,9 @@ class CollectionRuleReadTestCase(TestCase):
PostFactory.create_batch(size=20, read=False, rule=rule) 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(response.status_code, 403)
self.assertEquals(Post.objects.filter(read=False).count(), 20) self.assertEquals(Post.objects.filter(read=False).count(), 20)
@ -205,7 +223,9 @@ class CollectionRuleReadTestCase(TestCase):
def test_get(self): def test_get(self):
rule = CollectionRuleFactory(user=self.user) 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) self.assertEquals(response.status_code, 405)
@ -213,7 +233,7 @@ class CollectionRuleReadTestCase(TestCase):
rule = CollectionRuleFactory(name="BBC", user=self.user) rule = CollectionRuleFactory(name="BBC", user=self.user)
response = self.client.patch( 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"}), data=json.dumps({"name": "Not possible"}),
content_type="application/json", content_type="application/json",
) )
@ -224,7 +244,7 @@ class CollectionRuleReadTestCase(TestCase):
rule = CollectionRuleFactory(name="BBC", user=self.user) rule = CollectionRuleFactory(name="BBC", user=self.user)
response = self.client.put( 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"}), data=json.dumps({"name": "Not possible"}),
content_type="application/json", content_type="application/json",
) )
@ -234,6 +254,8 @@ class CollectionRuleReadTestCase(TestCase):
def test_delete(self): def test_delete(self):
rule = CollectionRuleFactory(user=self.user) 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) self.assertEquals(response.status_code, 405)

View file

@ -20,7 +20,7 @@ class RuleListViewTestCase(TestCase):
def test_simple(self): def test_simple(self):
CollectionRuleFactory.create_batch(size=3, user=self.user) 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() data = response.json()
self.assertEquals(response.status_code, 200) 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() data = response.json()
self.assertEquals(response.status_code, 200) self.assertEquals(response.status_code, 200)
@ -65,7 +65,9 @@ class RuleListViewTestCase(TestCase):
def test_pagination_count(self): def test_pagination_count(self):
CollectionRuleFactory.create_batch(size=80, user=self.user) 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() data = response.json()
self.assertEquals(response.status_code, 200) self.assertEquals(response.status_code, 200)
@ -73,7 +75,7 @@ class RuleListViewTestCase(TestCase):
self.assertEquals(len(data["results"]), 30) self.assertEquals(len(data["results"]), 30)
def test_empty(self): 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() data = response.json()
self.assertEquals(response.status_code, 200) 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} data = {"name": "BBC", "url": "https://www.bbc.co.uk", "category": category.pk}
response = self.client.post( response = self.client.post(
reverse("api:rules-list"), reverse("api:news:collection:rules-list"),
data=json.dumps(data), data=json.dumps(data),
content_type="application/json", content_type="application/json",
) )
@ -99,21 +101,21 @@ class RuleListViewTestCase(TestCase):
self.assertEquals(data["detail"], 'Method "POST" not allowed.') self.assertEquals(data["detail"], 'Method "POST" not allowed.')
def test_patch(self): 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() data = response.json()
self.assertEquals(response.status_code, 405) self.assertEquals(response.status_code, 405)
self.assertEquals(data["detail"], 'Method "PATCH" not allowed.') self.assertEquals(data["detail"], 'Method "PATCH" not allowed.')
def test_put(self): 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() data = response.json()
self.assertEquals(response.status_code, 405) self.assertEquals(response.status_code, 405)
self.assertEquals(data["detail"], 'Method "PUT" not allowed.') self.assertEquals(data["detail"], 'Method "PUT" not allowed.')
def test_delete(self): 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() data = response.json()
self.assertEquals(response.status_code, 405) self.assertEquals(response.status_code, 405)
@ -124,7 +126,7 @@ class RuleListViewTestCase(TestCase):
CollectionRuleFactory.create_batch(size=3, user=self.user) 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) self.assertEquals(response.status_code, 403)
@ -132,7 +134,7 @@ class RuleListViewTestCase(TestCase):
other_user = UserFactory() other_user = UserFactory()
CollectionRuleFactory.create_batch(size=3, user=other_user) 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() data = response.json()
self.assertEquals(response.status_code, 200) self.assertEquals(response.status_code, 200)
@ -151,7 +153,7 @@ class NestedRuleListViewTestCase(TestCase):
PostFactory.create_batch(size=5, rule=rule) PostFactory.create_batch(size=5, rule=rule)
response = self.client.get( 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() data = response.json()
@ -166,7 +168,8 @@ class NestedRuleListViewTestCase(TestCase):
PostFactory.create_batch(size=80, rule=rule) PostFactory.create_batch(size=80, rule=rule)
response = self.client.get( 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() data = response.json()
@ -178,7 +181,7 @@ class NestedRuleListViewTestCase(TestCase):
rule = CollectionRuleFactory.create(user=self.user) rule = CollectionRuleFactory.create(user=self.user)
response = self.client.get( 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() data = response.json()
@ -187,7 +190,9 @@ class NestedRuleListViewTestCase(TestCase):
self.assertEquals(len(data["results"]), 0) self.assertEquals(len(data["results"]), 0)
def test_not_known(self): 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) self.assertEquals(response.status_code, 404)
@ -195,7 +200,7 @@ class NestedRuleListViewTestCase(TestCase):
rule = CollectionRuleFactory.create(user=self.user) rule = CollectionRuleFactory.create(user=self.user)
response = self.client.post( 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({}), data=json.dumps({}),
content_type="application/json", content_type="application/json",
) )
@ -208,7 +213,7 @@ class NestedRuleListViewTestCase(TestCase):
rule = CollectionRuleFactory.create(user=self.user) rule = CollectionRuleFactory.create(user=self.user)
response = self.client.patch( 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({}), data=json.dumps({}),
content_type="application/json", content_type="application/json",
) )
@ -221,7 +226,7 @@ class NestedRuleListViewTestCase(TestCase):
rule = CollectionRuleFactory.create(user=self.user) rule = CollectionRuleFactory.create(user=self.user)
response = self.client.put( 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({}), data=json.dumps({}),
content_type="application/json", content_type="application/json",
) )
@ -234,7 +239,7 @@ class NestedRuleListViewTestCase(TestCase):
rule = CollectionRuleFactory.create(user=self.user) rule = CollectionRuleFactory.create(user=self.user)
response = self.client.delete( 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({}), data=json.dumps({}),
content_type="application/json", content_type="application/json",
) )
@ -249,7 +254,7 @@ class NestedRuleListViewTestCase(TestCase):
rule = CollectionRuleFactory(user=self.user) rule = CollectionRuleFactory(user=self.user)
response = self.client.get( 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) self.assertEquals(response.status_code, 403)
@ -259,7 +264,7 @@ class NestedRuleListViewTestCase(TestCase):
rule = CollectionRuleFactory(user=other_user) rule = CollectionRuleFactory(user=other_user)
response = self.client.get( 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) self.assertEquals(response.status_code, 403)
@ -294,7 +299,7 @@ class NestedRuleListViewTestCase(TestCase):
] ]
response = self.client.get( 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() data = response.json()
@ -315,7 +320,7 @@ class NestedRuleListViewTestCase(TestCase):
PostFactory.create_batch(size=5, rule=other_rule) PostFactory.create_batch(size=5, rule=other_rule)
response = self.client.get( 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() data = response.json()
@ -335,7 +340,8 @@ class NestedRuleListViewTestCase(TestCase):
PostFactory.create_batch(size=10, rule=rule, read=True) PostFactory.create_batch(size=10, rule=rule, read=True)
response = self.client.get( 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() data = response.json()
@ -354,7 +360,8 @@ class NestedRuleListViewTestCase(TestCase):
PostFactory.create_batch(size=10, rule=rule, read=True) PostFactory.create_batch(size=10, rule=rule, read=True)
response = self.client.get( 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() data = response.json()

View file

@ -1,20 +1,16 @@
from django.conf import settings
from django.test import TestCase from django.test import TestCase
from django.urls import reverse from django.urls import reverse
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
import pytz
from newsreader.accounts.tests.factories import UserFactory from newsreader.accounts.tests.factories import UserFactory
from newsreader.news.collection.models import CollectionRule from newsreader.news.collection.models import CollectionRule
from newsreader.news.collection.tests.factories import CollectionRuleFactory from newsreader.news.collection.tests.factories import CollectionRuleFactory
from newsreader.news.core.tests.factories import CategoryFactory
class CollectionRuleBulkViewTestCase: class CollectionRuleBulkViewTestCase:
def setUp(self): def setUp(self):
self.redirect_url = reverse("rules") self.redirect_url = reverse("news:collection:rules")
self.user = UserFactory() self.user = UserFactory()
self.client.force_login(self.user) self.client.force_login(self.user)
@ -24,7 +20,7 @@ class CollectionRuleBulkEnableViewTestCase(CollectionRuleBulkViewTestCase, TestC
def setUp(self): def setUp(self):
super().setUp() super().setUp()
self.url = reverse("rules-enable") self.url = reverse("news:collection:rules-enable")
self.rules = CollectionRuleFactory.create_batch( self.rules = CollectionRuleFactory.create_batch(
size=5, user=self.user, enabled=False size=5, user=self.user, enabled=False
@ -88,7 +84,8 @@ class CollectionRuleBulkEnableViewTestCase(CollectionRuleBulkViewTestCase, TestC
) )
self.assertRedirects( 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) rules = CollectionRule.objects.filter(user=self.user)
@ -102,7 +99,7 @@ class CollectionRuleBulkDisableViewTestCase(CollectionRuleBulkViewTestCase, Test
def setUp(self): def setUp(self):
super().setUp() super().setUp()
self.url = reverse("rules-disable") self.url = reverse("news:collection:rules-disable")
self.rules = CollectionRuleFactory.create_batch( self.rules = CollectionRuleFactory.create_batch(
size=5, user=self.user, enabled=True size=5, user=self.user, enabled=True
@ -166,7 +163,8 @@ class CollectionRuleBulkDisableViewTestCase(CollectionRuleBulkViewTestCase, Test
) )
self.assertRedirects( 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) rules = CollectionRule.objects.filter(user=self.user)
@ -180,7 +178,7 @@ class CollectionRuleBulkDeleteViewTestCase(CollectionRuleBulkViewTestCase, TestC
def setUp(self): def setUp(self):
super().setUp() super().setUp()
self.url = reverse("rules-delete") self.url = reverse("news:collection:rules-delete")
self.rules = CollectionRuleFactory.create_batch(size=5, user=self.user) self.rules = CollectionRuleFactory.create_batch(size=5, user=self.user)
@ -236,7 +234,8 @@ class CollectionRuleBulkDeleteViewTestCase(CollectionRuleBulkViewTestCase, TestC
) )
self.assertRedirects( 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) rules = CollectionRule.objects.filter(user=self.user)

View file

@ -5,12 +5,9 @@ from django.test import TestCase
from django.urls import reverse from django.urls import reverse
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
import pytz
from newsreader.accounts.tests.factories import UserFactory from newsreader.accounts.tests.factories import UserFactory
from newsreader.news.collection.models import CollectionRule from newsreader.news.collection.models import CollectionRule
from newsreader.news.collection.tests.factories import CollectionRuleFactory from newsreader.news.collection.tests.factories import CollectionRuleFactory
from newsreader.news.core.tests.factories import CategoryFactory
class OPMLImportTestCase(TestCase): class OPMLImportTestCase(TestCase):
@ -39,7 +36,9 @@ class OPMLImportTestCase(TestCase):
self.assertEquals(len(rules), 4) self.assertEquals(len(rules), 4)
def test_existing_rules(self): 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="https://news.ycombinator.com/rss", user=self.user)
CollectionRuleFactory( CollectionRuleFactory(
url="http://feeds.feedburner.com/Techcrunch", user=self.user url="http://feeds.feedburner.com/Techcrunch", user=self.user
@ -61,7 +60,9 @@ class OPMLImportTestCase(TestCase):
self.assertEquals(len(rules), 8) self.assertEquals(len(rules), 8)
def test_skip_existing_rules(self): 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="https://news.ycombinator.com/rss", user=self.user)
CollectionRuleFactory( CollectionRuleFactory(
url="http://feeds.feedburner.com/Techcrunch", user=self.user url="http://feeds.feedburner.com/Techcrunch", user=self.user

View file

@ -26,7 +26,7 @@ class CollectionRuleViewMixin:
class CollectionRuleDetailMixin: class CollectionRuleDetailMixin:
success_url = reverse_lazy("rules") success_url = reverse_lazy("news:collection:rules")
form_class = CollectionRuleForm form_class = CollectionRuleForm
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
@ -69,7 +69,7 @@ class CollectionRuleBulkView(FormView):
form_class = CollectionRuleBulkForm form_class = CollectionRuleBulkForm
def get_redirect_url(self): def get_redirect_url(self):
return reverse("rules") return reverse("news:collection:rules")
def get_success_url(self): def get_success_url(self):
return self.get_redirect_url() return self.get_redirect_url()
@ -121,7 +121,7 @@ class CollectionRuleBulkDeleteView(CollectionRuleBulkView):
class OPMLImportView(FormView): class OPMLImportView(FormView):
form_class = OPMLImportForm form_class = OPMLImportForm
success_url = reverse_lazy("rules") success_url = reverse_lazy("news:collection:rules")
template_name = "collection/import.html" template_name = "collection/import.html"
def form_valid(self, form): def form_valid(self, form):

View file

@ -53,7 +53,7 @@
<section class="section form__section category-form__section"> <section class="section form__section category-form__section">
<fieldset class="form__fieldset category-form__fieldset"> <fieldset class="form__fieldset category-form__fieldset">
<a class="link button button--cancel" href="{% url 'categories' %}">Cancel</a> <a class="link button button--cancel" href="{% url 'news:core:categories' %}">Cancel</a>
{% block confirm-button %}{% endblock %} {% block confirm-button %}{% endblock %}
</fieldset> </fieldset>
</section> </section>

View file

@ -16,7 +16,9 @@ class CategoryDetailViewTestCase(TestCase):
def test_simple(self): def test_simple(self):
category = CategoryFactory(user=self.user) 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() data = response.json()
self.assertEquals(response.status_code, 200) self.assertEquals(response.status_code, 200)
@ -24,7 +26,9 @@ class CategoryDetailViewTestCase(TestCase):
self.assertTrue("name" in data) self.assertTrue("name" in data)
def test_not_known(self): 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() data = response.json()
self.assertEquals(response.status_code, 404) self.assertEquals(response.status_code, 404)
@ -34,7 +38,7 @@ class CategoryDetailViewTestCase(TestCase):
category = CategoryFactory(user=self.user) category = CategoryFactory(user=self.user)
response = self.client.post( response = self.client.post(
reverse("api:categories-detail", args=[category.pk]) reverse("api:news:core:categories-detail", args=[category.pk])
) )
data = response.json() data = response.json()
@ -45,7 +49,7 @@ class CategoryDetailViewTestCase(TestCase):
category = CategoryFactory(name="Clickbait", user=self.user) category = CategoryFactory(name="Clickbait", user=self.user)
response = self.client.patch( 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"}), data=json.dumps({"name": "Interesting posts"}),
content_type="application/json", content_type="application/json",
) )
@ -58,7 +62,7 @@ class CategoryDetailViewTestCase(TestCase):
category = CategoryFactory(user=self.user) category = CategoryFactory(user=self.user)
response = self.client.patch( 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}), data=json.dumps({"id": 44}),
content_type="application/json", content_type="application/json",
) )
@ -71,7 +75,7 @@ class CategoryDetailViewTestCase(TestCase):
category = CategoryFactory(name="Clickbait", user=self.user) category = CategoryFactory(name="Clickbait", user=self.user)
response = self.client.put( 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"}), data=json.dumps({"name": "Interesting posts"}),
content_type="application/json", content_type="application/json",
) )
@ -84,7 +88,7 @@ class CategoryDetailViewTestCase(TestCase):
category = CategoryFactory(user=self.user) category = CategoryFactory(user=self.user)
response = self.client.delete( 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) self.assertEquals(response.status_code, 204)
@ -94,7 +98,9 @@ class CategoryDetailViewTestCase(TestCase):
category = CategoryFactory(user=self.user) 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) self.assertEquals(response.status_code, 403)
@ -102,7 +108,9 @@ class CategoryDetailViewTestCase(TestCase):
other_user = UserFactory() other_user = UserFactory()
category = CategoryFactory(user=other_user) 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) 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=False, rule=unread_rule)
PostFactory.create_batch(size=20, read=True, rule=read_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() data = response.json()
self.assertEquals(response.status_code, 200) self.assertEquals(response.status_code, 200)
@ -133,7 +143,9 @@ class CategoryReadTestCase(TestCase):
for rule in CollectionRuleFactory.create_batch(size=5, category=category) 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() data = response.json()
@ -142,7 +154,9 @@ class CategoryReadTestCase(TestCase):
self.assertEquals(data["id"], category.pk) self.assertEquals(data["id"], category.pk)
def test_category_unknown(self): 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) 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) 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) self.assertEquals(response.status_code, 403)
def test_get(self): def test_get(self):
category = CategoryFactory(name="Clickbait", user=self.user) 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) self.assertEquals(response.status_code, 405)
@ -187,7 +207,7 @@ class CategoryReadTestCase(TestCase):
category = CategoryFactory(name="Clickbait", user=self.user) category = CategoryFactory(name="Clickbait", user=self.user)
response = self.client.patch( 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"}), data=json.dumps({"name": "Not possible"}),
content_type="application/json", content_type="application/json",
) )
@ -198,7 +218,7 @@ class CategoryReadTestCase(TestCase):
category = CategoryFactory(name="Clickbait", user=self.user) category = CategoryFactory(name="Clickbait", user=self.user)
response = self.client.put( 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"}), data=json.dumps({"name": "Not possible"}),
content_type="application/json", content_type="application/json",
) )
@ -209,7 +229,7 @@ class CategoryReadTestCase(TestCase):
category = CategoryFactory(name="Clickbait", user=self.user) category = CategoryFactory(name="Clickbait", user=self.user)
response = self.client.delete( 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) self.assertEquals(response.status_code, 405)

View file

@ -20,7 +20,7 @@ class CategoryListViewTestCase(TestCase):
def test_simple(self): def test_simple(self):
CategoryFactory.create_batch(size=3, user=self.user) 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() data = response.json()
self.assertEquals(response.status_code, 200) 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() data = response.json()
self.assertEquals(response.status_code, 200) self.assertEquals(response.status_code, 200)
@ -58,7 +58,7 @@ class CategoryListViewTestCase(TestCase):
self.assertEquals(data[2]["id"], categories[0].pk) self.assertEquals(data[2]["id"], categories[0].pk)
def test_empty(self): 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() data = response.json()
self.assertEquals(response.status_code, 200) self.assertEquals(response.status_code, 200)
@ -68,7 +68,7 @@ class CategoryListViewTestCase(TestCase):
data = {"name": "Tech"} data = {"name": "Tech"}
response = self.client.post( response = self.client.post(
reverse("api:categories-list"), reverse("api:news:core:categories-list"),
data=json.dumps(data), data=json.dumps(data),
content_type="application/json", content_type="application/json",
) )
@ -78,21 +78,21 @@ class CategoryListViewTestCase(TestCase):
self.assertEquals(response_data["detail"], 'Method "POST" not allowed.') self.assertEquals(response_data["detail"], 'Method "POST" not allowed.')
def test_patch(self): 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() data = response.json()
self.assertEquals(response.status_code, 405) self.assertEquals(response.status_code, 405)
self.assertEquals(data["detail"], 'Method "PATCH" not allowed.') self.assertEquals(data["detail"], 'Method "PATCH" not allowed.')
def test_put(self): 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() data = response.json()
self.assertEquals(response.status_code, 405) self.assertEquals(response.status_code, 405)
self.assertEquals(data["detail"], 'Method "PUT" not allowed.') self.assertEquals(data["detail"], 'Method "PUT" not allowed.')
def test_delete(self): 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() data = response.json()
self.assertEquals(response.status_code, 405) self.assertEquals(response.status_code, 405)
@ -103,7 +103,7 @@ class CategoryListViewTestCase(TestCase):
CategoryFactory.create_batch(size=3, user=self.user) 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) self.assertEquals(response.status_code, 403)
@ -111,7 +111,7 @@ class CategoryListViewTestCase(TestCase):
other_user = UserFactory() other_user = UserFactory()
CategoryFactory.create_batch(size=3, user=other_user) 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() data = response.json()
self.assertEquals(response.status_code, 200) self.assertEquals(response.status_code, 200)
@ -128,7 +128,7 @@ class NestedCategoryListViewTestCase(TestCase):
rules = CollectionRuleFactory.create_batch(size=5, category=category) rules = CollectionRuleFactory.create_batch(size=5, category=category)
response = self.client.get( 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() data = response.json()
@ -145,7 +145,7 @@ class NestedCategoryListViewTestCase(TestCase):
category = CategoryFactory.create(user=self.user) category = CategoryFactory.create(user=self.user)
response = self.client.get( 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() data = response.json()
@ -155,14 +155,14 @@ class NestedCategoryListViewTestCase(TestCase):
def test_not_known(self): def test_not_known(self):
response = self.client.get( 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) self.assertEquals(response.status_code, 404)
def test_post(self): def test_post(self):
response = self.client.post( 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({}), data=json.dumps({}),
content_type="application/json", content_type="application/json",
) )
@ -175,7 +175,9 @@ class NestedCategoryListViewTestCase(TestCase):
category = CategoryFactory.create(user=self.user) category = CategoryFactory.create(user=self.user)
response = self.client.patch( 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"}), data=json.dumps({"name": "test"}),
content_type="application/json", content_type="application/json",
) )
@ -188,7 +190,9 @@ class NestedCategoryListViewTestCase(TestCase):
category = CategoryFactory.create(user=self.user) category = CategoryFactory.create(user=self.user)
response = self.client.put( 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"}), data=json.dumps({"name": "test"}),
content_type="application/json", content_type="application/json",
) )
@ -201,7 +205,9 @@ class NestedCategoryListViewTestCase(TestCase):
category = CategoryFactory.create(user=self.user) category = CategoryFactory.create(user=self.user)
response = self.client.delete( 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", content_type="application/json",
) )
data = response.json() data = response.json()
@ -216,7 +222,7 @@ class NestedCategoryListViewTestCase(TestCase):
rules = CollectionRuleFactory.create_batch(size=5, category=category) rules = CollectionRuleFactory.create_batch(size=5, category=category)
response = self.client.get( 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) self.assertEquals(response.status_code, 403)
@ -228,7 +234,7 @@ class NestedCategoryListViewTestCase(TestCase):
rules = CollectionRuleFactory.create_batch(size=5, category=category) rules = CollectionRuleFactory.create_batch(size=5, category=category)
response = self.client.get( 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) self.assertEquals(response.status_code, 403)
@ -242,7 +248,7 @@ class NestedCategoryListViewTestCase(TestCase):
] ]
response = self.client.get( 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() data = response.json()
@ -265,7 +271,7 @@ class NestedCategoryListViewTestCase(TestCase):
] ]
response = self.client.get( 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() data = response.json()
@ -292,7 +298,7 @@ class NestedCategoryPostView(TestCase):
} }
response = self.client.get( 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() data = response.json()
posts = data["results"] posts = data["results"]
@ -310,7 +316,7 @@ class NestedCategoryPostView(TestCase):
category = CategoryFactory.create(user=self.user) category = CategoryFactory.create(user=self.user)
response = self.client.get( 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() data = response.json()
posts = data["results"] posts = data["results"]
@ -326,7 +332,7 @@ class NestedCategoryPostView(TestCase):
) )
response = self.client.get( 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() data = response.json()
posts = data["results"] posts = data["results"]
@ -337,14 +343,14 @@ class NestedCategoryPostView(TestCase):
def test_not_known(self): def test_not_known(self):
response = self.client.get( 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) self.assertEquals(response.status_code, 404)
def test_post(self): def test_post(self):
response = self.client.post( 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({}), data=json.dumps({}),
content_type="application/json", content_type="application/json",
) )
@ -357,7 +363,9 @@ class NestedCategoryPostView(TestCase):
category = CategoryFactory.create(user=self.user) category = CategoryFactory.create(user=self.user)
response = self.client.patch( 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({}), data=json.dumps({}),
content_type="application/json", content_type="application/json",
) )
@ -370,7 +378,9 @@ class NestedCategoryPostView(TestCase):
category = CategoryFactory.create(user=self.user) category = CategoryFactory.create(user=self.user)
response = self.client.put( 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({}), data=json.dumps({}),
content_type="application/json", content_type="application/json",
) )
@ -383,7 +393,9 @@ class NestedCategoryPostView(TestCase):
category = CategoryFactory.create(user=self.user) category = CategoryFactory.create(user=self.user)
response = self.client.delete( 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", content_type="application/json",
) )
data = response.json() data = response.json()
@ -397,7 +409,7 @@ class NestedCategoryPostView(TestCase):
category = CategoryFactory.create(user=self.user) category = CategoryFactory.create(user=self.user)
response = self.client.get( 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) self.assertEquals(response.status_code, 403)
@ -407,7 +419,7 @@ class NestedCategoryPostView(TestCase):
category = CategoryFactory.create(user=other_user) category = CategoryFactory.create(user=other_user)
response = self.client.get( 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) self.assertEquals(response.status_code, 403)
@ -477,7 +489,7 @@ class NestedCategoryPostView(TestCase):
] ]
response = self.client.get( 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() data = response.json()
posts = data["results"] posts = data["results"]
@ -514,7 +526,7 @@ class NestedCategoryPostView(TestCase):
] ]
response = self.client.get( 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() data = response.json()
posts = data["results"] posts = data["results"]
@ -533,7 +545,9 @@ class NestedCategoryPostView(TestCase):
PostFactory.create_batch(size=10, rule=rule, read=True) PostFactory.create_batch(size=10, rule=rule, read=True)
response = self.client.get( 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"}, {"read": "false"},
) )
@ -554,7 +568,9 @@ class NestedCategoryPostView(TestCase):
PostFactory.create_batch(size=10, rule=rule, read=True) PostFactory.create_batch(size=10, rule=rule, read=True)
response = self.client.get( 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"}, {"read": "true"},
) )

View file

@ -19,7 +19,9 @@ class PostDetailViewTestCase(TestCase):
) )
post = PostFactory(rule=rule) 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() data = response.json()
self.assertEquals(response.status_code, 200) self.assertEquals(response.status_code, 200)
@ -34,7 +36,7 @@ class PostDetailViewTestCase(TestCase):
self.assertTrue("remoteIdentifier" in data) self.assertTrue("remoteIdentifier" in data)
def test_not_known(self): 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() data = response.json()
self.assertEquals(response.status_code, 404) self.assertEquals(response.status_code, 404)
@ -46,7 +48,9 @@ class PostDetailViewTestCase(TestCase):
) )
post = PostFactory(rule=rule) 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() data = response.json()
self.assertEquals(response.status_code, 405) self.assertEquals(response.status_code, 405)
@ -59,7 +63,7 @@ class PostDetailViewTestCase(TestCase):
post = PostFactory(title="This is clickbait for sure", rule=rule) post = PostFactory(title="This is clickbait for sure", rule=rule)
response = self.client.patch( 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"}), data=json.dumps({"title": "This title is very accurate"}),
content_type="application/json", content_type="application/json",
) )
@ -75,7 +79,7 @@ class PostDetailViewTestCase(TestCase):
post = PostFactory(title="This is clickbait for sure", rule=rule) post = PostFactory(title="This is clickbait for sure", rule=rule)
response = self.client.patch( 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}), data=json.dumps({"id": 44}),
content_type="application/json", content_type="application/json",
) )
@ -94,8 +98,14 @@ class PostDetailViewTestCase(TestCase):
post = PostFactory(title="This is clickbait for sure", rule=rule) post = PostFactory(title="This is clickbait for sure", rule=rule)
response = self.client.patch( response = self.client.patch(
reverse("api:posts-detail", args=[post.pk]), reverse("api:news:core:posts-detail", args=[post.pk]),
data=json.dumps({"rule": reverse("api:rules-detail", args=[new_rule.pk])}), data=json.dumps(
{
"rule": reverse(
"api:news:collection:rules-detail", args=[new_rule.pk]
)
}
),
content_type="application/json", content_type="application/json",
) )
data = response.json() data = response.json()
@ -111,7 +121,7 @@ class PostDetailViewTestCase(TestCase):
post = PostFactory(title="This is clickbait for sure", rule=rule) post = PostFactory(title="This is clickbait for sure", rule=rule)
response = self.client.put( 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"}), data=json.dumps({"title": "This title is very accurate"}),
content_type="application/json", content_type="application/json",
) )
@ -126,7 +136,9 @@ class PostDetailViewTestCase(TestCase):
) )
post = PostFactory(rule=rule) 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() data = response.json()
self.assertEquals(response.status_code, 405) self.assertEquals(response.status_code, 405)
@ -138,7 +150,9 @@ class PostDetailViewTestCase(TestCase):
rule = CollectionRuleFactory(user=self.user, category=None) rule = CollectionRuleFactory(user=self.user, category=None)
post = PostFactory(rule=rule) 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) self.assertEquals(response.status_code, 403)
@ -150,7 +164,9 @@ class PostDetailViewTestCase(TestCase):
) )
post = PostFactory(rule=rule) 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) self.assertEquals(response.status_code, 403)
@ -159,7 +175,9 @@ class PostDetailViewTestCase(TestCase):
rule = CollectionRuleFactory(user=other_user, category=None) rule = CollectionRuleFactory(user=other_user, category=None)
post = PostFactory(rule=rule) 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) self.assertEquals(response.status_code, 403)
@ -170,7 +188,9 @@ class PostDetailViewTestCase(TestCase):
) )
post = PostFactory(rule=rule) 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) self.assertEquals(response.status_code, 403)
@ -181,7 +201,9 @@ class PostDetailViewTestCase(TestCase):
) )
post = PostFactory(rule=rule) 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) self.assertEquals(response.status_code, 403)
@ -192,7 +214,7 @@ class PostDetailViewTestCase(TestCase):
post = PostFactory(rule=rule, read=False) post = PostFactory(rule=rule, read=False)
response = self.client.patch( 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}), data=json.dumps({"read": True}),
content_type="application/json", content_type="application/json",
) )
@ -208,7 +230,7 @@ class PostDetailViewTestCase(TestCase):
post = PostFactory(rule=rule, read=True) post = PostFactory(rule=rule, read=True)
response = self.client.patch( 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}), data=json.dumps({"read": False}),
content_type="application/json", content_type="application/json",
) )

View file

@ -21,7 +21,7 @@ class PostListViewTestCase(TestCase):
) )
PostFactory.create_batch(size=3, rule=rule) 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() data = response.json()
self.assertEquals(response.status_code, 200) 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() data = response.json()
self.assertEquals(response.status_code, 200) self.assertEquals(response.status_code, 200)
@ -77,7 +77,7 @@ class PostListViewTestCase(TestCase):
PostFactory.create_batch(size=80, rule=rule) PostFactory.create_batch(size=80, rule=rule)
page_size = 50 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() data = response.json()
self.assertEquals(response.status_code, 200) self.assertEquals(response.status_code, 200)
@ -85,7 +85,7 @@ class PostListViewTestCase(TestCase):
self.assertEquals(len(data["results"]), page_size) self.assertEquals(len(data["results"]), page_size)
def test_empty(self): 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() data = response.json()
self.assertEquals(response.status_code, 200) self.assertEquals(response.status_code, 200)
@ -96,28 +96,28 @@ class PostListViewTestCase(TestCase):
self.assertEquals(len(data["results"]), 0) self.assertEquals(len(data["results"]), 0)
def test_post(self): 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() data = response.json()
self.assertEquals(response.status_code, 405) self.assertEquals(response.status_code, 405)
self.assertEquals(data["detail"], 'Method "POST" not allowed.') self.assertEquals(data["detail"], 'Method "POST" not allowed.')
def test_patch(self): 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() data = response.json()
self.assertEquals(response.status_code, 405) self.assertEquals(response.status_code, 405)
self.assertEquals(data["detail"], 'Method "PATCH" not allowed.') self.assertEquals(data["detail"], 'Method "PATCH" not allowed.')
def test_put(self): 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() data = response.json()
self.assertEquals(response.status_code, 405) self.assertEquals(response.status_code, 405)
self.assertEquals(data["detail"], 'Method "PUT" not allowed.') self.assertEquals(data["detail"], 'Method "PUT" not allowed.')
def test_delete(self): 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() data = response.json()
self.assertEquals(response.status_code, 405) self.assertEquals(response.status_code, 405)
@ -128,7 +128,7 @@ class PostListViewTestCase(TestCase):
PostFactory.create_batch(size=3, rule=CollectionRuleFactory(user=self.user)) 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) self.assertEquals(response.status_code, 403)
@ -141,7 +141,7 @@ class PostListViewTestCase(TestCase):
size=3, rule=CollectionRuleFactory(user=self.user, category=category) 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) self.assertEquals(response.status_code, 403)
@ -151,7 +151,7 @@ class PostListViewTestCase(TestCase):
rule = CollectionRuleFactory(user=other_user, category=None) rule = CollectionRuleFactory(user=other_user, category=None)
PostFactory.create_batch(size=3, rule=rule) 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() data = response.json()
self.assertEquals(response.status_code, 200) self.assertEquals(response.status_code, 200)
@ -166,7 +166,7 @@ class PostListViewTestCase(TestCase):
size=3, rule=CollectionRuleFactory(user=other_user, category=category) 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() data = response.json()
self.assertEquals(response.status_code, 200) self.assertEquals(response.status_code, 200)
@ -183,7 +183,7 @@ class PostListViewTestCase(TestCase):
) )
PostFactory.create_batch(size=3, rule=rule) 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() data = response.json()
self.assertEquals(response.status_code, 200) self.assertEquals(response.status_code, 200)
@ -195,7 +195,7 @@ class PostListViewTestCase(TestCase):
rule = CollectionRuleFactory(user=self.user, category=None) rule = CollectionRuleFactory(user=self.user, category=None)
PostFactory.create_batch(size=3, rule=rule) 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() data = response.json()
self.assertEquals(response.status_code, 200) 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=False)
PostFactory.create_batch(size=10, rule=rule, read=True) 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() data = response.json()
posts = data["results"] posts = data["results"]
@ -230,7 +232,9 @@ class PostListViewTestCase(TestCase):
PostFactory.create_batch(size=20, rule=rule, read=False) PostFactory.create_batch(size=20, rule=rule, read=False)
PostFactory.create_batch(size=10, rule=rule, read=True) 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() data = response.json()
posts = data["results"] posts = data["results"]

View file

@ -22,7 +22,7 @@ class CategoryCreateViewTestCase(CategoryViewTestCase, TestCase):
def setUp(self): def setUp(self):
super().setUp() super().setUp()
self.url = reverse("category-create") self.url = reverse("news:core:category-create")
def test_creation(self): def test_creation(self):
rules = CollectionRuleFactory.create_batch(size=4, user=self.user) rules = CollectionRuleFactory.create_batch(size=4, user=self.user)
@ -88,7 +88,7 @@ class CategoryUpdateViewTestCase(CategoryViewTestCase, TestCase):
super().setUp() super().setUp()
self.category = CategoryFactory(name="category", user=self.user) 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): def test_name_change(self):
data = {"name": "durp", "user": self.user.pk} data = {"name": "durp", "user": self.user.pk}
@ -172,7 +172,7 @@ class CategoryUpdateViewTestCase(CategoryViewTestCase, TestCase):
other_category.rules.set([*other_rules]) other_category.rules.set([*other_rules])
data = {"name": "durp", "user": other_user.pk} 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) response = self.client.post(other_url, data)
self.assertEquals(response.status_code, 404) self.assertEquals(response.status_code, 404)
@ -218,7 +218,7 @@ class CategoryUpdateViewTestCase(CategoryViewTestCase, TestCase):
def test_unique_together(self): def test_unique_together(self):
other_category = CategoryFactory(name="other category", user=self.user) 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": []} data = {"name": "category", "user": self.user.pk, "rules": []}
response = self.client.post(url, data) response = self.client.post(url, data)

View file

@ -19,7 +19,6 @@ from newsreader.news.core.views import (
urlpatterns = [ urlpatterns = [
path("", login_required(NewsView.as_view()), name="index"),
path("categories/", login_required(CategoryListView.as_view()), name="categories"), path("categories/", login_required(CategoryListView.as_view()), name="categories"),
path( path(
"categories/<int:pk>/", "categories/<int:pk>/",

View file

@ -39,7 +39,7 @@ class CategoryViewMixin:
class CategoryDetailMixin: class CategoryDetailMixin:
success_url = reverse_lazy("categories") success_url = reverse_lazy("news:core:categories")
form_class = CategoryForm form_class = CategoryForm
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):

View file

@ -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"))),
]

View file

@ -15,8 +15,8 @@
<ol> <ol>
{% if request.user.is_authenticated %} {% if request.user.is_authenticated %}
<li class="nav__item"><a href="{% url 'index' %}">Home</a></li> <li class="nav__item"><a href="{% url 'index' %}">Home</a></li>
<li class="nav__item"><a href="{% url 'categories' %}">Categories</a></li> <li class="nav__item"><a href="{% url 'news:core:categories' %}">Categories</a></li>
<li class="nav__item"><a href="{% url 'rules' %}">Feeds</a></li> <li class="nav__item"><a href="{% url 'news:collection:rules' %}">Feeds</a></li>
<li class="nav__item"><a href="#">Settings</a></li> <li class="nav__item"><a href="#">Settings</a></li>
<li class="nav__item"><a href="{% url 'accounts:logout' %}">Logout</a></li> <li class="nav__item"><a href="{% url 'accounts:logout' %}">Logout</a></li>
{% else %} {% else %}

View file

@ -1,29 +1,26 @@
from django.conf import settings from django.conf import settings
from django.contrib import admin from django.contrib import admin
from django.contrib.auth.decorators import login_required
from django.urls import include, path from django.urls import include, path
from drf_yasg import openapi from drf_yasg import openapi
from drf_yasg.views import get_schema_view from drf_yasg.views import get_schema_view
from newsreader.accounts.urls import urlpatterns as login_urls from newsreader.accounts.urls import urlpatterns as login_urls
from newsreader.news.collection.urls import endpoints as collection_endpoints from newsreader.news.core.views import NewsView
from newsreader.news.collection.urls import urlpatterns as collection_patterns from newsreader.news.urls import endpoints as news_endpoints
from newsreader.news.core.urls import endpoints as core_endpoints from newsreader.news.urls import urlpatterns as news_patterns
from newsreader.news.core.urls import urlpatterns as core_patterns
apipatterns = [ api_patterns = [path("api/", include((news_endpoints, "news")))]
path("api/", include(core_endpoints)),
path("api/", include(collection_endpoints)),
]
schema_info = openapi.Info(title="Newsreader API", default_version="v1") 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 = [ urlpatterns = [
path("", include(core_patterns)), path("", login_required(NewsView.as_view()), name="index"),
path("", include(collection_patterns)), path("", include((news_patterns, "news"))),
path("", include((apipatterns, "api")), name="api"), path("", include((api_patterns, "api"))),
path("accounts/", include((login_urls, "accounts")), name="accounts"), path("accounts/", include((login_urls, "accounts")), name="accounts"),
path("admin/", admin.site.urls, name="admin"), path("admin/", admin.site.urls, name="admin"),
path("api/", schema_view.with_ui("swagger"), name="api"), path("api/", schema_view.with_ui("swagger"), name="api"),