Mercurial > libervia-backend
diff tests/unit/test_ap-gateway.py @ 4259:49019947cc76
component AP Gateway: implement HTTP GET signature.
author | Goffi <goffi@goffi.org> |
---|---|
date | Wed, 05 Jun 2024 22:34:09 +0200 |
parents | 716dd791be46 |
children | f1d0cde61af7 |
line wrap: on
line diff
--- a/tests/unit/test_ap-gateway.py Wed Jun 05 22:33:37 2024 +0200 +++ b/tests/unit/test_ap-gateway.py Wed Jun 05 22:34:09 2024 +0200 @@ -339,7 +339,11 @@ AP_REQUESTS[item["id"]] = item -async def mock_ap_get(url): +async def mock_treq_get(url): + return deepcopy(AP_REQUESTS[url]) + + +async def mock_ap_get(url, requestor_actor_id): return deepcopy(AP_REQUESTS[url]) @@ -514,13 +518,15 @@ @ed async def test_ap_to_pubsub_conversion(self, ap_gateway, monkeypatch): """AP requests are converted to pubsub""" - monkeypatch.setattr(plugin_comp_ap_gateway.treq, "get", mock_ap_get) + monkeypatch.setattr(plugin_comp_ap_gateway.treq, "get", mock_treq_get) monkeypatch.setattr(plugin_comp_ap_gateway.treq, "json_content", mock_treq_json) monkeypatch.setattr(ap_gateway, "ap_get", mock_ap_get) - actor_data = await ap_gateway.get_ap_actor_data_from_account(TEST_AP_ACCOUNT) - outbox = await ap_gateway.ap_get_object(actor_data, "outbox") - items, rsm_resp = await ap_gateway.get_ap_items(outbox, 2) + actor_data = await ap_gateway.get_ap_actor_data_from_account( + TEST_AP_ACTOR_ID, TEST_AP_ACCOUNT + ) + outbox = await ap_gateway.ap_get_object(TEST_AP_ACTOR_ID, actor_data, "outbox") + items, rsm_resp = await ap_gateway.get_ap_items(TEST_AP_ACTOR_ID, outbox, 2) assert rsm_resp.count == 4 assert rsm_resp.index == 0 @@ -552,6 +558,7 @@ assert str(items[1].entry.published) == "2021-12-16T17:26:03Z" items, rsm_resp = await ap_gateway.get_ap_items( + TEST_AP_ACTOR_ID, outbox, max_items=2, after_id="https://example.org/users/test_user/statuses/3", @@ -586,7 +593,9 @@ assert author_uri == "xmpp:test_user\\40example.org@ap.test.example" assert str(items[1].entry.published) == "2021-12-16T17:28:03Z" - items, rsm_resp = await ap_gateway.get_ap_items(outbox, max_items=1, start_index=2) + items, rsm_resp = await ap_gateway.get_ap_items( + TEST_AP_ACTOR_ID, outbox, max_items=1, start_index=2 + ) assert rsm_resp.count == 4 assert rsm_resp.index == 2 @@ -603,7 +612,7 @@ assert str(items[0].entry.published) == "2021-12-16T17:27:03Z" items, rsm_resp = await ap_gateway.get_ap_items( - outbox, max_items=3, chronological_pagination=False + TEST_AP_ACTOR_ID, outbox, max_items=3, chronological_pagination=False ) assert rsm_resp.count == 4 assert rsm_resp.index == 1 @@ -670,6 +679,8 @@ "ap_url": ap_url, "signing_actor": signing_actor, } + if type_ not in (ap_const.TYPE_ACTOR, "outbox", "following", "followers"): + kwargs["requestor_actor_id"] = TEST_AP_ACTOR_ID if type_ == "outbox" and query_data: kwargs["query_data"] = query_data # signing_actor is not used for page requests @@ -722,7 +733,7 @@ @ed async def test_following_to_pps(self, ap_gateway, monkeypatch): """AP following items are converted to Public Pubsub Subscription subscriptions""" - monkeypatch.setattr(plugin_comp_ap_gateway.treq, "get", mock_ap_get) + monkeypatch.setattr(plugin_comp_ap_gateway.treq, "get", mock_treq_get) monkeypatch.setattr(plugin_comp_ap_gateway.treq, "json_content", mock_treq_json) monkeypatch.setattr(ap_gateway, "ap_get", mock_ap_get) @@ -746,7 +757,7 @@ @ed async def test_followers_to_pps(self, ap_gateway, monkeypatch): """AP followers items are converted to Public Pubsub Subscription subscribers""" - monkeypatch.setattr(plugin_comp_ap_gateway.treq, "get", mock_ap_get) + monkeypatch.setattr(plugin_comp_ap_gateway.treq, "get", mock_treq_get) monkeypatch.setattr(plugin_comp_ap_gateway.treq, "json_content", mock_treq_json) monkeypatch.setattr(ap_gateway, "ap_get", mock_ap_get) @@ -846,7 +857,7 @@ @ed async def test_xmpp_message_to_ap_direct_message(self, ap_gateway, monkeypatch): """XMPP message are sent as AP direct message""" - monkeypatch.setattr(plugin_comp_ap_gateway.treq, "get", mock_ap_get) + monkeypatch.setattr(plugin_comp_ap_gateway.treq, "get", mock_treq_get) monkeypatch.setattr(plugin_comp_ap_gateway.treq, "json_content", mock_treq_json) monkeypatch.setattr(ap_gateway, "ap_get", mock_ap_get) mess_data = { @@ -856,9 +867,9 @@ "message": {"": "This is a test message."}, "extra": {"origin-id": "123"}, } - with patch.object(ap_gateway, "sign_and_post") as sign_and_post: - await ap_gateway.onMessage(ap_gateway.client, mess_data) - url, actor_id, doc = sign_and_post.call_args[0] + with patch.object(ap_gateway, "ap_post") as ap_post: + await ap_gateway.on_message(ap_gateway.client, mess_data) + url, actor_id, doc = ap_post.call_args[0] assert url == "https://example.org/users/test_user/inbox" assert actor_id == "https://test.example/_ap/actor/some_user@test.example" obj = doc["object"] @@ -880,7 +891,7 @@ @ed async def test_ap_direct_message_to_xmpp_message(self, ap_gateway, monkeypatch): """AP direct message are sent as XMPP message (not Pubsub)""" - monkeypatch.setattr(plugin_comp_ap_gateway.treq, "get", mock_ap_get) + monkeypatch.setattr(plugin_comp_ap_gateway.treq, "get", mock_treq_get) monkeypatch.setattr(plugin_comp_ap_gateway.treq, "json_content", mock_treq_json) monkeypatch.setattr(ap_gateway, "ap_get", mock_ap_get) # we have to patch DeferredList to not wait forever @@ -914,7 +925,7 @@ @ed async def test_pubsub_retract_to_ap_delete(self, ap_gateway, monkeypatch): """Pubsub retract requests are converted to AP delete activity""" - monkeypatch.setattr(plugin_comp_ap_gateway.treq, "get", mock_ap_get) + monkeypatch.setattr(plugin_comp_ap_gateway.treq, "get", mock_treq_get) monkeypatch.setattr(plugin_comp_ap_gateway.treq, "json_content", mock_treq_json) monkeypatch.setattr(ap_gateway, "ap_get", mock_ap_get) retract_id = "retract_123" @@ -927,11 +938,11 @@ items=[retract_elt], headers={}, ) - with patch.object(ap_gateway, "sign_and_post") as sign_and_post: - sign_and_post.return_value = FakeTReqPostResponse() + with patch.object(ap_gateway, "ap_post") as ap_post: + ap_post.return_value = FakeTReqPostResponse() # we simulate the reception of a retract event await ap_gateway._items_received(ap_gateway.client, items_event) - url, actor_id, doc = sign_and_post.call_args[0] + url, actor_id, doc = ap_post.call_args[0] jid_account = await ap_gateway.get_ap_account_from_jid_and_node(TEST_JID, None) jid_actor_id = ap_gateway.build_apurl(ap_const.TYPE_ACTOR, jid_account) assert url == f"{TEST_BASE_URL}/inbox" @@ -1004,7 +1015,7 @@ @ed async def test_message_retract_to_ap_delete(self, ap_gateway, monkeypatch): """Message retract requests are converted to AP delete activity""" - monkeypatch.setattr(plugin_comp_ap_gateway.treq, "get", mock_ap_get) + monkeypatch.setattr(plugin_comp_ap_gateway.treq, "get", mock_treq_get) monkeypatch.setattr(plugin_comp_ap_gateway.treq, "json_content", mock_treq_json) monkeypatch.setattr(ap_gateway, "ap_get", mock_ap_get) # origin ID is the ID of the message to retract @@ -1021,8 +1032,8 @@ message_retract_elt = fake_client.send.call_args.args[0] retract_elt = next(message_retract_elt.elements(NS_MESSAGE_RETRACT, "retract")) - with patch.object(ap_gateway, "sign_and_post") as sign_and_post: - sign_and_post.return_value = FakeTReqPostResponse() + with patch.object(ap_gateway, "ap_post") as ap_post: + ap_post.return_value = FakeTReqPostResponse() fake_fastened_elts = MagicMock() fake_fastened_elts.id = origin_id # we simulate the reception of a retract event using the message element that @@ -1030,9 +1041,9 @@ await ap_gateway._on_message_retract( ap_gateway.client, message_retract_elt, retract_elt, fake_fastened_elts ) - url, actor_id, doc = sign_and_post.call_args[0] + url, actor_id, doc = ap_post.call_args[0] - # the AP delete activity must have been sent through sign_and_post + # the AP delete activity must have been sent through ap_post # we check its values jid_account = await ap_gateway.get_ap_account_from_jid_and_node(TEST_JID, None) jid_actor_id = ap_gateway.build_apurl(ap_const.TYPE_ACTOR, jid_account) @@ -1101,7 +1112,7 @@ @ed async def test_ap_actor_metadata_to_vcard(self, ap_gateway, monkeypatch): """AP actor metadata are converted to XMPP/vCard4""" - monkeypatch.setattr(plugin_comp_ap_gateway.treq, "get", mock_ap_get) + monkeypatch.setattr(plugin_comp_ap_gateway.treq, "get", mock_treq_get) monkeypatch.setattr(plugin_comp_ap_gateway.treq, "json_content", mock_treq_json) monkeypatch.setattr(ap_gateway, "ap_get", mock_ap_get) @@ -1141,7 +1152,7 @@ @ed async def test_direct_addressing_mention_to_reference(self, ap_gateway, monkeypatch): """AP mentions by direct addressing are converted to XEP-0372 references""" - monkeypatch.setattr(plugin_comp_ap_gateway.treq, "get", mock_ap_get) + monkeypatch.setattr(plugin_comp_ap_gateway.treq, "get", mock_treq_get) monkeypatch.setattr(plugin_comp_ap_gateway.treq, "json_content", mock_treq_json) monkeypatch.setattr(ap_gateway, "ap_get", mock_ap_get) @@ -1182,7 +1193,7 @@ @ed async def test_tag_mention_to_reference(self, ap_gateway, monkeypatch): """AP mentions in "tag" field are converted to XEP-0372 references""" - monkeypatch.setattr(plugin_comp_ap_gateway.treq, "get", mock_ap_get) + monkeypatch.setattr(plugin_comp_ap_gateway.treq, "get", mock_treq_get) monkeypatch.setattr(plugin_comp_ap_gateway.treq, "json_content", mock_treq_json) monkeypatch.setattr(ap_gateway, "ap_get", mock_ap_get) @@ -1224,7 +1235,7 @@ @ed async def test_auto_mentions(self, ap_gateway, monkeypatch): """Check that mentions in body are converted to AP mentions""" - monkeypatch.setattr(plugin_comp_ap_gateway.treq, "get", mock_ap_get) + monkeypatch.setattr(plugin_comp_ap_gateway.treq, "get", mock_treq_get) monkeypatch.setattr(plugin_comp_ap_gateway.treq, "json_content", mock_treq_json) monkeypatch.setattr(ap_gateway, "ap_get", mock_ap_get) @@ -1252,7 +1263,7 @@ """Check that no mention is send when the message is not public""" # this is the same test as test_auto_mentions above, except that public is not set # in mb_data_2_ap_item - monkeypatch.setattr(plugin_comp_ap_gateway.treq, "get", mock_ap_get) + monkeypatch.setattr(plugin_comp_ap_gateway.treq, "get", mock_treq_get) monkeypatch.setattr(plugin_comp_ap_gateway.treq, "json_content", mock_treq_json) monkeypatch.setattr(ap_gateway, "ap_get", mock_ap_get) @@ -1273,7 +1284,7 @@ @ed async def test_xmpp_reference_to_ap_mention(self, ap_gateway, monkeypatch): """Check that XEP-0372 references are converted to AP mention""" - monkeypatch.setattr(plugin_comp_ap_gateway.treq, "get", mock_ap_get) + monkeypatch.setattr(plugin_comp_ap_gateway.treq, "get", mock_treq_get) monkeypatch.setattr(plugin_comp_ap_gateway.treq, "json_content", mock_treq_json) monkeypatch.setattr(ap_gateway, "ap_get", mock_ap_get) @@ -1312,16 +1323,16 @@ mock_pubsub_item = MagicMock mock_pubsub_item.data = item_elt get_items.return_value = ([mock_pubsub_item], {}) - with patch.object(ap_gateway, "sign_and_post") as sign_and_post: - sign_and_post.return_value.code = 202 + with patch.object(ap_gateway, "ap_post") as ap_post: + ap_post.return_value.code = 202 await ap_gateway._on_reference_received( ap_gateway.client, message_elt, ref_data ) # when reference is received, the referencing item must be sent to referenced # actor, and they must be in "to" field and in "tag" - assert sign_and_post.call_count == 1 - send_ap_item = sign_and_post.call_args.args[-1] + assert ap_post.call_count == 1 + send_ap_item = ap_post.call_args.args[-1] ap_object = send_ap_item["object"] assert TEST_AP_ACTOR_ID in ap_object["to"] expected_mention = { @@ -1336,7 +1347,7 @@ @ed async def test_xmpp_repeat_to_ap_announce(self, ap_gateway, monkeypatch): """XEP-0272 post repeat is converted to AP Announce activity""" - monkeypatch.setattr(plugin_comp_ap_gateway.treq, "get", mock_ap_get) + monkeypatch.setattr(plugin_comp_ap_gateway.treq, "get", mock_treq_get) monkeypatch.setattr(plugin_comp_ap_gateway.treq, "json_content", mock_treq_json) monkeypatch.setattr(ap_gateway, "ap_get", mock_ap_get) @@ -1374,8 +1385,8 @@ ) item_elt.uri = pubsub.NS_PUBSUB_EVENT - with patch.object(ap_gateway, "sign_and_post") as sign_and_post: - sign_and_post.return_value.code = 202 + with patch.object(ap_gateway, "ap_post") as ap_post: + ap_post.return_value.code = 202 await ap_gateway.convert_and_post_items( ap_gateway.client, TEST_AP_ACCOUNT, @@ -1384,8 +1395,8 @@ [item_elt], ) - assert sign_and_post.called - url, actor_id, doc = sign_and_post.call_args.args + assert ap_post.called + url, actor_id, doc = ap_post.call_args.args assert url == TEST_USER_DATA["endpoints"]["sharedInbox"] assert actor_id == ap_gateway.build_apurl(ap_const.TYPE_ACTOR, TEST_JID.userhost()) assert doc["type"] == "Announce" @@ -1395,7 +1406,7 @@ @ed async def test_ap_announce_to_xmpp_repeat(self, ap_gateway, monkeypatch): """AP Announce activity is converted to XEP-0272 post repeat""" - monkeypatch.setattr(plugin_comp_ap_gateway.treq, "get", mock_ap_get) + monkeypatch.setattr(plugin_comp_ap_gateway.treq, "get", mock_treq_get) monkeypatch.setattr(plugin_comp_ap_gateway.treq, "json_content", mock_treq_json) monkeypatch.setattr(ap_gateway, "ap_get", mock_ap_get) @@ -1423,7 +1434,8 @@ ap_gateway.host.memory.storage, "cache_pubsub_items" ) as cache_pubsub_items: await ap_gateway.server.resource.handle_announce_activity( - Request(MagicMock()), announce, None, None, None, "", TEST_AP_ACTOR_ID + TEST_AP_ACTOR_ID, Request(MagicMock()), announce, None, None, None, + "", TEST_AP_ACTOR_ID ) assert cache_pubsub_items.called @@ -1444,7 +1456,7 @@ @ed async def test_xmpp_attachment_noticed_to_ap_like(self, ap_gateway, monkeypatch): """Pubsub-attachments ``noticed`` is converted to AP Like activity""" - monkeypatch.setattr(plugin_comp_ap_gateway.treq, "get", mock_ap_get) + monkeypatch.setattr(plugin_comp_ap_gateway.treq, "get", mock_treq_get) monkeypatch.setattr(plugin_comp_ap_gateway.treq, "json_content", mock_treq_json) monkeypatch.setattr(ap_gateway, "ap_get", mock_ap_get) @@ -1468,12 +1480,12 @@ TEST_JID, recipient_jid, attachment_node, [item_elt], {} ) - with patch.object(ap_gateway, "sign_and_post") as sign_and_post: - sign_and_post.return_value.code = 202 + with patch.object(ap_gateway, "ap_post") as ap_post: + ap_post.return_value.code = 202 await ap_gateway._items_received(ap_gateway.client, items_event) - assert sign_and_post.called - url, actor_id, doc = sign_and_post.call_args.args + assert ap_post.called + url, actor_id, doc = ap_post.call_args.args assert url == TEST_USER_DATA["endpoints"]["sharedInbox"] assert actor_id == ap_gateway.build_apurl(ap_const.TYPE_ACTOR, TEST_JID.userhost()) assert doc["type"] == "Like" @@ -1483,7 +1495,7 @@ @ed async def test_ap_like_to_xmpp_noticed_attachment(self, ap_gateway, monkeypatch): """AP Like activity is converted to ``noticed`` attachment""" - monkeypatch.setattr(plugin_comp_ap_gateway.treq, "get", mock_ap_get) + monkeypatch.setattr(plugin_comp_ap_gateway.treq, "get", mock_treq_get) monkeypatch.setattr(plugin_comp_ap_gateway.treq, "json_content", mock_treq_json) monkeypatch.setattr(ap_gateway, "ap_get", mock_ap_get) @@ -1527,7 +1539,7 @@ @ed async def test_xmpp_pubsub_reactions_to_ap(self, ap_gateway, monkeypatch): """Pubsub-attachments ``reactions`` is converted to AP EmojiReact activity""" - monkeypatch.setattr(plugin_comp_ap_gateway.treq, "get", mock_ap_get) + monkeypatch.setattr(plugin_comp_ap_gateway.treq, "get", mock_treq_get) monkeypatch.setattr(plugin_comp_ap_gateway.treq, "json_content", mock_treq_json) monkeypatch.setattr(ap_gateway, "ap_get", mock_ap_get) @@ -1562,12 +1574,12 @@ TEST_JID, recipient_jid, attachment_node, [item_elt], {} ) - with patch.object(ap_gateway, "sign_and_post") as sign_and_post: - sign_and_post.return_value.code = 202 + with patch.object(ap_gateway, "ap_post") as ap_post: + ap_post.return_value.code = 202 await ap_gateway._items_received(ap_gateway.client, items_event) - assert sign_and_post.call_count == 3 - for idx, call_args in enumerate(sign_and_post.call_args_list): + assert ap_post.call_count == 3 + for idx, call_args in enumerate(ap_post.call_args_list): url, actor_id, doc = call_args.args assert url == TEST_USER_DATA["endpoints"]["sharedInbox"] assert actor_id == ap_gateway.build_apurl( @@ -1586,7 +1598,7 @@ @ed async def test_ap_reactions_to_xmpp(self, ap_gateway, monkeypatch): """AP EmojiReact activity is converted to ``reactions`` attachment""" - monkeypatch.setattr(plugin_comp_ap_gateway.treq, "get", mock_ap_get) + monkeypatch.setattr(plugin_comp_ap_gateway.treq, "get", mock_treq_get) monkeypatch.setattr(plugin_comp_ap_gateway.treq, "json_content", mock_treq_json) monkeypatch.setattr(ap_gateway, "ap_get", mock_ap_get) @@ -1725,7 +1737,9 @@ "url": f"https://test.example/_ap/item/{test_actor}/event_123", } - event_data = await ap_gateway.ap_events.ap_item_2_event_data(ap_object) + event_data = await ap_gateway.ap_events.ap_item_2_event_data( + TEST_AP_ACTOR_ID, ap_object + ) assert event_data["id"] == ap_object["id"] assert event_data["name"] == {"": "test event"}