diff --git a/bookwyrm/tests/models/test_activitypub_mixin.py b/bookwyrm/tests/models/test_activitypub_mixin.py index aea87e8d1..01d06e02f 100644 --- a/bookwyrm/tests/models/test_activitypub_mixin.py +++ b/bookwyrm/tests/models/test_activitypub_mixin.py @@ -32,7 +32,7 @@ class ActivitypubMixins(TestCase): "mouse", "mouse@mouse.com", "mouseword", local=True, localname="mouse" ) self.local_user.remote_id = "http://example.com/a/b" - self.local_user.save(broadcast=False) + self.local_user.save(broadcast=False, update_fields=["remote_id"]) with patch("bookwyrm.models.user.set_remote_server.delay"): self.remote_user = models.User.objects.create_user( "rat", @@ -190,7 +190,7 @@ class ActivitypubMixins(TestCase): def test_get_recipients_combine_inboxes(self, *_): """should combine users with the same shared_inbox""" self.remote_user.shared_inbox = "http://example.com/inbox" - self.remote_user.save(broadcast=False) + self.remote_user.save(broadcast=False, update_fields=["shared_inbox"]) with patch("bookwyrm.models.user.set_remote_server.delay"): another_remote_user = models.User.objects.create_user( "nutria", diff --git a/bookwyrm/tests/models/test_fields.py b/bookwyrm/tests/models/test_fields.py index 8489b49f9..2520a2fd2 100644 --- a/bookwyrm/tests/models/test_fields.py +++ b/bookwyrm/tests/models/test_fields.py @@ -24,10 +24,11 @@ from bookwyrm.models.base_model import BookWyrmModel from bookwyrm.models.activitypub_mixin import ActivitypubMixin # pylint: disable=too-many-public-methods -class ActivitypubFields(TestCase): +@patch("bookwyrm.suggested_users.rerank_suggestions_task.delay") +class ModelFields(TestCase): """overwrites standard model feilds to work with activitypub""" - def test_validate_remote_id(self): + def test_validate_remote_id(self, _): """should look like a url""" self.assertIsNone(fields.validate_remote_id("http://www.example.com")) self.assertIsNone(fields.validate_remote_id("https://www.example.com")) @@ -44,7 +45,7 @@ class ActivitypubFields(TestCase): "http://www.example.com/dlfjg 23/x", ) - def test_activitypub_field_mixin(self): + def test_activitypub_field_mixin(self, _): """generic mixin with super basic to and from functionality""" instance = fields.ActivitypubFieldMixin() self.assertEqual(instance.field_to_activity("fish"), "fish") @@ -62,7 +63,7 @@ class ActivitypubFields(TestCase): instance.name = "snake_case_name" self.assertEqual(instance.get_activitypub_field(), "snakeCaseName") - def test_set_field_from_activity(self): + def test_set_field_from_activity(self, _): """setter from entire json blob""" @dataclass @@ -81,7 +82,7 @@ class ActivitypubFields(TestCase): instance.set_field_from_activity(mock_model, data) self.assertEqual(mock_model.field_name, "hi") - def test_set_activity_from_field(self): + def test_set_activity_from_field(self, _): """set json field given entire model""" @dataclass @@ -99,7 +100,7 @@ class ActivitypubFields(TestCase): instance.set_activity_from_field(data, mock_model) self.assertEqual(data["fieldName"], "bip") - def test_remote_id_field(self): + def test_remote_id_field(self, _): """just sets some defaults on charfield""" instance = fields.RemoteIdField() self.assertEqual(instance.max_length, 255) @@ -108,7 +109,7 @@ class ActivitypubFields(TestCase): with self.assertRaises(ValidationError): instance.run_validators("http://www.example.com/dlfjg 23/x") - def test_username_field(self): + def test_username_field(self, _): """again, just setting defaults on username field""" instance = fields.UsernameField() self.assertEqual(instance.activitypub_field, "preferredUsername") @@ -129,7 +130,7 @@ class ActivitypubFields(TestCase): self.assertEqual(instance.field_to_activity("test@example.com"), "test") - def test_privacy_field_defaults(self): + def test_privacy_field_defaults(self, _): """post privacy field's many default values""" instance = fields.PrivacyField() self.assertEqual(instance.max_length, 255) @@ -142,7 +143,7 @@ class ActivitypubFields(TestCase): instance.public, "https://www.w3.org/ns/activitystreams#Public" ) - def test_privacy_field_set_field_from_activity(self): + def test_privacy_field_set_field_from_activity(self, _): """translate between to/cc fields and privacy""" @dataclass(init=False) @@ -186,7 +187,6 @@ class ActivitypubFields(TestCase): @patch("bookwyrm.models.activitypub_mixin.ObjectMixin.broadcast") @patch("bookwyrm.activitystreams.ActivityStream.add_status") - @patch("bookwyrm.suggested_users.rerank_suggestions_task.delay") def test_privacy_field_set_activity_from_field(self, *_): """translate between to/cc fields and privacy""" user = User.objects.create_user( @@ -231,7 +231,7 @@ class ActivitypubFields(TestCase): self.assertEqual(activity["to"], [user.remote_id]) self.assertEqual(activity["cc"], []) - def test_foreign_key(self): + def test_foreign_key(self, _): """should be able to format a related model""" instance = fields.ForeignKey("User", on_delete=models.CASCADE) Serializable = namedtuple("Serializable", ("to_activity", "remote_id")) @@ -240,7 +240,7 @@ class ActivitypubFields(TestCase): self.assertEqual(instance.field_to_activity(item), "https://e.b/c") @responses.activate - def test_foreign_key_from_activity_str(self): + def test_foreign_key_from_activity_str(self, _): """create a new object from a foreign key""" instance = fields.ForeignKey(User, on_delete=models.CASCADE) datafile = pathlib.Path(__file__).parent.joinpath("../data/ap_user.json") @@ -267,7 +267,7 @@ class ActivitypubFields(TestCase): self.assertEqual(value.remote_id, "https://example.com/user/mouse") self.assertEqual(value.name, "MOUSE?? MOUSE!!") - def test_foreign_key_from_activity_dict(self): + def test_foreign_key_from_activity_dict(self, *_): """test recieving activity json""" instance = fields.ForeignKey(User, on_delete=models.CASCADE) datafile = pathlib.Path(__file__).parent.joinpath("../data/ap_user.json") @@ -287,7 +287,7 @@ class ActivitypubFields(TestCase): self.assertEqual(value.name, "MOUSE?? MOUSE!!") # et cetera but we're not testing serializing user json - def test_foreign_key_from_activity_dict_existing(self): + def test_foreign_key_from_activity_dict_existing(self, _): """test receiving a dict of an existing object in the db""" instance = fields.ForeignKey(User, on_delete=models.CASCADE) datafile = pathlib.Path(__file__).parent.joinpath("../data/ap_user.json") @@ -296,7 +296,7 @@ class ActivitypubFields(TestCase): "mouse", "mouse@mouse.mouse", "mouseword", local=True, localname="mouse" ) user.remote_id = "https://example.com/user/mouse" - user.save(broadcast=False) + user.save(broadcast=False, update_fields=["remote_id"]) User.objects.create_user( "rat", "rat@rat.rat", "ratword", local=True, localname="rat" @@ -306,7 +306,7 @@ class ActivitypubFields(TestCase): value = instance.field_from_activity(activitypub.Person(**userdata)) self.assertEqual(value, user) - def test_foreign_key_from_activity_str_existing(self): + def test_foreign_key_from_activity_str_existing(self, _): """test receiving a remote id of an existing object in the db""" instance = fields.ForeignKey(User, on_delete=models.CASCADE) user = User.objects.create_user( @@ -319,14 +319,14 @@ class ActivitypubFields(TestCase): value = instance.field_from_activity(user.remote_id) self.assertEqual(value, user) - def test_one_to_one_field(self): + def test_one_to_one_field(self, _): """a gussied up foreign key""" instance = fields.OneToOneField("User", on_delete=models.CASCADE) Serializable = namedtuple("Serializable", ("to_activity", "remote_id")) item = Serializable(lambda: {"a": "b"}, "https://e.b/c") self.assertEqual(instance.field_to_activity(item), {"a": "b"}) - def test_many_to_many_field(self): + def test_many_to_many_field(self, _): """lists!""" instance = fields.ManyToManyField("User") @@ -344,7 +344,7 @@ class ActivitypubFields(TestCase): self.assertEqual(instance.field_to_activity(items), "example.com/snake_case") @responses.activate - def test_many_to_many_field_from_activity(self): + def test_many_to_many_field_from_activity(self, _): """resolve related fields for a list, takes a list of remote ids""" instance = fields.ManyToManyField(User) datafile = pathlib.Path(__file__).parent.joinpath("../data/ap_user.json") @@ -364,7 +364,7 @@ class ActivitypubFields(TestCase): self.assertEqual(len(value), 1) self.assertIsInstance(value[0], User) - def test_tag_field(self): + def test_tag_field(self, _): """a special type of many to many field""" instance = fields.TagField("User") @@ -383,13 +383,14 @@ class ActivitypubFields(TestCase): self.assertEqual(result[0].name, "Name") self.assertEqual(result[0].type, "Serializable") - def test_tag_field_from_activity(self): + def test_tag_field_from_activity(self, _): """loadin' a list of items from Links""" # TODO @responses.activate @patch("bookwyrm.models.activitypub_mixin.ObjectMixin.broadcast") - def test_image_field(self, _): + @patch("bookwyrm.suggested_users.remove_user_task.delay") + def test_image_field(self, *_): """storing images""" user = User.objects.create_user( "mouse", "mouse@mouse.mouse", "mouseword", local=True, localname="mouse" @@ -427,7 +428,7 @@ class ActivitypubFields(TestCase): self.assertIsInstance(loaded_image, list) self.assertIsInstance(loaded_image[1], ContentFile) - def test_image_serialize(self): + def test_image_serialize(self, _): """make sure we're creating sensible image paths""" ValueMock = namedtuple("ValueMock", ("url")) value_mock = ValueMock("/images/fish.jpg") @@ -436,7 +437,7 @@ class ActivitypubFields(TestCase): self.assertEqual(result.url, "https://your.domain.here/images/fish.jpg") self.assertEqual(result.name, "hello") - def test_datetime_field(self): + def test_datetime_field(self, _): """this one is pretty simple, it just has to use isoformat""" instance = fields.DateTimeField() now = timezone.now() @@ -444,12 +445,12 @@ class ActivitypubFields(TestCase): self.assertEqual(instance.field_from_activity(now.isoformat()), now) self.assertEqual(instance.field_from_activity("bip"), None) - def test_array_field(self): + def test_array_field(self, _): """idk why it makes them strings but probably for a good reason""" instance = fields.ArrayField(fields.IntegerField) self.assertEqual(instance.field_to_activity([0, 1]), ["0", "1"]) - def test_html_field(self): + def test_html_field(self, _): """sanitizes html, the sanitizer has its own tests""" instance = fields.HtmlField() self.assertEqual( diff --git a/bookwyrm/tests/test_suggested_users.py b/bookwyrm/tests/test_suggested_users.py index 13dfda39c..41e8911eb 100644 --- a/bookwyrm/tests/test_suggested_users.py +++ b/bookwyrm/tests/test_suggested_users.py @@ -13,6 +13,7 @@ from bookwyrm.suggested_users import suggested_users, get_annotated_users @patch("bookwyrm.activitystreams.ActivityStream.add_status") @patch("bookwyrm.suggested_users.rerank_suggestions_task.delay") @patch("bookwyrm.suggested_users.rerank_user_task.delay") +@patch("bookwyrm.suggested_users.remove_user_task.delay") class SuggestedUsers(TestCase): """using redis to build activity streams""" @@ -22,7 +23,6 @@ class SuggestedUsers(TestCase): self.local_user = models.User.objects.create_user( "mouse", "mouse@mouse.mouse", "password", local=True, localname="mouse" ) - self.book = models.Edition.objects.create(title="test book") def test_get_rank(self, *_): """a float that reflects both the mutuals count and shared books""" @@ -97,7 +97,12 @@ class SuggestedUsers(TestCase): "fishword", local=True, localname="fish", - discoverable=True, + ) + work = models.Work.objects.create(title="Test Work") + book = models.Edition.objects.create( + title="Test Book", + remote_id="https://example.com/book/1", + parent_work=work, ) with patch("bookwyrm.models.activitypub_mixin.broadcast_task.delay"): # 1 shared follow @@ -107,28 +112,22 @@ class SuggestedUsers(TestCase): # 1 shared book models.ShelfBook.objects.create( user=self.local_user, - book=self.book, + book=book, shelf=self.local_user.shelf_set.first(), ) models.ShelfBook.objects.create( - user=user_1, book=self.book, shelf=user_1.shelf_set.first() + user=user_1, book=book, shelf=user_1.shelf_set.first() ) result = get_annotated_users(self.local_user) - self.assertEqual(result.count(), 2) + self.assertEqual(result.count(), 1) self.assertTrue(user_1 in result) self.assertFalse(user_2 in result) - self.assertTrue(self.local_user in result) - self.assertTrue(self.remote_user in result) user_1_annotated = result.get(id=user_1.id) self.assertEqual(user_1_annotated.mutuals, 1) self.assertEqual(user_1_annotated.shared_books, 1) - remote_user_annotated = result.get(id=self.remote_user.id) - self.assertEqual(remote_user_annotated.mutuals, 0) - self.assertEqual(remote_user_annotated.shared_books, 0) - def test_get_annotated_users_counts(self, *_): """correct counting for multiple shared attributed""" user_1 = models.User.objects.create_user( @@ -170,6 +169,5 @@ class SuggestedUsers(TestCase): ~Q(id=self.local_user.id), ~Q(followers=self.local_user), ) - self.assertEqual(result.count(), 2) user_1_annotated = result.get(id=user_1.id) self.assertEqual(user_1_annotated.mutuals, 3) diff --git a/bookwyrm/tests/views/test_book.py b/bookwyrm/tests/views/test_book.py index 47e322297..6f6116b2e 100644 --- a/bookwyrm/tests/views/test_book.py +++ b/bookwyrm/tests/views/test_book.py @@ -201,7 +201,8 @@ class BookViews(TestCase): self.assertEqual(book.authors.first().name, "Sappho") self.assertEqual(book.authors.first(), book.parent_work.authors.first()) - def test_switch_edition(self): + @patch("bookwyrm.suggested_users.rerank_suggestions_task.delay") + def test_switch_edition(self, _): """updates user's relationships to a book""" work = models.Work.objects.create(title="test work") edition1 = models.Edition.objects.create(title="first ed", parent_work=work) diff --git a/bookwyrm/tests/views/test_federation.py b/bookwyrm/tests/views/test_federation.py index 7e7ef48f5..f43a9623e 100644 --- a/bookwyrm/tests/views/test_federation.py +++ b/bookwyrm/tests/views/test_federation.py @@ -69,7 +69,7 @@ class FederationViews(TestCase): identifier="hi.there.com", ) self.remote_user.federated_server = server - self.remote_user.save() + self.remote_user.save(update_fields=["federated_server"]) self.assertEqual(server.status, "federated") @@ -108,7 +108,9 @@ class FederationViews(TestCase): self.remote_user.federated_server = server self.remote_user.is_active = False self.remote_user.deactivation_reason = "domain_block" - self.remote_user.save() + self.remote_user.save( + update_fields=["federated_server", "is_active", "deactivation_reason"] + ) request = self.factory.post("") request.user = self.local_user diff --git a/bookwyrm/tests/views/test_feed.py b/bookwyrm/tests/views/test_feed.py index aad72b0c7..406310e4e 100644 --- a/bookwyrm/tests/views/test_feed.py +++ b/bookwyrm/tests/views/test_feed.py @@ -16,6 +16,8 @@ from bookwyrm.activitypub import ActivitypubResponse @patch("bookwyrm.activitystreams.ActivityStream.get_activity_stream") @patch("bookwyrm.activitystreams.ActivityStream.add_status") +@patch("bookwyrm.suggested_users.rerank_suggestions_task.delay") +@patch("bookwyrm.suggested_users.remove_user_task.delay") class FeedViews(TestCase): """activity feed, statuses, dms""" diff --git a/bookwyrm/tests/views/test_follow.py b/bookwyrm/tests/views/test_follow.py index 122cf3c6a..714284b01 100644 --- a/bookwyrm/tests/views/test_follow.py +++ b/bookwyrm/tests/views/test_follow.py @@ -130,7 +130,9 @@ class FollowViews(TestCase): def test_handle_accept(self): """accept a follow request""" self.local_user.manually_approves_followers = True - self.local_user.save(broadcast=False) + self.local_user.save( + broadcast=False, update_fields=["manually_approves_followers"] + ) request = self.factory.post("", {"user": self.remote_user.username}) request.user = self.local_user rel = models.UserFollowRequest.objects.create( @@ -147,7 +149,9 @@ class FollowViews(TestCase): def test_handle_reject(self): """reject a follow request""" self.local_user.manually_approves_followers = True - self.local_user.save(broadcast=False) + self.local_user.save( + broadcast=False, update_fields=["manually_approves_followers"] + ) request = self.factory.post("", {"user": self.remote_user.username}) request.user = self.local_user rel = models.UserFollowRequest.objects.create( diff --git a/bookwyrm/tests/views/test_get_started.py b/bookwyrm/tests/views/test_get_started.py index c741415c8..31e5e86c5 100644 --- a/bookwyrm/tests/views/test_get_started.py +++ b/bookwyrm/tests/views/test_get_started.py @@ -43,7 +43,9 @@ class GetStartedViews(TestCase): result.render() self.assertEqual(result.status_code, 200) - def test_profile_view_post(self): + @patch("bookwyrm.suggested_users.rerank_suggestions_task.delay") + @patch("bookwyrm.suggested_users.rerank_user_task.delay") + def test_profile_view_post(self, *_): """save basic user details""" view = views.GetStartedProfile.as_view() form = forms.LimitedEditUserForm(instance=self.local_user) @@ -85,7 +87,8 @@ class GetStartedViews(TestCase): result.render() self.assertEqual(result.status_code, 200) - def test_books_view_post(self): + @patch("bookwyrm.suggested_users.rerank_suggestions_task.delay") + def test_books_view_post(self, _): """shelve some books""" view = views.GetStartedBooks.as_view() data = {self.book.id: self.local_user.shelf_set.first().id} diff --git a/bookwyrm/tests/views/test_readthrough.py b/bookwyrm/tests/views/test_readthrough.py index ae87ebdc7..618d9cf87 100644 --- a/bookwyrm/tests/views/test_readthrough.py +++ b/bookwyrm/tests/views/test_readthrough.py @@ -7,6 +7,7 @@ from django.utils import timezone from bookwyrm import models +@patch("bookwyrm.suggested_users.rerank_suggestions_task.delay") @patch("bookwyrm.models.activitypub_mixin.broadcast_task.delay") class ReadThrough(TestCase): """readthrough tests""" @@ -29,7 +30,7 @@ class ReadThrough(TestCase): with patch("bookwyrm.models.activitypub_mixin.broadcast_task.delay"): self.client.force_login(self.user) - def test_create_basic_readthrough(self, delay_mock): + def test_create_basic_readthrough(self, delay_mock, _): """A basic readthrough doesn't create a progress update""" self.assertEqual(self.edition.readthrough_set.count(), 0) @@ -50,7 +51,7 @@ class ReadThrough(TestCase): self.assertEqual(readthroughs[0].finish_date, None) self.assertEqual(delay_mock.call_count, 1) - def test_create_progress_readthrough(self, delay_mock): + def test_create_progress_readthrough(self, delay_mock, _): """a readthrough with progress""" self.assertEqual(self.edition.readthrough_set.count(), 0) diff --git a/bookwyrm/tests/views/test_reports.py b/bookwyrm/tests/views/test_reports.py index d6034a940..7d39a0076 100644 --- a/bookwyrm/tests/views/test_reports.py +++ b/bookwyrm/tests/views/test_reports.py @@ -117,7 +117,8 @@ class ReportViews(TestCase): self.assertFalse(report.resolved) @patch("bookwyrm.suggested_users.rerank_suggestions_task.delay") - def test_suspend_user(self): + @patch("bookwyrm.suggested_users.remove_user_task.delay") + def test_suspend_user(self, *_): """toggle whether a user is able to log in""" self.assertTrue(self.rat.is_active) request = self.factory.post("") diff --git a/bookwyrm/tests/views/test_status.py b/bookwyrm/tests/views/test_status.py index 2049963cb..d4edee0b3 100644 --- a/bookwyrm/tests/views/test_status.py +++ b/bookwyrm/tests/views/test_status.py @@ -9,8 +9,8 @@ from bookwyrm.settings import DOMAIN # pylint: disable=invalid-name -@patch("bookwyrm.models.activitypub_mixin.broadcast_task.delay") @patch("bookwyrm.suggested_users.rerank_suggestions_task.delay") +@patch("bookwyrm.models.activitypub_mixin.broadcast_task.delay") class StatusViews(TestCase): """viewing and creating statuses""" @@ -328,7 +328,7 @@ class StatusViews(TestCase): result = views.status.to_markdown(text) self.assertEqual(result, '
hi ' "is rad
") - def test_handle_delete_status(self, mock): + def test_handle_delete_status(self, mock, *_): """marks a status as deleted""" view = views.DeleteStatus.as_view() with patch("bookwyrm.activitystreams.ActivityStream.add_status"): diff --git a/bookwyrm/tests/views/test_user.py b/bookwyrm/tests/views/test_user.py index 5e3680d2a..0efdf16a3 100644 --- a/bookwyrm/tests/views/test_user.py +++ b/bookwyrm/tests/views/test_user.py @@ -30,11 +30,12 @@ class UserViews(TestCase): ) self.book = models.Edition.objects.create(title="test") with patch("bookwyrm.models.activitypub_mixin.broadcast_task.delay"): - models.ShelfBook.objects.create( - book=self.book, - user=self.local_user, - shelf=self.local_user.shelf_set.first(), - ) + with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"): + models.ShelfBook.objects.create( + book=self.book, + user=self.local_user, + shelf=self.local_user.shelf_set.first(), + ) models.SiteSettings.objects.create() self.anonymous_user = AnonymousUser @@ -95,7 +96,8 @@ class UserViews(TestCase): self.assertIsInstance(result, ActivitypubResponse) self.assertEqual(result.status_code, 200) - def test_followers_page_blocked(self): + @patch("bookwyrm.suggested_users.rerank_suggestions_task.delay") + def test_followers_page_blocked(self, _): """there are so many views, this just makes sure it LOADS""" view = views.Followers.as_view() request = self.factory.get("")