From 303ea175cf62f9457140d0a9b1f38dbed4da5610 Mon Sep 17 00:00:00 2001 From: Ryan Barrett Date: Wed, 14 Aug 2024 13:07:03 -0700 Subject: [PATCH] Protocol.receive: more undo handling, mark object as deleted also add undo test for #1243 --- protocol.py | 3 +-- tests/test_protocol.py | 32 +++++++++++++++++++++++++++++++- 2 files changed, 32 insertions(+), 3 deletions(-) diff --git a/protocol.py b/protocol.py index 2ff65e6..c23202d 100644 --- a/protocol.py +++ b/protocol.py @@ -904,8 +904,7 @@ class Protocol: # fall through to deliver to followers - # TODO: add undo here, test for it - elif obj.type == 'delete': + elif obj.type in ('delete', 'undo'): if not inner_obj_id: error("Couldn't find id of object to delete") diff --git a/tests/test_protocol.py b/tests/test_protocol.py index 2dda611..97b6538 100644 --- a/tests/test_protocol.py +++ b/tests/test_protocol.py @@ -2240,7 +2240,7 @@ class ProtocolReceiveTest(TestCase): 'actor': 'fake:user', 'object': 'other:eve', } - self.store_object(id='fake:block', our_as1=block) + self.store_object(id='fake:block', our_as1=block, source_protocol='fake') self.assertEqual(('OK', 202), Fake.receive_as1({ 'objectType': 'activity', @@ -2251,6 +2251,36 @@ class ProtocolReceiveTest(TestCase): })) self.assertEqual([('fake:undo', 'fake:block:target')], Fake.sent) + def test_undo_repost(self): + self.make_followers() + + self.store_object(id='fake:post', source_protocol='fake', our_as1={ + 'objectType': 'note', + 'id': 'fake:post', + 'actor': 'fake:user', + }) + self.store_object(id='fake:repost', source_protocol='fake', our_as1={ + 'objectType': 'activity', + 'verb': 'share', + 'id': 'fake:repost', + 'actor': 'fake:user', + 'object': 'fake:post', + }) + + self.assertEqual(('OK', 202), Fake.receive_as1({ + 'objectType': 'activity', + 'verb': 'undo', + 'id': 'fake:undo', + 'actor': 'fake:user', + 'object': 'fake:repost', + })) + self.assertTrue(Object.get_by_id('fake:repost').deleted) + self.assertEqual([ + ('fake:undo', 'fake:post:target'), + ('fake:undo', 'fake:repost:target'), + ('fake:undo', 'fake:shared:target'), + ], Fake.sent) + @skip def test_from_bridgy_fed_domain_fails(self): with self.assertRaises(BadRequest):