def test_ReplyDownloadJob_happiest_path(mocker, homedir, session, session_maker): """ Test when a reply successfully downloads and decrypts. Use the `homedir` fixture to get a GPG keyring. """ reply = factory.Reply(source=factory.Source(), is_downloaded=False, is_decrypted=None, content=None) session.add(reply) session.commit() gpg = GpgHelper(homedir, session_maker, is_qubes=False) job = ReplyDownloadJob(reply.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_reply = mocker.MagicMock(return_value=('', data_dir)) job.call_api(api_client, session) assert reply.content is not None assert reply.is_downloaded is True assert reply.is_decrypted is True
def test_ReplyDownloadJob_no_download_or_decrypt(mocker, homedir, session, session_maker): """ Test that an already-downloaded reply successfully decrypts. """ reply_is_decrypted_false = factory.Reply(source=factory.Source(), is_downloaded=True, is_decrypted=False, content=None) reply_is_decrypted_none = factory.Reply(source=factory.Source(), is_downloaded=True, is_decrypted=None, content=None) session.add(reply_is_decrypted_false) session.add(reply_is_decrypted_none) session.commit() gpg = GpgHelper(homedir, session_maker, is_qubes=False) job_1 = ReplyDownloadJob(reply_is_decrypted_false.uuid, homedir, gpg) job_2 = ReplyDownloadJob(reply_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() api_client.default_request_timeout = 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 reply_is_decrypted_false.content is not None assert reply_is_decrypted_false.is_downloaded is True assert reply_is_decrypted_false.is_decrypted is True assert reply_is_decrypted_none.content is not None assert reply_is_decrypted_none.is_downloaded is True assert reply_is_decrypted_none.is_decrypted is True
def _submit_download_job(self, object_type: Union[Type[db.Reply], Type[db.Message], Type[db.File]], uuid: str) -> None: if object_type == db.Reply: job = ReplyDownloadJob( uuid, self.data_dir, self.gpg ) # type: Union[ReplyDownloadJob, MessageDownloadJob, FileDownloadJob] job.success_signal.connect(self.on_reply_download_success, type=Qt.QueuedConnection) job.failure_signal.connect(self.on_reply_download_failure, type=Qt.QueuedConnection) elif object_type == db.Message: job = MessageDownloadJob(uuid, self.data_dir, self.gpg) job.success_signal.connect(self.on_message_download_success, type=Qt.QueuedConnection) job.failure_signal.connect(self.on_message_download_failure, type=Qt.QueuedConnection) elif object_type == db.File: job = FileDownloadJob(uuid, self.data_dir, self.gpg) job.success_signal.connect(self.on_file_download_success, type=Qt.QueuedConnection) job.failure_signal.connect(self.on_file_download_failure, type=Qt.QueuedConnection) self.api_job_queue.enqueue(job)
def test_ReplyDownloadJob_message_already_decrypted(mocker, homedir, session, session_maker): """ Test that call_api just returns uuid if already decrypted. """ reply = factory.Reply(source=factory.Source(), is_downloaded=True, is_decrypted=True) session.add(reply) session.commit() gpg = GpgHelper(homedir, session_maker, is_qubes=False) job = ReplyDownloadJob(reply.uuid, homedir, gpg) decrypt_fn = mocker.patch.object(job.gpg, 'decrypt_submission_or_reply') api_client = mocker.MagicMock() download_fn = mocker.patch.object(api_client, 'download_reply') return_uuid = job.call_api(api_client, session) assert reply.uuid == return_uuid decrypt_fn.assert_not_called() download_fn.assert_not_called()