diff --git a/bookwyrm/activitystreams.py b/bookwyrm/activitystreams.py index c6ad5760..6dedd717 100644 --- a/bookwyrm/activitystreams.py +++ b/bookwyrm/activitystreams.py @@ -1,5 +1,6 @@ """ access the activity streams stored in redis """ from django.dispatch import receiver +from django.db import transaction from django.db.models import signals, Q from bookwyrm import models @@ -258,38 +259,31 @@ def add_status_on_create(sender, instance, created, *args, **kwargs): return if instance.deleted: - for stream in streams.values(): - stream.remove_object_from_related_stores(instance) + remove_status_task.delay(instance.id) return - for stream in streams.values(): - stream.add_status(instance, increment_unread=created) - - if sender != models.Boost: - return - # remove the original post and other, earlier boosts - boosted = instance.boost.boosted_status - old_versions = models.Boost.objects.filter( - boosted_status__id=boosted.id, - created_date__lt=instance.created_date, + # when creating new things, gotta wait on the transaction + transaction.on_commit( + lambda: add_status_on_create_command(sender, instance, created) ) - for stream in streams.values(): - audience = stream.get_stores_for_object(instance) - stream.remove_object_from_related_stores(boosted, stores=audience) - for status in old_versions: - stream.remove_object_from_related_stores(status, stores=audience) + + +def add_status_on_create_command(sender, instance, created): + """runs this code only after the database commit completes""" + add_status_task.delay(instance.id, increment_unread=created) + + if sender == models.Boost: + handle_boost_task.delay(instance.id) @receiver(signals.post_delete, sender=models.Boost) # pylint: disable=unused-argument def remove_boost_on_delete(sender, instance, *args, **kwargs): """boosts are deleted""" - # we're only interested in new statuses - for stream in streams.values(): - # remove the boost - stream.remove_object_from_related_stores(instance) - # re-add the original status - stream.add_status(instance.boosted_status) + # remove the boost + remove_status_task.delay(instance.id) + # re-add the original status + add_status_task.delay(instance.boosted_status.id) @receiver(signals.post_save, sender=models.UserFollows) @@ -298,7 +292,9 @@ def add_statuses_on_follow(sender, instance, created, *args, **kwargs): """add a newly followed user's statuses to feeds""" if not created or not instance.user_subject.local: return - HomeStream().add_user_statuses(instance.user_subject, instance.user_object) + add_user_statuses_task.delay( + instance.user_subject.id, instance.user_object.id, stream_list=["home"] + ) @receiver(signals.post_delete, sender=models.UserFollows) @@ -307,7 +303,9 @@ def remove_statuses_on_unfollow(sender, instance, *args, **kwargs): """remove statuses from a feed on unfollow""" if not instance.user_subject.local: return - HomeStream().remove_user_statuses(instance.user_subject, instance.user_object) + remove_user_statuses_task.delay( + instance.user_subject.id, instance.user_object.id, stream_list=["home"] + ) @receiver(signals.post_save, sender=models.UserBlocks) @@ -316,13 +314,15 @@ def remove_statuses_on_block(sender, instance, *args, **kwargs): """remove statuses from all feeds on block""" # blocks apply ot all feeds if instance.user_subject.local: - for stream in streams.values(): - stream.remove_user_statuses(instance.user_subject, instance.user_object) + remove_user_statuses_task.delay( + instance.user_subject.id, instance.user_object.id + ) # and in both directions if instance.user_object.local: - for stream in streams.values(): - stream.remove_user_statuses(instance.user_object, instance.user_subject) + remove_user_statuses_task.delay( + instance.user_object.id, instance.user_subject.id + ) @receiver(signals.post_delete, sender=models.UserBlocks) @@ -330,15 +330,22 @@ def remove_statuses_on_block(sender, instance, *args, **kwargs): def add_statuses_on_unblock(sender, instance, *args, **kwargs): """remove statuses from all feeds on block""" public_streams = [v for (k, v) in streams.items() if k != "home"] + # add statuses back to streams with statuses from anyone if instance.user_subject.local: - for stream in public_streams: - stream.add_user_statuses(instance.user_subject, instance.user_object) + add_user_statuses_task.delay( + instance.user_subject.id, + instance.user_object.id, + stream_list=public_streams, + ) # add statuses back to streams with statuses from anyone if instance.user_object.local: - for stream in public_streams: - stream.add_user_statuses(instance.user_object, instance.user_subject) + add_user_statuses_task.delay( + instance.user_object.id, + instance.user_subject.id, + stream_list=public_streams, + ) @receiver(signals.post_save, sender=models.User) @@ -349,7 +356,7 @@ def populate_streams_on_account_create(sender, instance, created, *args, **kwarg return for stream in streams.values(): - stream.populate_streams(instance) + populate_stream_task.delay(stream, instance.id) @receiver(signals.pre_save, sender=models.ShelfBook) @@ -358,20 +365,14 @@ def add_statuses_on_shelve(sender, instance, *args, **kwargs): """update books stream when user shelves a book""" if not instance.user.local: return - book = None - if hasattr(instance, "book"): - book = instance.book - elif instance.mention_books.exists(): - book = instance.mention_books.first() - if not book: - return + book = instance.book # check if the book is already on the user's shelves editions = book.parent_work.editions.all() if models.ShelfBook.objects.filter(user=instance.user, book__in=editions).exists(): return - BooksStream().add_book_statuses(instance.user, book) + add_book_statuses_task.delay(instance.user.id, book.id) @receiver(signals.post_delete, sender=models.ShelfBook) @@ -381,19 +382,33 @@ def remove_statuses_on_unshelve(sender, instance, *args, **kwargs): if not instance.user.local: return - book = None - if hasattr(instance, "book"): - book = instance.book - elif instance.mention_books.exists(): - book = instance.mention_books.first() - if not book: - return + book = instance.book + # check if the book is actually unshelved, not just moved editions = book.parent_work.editions.all() if models.ShelfBook.objects.filter(user=instance.user, book__in=editions).exists(): return - BooksStream().remove_book_statuses(instance.user, instance.book) + remove_book_statuses_task.delay(instance.user.id, book.id) + + +# ---- TASKS + + +@app.task +def add_book_statuses_task(user_id, book_id): + """add statuses related to a book on shelve""" + user = models.User.objects.get(id=user_id) + book = models.Edition.objects.get(id=book_id) + BooksStream().add_book_statuses(user, book) + + +@app.task +def remove_book_statuses_task(user_id, book_id): + """remove statuses about a book from a user's books feed""" + user = models.User.objects.get(id=user_id) + book = models.Edition.objects.get(id=book_id) + BooksStream().remove_book_statuses(user, book) @app.task @@ -402,3 +417,62 @@ def populate_stream_task(stream, user_id): user = models.User.objects.get(id=user_id) stream = streams[stream] stream.populate_streams(user) + + +@app.task +def remove_status_task(status_ids): + """remove a status from any stream it might be in""" + # this can take an id or a list of ids + if not isinstance(status_ids, list): + status_ids = [status_ids] + statuses = models.Status.objects.filter(id__in=status_ids) + + for stream in streams.values(): + for status in statuses: + stream.remove_object_from_related_stores(status) + + +@app.task +def add_status_task(status_id, increment_unread=False): + """remove a status from any stream it might be in""" + status = models.Status.objects.get(id=status_id) + for stream in streams.values(): + stream.add_status(status, increment_unread=increment_unread) + + +@app.task +def remove_user_statuses_task(viewer_id, user_id, stream_list=None): + """remove all statuses by a user from a viewer's stream""" + stream_list = [streams[s] for s in stream_list] if stream_list else streams.values() + viewer = models.User.objects.get(id=viewer_id) + user = models.User.objects.get(id=user_id) + for stream in stream_list: + stream.remove_user_statuses(viewer, user) + + +@app.task +def add_user_statuses_task(viewer_id, user_id, stream_list=None): + """remove all statuses by a user from a viewer's stream""" + stream_list = [streams[s] for s in stream_list] if stream_list else streams.values() + viewer = models.User.objects.get(id=viewer_id) + user = models.User.objects.get(id=user_id) + for stream in stream_list: + stream.add_user_statuses(viewer, user) + + +@app.task +def handle_boost_task(boost_id): + """remove the original post and other, earlier boosts""" + instance = models.Status.objects.get(id=boost_id) + boosted = instance.boost.boosted_status + + old_versions = models.Boost.objects.filter( + boosted_status__id=boosted.id, + created_date__lt=instance.created_date, + ).values_list("id", flat=True) + + for stream in streams.values(): + audience = stream.get_stores_for_object(instance) + stream.remove_object_from_related_stores(boosted, stores=audience) + for status in old_versions: + stream.remove_object_from_related_stores(status, stores=audience) diff --git a/bookwyrm/tests/activitypub/test_base_activity.py b/bookwyrm/tests/activitypub/test_base_activity.py index 0758fe99..7117eb52 100644 --- a/bookwyrm/tests/activitypub/test_base_activity.py +++ b/bookwyrm/tests/activitypub/test_base_activity.py @@ -19,16 +19,19 @@ from bookwyrm.activitypub import ActivitySerializerError from bookwyrm import models -@patch("bookwyrm.activitystreams.ActivityStream.add_status") +@patch("bookwyrm.activitystreams.add_status_task.delay") @patch("bookwyrm.suggested_users.rerank_user_task.delay") @patch("bookwyrm.suggested_users.remove_user_task.delay") @patch("bookwyrm.suggested_users.rerank_suggestions_task.delay") +@patch("bookwyrm.activitystreams.populate_stream_task.delay") class BaseActivity(TestCase): """the super class for model-linked activitypub dataclasses""" def setUp(self): """we're probably going to re-use this so why copy/paste""" - with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"): + with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( + "bookwyrm.activitystreams.populate_stream_task.delay" + ): self.user = models.User.objects.create_user( "mouse", "mouse@mouse.mouse", "mouseword", local=True, localname="mouse" ) diff --git a/bookwyrm/tests/importers/test_goodreads_import.py b/bookwyrm/tests/importers/test_goodreads_import.py index e92bdb35..387d9f4f 100644 --- a/bookwyrm/tests/importers/test_goodreads_import.py +++ b/bookwyrm/tests/importers/test_goodreads_import.py @@ -22,6 +22,8 @@ def make_date(*args): # pylint: disable=consider-using-with @patch("bookwyrm.suggested_users.rerank_suggestions_task.delay") +@patch("bookwyrm.activitystreams.populate_stream_task.delay") +@patch("bookwyrm.activitystreams.add_book_statuses_task.delay") class GoodreadsImport(TestCase): """importing from goodreads csv""" @@ -30,7 +32,9 @@ class GoodreadsImport(TestCase): self.importer = GoodreadsImporter() datafile = pathlib.Path(__file__).parent.joinpath("../data/goodreads.csv") self.csv = open(datafile, "r", encoding=self.importer.encoding) - with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"): + with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( + "bookwyrm.activitystreams.populate_stream_task.delay" + ): self.user = models.User.objects.create_user( "mouse", "mouse@mouse.mouse", "password", local=True ) @@ -53,7 +57,7 @@ class GoodreadsImport(TestCase): parent_work=work, ) - def test_create_job(self, _): + def test_create_job(self, *_): """creates the import job entry and checks csv""" import_job = self.importer.create_job(self.user, self.csv, False, "public") self.assertEqual(import_job.user, self.user) @@ -69,7 +73,7 @@ class GoodreadsImport(TestCase): self.assertEqual(import_items[2].index, 2) self.assertEqual(import_items[2].data["Book Id"], "28694510") - def test_create_retry_job(self, _): + def test_create_retry_job(self, *_): """trying again with items that didn't import""" import_job = self.importer.create_job(self.user, self.csv, False, "unlisted") import_items = models.ImportItem.objects.filter(job=import_job).all()[:2] @@ -87,7 +91,7 @@ class GoodreadsImport(TestCase): self.assertEqual(retry_items[1].index, 1) self.assertEqual(retry_items[1].data["Book Id"], "52691223") - def test_start_import(self, _): + def test_start_import(self, *_): """begin loading books""" import_job = self.importer.create_job(self.user, self.csv, False, "unlisted") MockTask = namedtuple("Task", ("id")) @@ -99,7 +103,7 @@ class GoodreadsImport(TestCase): self.assertEqual(import_job.task_id, "7") @responses.activate - def test_import_data(self, _): + def test_import_data(self, *_): """resolve entry""" import_job = self.importer.create_job(self.user, self.csv, False, "unlisted") book = models.Edition.objects.create(title="Test Book") @@ -114,7 +118,7 @@ class GoodreadsImport(TestCase): import_item = models.ImportItem.objects.get(job=import_job, index=0) self.assertEqual(import_item.book.id, book.id) - def test_handle_imported_book(self, _): + def test_handle_imported_book(self, *_): """goodreads import added a book, this adds related connections""" shelf = self.user.shelf_set.filter(identifier="read").first() self.assertIsNone(shelf.books.first()) @@ -145,7 +149,7 @@ class GoodreadsImport(TestCase): self.assertEqual(readthrough.start_date, make_date(2020, 10, 21)) self.assertEqual(readthrough.finish_date, make_date(2020, 10, 25)) - def test_handle_imported_book_already_shelved(self, _): + def test_handle_imported_book_already_shelved(self, *_): """goodreads import added a book, this adds related connections""" with patch("bookwyrm.models.activitypub_mixin.broadcast_task.delay"): shelf = self.user.shelf_set.filter(identifier="to-read").first() @@ -183,7 +187,7 @@ class GoodreadsImport(TestCase): self.assertEqual(readthrough.start_date, make_date(2020, 10, 21)) self.assertEqual(readthrough.finish_date, make_date(2020, 10, 25)) - def test_handle_import_twice(self, _): + def test_handle_import_twice(self, *_): """re-importing books""" shelf = self.user.shelf_set.filter(identifier="read").first() import_job = models.ImportJob.objects.create(user=self.user) @@ -215,7 +219,7 @@ class GoodreadsImport(TestCase): self.assertEqual(readthrough.start_date, make_date(2020, 10, 21)) self.assertEqual(readthrough.finish_date, make_date(2020, 10, 25)) - @patch("bookwyrm.activitystreams.ActivityStream.add_status") + @patch("bookwyrm.activitystreams.add_status_task.delay") def test_handle_imported_book_review(self, *_): """goodreads review import""" import_job = models.ImportJob.objects.create(user=self.user) @@ -237,7 +241,7 @@ class GoodreadsImport(TestCase): self.assertEqual(review.published_date, make_date(2019, 7, 8)) self.assertEqual(review.privacy, "unlisted") - @patch("bookwyrm.activitystreams.ActivityStream.add_status") + @patch("bookwyrm.activitystreams.add_status_task.delay") def test_handle_imported_book_rating(self, *_): """goodreads rating import""" import_job = models.ImportJob.objects.create(user=self.user) @@ -261,7 +265,7 @@ class GoodreadsImport(TestCase): self.assertEqual(review.published_date, make_date(2019, 7, 8)) self.assertEqual(review.privacy, "unlisted") - def test_handle_imported_book_reviews_disabled(self, _): + def test_handle_imported_book_reviews_disabled(self, *_): """goodreads review import""" import_job = models.ImportJob.objects.create(user=self.user) datafile = pathlib.Path(__file__).parent.joinpath("../data/goodreads.csv") diff --git a/bookwyrm/tests/importers/test_librarything_import.py b/bookwyrm/tests/importers/test_librarything_import.py index 504951c2..dfdd515e 100644 --- a/bookwyrm/tests/importers/test_librarything_import.py +++ b/bookwyrm/tests/importers/test_librarything_import.py @@ -21,6 +21,8 @@ def make_date(*args): # pylint: disable=consider-using-with @patch("bookwyrm.suggested_users.rerank_suggestions_task.delay") +@patch("bookwyrm.activitystreams.populate_stream_task.delay") +@patch("bookwyrm.activitystreams.add_book_statuses_task.delay") class LibrarythingImport(TestCase): """importing from librarything tsv""" @@ -31,7 +33,9 @@ class LibrarythingImport(TestCase): # Librarything generates latin encoded exports... self.csv = open(datafile, "r", encoding=self.importer.encoding) - with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"): + with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( + "bookwyrm.activitystreams.populate_stream_task.delay" + ): self.user = models.User.objects.create_user( "mmai", "mmai@mmai.mmai", "password", local=True ) @@ -54,7 +58,7 @@ class LibrarythingImport(TestCase): parent_work=work, ) - def test_create_job(self, _): + def test_create_job(self, *_): """creates the import job entry and checks csv""" import_job = self.importer.create_job(self.user, self.csv, False, "public") self.assertEqual(import_job.user, self.user) @@ -70,7 +74,7 @@ class LibrarythingImport(TestCase): self.assertEqual(import_items[2].index, 2) self.assertEqual(import_items[2].data["Book Id"], "5015399") - def test_create_retry_job(self, _): + def test_create_retry_job(self, *_): """trying again with items that didn't import""" import_job = self.importer.create_job(self.user, self.csv, False, "unlisted") import_items = models.ImportItem.objects.filter(job=import_job).all()[:2] @@ -89,7 +93,7 @@ class LibrarythingImport(TestCase): self.assertEqual(retry_items[1].data["Book Id"], "5015319") @responses.activate - def test_import_data(self, _): + def test_import_data(self, *_): """resolve entry""" import_job = self.importer.create_job(self.user, self.csv, False, "unlisted") book = models.Edition.objects.create(title="Test Book") @@ -104,7 +108,7 @@ class LibrarythingImport(TestCase): import_item = models.ImportItem.objects.get(job=import_job, index=0) self.assertEqual(import_item.book.id, book.id) - def test_handle_imported_book(self, _): + def test_handle_imported_book(self, *_): """librarything import added a book, this adds related connections""" shelf = self.user.shelf_set.filter(identifier="read").first() self.assertIsNone(shelf.books.first()) @@ -134,7 +138,7 @@ class LibrarythingImport(TestCase): self.assertEqual(readthrough.start_date, make_date(2007, 4, 16)) self.assertEqual(readthrough.finish_date, make_date(2007, 5, 8)) - def test_handle_imported_book_already_shelved(self, _): + def test_handle_imported_book_already_shelved(self, *_): """librarything import added a book, this adds related connections""" with patch("bookwyrm.models.activitypub_mixin.broadcast_task.delay"): shelf = self.user.shelf_set.filter(identifier="to-read").first() @@ -166,7 +170,7 @@ class LibrarythingImport(TestCase): self.assertEqual(readthrough.start_date, make_date(2007, 4, 16)) self.assertEqual(readthrough.finish_date, make_date(2007, 5, 8)) - def test_handle_import_twice(self, _): + def test_handle_import_twice(self, *_): """re-importing books""" shelf = self.user.shelf_set.filter(identifier="read").first() import_job = models.ImportJob.objects.create(user=self.user) @@ -197,7 +201,7 @@ class LibrarythingImport(TestCase): self.assertEqual(readthrough.start_date, make_date(2007, 4, 16)) self.assertEqual(readthrough.finish_date, make_date(2007, 5, 8)) - @patch("bookwyrm.activitystreams.ActivityStream.add_status") + @patch("bookwyrm.activitystreams.add_status_task.delay") def test_handle_imported_book_review(self, *_): """librarything review import""" import_job = models.ImportJob.objects.create(user=self.user) @@ -219,7 +223,7 @@ class LibrarythingImport(TestCase): self.assertEqual(review.published_date, make_date(2007, 5, 8)) self.assertEqual(review.privacy, "unlisted") - def test_handle_imported_book_reviews_disabled(self, _): + def test_handle_imported_book_reviews_disabled(self, *_): """librarything review import""" import_job = models.ImportJob.objects.create(user=self.user) datafile = pathlib.Path(__file__).parent.joinpath("../data/librarything.tsv") diff --git a/bookwyrm/tests/management/test_populate_streams.py b/bookwyrm/tests/management/test_populate_streams.py index 50192a71..ca21b0ee 100644 --- a/bookwyrm/tests/management/test_populate_streams.py +++ b/bookwyrm/tests/management/test_populate_streams.py @@ -12,7 +12,9 @@ class Activitystreams(TestCase): def setUp(self): """we need some stuff""" - with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"): + with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( + "bookwyrm.activitystreams.populate_stream_task.delay" + ): self.local_user = models.User.objects.create_user( "mouse", "mouse@mouse.mouse", "password", local=True, localname="mouse" ) @@ -37,7 +39,7 @@ class Activitystreams(TestCase): def test_populate_streams(self, _): """make sure the function on the redis manager gets called""" - with patch("bookwyrm.activitystreams.ActivityStream.add_status"): + with patch("bookwyrm.activitystreams.add_status_task.delay"): models.Comment.objects.create( user=self.local_user, content="hi", book=self.book ) diff --git a/bookwyrm/tests/models/test_activitypub_mixin.py b/bookwyrm/tests/models/test_activitypub_mixin.py index 01d06e02..911cca5c 100644 --- a/bookwyrm/tests/models/test_activitypub_mixin.py +++ b/bookwyrm/tests/models/test_activitypub_mixin.py @@ -20,14 +20,16 @@ from bookwyrm.settings import PAGE_LENGTH # pylint: disable=invalid-name -@patch("bookwyrm.activitystreams.ActivityStream.add_status") +@patch("bookwyrm.activitystreams.add_status_task.delay") @patch("bookwyrm.models.activitypub_mixin.broadcast_task.delay") class ActivitypubMixins(TestCase): """functionality shared across models""" def setUp(self): """shared data""" - with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"): + with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( + "bookwyrm.activitystreams.populate_stream_task.delay" + ): self.local_user = models.User.objects.create_user( "mouse", "mouse@mouse.com", "mouseword", local=True, localname="mouse" ) diff --git a/bookwyrm/tests/models/test_base_model.py b/bookwyrm/tests/models/test_base_model.py index 43cd5d3f..28564740 100644 --- a/bookwyrm/tests/models/test_base_model.py +++ b/bookwyrm/tests/models/test_base_model.py @@ -13,7 +13,9 @@ class BaseModel(TestCase): def setUp(self): """shared data""" - with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"): + with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( + "bookwyrm.activitystreams.populate_stream_task.delay" + ): self.local_user = models.User.objects.create_user( "mouse", "mouse@mouse.com", "mouseword", local=True, localname="mouse" ) @@ -62,7 +64,7 @@ class BaseModel(TestCase): base_model.set_remote_id(None, instance, False) self.assertIsNone(instance.remote_id) - @patch("bookwyrm.activitystreams.ActivityStream.add_status") + @patch("bookwyrm.activitystreams.add_status_task.delay") def test_object_visible_to_user(self, _): """does a user have permission to view an object""" obj = models.Status.objects.create( @@ -91,7 +93,7 @@ class BaseModel(TestCase): obj.mention_users.add(self.local_user) self.assertTrue(obj.visible_to_user(self.local_user)) - @patch("bookwyrm.activitystreams.ActivityStream.add_status") + @patch("bookwyrm.activitystreams.add_status_task.delay") def test_object_visible_to_user_follower(self, _): """what you can see if you follow a user""" self.remote_user.followers.add(self.local_user) @@ -111,7 +113,7 @@ class BaseModel(TestCase): obj.mention_users.add(self.local_user) self.assertTrue(obj.visible_to_user(self.local_user)) - @patch("bookwyrm.activitystreams.ActivityStream.add_status") + @patch("bookwyrm.activitystreams.add_status_task.delay") def test_object_visible_to_user_blocked(self, _): """you can't see it if they block you""" self.remote_user.blocks.add(self.local_user) diff --git a/bookwyrm/tests/models/test_fields.py b/bookwyrm/tests/models/test_fields.py index 6730d37b..1796b84b 100644 --- a/bookwyrm/tests/models/test_fields.py +++ b/bookwyrm/tests/models/test_fields.py @@ -25,10 +25,11 @@ from bookwyrm.models.activitypub_mixin import ActivitypubMixin # pylint: disable=too-many-public-methods @patch("bookwyrm.suggested_users.rerank_suggestions_task.delay") +@patch("bookwyrm.activitystreams.populate_stream_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")) @@ -45,7 +46,7 @@ class ModelFields(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") @@ -63,7 +64,7 @@ class ModelFields(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 @@ -82,7 +83,7 @@ class ModelFields(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 @@ -100,7 +101,7 @@ class ModelFields(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) @@ -109,7 +110,7 @@ class ModelFields(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") @@ -130,7 +131,7 @@ class ModelFields(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) @@ -143,7 +144,7 @@ class ModelFields(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""" with patch("bookwyrm.models.user.set_remote_server.delay"): @@ -206,7 +207,7 @@ class ModelFields(TestCase): self.assertEqual(model_instance.privacy_field, "followers") @patch("bookwyrm.models.activitypub_mixin.ObjectMixin.broadcast") - @patch("bookwyrm.activitystreams.ActivityStream.add_status") + @patch("bookwyrm.activitystreams.add_status_task.delay") def test_privacy_field_set_activity_from_field(self, *_): """translate between to/cc fields and privacy""" user = User.objects.create_user( @@ -251,7 +252,7 @@ class ModelFields(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")) @@ -260,7 +261,7 @@ class ModelFields(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") @@ -307,7 +308,7 @@ class ModelFields(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") @@ -326,7 +327,7 @@ class ModelFields(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( @@ -339,14 +340,14 @@ class ModelFields(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") @@ -364,7 +365,7 @@ class ModelFields(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") @@ -384,7 +385,7 @@ class ModelFields(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") @@ -403,7 +404,7 @@ class ModelFields(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 @@ -448,7 +449,7 @@ class ModelFields(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") @@ -457,7 +458,7 @@ class ModelFields(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() @@ -465,12 +466,12 @@ class ModelFields(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/models/test_import_model.py b/bookwyrm/tests/models/test_import_model.py index 15a75a96..caf61034 100644 --- a/bookwyrm/tests/models/test_import_model.py +++ b/bookwyrm/tests/models/test_import_model.py @@ -59,7 +59,9 @@ class ImportJob(TestCase): unknown_read_data["Exclusive Shelf"] = "read" unknown_read_data["Date Read"] = "" - with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"): + with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( + "bookwyrm.activitystreams.populate_stream_task.delay" + ): user = models.User.objects.create_user( "mouse", "mouse@mouse.mouse", "mouseword", local=True, localname="mouse" ) diff --git a/bookwyrm/tests/models/test_list.py b/bookwyrm/tests/models/test_list.py index 6e1ff809..0d749453 100644 --- a/bookwyrm/tests/models/test_list.py +++ b/bookwyrm/tests/models/test_list.py @@ -11,7 +11,9 @@ class List(TestCase): def setUp(self): """look, a list""" - with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"): + with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( + "bookwyrm.activitystreams.populate_stream_task.delay" + ): self.local_user = models.User.objects.create_user( "mouse", "mouse@mouse.mouse", "mouseword", local=True, localname="mouse" ) diff --git a/bookwyrm/tests/models/test_readthrough_model.py b/bookwyrm/tests/models/test_readthrough_model.py index 2b6e4fdd..5d8450a1 100644 --- a/bookwyrm/tests/models/test_readthrough_model.py +++ b/bookwyrm/tests/models/test_readthrough_model.py @@ -13,7 +13,9 @@ class ReadThrough(TestCase): def setUp(self): """look, a shelf""" - with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"): + with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( + "bookwyrm.activitystreams.populate_stream_task.delay" + ): self.user = models.User.objects.create_user( "mouse", "mouse@mouse.mouse", "mouseword", local=True, localname="mouse" ) diff --git a/bookwyrm/tests/models/test_relationship_models.py b/bookwyrm/tests/models/test_relationship_models.py index f66cf109..04dbe1a3 100644 --- a/bookwyrm/tests/models/test_relationship_models.py +++ b/bookwyrm/tests/models/test_relationship_models.py @@ -6,6 +6,7 @@ from django.test import TestCase from bookwyrm import models +@patch("bookwyrm.activitystreams.add_user_statuses_task.delay") class Relationship(TestCase): """following, blocking, stuff like that""" @@ -21,14 +22,16 @@ class Relationship(TestCase): inbox="https://example.com/users/rat/inbox", outbox="https://example.com/users/rat/outbox", ) - with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"): + with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( + "bookwyrm.activitystreams.populate_stream_task.delay" + ): self.local_user = models.User.objects.create_user( "mouse", "mouse@mouse.com", "mouseword", local=True, localname="mouse" ) self.local_user.remote_id = "http://local.com/user/mouse" self.local_user.save(broadcast=False, update_fields=["remote_id"]) - def test_user_follows_from_request(self): + def test_user_follows_from_request(self, _): """convert a follow request into a follow""" with patch("bookwyrm.models.activitypub_mixin.broadcast_task.delay") as mock: request = models.UserFollowRequest.objects.create( @@ -49,7 +52,7 @@ class Relationship(TestCase): self.assertEqual(rel.user_subject, self.local_user) self.assertEqual(rel.user_object, self.remote_user) - def test_user_follows_from_request_custom_remote_id(self): + def test_user_follows_from_request_custom_remote_id(self, _): """store a specific remote id for a relationship provided by remote""" with patch("bookwyrm.models.activitypub_mixin.broadcast_task.delay"): request = models.UserFollowRequest.objects.create( @@ -67,7 +70,7 @@ class Relationship(TestCase): self.assertEqual(rel.user_object, self.remote_user) @patch("bookwyrm.models.activitypub_mixin.broadcast_task.delay") - def test_follow_request_activity(self, broadcast_mock): + def test_follow_request_activity(self, broadcast_mock, _): """accept a request and make it a relationship""" models.UserFollowRequest.objects.create( user_subject=self.local_user, @@ -79,7 +82,7 @@ class Relationship(TestCase): self.assertEqual(activity["type"], "Follow") @patch("bookwyrm.models.activitypub_mixin.broadcast_task.delay") - def test_follow_request_accept(self, broadcast_mock): + def test_follow_request_accept(self, broadcast_mock, _): """accept a request and make it a relationship""" self.local_user.manually_approves_followers = True self.local_user.save( @@ -105,7 +108,7 @@ class Relationship(TestCase): self.assertEqual(rel.user_object, self.local_user) @patch("bookwyrm.models.activitypub_mixin.broadcast_task.delay") - def test_follow_request_reject(self, broadcast_mock): + def test_follow_request_reject(self, broadcast_mock, _): """accept a request and make it a relationship""" self.local_user.manually_approves_followers = True self.local_user.save( diff --git a/bookwyrm/tests/models/test_shelf_model.py b/bookwyrm/tests/models/test_shelf_model.py index f6fd6850..fe179e88 100644 --- a/bookwyrm/tests/models/test_shelf_model.py +++ b/bookwyrm/tests/models/test_shelf_model.py @@ -8,19 +8,24 @@ from bookwyrm import models, settings # pylint: disable=unused-argument @patch("bookwyrm.suggested_users.rerank_suggestions_task.delay") +@patch("bookwyrm.activitystreams.populate_stream_task.delay") +@patch("bookwyrm.activitystreams.add_book_statuses_task.delay") +@patch("bookwyrm.activitystreams.remove_book_statuses_task.delay") class Shelf(TestCase): """some activitypub oddness ahead""" def setUp(self): """look, a shelf""" - with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"): + with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( + "bookwyrm.activitystreams.populate_stream_task.delay" + ): self.local_user = models.User.objects.create_user( "mouse", "mouse@mouse.mouse", "mouseword", local=True, localname="mouse" ) work = models.Work.objects.create(title="Test Work") self.book = models.Edition.objects.create(title="test book", parent_work=work) - def test_remote_id(self, _): + def test_remote_id(self, *_): """shelves use custom remote ids""" with patch("bookwyrm.models.activitypub_mixin.broadcast_task.delay"): shelf = models.Shelf.objects.create( @@ -29,7 +34,7 @@ class Shelf(TestCase): expected_id = "https://%s/user/mouse/books/test-shelf" % settings.DOMAIN self.assertEqual(shelf.get_remote_id(), expected_id) - def test_to_activity(self, _): + def test_to_activity(self, *_): """jsonify it""" with patch("bookwyrm.models.activitypub_mixin.broadcast_task.delay"): shelf = models.Shelf.objects.create( @@ -43,7 +48,7 @@ class Shelf(TestCase): self.assertEqual(activity_json["name"], "Test Shelf") self.assertEqual(activity_json["owner"], self.local_user.remote_id) - def test_create_update_shelf(self, _): + def test_create_update_shelf(self, *_): """create and broadcast shelf creation""" with patch("bookwyrm.models.activitypub_mixin.broadcast_task.delay") as mock: @@ -64,7 +69,7 @@ class Shelf(TestCase): self.assertEqual(activity["object"]["name"], "arthur russel") self.assertEqual(shelf.name, "arthur russel") - def test_shelve(self, _): + def test_shelve(self, *_): """create and broadcast shelf creation""" with patch("bookwyrm.models.activitypub_mixin.broadcast_task.delay"): shelf = models.Shelf.objects.create( diff --git a/bookwyrm/tests/models/test_status_model.py b/bookwyrm/tests/models/test_status_model.py index 22b95922..6bdfa336 100644 --- a/bookwyrm/tests/models/test_status_model.py +++ b/bookwyrm/tests/models/test_status_model.py @@ -15,14 +15,16 @@ from bookwyrm import activitypub, models, settings # pylint: disable=too-many-public-methods @patch("bookwyrm.models.Status.broadcast") -@patch("bookwyrm.activitystreams.ActivityStream.add_status") -@patch("bookwyrm.activitystreams.ActivityStream.remove_object_from_related_stores") +@patch("bookwyrm.activitystreams.add_status_task.delay") +@patch("bookwyrm.activitystreams.remove_status_task.delay") class Status(TestCase): """lotta types of statuses""" def setUp(self): """useful things for creating a status""" - with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"): + with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( + "bookwyrm.activitystreams.populate_stream_task.delay" + ): self.local_user = models.User.objects.create_user( "mouse", "mouse@mouse.mouse", "mouseword", local=True, localname="mouse" ) @@ -118,15 +120,12 @@ class Status(TestCase): def test_status_to_activity_tombstone(self, *_): """subclass of the base model version with a "pure" serializer""" - with patch( - "bookwyrm.activitystreams.ActivityStream.remove_object_from_related_stores" - ): - status = models.Status.objects.create( - content="test content", - user=self.local_user, - deleted=True, - deleted_date=timezone.now(), - ) + status = models.Status.objects.create( + content="test content", + user=self.local_user, + deleted=True, + deleted_date=timezone.now(), + ) activity = status.to_activity() self.assertEqual(activity["id"], status.remote_id) self.assertEqual(activity["type"], "Tombstone") diff --git a/bookwyrm/tests/models/test_user_model.py b/bookwyrm/tests/models/test_user_model.py index 230c503b..528d3fdc 100644 --- a/bookwyrm/tests/models/test_user_model.py +++ b/bookwyrm/tests/models/test_user_model.py @@ -13,7 +13,9 @@ class User(TestCase): protocol = "https://" if USE_HTTPS else "http://" def setUp(self): - with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"): + with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( + "bookwyrm.activitystreams.populate_stream_task.delay" + ): self.user = models.User.objects.create_user( "mouse@%s" % DOMAIN, "mouse@mouse.mouse", diff --git a/bookwyrm/tests/test_activitystreams.py b/bookwyrm/tests/test_activitystreams.py index 56ba844a..add5875f 100644 --- a/bookwyrm/tests/test_activitystreams.py +++ b/bookwyrm/tests/test_activitystreams.py @@ -5,16 +5,19 @@ from bookwyrm import activitystreams, models @patch("bookwyrm.models.activitypub_mixin.broadcast_task.delay") -@patch("bookwyrm.activitystreams.ActivityStream.add_status") -@patch("bookwyrm.activitystreams.BooksStream.add_book_statuses") +@patch("bookwyrm.activitystreams.add_status_task.delay") +@patch("bookwyrm.activitystreams.add_book_statuses_task.delay") @patch("bookwyrm.suggested_users.rerank_suggestions_task.delay") +@patch("bookwyrm.activitystreams.populate_stream_task.delay") # pylint: disable=too-many-public-methods class Activitystreams(TestCase): """using redis to build activity streams""" def setUp(self): """use a test csv""" - with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"): + with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( + "bookwyrm.activitystreams.populate_stream_task.delay" + ): self.local_user = models.User.objects.create_user( "mouse", "mouse@mouse.mouse", "password", local=True, localname="mouse" ) @@ -293,9 +296,7 @@ class Activitystreams(TestCase): def test_boost_to_another_timeline(self, *_): """add a boost and deduplicate the boosted status on the timeline""" status = models.Status.objects.create(user=self.local_user, content="hi") - with patch( - "bookwyrm.activitystreams.HomeStream.remove_object_from_related_stores" - ): + with patch("bookwyrm.activitystreams.handle_boost_task.delay"): boost = models.Boost.objects.create( boosted_status=status, user=self.another_user, @@ -303,7 +304,8 @@ class Activitystreams(TestCase): with patch( "bookwyrm.activitystreams.HomeStream.remove_object_from_related_stores" ) as mock: - activitystreams.add_status_on_create(models.Boost, boost, True) + activitystreams.handle_boost_task(boost.id) + self.assertTrue(mock.called) call_args = mock.call_args self.assertEqual(call_args[0][0], status) @@ -317,9 +319,7 @@ class Activitystreams(TestCase): """add a boost and deduplicate the boosted status on the timeline""" self.local_user.following.add(self.another_user) status = models.Status.objects.create(user=self.local_user, content="hi") - with patch( - "bookwyrm.activitystreams.HomeStream.remove_object_from_related_stores" - ): + with patch("bookwyrm.activitystreams.handle_boost_task.delay"): boost = models.Boost.objects.create( boosted_status=status, user=self.another_user, @@ -327,7 +327,7 @@ class Activitystreams(TestCase): with patch( "bookwyrm.activitystreams.HomeStream.remove_object_from_related_stores" ) as mock: - activitystreams.add_status_on_create(models.Boost, boost, True) + activitystreams.handle_boost_task(boost.id) self.assertTrue(mock.called) call_args = mock.call_args self.assertEqual(call_args[0][0], status) @@ -343,9 +343,7 @@ class Activitystreams(TestCase): def test_boost_to_same_timeline(self, *_): """add a boost and deduplicate the boosted status on the timeline""" status = models.Status.objects.create(user=self.local_user, content="hi") - with patch( - "bookwyrm.activitystreams.HomeStream.remove_object_from_related_stores" - ): + with patch("bookwyrm.activitystreams.handle_boost_task.delay"): boost = models.Boost.objects.create( boosted_status=status, user=self.local_user, @@ -353,7 +351,7 @@ class Activitystreams(TestCase): with patch( "bookwyrm.activitystreams.HomeStream.remove_object_from_related_stores" ) as mock: - activitystreams.add_status_on_create(models.Boost, boost, True) + activitystreams.handle_boost_task(boost.id) self.assertTrue(mock.called) call_args = mock.call_args self.assertEqual(call_args[0][0], status) diff --git a/bookwyrm/tests/test_emailing.py b/bookwyrm/tests/test_emailing.py index 4c3d86a4..2f24122e 100644 --- a/bookwyrm/tests/test_emailing.py +++ b/bookwyrm/tests/test_emailing.py @@ -14,7 +14,9 @@ class Emailing(TestCase): def setUp(self): """we need basic test data and mocks""" self.factory = RequestFactory() - with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"): + with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( + "bookwyrm.activitystreams.populate_stream_task.delay" + ): self.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.mouse", diff --git a/bookwyrm/tests/test_preview_images.py b/bookwyrm/tests/test_preview_images.py index 37638c27..760ff4c4 100644 --- a/bookwyrm/tests/test_preview_images.py +++ b/bookwyrm/tests/test_preview_images.py @@ -29,7 +29,9 @@ class PreviewImages(TestCase): avatar_file = pathlib.Path(__file__).parent.joinpath( "../static/images/no_cover.jpg" ) - with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"): + with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( + "bookwyrm.activitystreams.populate_stream_task.delay" + ): self.local_user = models.User.objects.create_user( "possum@local.com", "possum@possum.possum", diff --git a/bookwyrm/tests/test_signing.py b/bookwyrm/tests/test_signing.py index d9a87dd5..d33687a5 100644 --- a/bookwyrm/tests/test_signing.py +++ b/bookwyrm/tests/test_signing.py @@ -37,7 +37,9 @@ class Signature(TestCase): def setUp(self): """create users and test data""" - with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"): + with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( + "bookwyrm.activitystreams.populate_stream_task.delay" + ): self.mouse = models.User.objects.create_user( "mouse@%s" % DOMAIN, "mouse@example.com", diff --git a/bookwyrm/tests/test_suggested_users.py b/bookwyrm/tests/test_suggested_users.py index 7e4a9d00..6b794b5d 100644 --- a/bookwyrm/tests/test_suggested_users.py +++ b/bookwyrm/tests/test_suggested_users.py @@ -10,8 +10,10 @@ from bookwyrm.suggested_users import suggested_users, get_annotated_users @patch("bookwyrm.models.activitypub_mixin.broadcast_task.delay") -@patch("bookwyrm.activitystreams.ActivityStream.add_status") +@patch("bookwyrm.activitystreams.add_status_task.delay") @patch("bookwyrm.suggested_users.rerank_suggestions_task.delay") +@patch("bookwyrm.activitystreams.populate_stream_task.delay") +@patch("bookwyrm.activitystreams.add_book_statuses_task.delay") @patch("bookwyrm.suggested_users.rerank_user_task.delay") @patch("bookwyrm.suggested_users.remove_user_task.delay") class SuggestedUsers(TestCase): @@ -19,7 +21,9 @@ class SuggestedUsers(TestCase): def setUp(self): """use a test csv""" - with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"): + with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( + "bookwyrm.activitystreams.populate_stream_task.delay" + ): self.local_user = models.User.objects.create_user( "mouse", "mouse@mouse.mouse", "password", local=True, localname="mouse" ) diff --git a/bookwyrm/tests/test_templatetags.py b/bookwyrm/tests/test_templatetags.py index d75d368c..e13b50dc 100644 --- a/bookwyrm/tests/test_templatetags.py +++ b/bookwyrm/tests/test_templatetags.py @@ -15,14 +15,16 @@ from bookwyrm.templatetags import ( ) -@patch("bookwyrm.activitystreams.ActivityStream.add_status") -@patch("bookwyrm.activitystreams.ActivityStream.remove_object_from_related_stores") +@patch("bookwyrm.activitystreams.add_status_task.delay") +@patch("bookwyrm.activitystreams.remove_status_task.delay") class TemplateTags(TestCase): """lotta different things here""" def setUp(self): """create some filler objects""" - with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"): + with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( + "bookwyrm.activitystreams.populate_stream_task.delay" + ): self.user = models.User.objects.create_user( "mouse@example.com", "mouse@mouse.mouse", @@ -73,15 +75,12 @@ class TemplateTags(TestCase): second_child = models.Status.objects.create( reply_parent=parent, user=self.user, content="hi" ) - with patch( - "bookwyrm.activitystreams.ActivityStream.remove_object_from_related_stores" - ): - third_child = models.Status.objects.create( - reply_parent=parent, - user=self.user, - deleted=True, - deleted_date=timezone.now(), - ) + third_child = models.Status.objects.create( + reply_parent=parent, + user=self.user, + deleted=True, + deleted_date=timezone.now(), + ) replies = status_display.get_replies(parent) self.assertEqual(len(replies), 2) diff --git a/bookwyrm/tests/views/inbox/test_inbox.py b/bookwyrm/tests/views/inbox/test_inbox.py index 8e49d25a..a84458ab 100644 --- a/bookwyrm/tests/views/inbox/test_inbox.py +++ b/bookwyrm/tests/views/inbox/test_inbox.py @@ -19,7 +19,9 @@ class Inbox(TestCase): self.client = Client() self.factory = RequestFactory() - with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"): + with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( + "bookwyrm.activitystreams.populate_stream_task.delay" + ): local_user = models.User.objects.create_user( "mouse@example.com", "mouse@mouse.com", diff --git a/bookwyrm/tests/views/inbox/test_inbox_add.py b/bookwyrm/tests/views/inbox/test_inbox_add.py index 07525c34..33e6c55b 100644 --- a/bookwyrm/tests/views/inbox/test_inbox_add.py +++ b/bookwyrm/tests/views/inbox/test_inbox_add.py @@ -13,7 +13,9 @@ class InboxAdd(TestCase): def setUp(self): """basic user and book data""" - with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"): + with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( + "bookwyrm.activitystreams.populate_stream_task.delay" + ): local_user = models.User.objects.create_user( "mouse@example.com", "mouse@mouse.com", diff --git a/bookwyrm/tests/views/inbox/test_inbox_announce.py b/bookwyrm/tests/views/inbox/test_inbox_announce.py index 8bc6cd1d..3a108878 100644 --- a/bookwyrm/tests/views/inbox/test_inbox_announce.py +++ b/bookwyrm/tests/views/inbox/test_inbox_announce.py @@ -13,7 +13,9 @@ class InboxActivities(TestCase): def setUp(self): """basic user and book data""" - with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"): + with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( + "bookwyrm.activitystreams.populate_stream_task.delay" + ): self.local_user = models.User.objects.create_user( "mouse@example.com", "mouse@mouse.com", @@ -35,7 +37,7 @@ class InboxActivities(TestCase): ) with patch("bookwyrm.models.activitypub_mixin.broadcast_task.delay"): - with patch("bookwyrm.activitystreams.ActivityStream.add_status"): + with patch("bookwyrm.activitystreams.add_status_task.delay"): self.status = models.Status.objects.create( user=self.local_user, content="Test status", @@ -53,9 +55,8 @@ class InboxActivities(TestCase): models.SiteSettings.objects.create() - @patch("bookwyrm.activitystreams.ActivityStream.add_status") - @patch("bookwyrm.activitystreams.ActivityStream.remove_object_from_related_stores") - def test_boost(self, redis_mock, _): + @patch("bookwyrm.activitystreams.handle_boost_task.delay") + def test_boost(self, _): """boost a status""" self.assertEqual(models.Notification.objects.count(), 0) activity = { @@ -71,9 +72,6 @@ class InboxActivities(TestCase): discarder.return_value = False views.inbox.activity_task(activity) - # boost added to redis activitystreams - self.assertTrue(redis_mock.called) - # boost created of correct status boost = models.Boost.objects.get() self.assertEqual(boost.boosted_status, self.status) @@ -84,9 +82,8 @@ class InboxActivities(TestCase): self.assertEqual(notification.related_status, self.status) @responses.activate - @patch("bookwyrm.activitystreams.ActivityStream.add_status") - @patch("bookwyrm.activitystreams.ActivityStream.remove_object_from_related_stores") - def test_boost_remote_status(self, redis_mock, _): + @patch("bookwyrm.activitystreams.handle_boost_task.delay") + def test_boost_remote_status(self, _): """boost a status from a remote server""" work = models.Work.objects.create(title="work title") book = models.Edition.objects.create( @@ -127,7 +124,6 @@ class InboxActivities(TestCase): with patch("bookwyrm.models.status.Status.ignore_activity") as discarder: discarder.return_value = False views.inbox.activity_task(activity) - self.assertTrue(redis_mock.called) boost = models.Boost.objects.get() self.assertEqual(boost.boosted_status.remote_id, "https://remote.com/status/1") @@ -141,7 +137,7 @@ class InboxActivities(TestCase): content="hi", user=self.remote_user, ) - with patch("bookwyrm.activitystreams.ActivityStream.add_status"): + with patch("bookwyrm.activitystreams.add_status_task.delay"): status.save(broadcast=False) activity = { "type": "Announce", @@ -158,8 +154,9 @@ class InboxActivities(TestCase): views.inbox.activity_task(activity) self.assertEqual(models.Boost.objects.count(), 0) - @patch("bookwyrm.activitystreams.ActivityStream.add_status") - @patch("bookwyrm.activitystreams.ActivityStream.remove_object_from_related_stores") + @patch("bookwyrm.activitystreams.add_status_task.delay") + @patch("bookwyrm.activitystreams.handle_boost_task.delay") + @patch("bookwyrm.activitystreams.remove_status_task.delay") def test_unboost(self, *_): """undo a boost""" boost = models.Boost.objects.create( diff --git a/bookwyrm/tests/views/inbox/test_inbox_block.py b/bookwyrm/tests/views/inbox/test_inbox_block.py index ce650a00..ffd74dbd 100644 --- a/bookwyrm/tests/views/inbox/test_inbox_block.py +++ b/bookwyrm/tests/views/inbox/test_inbox_block.py @@ -12,7 +12,9 @@ class InboxBlock(TestCase): def setUp(self): """basic user and book data""" - with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"): + with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( + "bookwyrm.activitystreams.populate_stream_task.delay" + ): self.local_user = models.User.objects.create_user( "mouse@example.com", "mouse@mouse.com", @@ -54,7 +56,7 @@ class InboxBlock(TestCase): } with patch( - "bookwyrm.activitystreams.ActivityStream.remove_user_statuses" + "bookwyrm.activitystreams.remove_user_statuses_task.delay" ) as redis_mock: views.inbox.activity_task(activity) self.assertTrue(redis_mock.called) @@ -67,7 +69,8 @@ class InboxBlock(TestCase): self.assertFalse(models.UserFollows.objects.exists()) self.assertFalse(models.UserFollowRequest.objects.exists()) - def test_handle_unblock(self): + @patch("bookwyrm.activitystreams.remove_user_statuses_task.delay") + def test_handle_unblock(self, _): """unblock a user""" self.remote_user.blocks.add(self.local_user) @@ -92,7 +95,7 @@ class InboxBlock(TestCase): }, } with patch( - "bookwyrm.activitystreams.ActivityStream.add_user_statuses" + "bookwyrm.activitystreams.add_user_statuses_task.delay" ) as redis_mock: views.inbox.activity_task(activity) self.assertTrue(redis_mock.called) diff --git a/bookwyrm/tests/views/inbox/test_inbox_create.py b/bookwyrm/tests/views/inbox/test_inbox_create.py index 059d0522..3e1a22ae 100644 --- a/bookwyrm/tests/views/inbox/test_inbox_create.py +++ b/bookwyrm/tests/views/inbox/test_inbox_create.py @@ -11,12 +11,15 @@ from bookwyrm.activitypub import ActivitySerializerError # pylint: disable=too-many-public-methods @patch("bookwyrm.models.activitypub_mixin.broadcast_task.delay") +@patch("bookwyrm.activitystreams.add_book_statuses_task.delay") class InboxCreate(TestCase): """readthrough tests""" def setUp(self): """basic user and book data""" - with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"): + with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( + "bookwyrm.activitystreams.populate_stream_task.delay" + ): self.local_user = models.User.objects.create_user( "mouse@example.com", "mouse@mouse.com", @@ -47,7 +50,6 @@ class InboxCreate(TestCase): } models.SiteSettings.objects.create() - @patch("bookwyrm.activitystreams.ActivityStream.add_status") def test_create_status(self, *_): """the "it justs works" mode""" datafile = pathlib.Path(__file__).parent.joinpath( @@ -61,9 +63,7 @@ class InboxCreate(TestCase): activity = self.create_json activity["object"] = status_data - with patch("bookwyrm.activitystreams.ActivityStream.add_status") as redis_mock: - views.inbox.activity_task(activity) - self.assertTrue(redis_mock.called) + views.inbox.activity_task(activity) status = models.Quotation.objects.get() self.assertEqual( @@ -77,7 +77,6 @@ class InboxCreate(TestCase): views.inbox.activity_task(activity) self.assertEqual(models.Status.objects.count(), 1) - @patch("bookwyrm.activitystreams.ActivityStream.add_status") def test_create_comment_with_reading_status(self, *_): """the "it justs works" mode""" datafile = pathlib.Path(__file__).parent.joinpath("../../data/ap_comment.json") @@ -90,9 +89,7 @@ class InboxCreate(TestCase): activity = self.create_json activity["object"] = status_data - with patch("bookwyrm.activitystreams.ActivityStream.add_status") as redis_mock: - views.inbox.activity_task(activity) - self.assertTrue(redis_mock.called) + views.inbox.activity_task(activity) status = models.Comment.objects.get() self.assertEqual(status.remote_id, "https://example.com/user/mouse/comment/6") @@ -104,7 +101,7 @@ class InboxCreate(TestCase): views.inbox.activity_task(activity) self.assertEqual(models.Status.objects.count(), 1) - def test_create_status_remote_note_with_mention(self, _): + def test_create_status_remote_note_with_mention(self, *_): """should only create it under the right circumstances""" self.assertFalse( models.Notification.objects.filter(user=self.local_user).exists() @@ -115,9 +112,8 @@ class InboxCreate(TestCase): activity = self.create_json activity["object"] = status_data - with patch("bookwyrm.activitystreams.ActivityStream.add_status") as redis_mock: - views.inbox.activity_task(activity) - self.assertTrue(redis_mock.called) + views.inbox.activity_task(activity) + status = models.Status.objects.last() self.assertEqual(status.content, "test content in note") self.assertEqual(status.mention_users.first(), self.local_user) @@ -126,14 +122,13 @@ class InboxCreate(TestCase): ) self.assertEqual(models.Notification.objects.get().notification_type, "MENTION") - def test_create_status_remote_note_with_reply(self, _): + def test_create_status_remote_note_with_reply(self, *_): """should only create it under the right circumstances""" - with patch("bookwyrm.activitystreams.ActivityStream.add_status"): - parent_status = models.Status.objects.create( - user=self.local_user, - content="Test status", - remote_id="https://example.com/status/1", - ) + parent_status = models.Status.objects.create( + user=self.local_user, + content="Test status", + remote_id="https://example.com/status/1", + ) self.assertEqual(models.Status.objects.count(), 1) self.assertFalse(models.Notification.objects.filter(user=self.local_user)) @@ -145,16 +140,14 @@ class InboxCreate(TestCase): activity = self.create_json activity["object"] = status_data - with patch("bookwyrm.activitystreams.ActivityStream.add_status") as redis_mock: - views.inbox.activity_task(activity) - self.assertTrue(redis_mock.called) + views.inbox.activity_task(activity) status = models.Status.objects.last() self.assertEqual(status.content, "test content in note") self.assertEqual(status.reply_parent, parent_status) self.assertTrue(models.Notification.objects.filter(user=self.local_user)) self.assertEqual(models.Notification.objects.get().notification_type, "REPLY") - def test_create_rating(self, _): + def test_create_rating(self, *_): """a remote rating activity""" book = models.Edition.objects.create( title="Test Book", remote_id="https://example.com/book/1" @@ -184,14 +177,12 @@ class InboxCreate(TestCase): "rating": 3, "@context": "https://www.w3.org/ns/activitystreams", } - with patch("bookwyrm.activitystreams.ActivityStream.add_status") as redis_mock: - views.inbox.activity_task(activity) - self.assertTrue(redis_mock.called) + views.inbox.activity_task(activity) rating = models.ReviewRating.objects.first() self.assertEqual(rating.book, book) self.assertEqual(rating.rating, 3.0) - def test_create_list(self, _): + def test_create_list(self, *_): """a new list""" activity = self.create_json activity["object"] = { @@ -215,7 +206,7 @@ class InboxCreate(TestCase): self.assertEqual(book_list.description, "summary text") self.assertEqual(book_list.remote_id, "https://example.com/list/22") - def test_create_unsupported_type(self, _): + def test_create_unsupported_type(self, *_): """ignore activities we know we can't handle""" activity = self.create_json activity["object"] = { @@ -225,7 +216,7 @@ class InboxCreate(TestCase): # just observer how it doesn't throw an error views.inbox.activity_task(activity) - def test_create_unknown_type(self, _): + def test_create_unknown_type(self, *_): """ignore activities we know we've never heard of""" activity = self.create_json activity["object"] = { diff --git a/bookwyrm/tests/views/inbox/test_inbox_delete.py b/bookwyrm/tests/views/inbox/test_inbox_delete.py index f47d8737..dd603352 100644 --- a/bookwyrm/tests/views/inbox/test_inbox_delete.py +++ b/bookwyrm/tests/views/inbox/test_inbox_delete.py @@ -1,4 +1,4 @@ -""" tests incoming activities""" +"""tests incoming activities""" from datetime import datetime from unittest.mock import patch @@ -13,7 +13,9 @@ class InboxActivities(TestCase): def setUp(self): """basic user and book data""" - with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"): + with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( + "bookwyrm.activitystreams.populate_stream_task.delay" + ): self.local_user = models.User.objects.create_user( "mouse@example.com", "mouse@mouse.com", @@ -33,7 +35,7 @@ class InboxActivities(TestCase): inbox="https://example.com/users/rat/inbox", outbox="https://example.com/users/rat/outbox", ) - with patch("bookwyrm.activitystreams.ActivityStream.add_status"): + with patch("bookwyrm.activitystreams.add_status_task.delay"): self.status = models.Status.objects.create( user=self.remote_user, content="Test status", @@ -53,9 +55,7 @@ class InboxActivities(TestCase): "actor": self.remote_user.remote_id, "object": {"id": self.status.remote_id, "type": "Tombstone"}, } - with patch( - "bookwyrm.activitystreams.ActivityStream.remove_object_from_related_stores" - ) as redis_mock: + with patch("bookwyrm.activitystreams.remove_status_task.delay") as redis_mock: views.inbox.activity_task(activity) self.assertTrue(redis_mock.called) # deletion doens't remove the status, it turns it into a tombstone @@ -84,9 +84,7 @@ class InboxActivities(TestCase): "actor": self.remote_user.remote_id, "object": {"id": self.status.remote_id, "type": "Tombstone"}, } - with patch( - "bookwyrm.activitystreams.ActivityStream.remove_object_from_related_stores" - ) as redis_mock: + with patch("bookwyrm.activitystreams.remove_status_task.delay") as redis_mock: views.inbox.activity_task(activity) self.assertTrue(redis_mock.called) # deletion doens't remove the status, it turns it into a tombstone diff --git a/bookwyrm/tests/views/inbox/test_inbox_follow.py b/bookwyrm/tests/views/inbox/test_inbox_follow.py index d1a4e0d0..6b629c2f 100644 --- a/bookwyrm/tests/views/inbox/test_inbox_follow.py +++ b/bookwyrm/tests/views/inbox/test_inbox_follow.py @@ -13,7 +13,9 @@ class InboxRelationships(TestCase): def setUp(self): """basic user and book data""" - with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"): + with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( + "bookwyrm.activitystreams.populate_stream_task.delay" + ): self.local_user = models.User.objects.create_user( "mouse@example.com", "mouse@mouse.com", @@ -181,7 +183,8 @@ class InboxRelationships(TestCase): views.inbox.activity_task(activity) self.assertIsNone(self.local_user.followers.first()) - def test_follow_accept(self): + @patch("bookwyrm.activitystreams.add_user_statuses_task.delay") + def test_follow_accept(self, _): """a remote user approved a follow request from local""" with patch("bookwyrm.models.activitypub_mixin.broadcast_task.delay"): rel = models.UserFollowRequest.objects.create( diff --git a/bookwyrm/tests/views/inbox/test_inbox_like.py b/bookwyrm/tests/views/inbox/test_inbox_like.py index 56f21e89..db8f1fca 100644 --- a/bookwyrm/tests/views/inbox/test_inbox_like.py +++ b/bookwyrm/tests/views/inbox/test_inbox_like.py @@ -12,7 +12,9 @@ class InboxActivities(TestCase): def setUp(self): """basic user and book data""" - with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"): + with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( + "bookwyrm.activitystreams.populate_stream_task.delay" + ): self.local_user = models.User.objects.create_user( "mouse@example.com", "mouse@mouse.com", @@ -34,7 +36,7 @@ class InboxActivities(TestCase): ) with patch("bookwyrm.models.activitypub_mixin.broadcast_task.delay"): - with patch("bookwyrm.activitystreams.ActivityStream.add_status"): + with patch("bookwyrm.activitystreams.add_status_task.delay"): self.status = models.Status.objects.create( user=self.local_user, content="Test status", diff --git a/bookwyrm/tests/views/inbox/test_inbox_remove.py b/bookwyrm/tests/views/inbox/test_inbox_remove.py index 3d64fcb2..cb4e4a16 100644 --- a/bookwyrm/tests/views/inbox/test_inbox_remove.py +++ b/bookwyrm/tests/views/inbox/test_inbox_remove.py @@ -12,7 +12,9 @@ class InboxRemove(TestCase): def setUp(self): """basic user and book data""" - with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"): + with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( + "bookwyrm.activitystreams.populate_stream_task.delay" + ): self.local_user = models.User.objects.create_user( "mouse@example.com", "mouse@mouse.com", diff --git a/bookwyrm/tests/views/inbox/test_inbox_update.py b/bookwyrm/tests/views/inbox/test_inbox_update.py index 4abb0fa0..ec10f2f8 100644 --- a/bookwyrm/tests/views/inbox/test_inbox_update.py +++ b/bookwyrm/tests/views/inbox/test_inbox_update.py @@ -14,7 +14,9 @@ class InboxUpdate(TestCase): def setUp(self): """basic user and book data""" - with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"): + with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( + "bookwyrm.activitystreams.populate_stream_task.delay" + ): self.local_user = models.User.objects.create_user( "mouse@example.com", "mouse@mouse.com", @@ -81,7 +83,8 @@ class InboxUpdate(TestCase): self.assertEqual(book_list.remote_id, "https://example.com/list/22") @patch("bookwyrm.suggested_users.rerank_user_task.delay") - def test_update_user(self, _): + @patch("bookwyrm.activitystreams.add_user_statuses_task.delay") + def test_update_user(self, *_): """update an existing user""" models.UserFollows.objects.create( user_subject=self.local_user, diff --git a/bookwyrm/tests/views/test_announcements.py b/bookwyrm/tests/views/test_announcements.py index 16ef81e9..44b5d5b6 100644 --- a/bookwyrm/tests/views/test_announcements.py +++ b/bookwyrm/tests/views/test_announcements.py @@ -13,7 +13,9 @@ class AnnouncementViews(TestCase): def setUp(self): """we need basic test data and mocks""" self.factory = RequestFactory() - with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"): + with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( + "bookwyrm.activitystreams.populate_stream_task.delay" + ): self.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.mouse", diff --git a/bookwyrm/tests/views/test_authentication.py b/bookwyrm/tests/views/test_authentication.py index 22008e10..95a4d9a0 100644 --- a/bookwyrm/tests/views/test_authentication.py +++ b/bookwyrm/tests/views/test_authentication.py @@ -14,13 +14,16 @@ from bookwyrm.settings import DOMAIN # pylint: disable=too-many-public-methods @patch("bookwyrm.suggested_users.rerank_suggestions_task.delay") +@patch("bookwyrm.activitystreams.populate_stream_task.delay") class AuthenticationViews(TestCase): """login and password management""" def setUp(self): """we need basic test data and mocks""" self.factory = RequestFactory() - with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"): + with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( + "bookwyrm.activitystreams.populate_stream_task.delay" + ): self.local_user = models.User.objects.create_user( "mouse@your.domain.here", "mouse@mouse.com", @@ -35,7 +38,7 @@ class AuthenticationViews(TestCase): id=1, require_confirm_email=False ) - def test_login_get(self, _): + def test_login_get(self, *_): """there are so many views, this just makes sure it LOADS""" login = views.Login.as_view() request = self.factory.get("") @@ -51,7 +54,7 @@ class AuthenticationViews(TestCase): self.assertEqual(result.url, "/") self.assertEqual(result.status_code, 302) - def test_login_post_localname(self, _): + def test_login_post_localname(self, *_): """there are so many views, this just makes sure it LOADS""" view = views.Login.as_view() form = forms.LoginForm() @@ -65,7 +68,7 @@ class AuthenticationViews(TestCase): self.assertEqual(result.url, "/") self.assertEqual(result.status_code, 302) - def test_login_post_username(self, _): + def test_login_post_username(self, *_): """there are so many views, this just makes sure it LOADS""" view = views.Login.as_view() form = forms.LoginForm() @@ -79,7 +82,7 @@ class AuthenticationViews(TestCase): self.assertEqual(result.url, "/") self.assertEqual(result.status_code, 302) - def test_login_post_email(self, _): + def test_login_post_email(self, *_): """there are so many views, this just makes sure it LOADS""" view = views.Login.as_view() form = forms.LoginForm() @@ -93,7 +96,7 @@ class AuthenticationViews(TestCase): self.assertEqual(result.url, "/") self.assertEqual(result.status_code, 302) - def test_login_post_invalid_credentials(self, _): + def test_login_post_invalid_credentials(self, *_): """there are so many views, this just makes sure it LOADS""" view = views.Login.as_view() form = forms.LoginForm() @@ -111,7 +114,7 @@ class AuthenticationViews(TestCase): "Username or password are incorrect", ) - def test_register(self, _): + def test_register(self, *_): """create a user""" view = views.Register.as_view() self.assertEqual(models.User.objects.count(), 1) @@ -159,7 +162,7 @@ class AuthenticationViews(TestCase): self.assertEqual(nutria.deactivation_reason, "pending") self.assertIsNotNone(nutria.confirmation_code) - def test_register_trailing_space(self, _): + def test_register_trailing_space(self, *_): """django handles this so weirdly""" view = views.Register.as_view() request = self.factory.post( @@ -175,7 +178,7 @@ class AuthenticationViews(TestCase): self.assertEqual(nutria.localname, "nutria") self.assertEqual(nutria.local, True) - def test_register_invalid_email(self, _): + def test_register_invalid_email(self, *_): """gotta have an email""" view = views.Register.as_view() self.assertEqual(models.User.objects.count(), 1) @@ -186,7 +189,7 @@ class AuthenticationViews(TestCase): self.assertEqual(models.User.objects.count(), 1) response.render() - def test_register_invalid_username(self, _): + def test_register_invalid_username(self, *_): """gotta have an email""" view = views.Register.as_view() self.assertEqual(models.User.objects.count(), 1) @@ -214,7 +217,7 @@ class AuthenticationViews(TestCase): self.assertEqual(models.User.objects.count(), 1) response.render() - def test_register_closed_instance(self, _): + def test_register_closed_instance(self, *_): """you can't just register""" view = views.Register.as_view() self.settings.allow_registration = False @@ -226,7 +229,7 @@ class AuthenticationViews(TestCase): with self.assertRaises(PermissionDenied): view(request) - def test_register_invite(self, _): + def test_register_invite(self, *_): """you can't just register""" view = views.Register.as_view() self.settings.allow_registration = False @@ -279,7 +282,7 @@ class AuthenticationViews(TestCase): response = view(request) self.assertEqual(models.User.objects.count(), 2) - def test_confirm_email_code_get(self, _): + def test_confirm_email_code_get(self, *_): """there are so many views, this just makes sure it LOADS""" self.settings.require_confirm_email = True self.settings.save() @@ -308,7 +311,7 @@ class AuthenticationViews(TestCase): self.assertEqual(result.url, "/") self.assertEqual(result.status_code, 302) - def test_confirm_email_code_get_invalid_code(self, _): + def test_confirm_email_code_get_invalid_code(self, *_): """there are so many views, this just makes sure it LOADS""" self.settings.require_confirm_email = True self.settings.save() @@ -331,7 +334,7 @@ class AuthenticationViews(TestCase): self.assertFalse(self.local_user.is_active) self.assertEqual(self.local_user.deactivation_reason, "pending") - def test_confirm_email_get(self, _): + def test_confirm_email_get(self, *_): """there are so many views, this just makes sure it LOADS""" self.settings.require_confirm_email = True self.settings.save() diff --git a/bookwyrm/tests/views/test_author.py b/bookwyrm/tests/views/test_author.py index 6157b651..7a0065c9 100644 --- a/bookwyrm/tests/views/test_author.py +++ b/bookwyrm/tests/views/test_author.py @@ -17,7 +17,9 @@ class AuthorViews(TestCase): def setUp(self): """we need basic test data and mocks""" self.factory = RequestFactory() - with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"): + with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( + "bookwyrm.activitystreams.populate_stream_task.delay" + ): self.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.com", diff --git a/bookwyrm/tests/views/test_block.py b/bookwyrm/tests/views/test_block.py index 11283869..f1ec42f0 100644 --- a/bookwyrm/tests/views/test_block.py +++ b/bookwyrm/tests/views/test_block.py @@ -14,7 +14,9 @@ class BlockViews(TestCase): def setUp(self): """we need basic test data and mocks""" self.factory = RequestFactory() - with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"): + with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( + "bookwyrm.activitystreams.populate_stream_task.delay" + ): self.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.mouse", @@ -57,7 +59,7 @@ class BlockViews(TestCase): request = self.factory.post("") request.user = self.local_user - with patch("bookwyrm.activitystreams.ActivityStream.remove_user_statuses"): + with patch("bookwyrm.activitystreams.remove_user_statuses_task.delay"): view(request, self.remote_user.id) block = models.UserBlocks.objects.get() self.assertEqual(block.user_subject, self.local_user) @@ -72,7 +74,7 @@ class BlockViews(TestCase): request = self.factory.post("") request.user = self.local_user - with patch("bookwyrm.activitystreams.ActivityStream.add_user_statuses"): + with patch("bookwyrm.activitystreams.add_user_statuses_task.delay"): views.block.unblock(request, self.remote_user.id) self.assertFalse(models.UserBlocks.objects.exists()) diff --git a/bookwyrm/tests/views/test_book.py b/bookwyrm/tests/views/test_book.py index 2cd50302..99022ec5 100644 --- a/bookwyrm/tests/views/test_book.py +++ b/bookwyrm/tests/views/test_book.py @@ -24,7 +24,9 @@ class BookViews(TestCase): def setUp(self): """we need basic test data and mocks""" self.factory = RequestFactory() - with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"): + with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( + "bookwyrm.activitystreams.populate_stream_task.delay" + ): self.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.com", @@ -74,7 +76,7 @@ class BookViews(TestCase): self.assertEqual(result.status_code, 200) @patch("bookwyrm.models.activitypub_mixin.broadcast_task.delay") - @patch("bookwyrm.activitystreams.ActivityStream.add_status") + @patch("bookwyrm.activitystreams.add_status_task.delay") def test_book_page_statuses(self, *_): """there are so many views, this just makes sure it LOADS""" view = views.Book.as_view() diff --git a/bookwyrm/tests/views/test_directory.py b/bookwyrm/tests/views/test_directory.py index bdda8101..90638b0a 100644 --- a/bookwyrm/tests/views/test_directory.py +++ b/bookwyrm/tests/views/test_directory.py @@ -15,7 +15,9 @@ class DirectoryViews(TestCase): def setUp(self): """we need basic test data and mocks""" self.factory = RequestFactory() - with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"): + with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( + "bookwyrm.activitystreams.populate_stream_task.delay" + ): self.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.com", @@ -30,6 +32,7 @@ class DirectoryViews(TestCase): self.anonymous_user.is_authenticated = False @patch("bookwyrm.suggested_users.rerank_suggestions_task.delay") + @patch("bookwyrm.activitystreams.populate_stream_task.delay") @patch("bookwyrm.suggested_users.rerank_user_task.delay") def test_directory_page(self, *_): """there are so many views, this just makes sure it LOADS""" diff --git a/bookwyrm/tests/views/test_discover.py b/bookwyrm/tests/views/test_discover.py index eff62cb6..4b8927bc 100644 --- a/bookwyrm/tests/views/test_discover.py +++ b/bookwyrm/tests/views/test_discover.py @@ -1,7 +1,6 @@ """ 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 @@ -15,7 +14,9 @@ class DiscoverViews(TestCase): def setUp(self): """we need basic test data and mocks""" self.factory = RequestFactory() - with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"): + with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( + "bookwyrm.activitystreams.populate_stream_task.delay" + ): self.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.mouse", @@ -41,7 +42,7 @@ class DiscoverViews(TestCase): result.render() @patch("bookwyrm.models.activitypub_mixin.broadcast_task.delay") - @patch("bookwyrm.activitystreams.ActivityStream.add_status") + @patch("bookwyrm.activitystreams.add_status_task.delay") def test_discover_page(self, *_): """there are so many views, this just makes sure it LOADS""" view = views.Discover.as_view() diff --git a/bookwyrm/tests/views/test_edit_user.py b/bookwyrm/tests/views/test_edit_user.py index df89d5b0..07e54e4e 100644 --- a/bookwyrm/tests/views/test_edit_user.py +++ b/bookwyrm/tests/views/test_edit_user.py @@ -22,7 +22,9 @@ class EditUserViews(TestCase): def setUp(self): """we need basic test data and mocks""" self.factory = RequestFactory() - with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"): + with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( + "bookwyrm.activitystreams.populate_stream_task.delay" + ): self.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.mouse", @@ -37,7 +39,9 @@ class EditUserViews(TestCase): self.book = models.Edition.objects.create( title="test", parent_work=models.Work.objects.create(title="test work") ) - with patch("bookwyrm.models.activitypub_mixin.broadcast_task.delay"): + with patch("bookwyrm.models.activitypub_mixin.broadcast_task.delay"), patch( + "bookwyrm.activitystreams.add_book_statuses_task.delay" + ): models.ShelfBook.objects.create( book=self.book, user=self.local_user, diff --git a/bookwyrm/tests/views/test_editions.py b/bookwyrm/tests/views/test_editions.py index 1bd23ae1..a138f345 100644 --- a/bookwyrm/tests/views/test_editions.py +++ b/bookwyrm/tests/views/test_editions.py @@ -15,7 +15,9 @@ class BookViews(TestCase): def setUp(self): """we need basic test data and mocks""" self.factory = RequestFactory() - with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"): + with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( + "bookwyrm.activitystreams.populate_stream_task.delay" + ): self.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.com", @@ -101,7 +103,9 @@ class BookViews(TestCase): self.assertEqual(result.status_code, 200) @patch("bookwyrm.suggested_users.rerank_suggestions_task.delay") - def test_switch_edition(self, _): + @patch("bookwyrm.activitystreams.populate_stream_task.delay") + @patch("bookwyrm.activitystreams.add_book_statuses_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 f43a9623..ce5de7e3 100644 --- a/bookwyrm/tests/views/test_federation.py +++ b/bookwyrm/tests/views/test_federation.py @@ -15,7 +15,9 @@ class FederationViews(TestCase): def setUp(self): """we need basic test data and mocks""" self.factory = RequestFactory() - with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"): + with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( + "bookwyrm.activitystreams.populate_stream_task.delay" + ): self.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.mouse", diff --git a/bookwyrm/tests/views/test_feed.py b/bookwyrm/tests/views/test_feed.py index e13dd7f8..526cb0f9 100644 --- a/bookwyrm/tests/views/test_feed.py +++ b/bookwyrm/tests/views/test_feed.py @@ -15,8 +15,9 @@ from bookwyrm.activitypub import ActivitypubResponse @patch("bookwyrm.activitystreams.ActivityStream.get_activity_stream") -@patch("bookwyrm.activitystreams.ActivityStream.add_status") +@patch("bookwyrm.activitystreams.add_status_task.delay") @patch("bookwyrm.suggested_users.rerank_suggestions_task.delay") +@patch("bookwyrm.activitystreams.populate_stream_task.delay") @patch("bookwyrm.suggested_users.remove_user_task.delay") class FeedViews(TestCase): """activity feed, statuses, dms""" @@ -24,7 +25,9 @@ class FeedViews(TestCase): def setUp(self): """we need basic test data and mocks""" self.factory = RequestFactory() - with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"): + with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( + "bookwyrm.activitystreams.populate_stream_task.delay" + ): self.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.mouse", @@ -169,14 +172,15 @@ class FeedViews(TestCase): result.render() self.assertEqual(result.status_code, 200) + @patch("bookwyrm.models.activitypub_mixin.broadcast_task.delay") + @patch("bookwyrm.activitystreams.add_book_statuses_task.delay") def test_get_suggested_book(self, *_): """gets books the ~*~ algorithm ~*~ thinks you want to post about""" - 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.get(identifier="reading"), - ) + models.ShelfBook.objects.create( + book=self.book, + user=self.local_user, + shelf=self.local_user.shelf_set.get(identifier="reading"), + ) suggestions = views.feed.get_suggested_books(self.local_user) self.assertEqual(suggestions[0]["name"], "Currently Reading") self.assertEqual(suggestions[0]["books"][0], self.book) diff --git a/bookwyrm/tests/views/test_follow.py b/bookwyrm/tests/views/test_follow.py index 714284b0..947c55cf 100644 --- a/bookwyrm/tests/views/test_follow.py +++ b/bookwyrm/tests/views/test_follow.py @@ -10,13 +10,16 @@ from django.test.client import RequestFactory from bookwyrm import models, views +@patch("bookwyrm.activitystreams.add_user_statuses_task.delay") class FollowViews(TestCase): """follows""" def setUp(self): """we need basic test data and mocks""" self.factory = RequestFactory() - with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"): + with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( + "bookwyrm.activitystreams.populate_stream_task.delay" + ): self.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.com", @@ -50,7 +53,7 @@ class FollowViews(TestCase): parent_work=self.work, ) - def test_handle_follow_remote(self): + def test_handle_follow_remote(self, _): """send a follow request""" request = self.factory.post("", {"user": self.remote_user.username}) request.user = self.local_user @@ -65,9 +68,11 @@ class FollowViews(TestCase): self.assertEqual(rel.user_object, self.remote_user) self.assertEqual(rel.status, "follow_request") - def test_handle_follow_local_manually_approves(self): + def test_handle_follow_local_manually_approves(self, _): """send a follow request""" - with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"): + with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( + "bookwyrm.activitystreams.populate_stream_task.delay" + ): rat = models.User.objects.create_user( "rat@local.com", "rat@rat.com", @@ -89,9 +94,11 @@ class FollowViews(TestCase): self.assertEqual(rel.user_object, rat) self.assertEqual(rel.status, "follow_request") - def test_handle_follow_local(self): + def test_handle_follow_local(self, _): """send a follow request""" - with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"): + with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( + "bookwyrm.activitystreams.populate_stream_task.delay" + ): rat = models.User.objects.create_user( "rat@local.com", "rat@rat.com", @@ -113,7 +120,8 @@ class FollowViews(TestCase): self.assertEqual(rel.user_object, rat) self.assertEqual(rel.status, "follows") - def test_handle_unfollow(self): + @patch("bookwyrm.activitystreams.remove_user_statuses_task.delay") + def test_handle_unfollow(self, *_): """send an unfollow""" request = self.factory.post("", {"user": self.remote_user.username}) request.user = self.local_user @@ -127,7 +135,7 @@ class FollowViews(TestCase): self.assertEqual(self.remote_user.followers.count(), 0) - def test_handle_accept(self): + def test_handle_accept(self, _): """accept a follow request""" self.local_user.manually_approves_followers = True self.local_user.save( @@ -146,7 +154,7 @@ class FollowViews(TestCase): # follow relationship should exist self.assertEqual(self.local_user.followers.first(), self.remote_user) - def test_handle_reject(self): + def test_handle_reject(self, _): """reject a follow request""" self.local_user.manually_approves_followers = True self.local_user.save( diff --git a/bookwyrm/tests/views/test_get_started.py b/bookwyrm/tests/views/test_get_started.py index eb9d67b5..135896dc 100644 --- a/bookwyrm/tests/views/test_get_started.py +++ b/bookwyrm/tests/views/test_get_started.py @@ -7,13 +7,16 @@ from django.test.client import RequestFactory from bookwyrm import forms, models, views +@patch("bookwyrm.activitystreams.populate_stream_task.delay") class GetStartedViews(TestCase): """helping new users get oriented""" def setUp(self): """we need basic test data and mocks""" self.factory = RequestFactory() - with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"): + with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( + "bookwyrm.activitystreams.populate_stream_task.delay" + ): self.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.mouse", @@ -31,7 +34,7 @@ class GetStartedViews(TestCase): ) models.SiteSettings.objects.create() - def test_profile_view(self): + def test_profile_view(self, *_): """there are so many views, this just makes sure it LOADS""" view = views.GetStartedProfile.as_view() request = self.factory.get("") @@ -63,7 +66,7 @@ class GetStartedViews(TestCase): self.assertEqual(self.local_user.name, "New Name") self.assertTrue(self.local_user.discoverable) - def test_books_view(self): + def test_books_view(self, _): """there are so many views, this just makes sure it LOADS""" view = views.GetStartedBooks.as_view() request = self.factory.get("") @@ -75,7 +78,7 @@ class GetStartedViews(TestCase): result.render() self.assertEqual(result.status_code, 200) - def test_books_view_with_query(self): + def test_books_view_with_query(self, _): """there are so many views, this just makes sure it LOADS""" view = views.GetStartedBooks.as_view() request = self.factory.get("?query=Example") @@ -88,7 +91,8 @@ class GetStartedViews(TestCase): self.assertEqual(result.status_code, 200) @patch("bookwyrm.suggested_users.rerank_suggestions_task.delay") - def test_books_view_post(self, _): + @patch("bookwyrm.activitystreams.add_book_statuses_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} @@ -107,7 +111,7 @@ class GetStartedViews(TestCase): self.assertEqual(shelfbook.user, self.local_user) @patch("bookwyrm.suggested_users.SuggestedUsers.get_suggestions") - def test_users_view(self, _): + def test_users_view(self, *_): """there are so many views, this just makes sure it LOADS""" view = views.GetStartedUsers.as_view() request = self.factory.get("") @@ -120,7 +124,7 @@ class GetStartedViews(TestCase): self.assertEqual(result.status_code, 200) @patch("bookwyrm.suggested_users.SuggestedUsers.get_suggestions") - def test_users_view_with_query(self, _): + def test_users_view_with_query(self, *_): """there are so many views, this just makes sure it LOADS""" view = views.GetStartedUsers.as_view() request = self.factory.get("?query=rat") diff --git a/bookwyrm/tests/views/test_goal.py b/bookwyrm/tests/views/test_goal.py index 23bd8e1a..2ecce0ac 100644 --- a/bookwyrm/tests/views/test_goal.py +++ b/bookwyrm/tests/views/test_goal.py @@ -16,7 +16,9 @@ class GoalViews(TestCase): def setUp(self): """we need basic test data and mocks""" self.factory = RequestFactory() - with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"): + with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( + "bookwyrm.activitystreams.populate_stream_task.delay" + ): self.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.com", @@ -104,7 +106,7 @@ class GoalViews(TestCase): result = view(request, self.local_user.localname, self.year) self.assertEqual(result.status_code, 404) - @patch("bookwyrm.activitystreams.ActivityStream.add_status") + @patch("bookwyrm.activitystreams.add_status_task.delay") def test_create_goal(self, _): """create a new goal""" view = views.Goal.as_view() diff --git a/bookwyrm/tests/views/test_helpers.py b/bookwyrm/tests/views/test_helpers.py index b9a82e68..8f7b45a3 100644 --- a/bookwyrm/tests/views/test_helpers.py +++ b/bookwyrm/tests/views/test_helpers.py @@ -11,8 +11,9 @@ from bookwyrm import models, views from bookwyrm.settings import USER_AGENT -@patch("bookwyrm.activitystreams.ActivityStream.add_status") +@patch("bookwyrm.activitystreams.add_status_task.delay") @patch("bookwyrm.suggested_users.rerank_suggestions_task.delay") +@patch("bookwyrm.activitystreams.populate_stream_task.delay") @patch("bookwyrm.suggested_users.rerank_user_task.delay") class ViewsHelpers(TestCase): """viewing and creating statuses""" @@ -20,7 +21,9 @@ class ViewsHelpers(TestCase): def setUp(self): """we need basic test data and mocks""" self.factory = RequestFactory() - with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"): + with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( + "bookwyrm.activitystreams.populate_stream_task.delay" + ): with patch("bookwyrm.suggested_users.rerank_user_task.delay"): self.local_user = models.User.objects.create_user( "mouse@local.com", diff --git a/bookwyrm/tests/views/test_import.py b/bookwyrm/tests/views/test_import.py index d9d67d56..2027d284 100644 --- a/bookwyrm/tests/views/test_import.py +++ b/bookwyrm/tests/views/test_import.py @@ -15,7 +15,9 @@ class ImportViews(TestCase): def setUp(self): """we need basic test data and mocks""" self.factory = RequestFactory() - with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"): + with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( + "bookwyrm.activitystreams.populate_stream_task.delay" + ): self.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.mouse", diff --git a/bookwyrm/tests/views/test_interaction.py b/bookwyrm/tests/views/test_interaction.py index d83fc119..e8b9353e 100644 --- a/bookwyrm/tests/views/test_interaction.py +++ b/bookwyrm/tests/views/test_interaction.py @@ -8,14 +8,16 @@ from bookwyrm import models, views @patch("bookwyrm.models.activitypub_mixin.broadcast_task.delay") -@patch("bookwyrm.activitystreams.ActivityStream.remove_object_from_related_stores") +@patch("bookwyrm.activitystreams.remove_status_task.delay") class InteractionViews(TestCase): """viewing and creating statuses""" def setUp(self): """we need basic test data and mocks""" self.factory = RequestFactory() - with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"): + with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( + "bookwyrm.activitystreams.populate_stream_task.delay" + ): self.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.com", @@ -47,7 +49,7 @@ class InteractionViews(TestCase): view = views.Favorite.as_view() request = self.factory.post("") request.user = self.remote_user - with patch("bookwyrm.activitystreams.ActivityStream.add_status"): + with patch("bookwyrm.activitystreams.add_status_task.delay"): status = models.Status.objects.create(user=self.local_user, content="hi") view(request, status.id) @@ -65,7 +67,7 @@ class InteractionViews(TestCase): view = views.Unfavorite.as_view() request = self.factory.post("") request.user = self.remote_user - with patch("bookwyrm.activitystreams.ActivityStream.add_status"): + with patch("bookwyrm.activitystreams.add_status_task.delay"): status = models.Status.objects.create(user=self.local_user, content="hi") views.Favorite.as_view()(request, status.id) @@ -82,7 +84,7 @@ class InteractionViews(TestCase): view = views.Boost.as_view() request = self.factory.post("") request.user = self.remote_user - with patch("bookwyrm.activitystreams.ActivityStream.add_status"): + with patch("bookwyrm.activitystreams.add_status_task.delay"): status = models.Status.objects.create(user=self.local_user, content="hi") view(request, status.id) @@ -104,7 +106,7 @@ class InteractionViews(TestCase): view = views.Boost.as_view() request = self.factory.post("") request.user = self.local_user - with patch("bookwyrm.activitystreams.ActivityStream.add_status"): + with patch("bookwyrm.activitystreams.add_status_task.delay"): status = models.Status.objects.create(user=self.local_user, content="hi") with patch( @@ -128,7 +130,7 @@ class InteractionViews(TestCase): view = views.Boost.as_view() request = self.factory.post("") request.user = self.local_user - with patch("bookwyrm.activitystreams.ActivityStream.add_status"): + with patch("bookwyrm.activitystreams.add_status_task.delay"): status = models.Status.objects.create( user=self.local_user, content="hi", privacy="unlisted" ) @@ -143,7 +145,7 @@ class InteractionViews(TestCase): view = views.Boost.as_view() request = self.factory.post("") request.user = self.local_user - with patch("bookwyrm.activitystreams.ActivityStream.add_status"): + with patch("bookwyrm.activitystreams.add_status_task.delay"): status = models.Status.objects.create( user=self.local_user, content="hi", privacy="followers" ) @@ -156,14 +158,14 @@ class InteractionViews(TestCase): view = views.Boost.as_view() request = self.factory.post("") request.user = self.local_user - with patch("bookwyrm.activitystreams.ActivityStream.add_status"): + with patch("bookwyrm.activitystreams.add_status_task.delay"): status = models.Status.objects.create(user=self.local_user, content="hi") view(request, status.id) view(request, status.id) self.assertEqual(models.Boost.objects.count(), 1) - @patch("bookwyrm.activitystreams.ActivityStream.add_status") + @patch("bookwyrm.activitystreams.add_status_task.delay") def test_unboost(self, *_): """undo a boost""" view = views.Unboost.as_view() @@ -171,17 +173,12 @@ class InteractionViews(TestCase): request.user = self.remote_user status = models.Status.objects.create(user=self.local_user, content="hi") - with patch( - "bookwyrm.activitystreams.ActivityStream.remove_object_from_related_stores" - ): - views.Boost.as_view()(request, status.id) + views.Boost.as_view()(request, status.id) self.assertEqual(models.Boost.objects.count(), 1) self.assertEqual(models.Notification.objects.count(), 1) - with patch( - "bookwyrm.activitystreams.ActivityStream.remove_object_from_related_stores" - ) as redis_mock: - view(request, status.id) - self.assertTrue(redis_mock.called) + + view(request, status.id) + self.assertEqual(models.Boost.objects.count(), 0) self.assertEqual(models.Notification.objects.count(), 0) diff --git a/bookwyrm/tests/views/test_invite.py b/bookwyrm/tests/views/test_invite.py index 6ad46420..c1e425c8 100644 --- a/bookwyrm/tests/views/test_invite.py +++ b/bookwyrm/tests/views/test_invite.py @@ -16,7 +16,9 @@ class InviteViews(TestCase): def setUp(self): """we need basic test data and mocks""" self.factory = RequestFactory() - with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"): + with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( + "bookwyrm.activitystreams.populate_stream_task.delay" + ): self.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.mouse", diff --git a/bookwyrm/tests/views/test_isbn.py b/bookwyrm/tests/views/test_isbn.py index 7c413e8b..a6a45174 100644 --- a/bookwyrm/tests/views/test_isbn.py +++ b/bookwyrm/tests/views/test_isbn.py @@ -16,7 +16,9 @@ class IsbnViews(TestCase): def setUp(self): """we need basic test data and mocks""" self.factory = RequestFactory() - with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"): + with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( + "bookwyrm.activitystreams.populate_stream_task.delay" + ): self.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.com", diff --git a/bookwyrm/tests/views/test_landing.py b/bookwyrm/tests/views/test_landing.py index 476da74b..f3a50fbc 100644 --- a/bookwyrm/tests/views/test_landing.py +++ b/bookwyrm/tests/views/test_landing.py @@ -15,7 +15,9 @@ class LandingViews(TestCase): def setUp(self): """we need basic test data and mocks""" self.factory = RequestFactory() - with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"): + with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( + "bookwyrm.activitystreams.populate_stream_task.delay" + ): self.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.mouse", diff --git a/bookwyrm/tests/views/test_list.py b/bookwyrm/tests/views/test_list.py index d5e917c3..35befec6 100644 --- a/bookwyrm/tests/views/test_list.py +++ b/bookwyrm/tests/views/test_list.py @@ -17,7 +17,9 @@ class ListViews(TestCase): def setUp(self): """we need basic test data and mocks""" self.factory = RequestFactory() - with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"): + with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( + "bookwyrm.activitystreams.populate_stream_task.delay" + ): self.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.com", diff --git a/bookwyrm/tests/views/test_list_actions.py b/bookwyrm/tests/views/test_list_actions.py index 84c5540c..58515681 100644 --- a/bookwyrm/tests/views/test_list_actions.py +++ b/bookwyrm/tests/views/test_list_actions.py @@ -16,7 +16,9 @@ class ListActionViews(TestCase): def setUp(self): """we need basic test data and mocks""" self.factory = RequestFactory() - with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"): + with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( + "bookwyrm.activitystreams.populate_stream_task.delay" + ): self.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.com", diff --git a/bookwyrm/tests/views/test_notifications.py b/bookwyrm/tests/views/test_notifications.py index af6aac13..d97616ce 100644 --- a/bookwyrm/tests/views/test_notifications.py +++ b/bookwyrm/tests/views/test_notifications.py @@ -14,7 +14,9 @@ class NotificationViews(TestCase): def setUp(self): """we need basic test data and mocks""" self.factory = RequestFactory() - with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"): + with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( + "bookwyrm.activitystreams.populate_stream_task.delay" + ): self.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.mouse", diff --git a/bookwyrm/tests/views/test_outbox.py b/bookwyrm/tests/views/test_outbox.py index fe493bb8..a1f62cc6 100644 --- a/bookwyrm/tests/views/test_outbox.py +++ b/bookwyrm/tests/views/test_outbox.py @@ -18,7 +18,9 @@ class OutboxView(TestCase): def setUp(self): """we'll need some data""" self.factory = RequestFactory() - with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"): + with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( + "bookwyrm.activitystreams.populate_stream_task.delay" + ): self.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.com", @@ -56,7 +58,7 @@ class OutboxView(TestCase): def test_outbox_privacy(self, _): """don't show dms et cetera in outbox""" - with patch("bookwyrm.activitystreams.ActivityStream.add_status"): + with patch("bookwyrm.activitystreams.add_status_task.delay"): models.Status.objects.create( content="PRIVATE!!", user=self.local_user, privacy="direct" ) @@ -79,7 +81,7 @@ class OutboxView(TestCase): def test_outbox_filter(self, _): """if we only care about reviews, only get reviews""" - with patch("bookwyrm.activitystreams.ActivityStream.add_status"): + with patch("bookwyrm.activitystreams.add_status_task.delay"): models.Review.objects.create( content="look at this", name="hi", @@ -105,7 +107,7 @@ class OutboxView(TestCase): def test_outbox_bookwyrm_request_true(self, _): """should differentiate between bookwyrm and outside requests""" - with patch("bookwyrm.activitystreams.ActivityStream.add_status"): + with patch("bookwyrm.activitystreams.add_status_task.delay"): models.Review.objects.create( name="hi", content="look at this", @@ -123,7 +125,7 @@ class OutboxView(TestCase): def test_outbox_bookwyrm_request_false(self, _): """should differentiate between bookwyrm and outside requests""" - with patch("bookwyrm.activitystreams.ActivityStream.add_status"): + with patch("bookwyrm.activitystreams.add_status_task.delay"): models.Review.objects.create( name="hi", content="look at this", diff --git a/bookwyrm/tests/views/test_password.py b/bookwyrm/tests/views/test_password.py index 5f59e9e3..b07d98a7 100644 --- a/bookwyrm/tests/views/test_password.py +++ b/bookwyrm/tests/views/test_password.py @@ -15,7 +15,9 @@ class PasswordViews(TestCase): def setUp(self): """we need basic test data and mocks""" self.factory = RequestFactory() - with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"): + with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( + "bookwyrm.activitystreams.populate_stream_task.delay" + ): self.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.com", diff --git a/bookwyrm/tests/views/test_reading.py b/bookwyrm/tests/views/test_reading.py index 61464bc7..3f5846d0 100644 --- a/bookwyrm/tests/views/test_reading.py +++ b/bookwyrm/tests/views/test_reading.py @@ -8,15 +8,19 @@ from django.utils import timezone from bookwyrm import models, views -@patch("bookwyrm.activitystreams.ActivityStream.add_status") +@patch("bookwyrm.activitystreams.add_status_task.delay") @patch("bookwyrm.suggested_users.rerank_suggestions_task.delay") +@patch("bookwyrm.activitystreams.populate_stream_task.delay") +@patch("bookwyrm.activitystreams.add_book_statuses_task.delay") class ReadingViews(TestCase): """viewing and creating statuses""" def setUp(self): """we need basic test data and mocks""" self.factory = RequestFactory() - with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"): + with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( + "bookwyrm.activitystreams.populate_stream_task.delay" + ): self.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.com", @@ -73,7 +77,9 @@ class ReadingViews(TestCase): self.assertEqual(readthrough.user, self.local_user) self.assertEqual(readthrough.book, self.book) - def test_start_reading_reshelf(self, *_): + @patch("bookwyrm.activitystreams.add_book_statuses_task.delay") + @patch("bookwyrm.activitystreams.remove_book_statuses_task.delay") + def test_start_reading_reshelve(self, *_): """begin a book""" to_read_shelf = self.local_user.shelf_set.get(identifier=models.Shelf.TO_READ) with patch("bookwyrm.models.activitypub_mixin.broadcast_task.delay"): diff --git a/bookwyrm/tests/views/test_readthrough.py b/bookwyrm/tests/views/test_readthrough.py index 618d9cf8..ef149ce3 100644 --- a/bookwyrm/tests/views/test_readthrough.py +++ b/bookwyrm/tests/views/test_readthrough.py @@ -8,7 +8,10 @@ from bookwyrm import models @patch("bookwyrm.suggested_users.rerank_suggestions_task.delay") +@patch("bookwyrm.activitystreams.populate_stream_task.delay") @patch("bookwyrm.models.activitypub_mixin.broadcast_task.delay") +@patch("bookwyrm.activitystreams.add_book_statuses_task.delay") +@patch("bookwyrm.activitystreams.remove_book_statuses_task.delay") class ReadThrough(TestCase): """readthrough tests""" @@ -22,7 +25,9 @@ class ReadThrough(TestCase): title="Example Edition", parent_work=self.work ) - with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"): + with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( + "bookwyrm.activitystreams.populate_stream_task.delay" + ): self.user = models.User.objects.create_user( "cinco", "cinco@example.com", "seissiete", local=True, localname="cinco" ) @@ -30,7 +35,8 @@ 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, _): + @patch("bookwyrm.activitystreams.remove_user_statuses_task.delay") + def test_create_basic_readthrough(self, *_): """A basic readthrough doesn't create a progress update""" self.assertEqual(self.edition.readthrough_set.count(), 0) @@ -49,9 +55,9 @@ class ReadThrough(TestCase): ) self.assertEqual(readthroughs[0].progress, None) self.assertEqual(readthroughs[0].finish_date, None) - self.assertEqual(delay_mock.call_count, 1) - def test_create_progress_readthrough(self, delay_mock, _): + @patch("bookwyrm.activitystreams.remove_user_statuses_task.delay") + def test_create_progress_readthrough(self, *_): """a readthrough with progress""" self.assertEqual(self.edition.readthrough_set.count(), 0) @@ -86,8 +92,6 @@ class ReadThrough(TestCase): self.assertEqual(progress_updates[0].progress, 100) # Edit doesn't publish anything - self.assertEqual(delay_mock.call_count, 1) - self.client.post( "/delete-readthrough", { diff --git a/bookwyrm/tests/views/test_reports.py b/bookwyrm/tests/views/test_reports.py index 7d39a007..1b0b6008 100644 --- a/bookwyrm/tests/views/test_reports.py +++ b/bookwyrm/tests/views/test_reports.py @@ -13,7 +13,9 @@ class ReportViews(TestCase): def setUp(self): """we need basic test data and mocks""" self.factory = RequestFactory() - with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"): + with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( + "bookwyrm.activitystreams.populate_stream_task.delay" + ): self.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.mouse", @@ -117,6 +119,7 @@ class ReportViews(TestCase): self.assertFalse(report.resolved) @patch("bookwyrm.suggested_users.rerank_suggestions_task.delay") + @patch("bookwyrm.activitystreams.populate_stream_task.delay") @patch("bookwyrm.suggested_users.remove_user_task.delay") def test_suspend_user(self, *_): """toggle whether a user is able to log in""" diff --git a/bookwyrm/tests/views/test_rss_feed.py b/bookwyrm/tests/views/test_rss_feed.py index f2d3baf2..d4d11261 100644 --- a/bookwyrm/tests/views/test_rss_feed.py +++ b/bookwyrm/tests/views/test_rss_feed.py @@ -8,12 +8,14 @@ from bookwyrm.views import rss_feed @patch("bookwyrm.models.activitypub_mixin.broadcast_task.delay") @patch("bookwyrm.activitystreams.ActivityStream.get_activity_stream") -@patch("bookwyrm.activitystreams.ActivityStream.add_status") +@patch("bookwyrm.activitystreams.add_status_task.delay") class RssFeedView(TestCase): """rss feed behaves as expected""" def setUp(self): - with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"): + with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( + "bookwyrm.activitystreams.populate_stream_task.delay" + ): self.local_user = models.User.objects.create_user( "rss_user", "rss@test.rss", "password", local=True ) diff --git a/bookwyrm/tests/views/test_search.py b/bookwyrm/tests/views/test_search.py index 3da6f866..dacbcbde 100644 --- a/bookwyrm/tests/views/test_search.py +++ b/bookwyrm/tests/views/test_search.py @@ -19,7 +19,9 @@ class Views(TestCase): def setUp(self): """we need basic test data and mocks""" self.factory = RequestFactory() - with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"): + with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( + "bookwyrm.activitystreams.populate_stream_task.delay" + ): self.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.com", diff --git a/bookwyrm/tests/views/test_shelf.py b/bookwyrm/tests/views/test_shelf.py index 44c4b9cb..d873edc6 100644 --- a/bookwyrm/tests/views/test_shelf.py +++ b/bookwyrm/tests/views/test_shelf.py @@ -11,13 +11,18 @@ from bookwyrm.activitypub import ActivitypubResponse @patch("bookwyrm.models.activitypub_mixin.broadcast_task.delay") @patch("bookwyrm.suggested_users.rerank_suggestions_task.delay") +@patch("bookwyrm.activitystreams.populate_stream_task.delay") +@patch("bookwyrm.activitystreams.add_book_statuses_task.delay") +@patch("bookwyrm.activitystreams.remove_book_statuses_task.delay") class ShelfViews(TestCase): """tag views""" def setUp(self): """we need basic test data and mocks""" self.factory = RequestFactory() - with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"): + with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( + "bookwyrm.activitystreams.populate_stream_task.delay" + ): self.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.com", diff --git a/bookwyrm/tests/views/test_status.py b/bookwyrm/tests/views/test_status.py index 6c236b6d..c95d8417 100644 --- a/bookwyrm/tests/views/test_status.py +++ b/bookwyrm/tests/views/test_status.py @@ -10,6 +10,8 @@ from bookwyrm.settings import DOMAIN # pylint: disable=invalid-name @patch("bookwyrm.suggested_users.rerank_suggestions_task.delay") +@patch("bookwyrm.activitystreams.populate_stream_task.delay") +@patch("bookwyrm.activitystreams.remove_status_task.delay") @patch("bookwyrm.models.activitypub_mixin.broadcast_task.delay") class StatusViews(TestCase): """viewing and creating statuses""" @@ -17,7 +19,9 @@ class StatusViews(TestCase): def setUp(self): """we need basic test data and mocks""" self.factory = RequestFactory() - with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"): + with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( + "bookwyrm.activitystreams.populate_stream_task.delay" + ): self.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.com", @@ -59,9 +63,7 @@ class StatusViews(TestCase): request = self.factory.post("", form.data) request.user = self.local_user - with patch("bookwyrm.activitystreams.ActivityStream.add_status") as redis_mock: - view(request, "comment") - self.assertTrue(redis_mock.called) + view(request, "comment") status = models.Comment.objects.get() self.assertEqual(status.content, "
hi
") @@ -74,10 +76,9 @@ class StatusViews(TestCase): user = models.User.objects.create_user( "rat", "rat@rat.com", "password", local=True ) - with patch("bookwyrm.activitystreams.ActivityStream.add_status"): - parent = models.Status.objects.create( - content="parent status", user=self.local_user - ) + parent = models.Status.objects.create( + content="parent status", user=self.local_user + ) form = forms.ReplyForm( { "content": "hi", @@ -89,9 +90,7 @@ class StatusViews(TestCase): request = self.factory.post("", form.data) request.user = user - with patch("bookwyrm.activitystreams.ActivityStream.add_status") as redis_mock: - view(request, "reply") - self.assertTrue(redis_mock.called) + view(request, "reply") status = models.Status.objects.get(user=user) self.assertEqual(status.content, "hi
") @@ -119,9 +118,7 @@ class StatusViews(TestCase): request = self.factory.post("", form.data) request.user = self.local_user - with patch("bookwyrm.activitystreams.ActivityStream.add_status") as redis_mock: - view(request, "comment") - self.assertTrue(redis_mock.called) + view(request, "comment") status = models.Status.objects.get() self.assertEqual(list(status.mention_users.all()), [user]) @@ -147,9 +144,7 @@ class StatusViews(TestCase): request = self.factory.post("", form.data) request.user = self.local_user - with patch("bookwyrm.activitystreams.ActivityStream.add_status") as redis_mock: - view(request, "comment") - self.assertTrue(redis_mock.called) + view(request, "comment") status = models.Status.objects.get() form = forms.ReplyForm( @@ -163,9 +158,7 @@ class StatusViews(TestCase): request = self.factory.post("", form.data) request.user = user - with patch("bookwyrm.activitystreams.ActivityStream.add_status") as redis_mock: - view(request, "reply") - self.assertTrue(redis_mock.called) + view(request, "reply") reply = models.Status.replies(status).first() self.assertEqual(reply.content, "right
") @@ -179,14 +172,11 @@ class StatusViews(TestCase): view = views.DeleteAndRedraft.as_view() request = self.factory.post("") request.user = self.local_user - with patch("bookwyrm.activitystreams.ActivityStream.add_status"): - status = models.Comment.objects.create( - content="hi", book=self.book, user=self.local_user - ) + status = models.Comment.objects.create( + content="hi", book=self.book, user=self.local_user + ) - with patch( - "bookwyrm.activitystreams.ActivityStream.remove_object_from_related_stores" - ) as mock: + with patch("bookwyrm.activitystreams.remove_status_task.delay") as mock: result = view(request, status.id) self.assertTrue(mock.called) result.render() @@ -200,14 +190,12 @@ class StatusViews(TestCase): view = views.DeleteAndRedraft.as_view() request = self.factory.post("") request.user = self.local_user - with patch("bookwyrm.activitystreams.ActivityStream.add_status"): + with patch("bookwyrm.activitystreams.add_status_task.delay"): status = models.ReviewRating.objects.create( book=self.book, rating=2.0, user=self.local_user ) - with patch( - "bookwyrm.activitystreams.ActivityStream.remove_object_from_related_stores" - ) as mock: + with patch("bookwyrm.activitystreams.remove_status_task.delay") as mock: result = view(request, status.id) self.assertFalse(mock.called) self.assertEqual(result.status_code, 400) @@ -220,14 +208,12 @@ class StatusViews(TestCase): view = views.DeleteAndRedraft.as_view() request = self.factory.post("") request.user = self.local_user - with patch("bookwyrm.activitystreams.ActivityStream.add_status"): + with patch("bookwyrm.activitystreams.add_status_task.delay"): status = models.GeneratedNote.objects.create( content="hi", user=self.local_user ) - with patch( - "bookwyrm.activitystreams.ActivityStream.remove_object_from_related_stores" - ) as mock: + with patch("bookwyrm.activitystreams.remove_status_task.delay") as mock: result = view(request, status.id) self.assertFalse(mock.called) self.assertEqual(result.status_code, 400) @@ -365,15 +351,13 @@ http://www.fish.com/""" def test_handle_delete_status(self, mock, *_): """marks a status as deleted""" view = views.DeleteStatus.as_view() - with patch("bookwyrm.activitystreams.ActivityStream.add_status"): + with patch("bookwyrm.activitystreams.add_status_task.delay"): status = models.Status.objects.create(user=self.local_user, content="hi") self.assertFalse(status.deleted) request = self.factory.post("") request.user = self.local_user - with patch( - "bookwyrm.activitystreams.ActivityStream.remove_object_from_related_stores" - ) as redis_mock: + with patch("bookwyrm.activitystreams.remove_status_task.delay") as redis_mock: view(request, status.id) self.assertTrue(redis_mock.called) activity = json.loads(mock.call_args_list[1][0][1]) @@ -385,7 +369,7 @@ http://www.fish.com/""" def test_handle_delete_status_permission_denied(self, *_): """marks a status as deleted""" view = views.DeleteStatus.as_view() - with patch("bookwyrm.activitystreams.ActivityStream.add_status"): + with patch("bookwyrm.activitystreams.add_status_task.delay"): status = models.Status.objects.create(user=self.local_user, content="hi") self.assertFalse(status.deleted) request = self.factory.post("") @@ -396,19 +380,17 @@ http://www.fish.com/""" status.refresh_from_db() self.assertFalse(status.deleted) - def test_handle_delete_status_moderator(self, mock, _): + def test_handle_delete_status_moderator(self, mock, *_): """marks a status as deleted""" view = views.DeleteStatus.as_view() - with patch("bookwyrm.activitystreams.ActivityStream.add_status"): + with patch("bookwyrm.activitystreams.add_status_task.delay"): status = models.Status.objects.create(user=self.local_user, content="hi") self.assertFalse(status.deleted) request = self.factory.post("") request.user = self.remote_user request.user.is_superuser = True - with patch( - "bookwyrm.activitystreams.ActivityStream.remove_object_from_related_stores" - ) as redis_mock: + with patch("bookwyrm.activitystreams.remove_status_task.delay") as redis_mock: view(request, status.id) self.assertTrue(redis_mock.called) activity = json.loads(mock.call_args_list[1][0][1]) diff --git a/bookwyrm/tests/views/test_updates.py b/bookwyrm/tests/views/test_updates.py index 627b756e..27181fc9 100644 --- a/bookwyrm/tests/views/test_updates.py +++ b/bookwyrm/tests/views/test_updates.py @@ -15,7 +15,9 @@ class UpdateViews(TestCase): def setUp(self): """we need basic test data and mocks""" self.factory = RequestFactory() - with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"): + with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( + "bookwyrm.activitystreams.populate_stream_task.delay" + ): self.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.mouse", diff --git a/bookwyrm/tests/views/test_user.py b/bookwyrm/tests/views/test_user.py index 740f0d29..614f772d 100644 --- a/bookwyrm/tests/views/test_user.py +++ b/bookwyrm/tests/views/test_user.py @@ -17,7 +17,9 @@ class UserViews(TestCase): def setUp(self): """we need basic test data and mocks""" self.factory = RequestFactory() - with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"): + with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( + "bookwyrm.activitystreams.populate_stream_task.delay" + ): self.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.mouse", @@ -31,13 +33,14 @@ class UserViews(TestCase): self.book = models.Edition.objects.create( title="test", parent_work=models.Work.objects.create(title="test work") ) - with patch("bookwyrm.models.activitypub_mixin.broadcast_task.delay"): - 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(), - ) + with patch("bookwyrm.models.activitypub_mixin.broadcast_task.delay"), patch( + "bookwyrm.suggested_users.rerank_suggestions_task.delay" + ), patch("bookwyrm.activitystreams.add_book_statuses_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 @@ -99,7 +102,8 @@ class UserViews(TestCase): self.assertEqual(result.status_code, 200) @patch("bookwyrm.suggested_users.rerank_suggestions_task.delay") - def test_followers_page_blocked(self, _): + @patch("bookwyrm.activitystreams.populate_stream_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("") diff --git a/bookwyrm/tests/views/test_user_admin.py b/bookwyrm/tests/views/test_user_admin.py index 86309045..3917a6fd 100644 --- a/bookwyrm/tests/views/test_user_admin.py +++ b/bookwyrm/tests/views/test_user_admin.py @@ -14,7 +14,9 @@ class UserAdminViews(TestCase): def setUp(self): """we need basic test data and mocks""" self.factory = RequestFactory() - with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"): + with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( + "bookwyrm.activitystreams.populate_stream_task.delay" + ): self.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.mouse", @@ -49,6 +51,7 @@ class UserAdminViews(TestCase): self.assertEqual(result.status_code, 200) @patch("bookwyrm.suggested_users.rerank_suggestions_task.delay") + @patch("bookwyrm.activitystreams.populate_stream_task.delay") @patch("bookwyrm.suggested_users.remove_user_task.delay") def test_user_admin_page_post(self, *_): """set the user's group""" diff --git a/bookwyrm/tests/views/test_wellknown.py b/bookwyrm/tests/views/test_wellknown.py index fcbcc12b..7aca0236 100644 --- a/bookwyrm/tests/views/test_wellknown.py +++ b/bookwyrm/tests/views/test_wellknown.py @@ -16,7 +16,9 @@ class UserViews(TestCase): def setUp(self): """we need basic test data and mocks""" self.factory = RequestFactory() - with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"): + with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch( + "bookwyrm.activitystreams.populate_stream_task.delay" + ): self.local_user = models.User.objects.create_user( "mouse@local.com", "mouse@mouse.mouse",