133 lines
4.4 KiB
Python
133 lines
4.4 KiB
Python
from django.test import TestCase
|
|
from django.urls import reverse
|
|
from django.utils.translation import gettext as _
|
|
|
|
from newsreader.news.collection.choices import RuleTypeChoices
|
|
from newsreader.news.collection.models import CollectionRule
|
|
from newsreader.news.collection.reddit import REDDIT_API_URL, REDDIT_URL
|
|
from newsreader.news.collection.tests.factories import SubredditFactory
|
|
from newsreader.news.collection.tests.views.base import CollectionRuleViewTestCase
|
|
from newsreader.news.core.tests.factories import CategoryFactory
|
|
|
|
|
|
class SubRedditCreateViewTestCase(CollectionRuleViewTestCase, TestCase):
|
|
def setUp(self):
|
|
super().setUp()
|
|
|
|
self.form_data = {
|
|
"name": "new rule",
|
|
"url": f"{REDDIT_API_URL}/r/aww",
|
|
"category": str(self.category.pk),
|
|
"reddit_allow_nfsw": False,
|
|
"reddit_allow_spoiler": False,
|
|
"reddit_allow_viewed": True,
|
|
"reddit_upvotes_min": 0,
|
|
"reddit_comments_min": 0,
|
|
}
|
|
|
|
self.url = reverse("news:collection:subreddit-create")
|
|
|
|
def test_creation(self):
|
|
response = self.client.post(self.url, self.form_data)
|
|
|
|
self.assertEqual(response.status_code, 302)
|
|
|
|
rule = CollectionRule.objects.get(name="new rule")
|
|
|
|
self.assertEqual(rule.type, RuleTypeChoices.subreddit)
|
|
self.assertEqual(rule.url, f"{REDDIT_API_URL}/r/aww")
|
|
self.assertEqual(rule.favicon, None)
|
|
self.assertEqual(rule.category.pk, self.category.pk)
|
|
self.assertEqual(rule.user.pk, self.user.pk)
|
|
|
|
def test_regular_reddit_url(self):
|
|
self.form_data.update(url=f"{REDDIT_URL}/r/aww")
|
|
|
|
response = self.client.post(self.url, self.form_data)
|
|
|
|
self.assertContains(response, _("This does not look like an Reddit API URL"))
|
|
|
|
|
|
class SubRedditUpdateViewTestCase(CollectionRuleViewTestCase, TestCase):
|
|
def setUp(self):
|
|
super().setUp()
|
|
|
|
self.rule = SubredditFactory(
|
|
name="Python",
|
|
url=f"{REDDIT_API_URL}/r/python.json",
|
|
user=self.user,
|
|
category=self.category,
|
|
type=RuleTypeChoices.subreddit,
|
|
)
|
|
self.url = reverse(
|
|
"news:collection:subreddit-update", kwargs={"pk": self.rule.pk}
|
|
)
|
|
|
|
self.form_data = {
|
|
"name": self.rule.name,
|
|
"url": self.rule.url,
|
|
"category": str(self.category.pk),
|
|
"reddit_allow_nfsw": False,
|
|
"reddit_allow_spoiler": False,
|
|
"reddit_allow_viewed": True,
|
|
"reddit_upvotes_min": 0,
|
|
"reddit_comments_min": 0,
|
|
}
|
|
|
|
def test_name_change(self):
|
|
self.form_data.update(name="Python 2")
|
|
|
|
response = self.client.post(self.url, self.form_data)
|
|
self.assertEqual(response.status_code, 302)
|
|
|
|
self.rule.refresh_from_db()
|
|
|
|
self.assertEqual(self.rule.name, "Python 2")
|
|
|
|
def test_category_change(self):
|
|
new_category = CategoryFactory(user=self.user)
|
|
|
|
self.form_data.update(category=new_category.pk)
|
|
|
|
response = self.client.post(self.url, self.form_data)
|
|
self.assertEqual(response.status_code, 302)
|
|
|
|
self.rule.refresh_from_db()
|
|
|
|
self.assertEqual(self.rule.category.pk, new_category.pk)
|
|
|
|
def test_subreddit_rules_only(self):
|
|
rule = SubredditFactory(
|
|
name="Fake subreddit",
|
|
url="https://leddit.com/r/python",
|
|
user=self.user,
|
|
category=self.category,
|
|
type=RuleTypeChoices.feed,
|
|
)
|
|
url = reverse("news:collection:subreddit-update", kwargs={"pk": rule.pk})
|
|
|
|
response = self.client.get(url)
|
|
|
|
self.assertEqual(response.status_code, 404)
|
|
|
|
def test_url_change(self):
|
|
self.form_data.update(name="aww", url=f"{REDDIT_API_URL}/r/aww")
|
|
|
|
response = self.client.post(self.url, self.form_data)
|
|
|
|
self.assertEqual(response.status_code, 302)
|
|
|
|
rule = CollectionRule.objects.get(name="aww")
|
|
|
|
self.assertEqual(rule.type, RuleTypeChoices.subreddit)
|
|
self.assertEqual(rule.url, f"{REDDIT_API_URL}/r/aww")
|
|
self.assertEqual(rule.favicon, None)
|
|
self.assertEqual(rule.category.pk, self.category.pk)
|
|
self.assertEqual(rule.user.pk, self.user.pk)
|
|
|
|
def test_regular_reddit_url(self):
|
|
self.form_data.update(url=f"{REDDIT_URL}/r/aww")
|
|
|
|
response = self.client.post(self.url, self.form_data)
|
|
|
|
self.assertContains(response, _("This does not look like an Reddit API URL"))
|