diff --git a/federation/tests/entities/diaspora/test_entities.py b/federation/tests/entities/diaspora/test_entities.py index cc43e32..cfed7fd 100644 --- a/federation/tests/entities/diaspora/test_entities.py +++ b/federation/tests/entities/diaspora/test_entities.py @@ -7,6 +7,7 @@ from federation.entities.base import Profile from federation.entities.diaspora.entities import ( DiasporaComment, DiasporaPost, DiasporaLike, DiasporaRequest, DiasporaProfile, DiasporaRetraction, ) +from federation.exceptions import SignatureVerificationError from federation.tests.fixtures.keys import get_dummy_private_key @@ -127,3 +128,25 @@ class TestDiasporaRelayableEntitySigning(): "Q0t-vWGl8cgSS0_34mvvqX-HKUdmun2vQ50bPckNLoj3hDI6HcmZ8qFf_xx8y1BbE0zx5rTo7yOlWq8Y" \ "sC28oRHqHpIzOfhkIHyt-hOjO_mpuZLd7qOPfIySnGW6hM1iKewoJVDuVMN5w5VB46ETRum8JpvTQO8i" \ "DPB-ZqbqcEasfm2CQIxVLA==" + + +class TestDiasporaRelayableEntityValidate(): + def test_raises_if_no_sender_key(self): + entity = DiasporaComment() + with pytest.raises(SignatureVerificationError): + entity._validate_signatures() + + @patch("federation.entities.diaspora.entities.verify_relayable_signature") + def test_calls_verify_signature(self, mock_verify): + entity = DiasporaComment() + entity._sender_key = "key" + entity._source_object = "obj" + entity.signature = "sig" + mock_verify.return_value = False + with pytest.raises(SignatureVerificationError): + entity._validate_signatures() + mock_verify.assert_called_once_with("key", "obj", "sig") + mock_verify.reset_mock() + mock_verify.return_value = True + entity._validate_signatures() + mock_verify.assert_called_once_with("key", "obj", "sig") diff --git a/federation/tests/entities/diaspora/test_mappers.py b/federation/tests/entities/diaspora/test_mappers.py index 3024a39..04636a6 100644 --- a/federation/tests/entities/diaspora/test_mappers.py +++ b/federation/tests/entities/diaspora/test_mappers.py @@ -1,5 +1,5 @@ from datetime import datetime -from unittest.mock import patch +from unittest.mock import patch, Mock import pytest @@ -89,7 +89,7 @@ class TestDiasporaEntityMappersReceive(object): assert comment.signature == "((signature))" mock_validate.assert_called_once_with() - @patch("federation.entities.diaspora.mappers.DiasporaComment._validate_signatures") + @patch("federation.entities.diaspora.mappers.DiasporaLike._validate_signatures") def test_message_to_objects_like(self, mock_validate): entities = message_to_objects(DIASPORA_POST_LIKE) assert len(entities) == 1 @@ -158,6 +158,18 @@ class TestDiasporaEntityMappersReceive(object): entities = message_to_objects(DIASPORA_POST_SIMPLE) assert entities[0]._source_protocol == "diaspora" + @patch("federation.entities.diaspora.mappers.DiasporaComment._validate_signatures") + def test_element_to_objects_calls_sender_key_fetcher(self, mock_validate): + mock_fetcher = Mock() + message_to_objects(DIASPORA_POST_COMMENT, mock_fetcher) + mock_fetcher.assert_called_once_with("alice@alice.diaspora.example.org") + + @patch("federation.entities.diaspora.mappers.DiasporaComment._validate_signatures") + @patch("federation.entities.diaspora.mappers.retrieve_and_parse_profile") + def test_element_to_objects_calls_retrieve_remote_profile(self, mock_retrieve, mock_validate): + message_to_objects(DIASPORA_POST_COMMENT) + mock_retrieve.assert_called_once_with("alice@alice.diaspora.example.org") + class TestGetOutboundEntity(object): def test_already_fine_entities_are_returned_as_is(self):