def test_MessageDownloadJob_with_crypto_error(mocker, homedir, session, session_maker): """ Test when a message successfully downloads, but does not successfully decrypt. Use the `homedir` fixture to get a GPG keyring. """ message = factory.Message(source=factory.Source(), is_downloaded=False, is_decrypted=None, content=None) session.add(message) session.commit() gpg = GpgHelper(homedir, session_maker, is_qubes=False) job = MessageDownloadJob(message.uuid, homedir, gpg) mocker.patch.object(job.gpg, 'decrypt_submission_or_reply', side_effect=CryptoError) api_client = mocker.MagicMock() api_client.default_request_timeout = mocker.MagicMock() path = os.path.join(homedir, 'data') api_client.download_submission = mocker.MagicMock(return_value=('', path)) with pytest.raises(DownloadDecryptionException): job.call_api(api_client, session) assert message.content is None assert message.is_downloaded is True assert message.is_decrypted is False
def test_MessageDownloadJob_with_base_error(mocker, homedir, session, session_maker): """ Test when a message does not successfully download. """ message = factory.Message(source=factory.Source(), is_downloaded=False, is_decrypted=None, content=None) session.add(message) session.commit() gpg = GpgHelper(homedir, session_maker, is_qubes=False) job = MessageDownloadJob(message.uuid, homedir, gpg) api_client = mocker.MagicMock() api_client.default_request_timeout = mocker.MagicMock() mocker.patch.object(api_client, 'download_submission', side_effect=BaseError) decrypt_fn = mocker.patch.object(job.gpg, 'decrypt_submission_or_reply') with pytest.raises(BaseError): job.call_api(api_client, session) assert message.content is None assert message.is_downloaded is False assert message.is_decrypted is None decrypt_fn.assert_not_called()
def test_MessageDownloadJob_happiest_path(mocker, homedir, session, session_maker): """ Test when a message successfully downloads and decrypts. Use the `homedir` fixture to get a GPG keyring. """ message = factory.Message(source=factory.Source(), is_downloaded=False, is_decrypted=None, content=None) session.add(message) session.commit() gpg = GpgHelper(homedir, session_maker, is_qubes=False) job = MessageDownloadJob(message.uuid, homedir, gpg) mocker.patch.object(job.gpg, 'decrypt_submission_or_reply') api_client = mocker.MagicMock() api_client.default_request_timeout = mocker.MagicMock() data_dir = os.path.join(homedir, 'data') api_client.download_submission = mocker.MagicMock(return_value=('', data_dir)) job.call_api(api_client, session) assert message.content is not None assert message.is_downloaded is True assert message.is_decrypted is True
def test_MessageDownloadJob_no_download_or_decrypt(mocker, homedir, session, session_maker): """ Test that an already-downloaded message successfully decrypts. Use the `homedir` fixture to get a GPG keyring. """ message_is_decrypted_false = factory.Message(source=factory.Source(), is_downloaded=True, is_decrypted=False, content=None) message_is_decrypted_none = factory.Message(source=factory.Source(), is_downloaded=True, is_decrypted=None, content=None) session.add(message_is_decrypted_false) session.add(message_is_decrypted_none) session.commit() gpg = GpgHelper(homedir, session_maker, is_qubes=False) job_1 = MessageDownloadJob(message_is_decrypted_false.uuid, homedir, gpg) job_2 = MessageDownloadJob(message_is_decrypted_none.uuid, homedir, gpg) mocker.patch.object(job_1.gpg, 'decrypt_submission_or_reply') mocker.patch.object(job_2.gpg, 'decrypt_submission_or_reply') api_client = mocker.MagicMock() path = os.path.join(homedir, 'data') api_client.download_submission = mocker.MagicMock(return_value=('', path)) job_1.call_api(api_client, session) job_2.call_api(api_client, session) assert message_is_decrypted_false.content is not None assert message_is_decrypted_false.is_downloaded is True assert message_is_decrypted_false.is_decrypted is True assert message_is_decrypted_none.content is not None assert message_is_decrypted_none.is_downloaded is True assert message_is_decrypted_none.is_decrypted is True
def test_MessageDownloadJob_message_already_downloaded(mocker, homedir, session, session_maker): """ Test that call_api just decrypts and returns uuid if already downloaded. """ message = factory.Message(source=factory.Source(), is_downloaded=True, is_decrypted=None) session.add(message) session.commit() gpg = GpgHelper(homedir, session_maker, is_qubes=False) job = MessageDownloadJob(message.uuid, homedir, gpg) mocker.patch.object(job.gpg, 'decrypt_submission_or_reply') api_client = mocker.MagicMock() download_fn = mocker.patch.object(api_client, 'download_submission') return_uuid = job.call_api(api_client, session) assert message.uuid == return_uuid assert message.is_decrypted is True download_fn.assert_not_called()
def test_MessageDownloadJob_message_already_decrypted(mocker, homedir, session, session_maker, download_error_codes): """ Test that call_api just returns uuid if already decrypted. """ message = factory.Message(source=factory.Source(), is_downloaded=True, is_decrypted=True) session.add(message) session.commit() gpg = GpgHelper(homedir, session_maker, is_qubes=False) job = MessageDownloadJob(message.uuid, homedir, gpg) decrypt_fn = mocker.patch.object(job.gpg, "decrypt_submission_or_reply") api_client = mocker.MagicMock() api_client.default_request_timeout = mocker.MagicMock() download_fn = mocker.patch.object(api_client, "download_submission") return_uuid = job.call_api(api_client, session) assert message.uuid == return_uuid decrypt_fn.assert_not_called() download_fn.assert_not_called()