From 3a5289a99917d0f362d155b83d4a9c63643282d1 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Tue, 25 Jan 2022 13:38:13 -0800 Subject: [PATCH] Separate lists view test files --- bookwyrm/tests/views/lists/test_curate.py | 68 +++++++ bookwyrm/tests/views/lists/test_embed.py | 89 ++++++++++ bookwyrm/tests/views/lists/test_list.py | 205 +--------------------- bookwyrm/tests/views/lists/test_lists.py | 161 +++++++++++++++++ 4 files changed, 320 insertions(+), 203 deletions(-) create mode 100644 bookwyrm/tests/views/lists/test_curate.py create mode 100644 bookwyrm/tests/views/lists/test_embed.py create mode 100644 bookwyrm/tests/views/lists/test_lists.py diff --git a/bookwyrm/tests/views/lists/test_curate.py b/bookwyrm/tests/views/lists/test_curate.py new file mode 100644 index 000000000..98a7fc016 --- /dev/null +++ b/bookwyrm/tests/views/lists/test_curate.py @@ -0,0 +1,68 @@ +""" test for app action functionality """ +from unittest.mock import patch + +from django.contrib.auth.models import AnonymousUser +from django.template.response import TemplateResponse +from django.test import TestCase +from django.test.client import RequestFactory + +from bookwyrm import models, views +from bookwyrm.tests.validate_html import validate_html + + +# pylint: disable=unused-argument +class ListViews(TestCase): + """list view""" + + def setUp(self): + """we need basic test data and mocks""" + self.factory = RequestFactory() + with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( + "bookwyrm.activitystreams.populate_stream_task.delay" + ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + self.local_user = models.User.objects.create_user( + "mouse@local.com", + "mouse@mouse.com", + "mouseword", + local=True, + localname="mouse", + remote_id="https://example.com/users/mouse", + ) + work = models.Work.objects.create(title="Work") + self.book = models.Edition.objects.create( + title="Example Edition", + remote_id="https://example.com/book/1", + parent_work=work, + ) + + with patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async"): + self.list = models.List.objects.create( + name="Test List", user=self.local_user + ) + self.anonymous_user = AnonymousUser + self.anonymous_user.is_authenticated = False + + models.SiteSettings.objects.create() + + def test_curate_page(self): + """there are so many views, this just makes sure it LOADS""" + view = views.Curate.as_view() + request = self.factory.get("") + request.user = self.local_user + with patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async"): + models.ListItem.objects.create( + book_list=self.list, + user=self.local_user, + book=self.book, + approved=False, + order=1, + ) + + result = view(request, self.list.id) + self.assertIsInstance(result, TemplateResponse) + validate_html(result.render()) + self.assertEqual(result.status_code, 200) + + request.user = self.anonymous_user + result = view(request, self.list.id) + self.assertEqual(result.status_code, 302) diff --git a/bookwyrm/tests/views/lists/test_embed.py b/bookwyrm/tests/views/lists/test_embed.py new file mode 100644 index 000000000..dc61736d3 --- /dev/null +++ b/bookwyrm/tests/views/lists/test_embed.py @@ -0,0 +1,89 @@ +""" test for app action functionality """ +from unittest.mock import patch + +from django.contrib.auth.models import AnonymousUser +from django.http.response import Http404 +from django.template.response import TemplateResponse +from django.test import TestCase +from django.test.client import RequestFactory + +from bookwyrm import models, views +from bookwyrm.tests.validate_html import validate_html + + +# pylint: disable=unused-argument +class ListViews(TestCase): + """list view""" + + def setUp(self): + """we need basic test data and mocks""" + self.factory = RequestFactory() + with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( + "bookwyrm.activitystreams.populate_stream_task.delay" + ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + self.local_user = models.User.objects.create_user( + "mouse@local.com", + "mouse@mouse.com", + "mouseword", + local=True, + localname="mouse", + remote_id="https://example.com/users/mouse", + ) + work = models.Work.objects.create(title="Work") + self.book = models.Edition.objects.create( + title="Example Edition", + remote_id="https://example.com/book/1", + parent_work=work, + ) + + with patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async"): + self.list = models.List.objects.create( + name="Test List", user=self.local_user + ) + self.anonymous_user = AnonymousUser + self.anonymous_user.is_authenticated = False + + models.SiteSettings.objects.create() + + def test_embed_call_without_key(self): + """there are so many views, this just makes sure it DOESN’T load""" + view = views.unsafe_embed_list + request = self.factory.get("") + request.user = self.anonymous_user + with patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async"): + models.ListItem.objects.create( + book_list=self.list, + user=self.local_user, + book=self.book, + approved=True, + order=1, + ) + + with patch("bookwyrm.views.list.list.is_api_request") as is_api: + is_api.return_value = False + with self.assertRaises(Http404): + view(request, self.list.id, "") + + def test_embed_call_with_key(self): + """there are so many views, this just makes sure it LOADS""" + view = views.unsafe_embed_list + request = self.factory.get("") + request.user = self.anonymous_user + with patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async"): + models.ListItem.objects.create( + book_list=self.list, + user=self.local_user, + book=self.book, + approved=True, + order=1, + ) + + embed_key = str(self.list.embed_key.hex) + + with patch("bookwyrm.views.list.list.is_api_request") as is_api: + is_api.return_value = False + result = view(request, self.list.id, embed_key) + + self.assertIsInstance(result, TemplateResponse) + validate_html(result.render()) + self.assertEqual(result.status_code, 200) diff --git a/bookwyrm/tests/views/lists/test_list.py b/bookwyrm/tests/views/lists/test_list.py index fb374fc51..07cdbb701 100644 --- a/bookwyrm/tests/views/lists/test_list.py +++ b/bookwyrm/tests/views/lists/test_list.py @@ -3,7 +3,6 @@ import json from unittest.mock import patch from django.contrib.auth.models import AnonymousUser -from django.http.response import Http404 from django.template.response import TemplateResponse from django.test import TestCase from django.test.client import RequestFactory @@ -12,9 +11,10 @@ from bookwyrm import models, views from bookwyrm.activitypub import ActivitypubResponse from bookwyrm.tests.validate_html import validate_html + # pylint: disable=unused-argument class ListViews(TestCase): - """tag views""" + """list view""" def setUp(self): """we need basic test data and mocks""" @@ -30,14 +30,6 @@ class ListViews(TestCase): localname="mouse", remote_id="https://example.com/users/mouse", ) - self.rat = models.User.objects.create_user( - "rat@local.com", - "rat@rat.com", - "ratword", - local=True, - localname="rat", - remote_id="https://example.com/users/rat", - ) work = models.Work.objects.create(title="Work") self.book = models.Edition.objects.create( title="Example Edition", @@ -72,108 +64,6 @@ class ListViews(TestCase): models.SiteSettings.objects.create() - @patch("bookwyrm.lists_stream.ListsStream.get_list_stream") - def test_lists_page(self, _): - """there are so many views, this just makes sure it LOADS""" - view = views.Lists.as_view() - with patch( - "bookwyrm.models.activitypub_mixin.broadcast_task.apply_async" - ), patch("bookwyrm.lists_stream.add_list_task.delay"): - models.List.objects.create(name="Public list", user=self.local_user) - models.List.objects.create( - name="Private list", privacy="direct", user=self.local_user - ) - request = self.factory.get("") - request.user = self.local_user - - result = view(request) - self.assertIsInstance(result, TemplateResponse) - validate_html(result.render()) - self.assertEqual(result.status_code, 200) - - request.user = self.anonymous_user - - result = view(request) - self.assertIsInstance(result, TemplateResponse) - validate_html(result.render()) - self.assertEqual(result.status_code, 200) - - def test_saved_lists_page(self): - """there are so many views, this just makes sure it LOADS""" - view = views.SavedLists.as_view() - with patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async"): - booklist = models.List.objects.create( - name="Public list", user=self.local_user - ) - models.List.objects.create( - name="Private list", privacy="direct", user=self.local_user - ) - self.local_user.saved_lists.add(booklist) - request = self.factory.get("") - request.user = self.local_user - - result = view(request) - self.assertIsInstance(result, TemplateResponse) - validate_html(result.render()) - self.assertEqual(result.status_code, 200) - self.assertEqual(result.context_data["lists"].object_list, [booklist]) - - def test_saved_lists_page_empty(self): - """there are so many views, this just makes sure it LOADS""" - view = views.SavedLists.as_view() - with patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async"): - models.List.objects.create(name="Public list", user=self.local_user) - models.List.objects.create( - name="Private list", privacy="direct", user=self.local_user - ) - request = self.factory.get("") - request.user = self.local_user - - result = view(request) - self.assertIsInstance(result, TemplateResponse) - validate_html(result.render()) - self.assertEqual(result.status_code, 200) - self.assertEqual(len(result.context_data["lists"].object_list), 0) - - def test_saved_lists_page_logged_out(self): - """logged out saved lists""" - view = views.SavedLists.as_view() - request = self.factory.get("") - request.user = self.anonymous_user - - result = view(request) - self.assertEqual(result.status_code, 302) - - def test_lists_create(self): - """create list view""" - view = views.Lists.as_view() - request = self.factory.post( - "", - { - "name": "A list", - "description": "wow", - "privacy": "unlisted", - "curation": "open", - "user": self.local_user.id, - }, - ) - request.user = self.local_user - with patch( - "bookwyrm.models.activitypub_mixin.broadcast_task.apply_async" - ) as mock: - result = view(request) - - self.assertEqual(mock.call_count, 1) - activity = json.loads(mock.call_args[1]["args"][1]) - self.assertEqual(activity["type"], "Create") - self.assertEqual(activity["actor"], self.local_user.remote_id) - - self.assertEqual(result.status_code, 302) - new_list = models.List.objects.filter(name="A list").get() - self.assertEqual(new_list.description, "wow") - self.assertEqual(new_list.privacy, "unlisted") - self.assertEqual(new_list.curation, "open") - def test_list_page(self): """there are so many views, this just makes sure it LOADS""" view = views.List.as_view() @@ -345,94 +235,3 @@ class ListViews(TestCase): self.assertEqual(self.list.description, "wow") self.assertEqual(self.list.privacy, "direct") self.assertEqual(self.list.curation, "curated") - - def test_curate_page(self): - """there are so many views, this just makes sure it LOADS""" - view = views.Curate.as_view() - request = self.factory.get("") - request.user = self.local_user - with patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async"): - models.ListItem.objects.create( - book_list=self.list, - user=self.local_user, - book=self.book, - approved=False, - order=1, - ) - - result = view(request, self.list.id) - self.assertIsInstance(result, TemplateResponse) - validate_html(result.render()) - self.assertEqual(result.status_code, 200) - - request.user = self.anonymous_user - result = view(request, self.list.id) - self.assertEqual(result.status_code, 302) - - def test_user_lists_page(self): - """there are so many views, this just makes sure it LOADS""" - view = views.UserLists.as_view() - with patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async"): - models.List.objects.create(name="Public list", user=self.local_user) - models.List.objects.create( - name="Private list", privacy="direct", user=self.local_user - ) - request = self.factory.get("") - request.user = self.local_user - - result = view(request, self.local_user.localname) - self.assertIsInstance(result, TemplateResponse) - validate_html(result.render()) - self.assertEqual(result.status_code, 200) - - def test_user_lists_page_logged_out(self): - """there are so many views, this just makes sure it LOADS""" - view = views.UserLists.as_view() - request = self.factory.get("") - request.user = self.anonymous_user - - result = view(request, self.local_user.username) - self.assertEqual(result.status_code, 302) - - def test_embed_call_without_key(self): - """there are so many views, this just makes sure it DOESN’T load""" - view = views.unsafe_embed_list - request = self.factory.get("") - request.user = self.anonymous_user - with patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async"): - models.ListItem.objects.create( - book_list=self.list, - user=self.local_user, - book=self.book, - approved=True, - order=1, - ) - - with patch("bookwyrm.views.list.list.is_api_request") as is_api: - is_api.return_value = False - with self.assertRaises(Http404): - view(request, self.list.id, "") - - def test_embed_call_with_key(self): - """there are so many views, this just makes sure it LOADS""" - view = views.unsafe_embed_list - request = self.factory.get("") - request.user = self.anonymous_user - with patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async"): - models.ListItem.objects.create( - book_list=self.list, - user=self.local_user, - book=self.book, - approved=True, - order=1, - ) - - embed_key = str(self.list.embed_key.hex) - - with patch("bookwyrm.views.list.list.is_api_request") as is_api: - is_api.return_value = False - result = view(request, self.list.id, embed_key) - - self.assertIsInstance(result, TemplateResponse) - validate_html(result.render()) - self.assertEqual(result.status_code, 200) diff --git a/bookwyrm/tests/views/lists/test_lists.py b/bookwyrm/tests/views/lists/test_lists.py new file mode 100644 index 000000000..f65d2e4c2 --- /dev/null +++ b/bookwyrm/tests/views/lists/test_lists.py @@ -0,0 +1,161 @@ +""" test for app action functionality """ +import json +from unittest.mock import patch + +from django.contrib.auth.models import AnonymousUser +from django.template.response import TemplateResponse +from django.test import TestCase +from django.test.client import RequestFactory + +from bookwyrm import models, views +from bookwyrm.tests.validate_html import validate_html + +# pylint: disable=unused-argument +class ListViews(TestCase): + """lists of lists""" + + def setUp(self): + """we need basic test data and mocks""" + self.factory = RequestFactory() + with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( + "bookwyrm.activitystreams.populate_stream_task.delay" + ), patch("bookwyrm.lists_stream.populate_lists_task.delay"): + self.local_user = models.User.objects.create_user( + "mouse@local.com", + "mouse@mouse.com", + "mouseword", + local=True, + localname="mouse", + remote_id="https://example.com/users/mouse", + ) + self.anonymous_user = AnonymousUser + self.anonymous_user.is_authenticated = False + + models.SiteSettings.objects.create() + + @patch("bookwyrm.lists_stream.ListsStream.get_list_stream") + def test_lists_page(self, _): + """there are so many views, this just makes sure it LOADS""" + view = views.Lists.as_view() + with patch( + "bookwyrm.models.activitypub_mixin.broadcast_task.apply_async" + ), patch("bookwyrm.lists_stream.add_list_task.delay"): + models.List.objects.create(name="Public list", user=self.local_user) + models.List.objects.create( + name="Private list", privacy="direct", user=self.local_user + ) + request = self.factory.get("") + request.user = self.local_user + + result = view(request) + self.assertIsInstance(result, TemplateResponse) + validate_html(result.render()) + self.assertEqual(result.status_code, 200) + + request.user = self.anonymous_user + + result = view(request) + self.assertIsInstance(result, TemplateResponse) + validate_html(result.render()) + self.assertEqual(result.status_code, 200) + + def test_saved_lists_page(self): + """there are so many views, this just makes sure it LOADS""" + view = views.SavedLists.as_view() + with patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async"): + booklist = models.List.objects.create( + name="Public list", user=self.local_user + ) + models.List.objects.create( + name="Private list", privacy="direct", user=self.local_user + ) + self.local_user.saved_lists.add(booklist) + request = self.factory.get("") + request.user = self.local_user + + result = view(request) + self.assertIsInstance(result, TemplateResponse) + validate_html(result.render()) + self.assertEqual(result.status_code, 200) + self.assertEqual(result.context_data["lists"].object_list, [booklist]) + + def test_saved_lists_page_empty(self): + """there are so many views, this just makes sure it LOADS""" + view = views.SavedLists.as_view() + with patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async"): + models.List.objects.create(name="Public list", user=self.local_user) + models.List.objects.create( + name="Private list", privacy="direct", user=self.local_user + ) + request = self.factory.get("") + request.user = self.local_user + + result = view(request) + self.assertIsInstance(result, TemplateResponse) + validate_html(result.render()) + self.assertEqual(result.status_code, 200) + self.assertEqual(len(result.context_data["lists"].object_list), 0) + + def test_saved_lists_page_logged_out(self): + """logged out saved lists""" + view = views.SavedLists.as_view() + request = self.factory.get("") + request.user = self.anonymous_user + + result = view(request) + self.assertEqual(result.status_code, 302) + + def test_user_lists_page(self): + """there are so many views, this just makes sure it LOADS""" + view = views.UserLists.as_view() + with patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async"): + models.List.objects.create(name="Public list", user=self.local_user) + models.List.objects.create( + name="Private list", privacy="direct", user=self.local_user + ) + request = self.factory.get("") + request.user = self.local_user + + result = view(request, self.local_user.localname) + self.assertIsInstance(result, TemplateResponse) + validate_html(result.render()) + self.assertEqual(result.status_code, 200) + + def test_user_lists_page_logged_out(self): + """there are so many views, this just makes sure it LOADS""" + view = views.UserLists.as_view() + request = self.factory.get("") + request.user = self.anonymous_user + + result = view(request, self.local_user.username) + self.assertEqual(result.status_code, 302) + + def test_lists_create(self): + """create list view""" + view = views.Lists.as_view() + request = self.factory.post( + "", + { + "name": "A list", + "description": "wow", + "privacy": "unlisted", + "curation": "open", + "user": self.local_user.id, + }, + ) + request.user = self.local_user + with patch( + "bookwyrm.models.activitypub_mixin.broadcast_task.apply_async" + ) as mock: + result = view(request) + + self.assertEqual(mock.call_count, 1) + activity = json.loads(mock.call_args[1]["args"][1]) + self.assertEqual(activity["type"], "Create") + self.assertEqual(activity["actor"], self.local_user.remote_id) + + self.assertEqual(result.status_code, 302) + new_list = models.List.objects.filter(name="A list").get() + self.assertEqual(new_list.description, "wow") + self.assertEqual(new_list.privacy, "unlisted") + self.assertEqual(new_list.curation, "open")