diff --git a/src/newsreader/news/core/tests/views/category/test_category_updateview.py b/src/newsreader/news/core/tests/test_views.py similarity index 73% rename from src/newsreader/news/core/tests/views/category/test_category_updateview.py rename to src/newsreader/news/core/tests/test_views.py index 23fa769..47381d2 100644 --- a/src/newsreader/news/core/tests/views/category/test_category_updateview.py +++ b/src/newsreader/news/core/tests/test_views.py @@ -3,22 +3,73 @@ from django.urls import reverse from newsreader.accounts.tests.factories import UserFactory from newsreader.news.collection.tests.factories import CollectionRuleFactory +from newsreader.news.core.models import Category from newsreader.news.core.tests.factories import CategoryFactory -class CategoryUpdateViewTestCase(TestCase): +class CategoryViewTestCase: def setUp(self): self.user = UserFactory(password="test") self.client.login(email=self.user.email, password="test") - self.category = CategoryFactory(name="category", user=self.user) - self.url = reverse("category-update", args=[self.category.pk]) - def test_simple(self): response = self.client.get(self.url) self.assertEquals(response.status_code, 200) + +class CategoryCreateViewTestCase(CategoryViewTestCase, TestCase): + def setUp(self): + super().setUp() + + self.url = reverse("category-create") + + def test_creation(self): + rules = CollectionRuleFactory.create_batch(size=4, user=self.user) + + data = {"name": "new-category", "rules": [rule.pk for rule in rules]} + response = self.client.post(self.url, data) + + self.assertEquals(response.status_code, 302) + + category = Category.objects.get(name="new-category") + + self.assertCountEqual(category.rule_ids, [rule.pk for rule in rules]) + + def test_collection_rules_only_from_user(self): + other_user = UserFactory() + other_rules = CollectionRuleFactory.create_batch(size=4, user=other_user) + + response = self.client.get(self.url) + + for rule in other_rules: + self.assertNotContains(response, rule.name) + + def test_creation_with_other_user_rules(self): + other_user = UserFactory() + other_rules = CollectionRuleFactory.create_batch( + size=4, user=other_user, category=None + ) + + user_rules = CollectionRuleFactory.create_batch( + size=3, user=self.user, category=None + ) + + data = {"name": "new-category", "rules": [rule.pk for rule in other_rules]} + + response = self.client.post(self.url, data) + + self.assertContains(response, "not one of the available choices") + self.assertEquals(Category.objects.count(), 0) + + +class CategoryUpdateViewTestCase(CategoryViewTestCase, TestCase): + def setUp(self): + super().setUp() + + self.category = CategoryFactory(name="category", user=self.user) + self.url = reverse("category-update", args=[self.category.pk]) + def test_name_change(self): data = {"name": "durp"} self.client.post(self.url, data) diff --git a/src/newsreader/news/core/tests/views/__init__.py b/src/newsreader/news/core/tests/views/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/src/newsreader/news/core/tests/views/category/__init__.py b/src/newsreader/news/core/tests/views/category/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/src/newsreader/news/core/tests/views/category/test_category_createview.py b/src/newsreader/news/core/tests/views/category/test_category_createview.py deleted file mode 100644 index ce25e20..0000000 --- a/src/newsreader/news/core/tests/views/category/test_category_createview.py +++ /dev/null @@ -1,58 +0,0 @@ -from django.test import Client, TestCase -from django.urls import reverse - -from newsreader.accounts.tests.factories import UserFactory -from newsreader.news.collection.tests.factories import CollectionRuleFactory -from newsreader.news.core.models import Category -from newsreader.news.core.tests.factories import CategoryFactory - - -class CategoryCreateViewTestCase(TestCase): - def setUp(self): - self.user = UserFactory(password="test") - self.client.login(email=self.user.email, password="test") - - self.url = reverse("category-create") - - def test_simple(self): - response = self.client.get(self.url) - - self.assertEquals(response.status_code, 200) - - def test_creation(self): - rules = CollectionRuleFactory.create_batch(size=4, user=self.user) - - data = {"name": "new-category", "rules": [rule.pk for rule in rules]} - response = self.client.post(self.url, data) - - self.assertEquals(response.status_code, 302) - - category = Category.objects.get(name="new-category") - - self.assertCountEqual(category.rule_ids, [rule.pk for rule in rules]) - - def test_collection_rules_only_from_user(self): - other_user = UserFactory() - other_rules = CollectionRuleFactory.create_batch(size=4, user=other_user) - - response = self.client.get(self.url) - - for rule in other_rules: - self.assertNotContains(response, rule.name) - - def test_creation_with_other_user_rules(self): - other_user = UserFactory() - other_rules = CollectionRuleFactory.create_batch( - size=4, user=other_user, category=None - ) - - user_rules = CollectionRuleFactory.create_batch( - size=3, user=self.user, category=None - ) - - data = {"name": "new-category", "rules": [rule.pk for rule in other_rules]} - - response = self.client.post(self.url, data) - - self.assertContains(response, "not one of the available choices") - self.assertEquals(Category.objects.count(), 0)