Adds tests for status recipients property
This commit is contained in:
		| @@ -12,15 +12,26 @@ from django.utils import timezone | ||||
| from bookwyrm import models, settings | ||||
|  | ||||
|  | ||||
| # pylint: disable=too-many-public-methods | ||||
| @patch("bookwyrm.models.Status.broadcast") | ||||
| class Status(TestCase): | ||||
|     """ lotta types of statuses """ | ||||
|  | ||||
|     def setUp(self): | ||||
|         """ useful things for creating a status """ | ||||
|         self.user = models.User.objects.create_user( | ||||
|         self.local_user = models.User.objects.create_user( | ||||
|             "mouse", "mouse@mouse.mouse", "mouseword", local=True, localname="mouse" | ||||
|         ) | ||||
|         with patch("bookwyrm.models.user.set_remote_server.delay"): | ||||
|             self.remote_user = models.User.objects.create_user( | ||||
|                 "rat", | ||||
|                 "rat@rat.com", | ||||
|                 "ratword", | ||||
|                 local=False, | ||||
|                 remote_id="https://example.com/users/rat", | ||||
|                 inbox="https://example.com/users/rat/inbox", | ||||
|                 outbox="https://example.com/users/rat/outbox", | ||||
|             ) | ||||
|         self.book = models.Edition.objects.create(title="Test Edition") | ||||
|  | ||||
|         image_file = pathlib.Path(__file__).parent.joinpath( | ||||
| @@ -34,22 +45,22 @@ class Status(TestCase): | ||||
|  | ||||
|     def test_status_generated_fields(self, _): | ||||
|         """ setting remote id """ | ||||
|         status = models.Status.objects.create(content="bleh", user=self.user) | ||||
|         status = models.Status.objects.create(content="bleh", user=self.local_user) | ||||
|         expected_id = "https://%s/user/mouse/status/%d" % (settings.DOMAIN, status.id) | ||||
|         self.assertEqual(status.remote_id, expected_id) | ||||
|         self.assertEqual(status.privacy, "public") | ||||
|  | ||||
|     def test_replies(self, _): | ||||
|         """ get a list of replies """ | ||||
|         parent = models.Status.objects.create(content="hi", user=self.user) | ||||
|         parent = models.Status.objects.create(content="hi", user=self.local_user) | ||||
|         child = models.Status.objects.create( | ||||
|             content="hello", reply_parent=parent, user=self.user | ||||
|             content="hello", reply_parent=parent, user=self.local_user | ||||
|         ) | ||||
|         models.Review.objects.create( | ||||
|             content="hey", reply_parent=parent, user=self.user, book=self.book | ||||
|             content="hey", reply_parent=parent, user=self.local_user, book=self.book | ||||
|         ) | ||||
|         models.Status.objects.create( | ||||
|             content="hi hello", reply_parent=child, user=self.user | ||||
|             content="hi hello", reply_parent=child, user=self.local_user | ||||
|         ) | ||||
|  | ||||
|         replies = models.Status.replies(parent) | ||||
| @@ -75,15 +86,15 @@ class Status(TestCase): | ||||
|  | ||||
|     def test_to_replies(self, _): | ||||
|         """ activitypub replies collection """ | ||||
|         parent = models.Status.objects.create(content="hi", user=self.user) | ||||
|         parent = models.Status.objects.create(content="hi", user=self.local_user) | ||||
|         child = models.Status.objects.create( | ||||
|             content="hello", reply_parent=parent, user=self.user | ||||
|             content="hello", reply_parent=parent, user=self.local_user | ||||
|         ) | ||||
|         models.Review.objects.create( | ||||
|             content="hey", reply_parent=parent, user=self.user, book=self.book | ||||
|             content="hey", reply_parent=parent, user=self.local_user, book=self.book | ||||
|         ) | ||||
|         models.Status.objects.create( | ||||
|             content="hi hello", reply_parent=child, user=self.user | ||||
|             content="hi hello", reply_parent=child, user=self.local_user | ||||
|         ) | ||||
|  | ||||
|         replies = parent.to_replies() | ||||
| @@ -92,7 +103,9 @@ class Status(TestCase): | ||||
|  | ||||
|     def test_status_to_activity(self, _): | ||||
|         """ subclass of the base model version with a "pure" serializer """ | ||||
|         status = models.Status.objects.create(content="test content", user=self.user) | ||||
|         status = models.Status.objects.create( | ||||
|             content="test content", user=self.local_user | ||||
|         ) | ||||
|         activity = status.to_activity() | ||||
|         self.assertEqual(activity["id"], status.remote_id) | ||||
|         self.assertEqual(activity["type"], "Note") | ||||
| @@ -103,7 +116,7 @@ class Status(TestCase): | ||||
|         """ subclass of the base model version with a "pure" serializer """ | ||||
|         status = models.Status.objects.create( | ||||
|             content="test content", | ||||
|             user=self.user, | ||||
|             user=self.local_user, | ||||
|             deleted=True, | ||||
|             deleted_date=timezone.now(), | ||||
|         ) | ||||
| @@ -114,7 +127,9 @@ class Status(TestCase): | ||||
|  | ||||
|     def test_status_to_pure_activity(self, _): | ||||
|         """ subclass of the base model version with a "pure" serializer """ | ||||
|         status = models.Status.objects.create(content="test content", user=self.user) | ||||
|         status = models.Status.objects.create( | ||||
|             content="test content", user=self.local_user | ||||
|         ) | ||||
|         activity = status.to_activity(pure=True) | ||||
|         self.assertEqual(activity["id"], status.remote_id) | ||||
|         self.assertEqual(activity["type"], "Note") | ||||
| @@ -125,10 +140,10 @@ class Status(TestCase): | ||||
|     def test_generated_note_to_activity(self, _): | ||||
|         """ subclass of the base model version with a "pure" serializer """ | ||||
|         status = models.GeneratedNote.objects.create( | ||||
|             content="test content", user=self.user | ||||
|             content="test content", user=self.local_user | ||||
|         ) | ||||
|         status.mention_books.set([self.book]) | ||||
|         status.mention_users.set([self.user]) | ||||
|         status.mention_users.set([self.local_user]) | ||||
|         activity = status.to_activity() | ||||
|         self.assertEqual(activity["id"], status.remote_id) | ||||
|         self.assertEqual(activity["type"], "GeneratedNote") | ||||
| @@ -139,10 +154,10 @@ class Status(TestCase): | ||||
|     def test_generated_note_to_pure_activity(self, _): | ||||
|         """ subclass of the base model version with a "pure" serializer """ | ||||
|         status = models.GeneratedNote.objects.create( | ||||
|             content="test content", user=self.user | ||||
|             content="test content", user=self.local_user | ||||
|         ) | ||||
|         status.mention_books.set([self.book]) | ||||
|         status.mention_users.set([self.user]) | ||||
|         status.mention_users.set([self.local_user]) | ||||
|         activity = status.to_activity(pure=True) | ||||
|         self.assertEqual(activity["id"], status.remote_id) | ||||
|         self.assertEqual( | ||||
| @@ -163,7 +178,7 @@ class Status(TestCase): | ||||
|     def test_comment_to_activity(self, _): | ||||
|         """ subclass of the base model version with a "pure" serializer """ | ||||
|         status = models.Comment.objects.create( | ||||
|             content="test content", user=self.user, book=self.book | ||||
|             content="test content", user=self.local_user, book=self.book | ||||
|         ) | ||||
|         activity = status.to_activity() | ||||
|         self.assertEqual(activity["id"], status.remote_id) | ||||
| @@ -174,7 +189,7 @@ class Status(TestCase): | ||||
|     def test_comment_to_pure_activity(self, _): | ||||
|         """ subclass of the base model version with a "pure" serializer """ | ||||
|         status = models.Comment.objects.create( | ||||
|             content="test content", user=self.user, book=self.book | ||||
|             content="test content", user=self.local_user, book=self.book | ||||
|         ) | ||||
|         activity = status.to_activity(pure=True) | ||||
|         self.assertEqual(activity["id"], status.remote_id) | ||||
| @@ -196,7 +211,7 @@ class Status(TestCase): | ||||
|         status = models.Quotation.objects.create( | ||||
|             quote="a sickening sense", | ||||
|             content="test content", | ||||
|             user=self.user, | ||||
|             user=self.local_user, | ||||
|             book=self.book, | ||||
|         ) | ||||
|         activity = status.to_activity() | ||||
| @@ -211,7 +226,7 @@ class Status(TestCase): | ||||
|         status = models.Quotation.objects.create( | ||||
|             quote="a sickening sense", | ||||
|             content="test content", | ||||
|             user=self.user, | ||||
|             user=self.local_user, | ||||
|             book=self.book, | ||||
|         ) | ||||
|         activity = status.to_activity(pure=True) | ||||
| @@ -235,7 +250,7 @@ class Status(TestCase): | ||||
|             name="Review name", | ||||
|             content="test content", | ||||
|             rating=3, | ||||
|             user=self.user, | ||||
|             user=self.local_user, | ||||
|             book=self.book, | ||||
|         ) | ||||
|         activity = status.to_activity() | ||||
| @@ -252,7 +267,7 @@ class Status(TestCase): | ||||
|             name="Review name", | ||||
|             content="test content", | ||||
|             rating=3, | ||||
|             user=self.user, | ||||
|             user=self.local_user, | ||||
|             book=self.book, | ||||
|         ) | ||||
|         activity = status.to_activity(pure=True) | ||||
| @@ -275,30 +290,34 @@ class Status(TestCase): | ||||
|  | ||||
|         def fav_broadcast_mock(_, activity, user): | ||||
|             """ ok """ | ||||
|             self.assertEqual(user.remote_id, self.user.remote_id) | ||||
|             self.assertEqual(user.remote_id, self.local_user.remote_id) | ||||
|             self.assertEqual(activity["type"], "Like") | ||||
|  | ||||
|         models.Favorite.broadcast = fav_broadcast_mock | ||||
|  | ||||
|         status = models.Status.objects.create(content="test content", user=self.user) | ||||
|         fav = models.Favorite.objects.create(status=status, user=self.user) | ||||
|         status = models.Status.objects.create( | ||||
|             content="test content", user=self.local_user | ||||
|         ) | ||||
|         fav = models.Favorite.objects.create(status=status, user=self.local_user) | ||||
|  | ||||
|         # can't fav a status twice | ||||
|         with self.assertRaises(IntegrityError): | ||||
|             models.Favorite.objects.create(status=status, user=self.user) | ||||
|             models.Favorite.objects.create(status=status, user=self.local_user) | ||||
|  | ||||
|         activity = fav.to_activity() | ||||
|         self.assertEqual(activity["type"], "Like") | ||||
|         self.assertEqual(activity["actor"], self.user.remote_id) | ||||
|         self.assertEqual(activity["actor"], self.local_user.remote_id) | ||||
|         self.assertEqual(activity["object"], status.remote_id) | ||||
|         models.Favorite.broadcast = real_broadcast | ||||
|  | ||||
|     def test_boost(self, _): | ||||
|         """ boosting, this one's a bit fussy """ | ||||
|         status = models.Status.objects.create(content="test content", user=self.user) | ||||
|         boost = models.Boost.objects.create(boosted_status=status, user=self.user) | ||||
|         status = models.Status.objects.create( | ||||
|             content="test content", user=self.local_user | ||||
|         ) | ||||
|         boost = models.Boost.objects.create(boosted_status=status, user=self.local_user) | ||||
|         activity = boost.to_activity() | ||||
|         self.assertEqual(activity["actor"], self.user.remote_id) | ||||
|         self.assertEqual(activity["actor"], self.local_user.remote_id) | ||||
|         self.assertEqual(activity["object"], status.remote_id) | ||||
|         self.assertEqual(activity["type"], "Announce") | ||||
|         self.assertEqual(activity, boost.to_activity(pure=True)) | ||||
| @@ -306,18 +325,20 @@ class Status(TestCase): | ||||
|     def test_notification(self, _): | ||||
|         """ a simple model """ | ||||
|         notification = models.Notification.objects.create( | ||||
|             user=self.user, notification_type="FAVORITE" | ||||
|             user=self.local_user, notification_type="FAVORITE" | ||||
|         ) | ||||
|         self.assertFalse(notification.read) | ||||
|  | ||||
|         with self.assertRaises(IntegrityError): | ||||
|             models.Notification.objects.create( | ||||
|                 user=self.user, notification_type="GLORB" | ||||
|                 user=self.local_user, notification_type="GLORB" | ||||
|             ) | ||||
|  | ||||
|     def test_create_broadcast(self, broadcast_mock): | ||||
|         """ should send out two verions of a status on create """ | ||||
|         models.Comment.objects.create(content="hi", user=self.user, book=self.book) | ||||
|         models.Comment.objects.create( | ||||
|             content="hi", user=self.local_user, book=self.book | ||||
|         ) | ||||
|         self.assertEqual(broadcast_mock.call_count, 2) | ||||
|         pure_call = broadcast_mock.call_args_list[0] | ||||
|         bw_call = broadcast_mock.call_args_list[1] | ||||
| @@ -332,3 +353,35 @@ class Status(TestCase): | ||||
|         args = bw_call[0][0] | ||||
|         self.assertEqual(args["type"], "Create") | ||||
|         self.assertEqual(args["object"]["type"], "Comment") | ||||
|  | ||||
|     def test_recipients_with_mentions(self, _): | ||||
|         """ get recipients to broadcast a status """ | ||||
|         status = models.GeneratedNote.objects.create( | ||||
|             content="test content", user=self.local_user | ||||
|         ) | ||||
|         status.mention_users.add(self.remote_user) | ||||
|  | ||||
|         self.assertEqual(status.recipients, [self.remote_user]) | ||||
|  | ||||
|     def test_recipients_with_reply_parent(self, _): | ||||
|         """ get recipients to broadcast a status """ | ||||
|         parent_status = models.GeneratedNote.objects.create( | ||||
|             content="test content", user=self.remote_user | ||||
|         ) | ||||
|         status = models.GeneratedNote.objects.create( | ||||
|             content="test content", user=self.local_user, reply_parent=parent_status | ||||
|         ) | ||||
|  | ||||
|         self.assertEqual(status.recipients, [self.remote_user]) | ||||
|  | ||||
|     def test_recipients_with_reply_parent_and_mentions(self, _): | ||||
|         """ get recipients to broadcast a status """ | ||||
|         parent_status = models.GeneratedNote.objects.create( | ||||
|             content="test content", user=self.remote_user | ||||
|         ) | ||||
|         status = models.GeneratedNote.objects.create( | ||||
|             content="test content", user=self.local_user, reply_parent=parent_status | ||||
|         ) | ||||
|         status.mention_users.set([self.remote_user]) | ||||
|  | ||||
|         self.assertEqual(status.recipients, [self.remote_user]) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user