def test_conversation_pending_message(): """ Test that a conversation with a message that's not yet downloaded shows the right placeholder text """ w = Window() w.controller = mock.MagicMock() w.main_view = mock.MagicMock() w._add_item_content_or = mock.MagicMock() mock_conview = mock.MagicMock() mock_source = mock.MagicMock() mock_source.journalistic_designation = 'Testy McTestface' submission = Submission(source=mock_source, uuid="test", size=123, filename="test.msg.gpg", download_url='http://test/test') submission.is_downloaded = False mock_source.collection = [submission] with mock.patch('securedrop_client.gui.main.ConversationView', mock_conview): w.show_conversation_for(mock_source) conv = mock_conview() # once for source name, once for message assert conv.add_message.call_count == 2 assert conv.add_message.call_args == \ mock.call("<Message not yet downloaded>")
def test_string_representation_of_submission(): source = Source(journalist_designation="testy test", uuid="test", is_flagged=False, public_key='test', interaction_count=1, is_starred=False, last_updated='test') submission = Submission(source=source, uuid="test", size=123, filename="test.docx", download_url='http://test/test') submission.__repr__()
def test_submission_content_downloaded(): source = Source(journalist_designation="testy test", uuid="test", is_flagged=False, public_key='test', interaction_count=1, is_starred=False, last_updated='test') submission = Submission(source=source, uuid="test", size=123, filename="test.docx", download_url='http://test/test') submission.is_downloaded = True with mock.patch('builtins.open', mock.mock_open(read_data="blah")): assert submission.content == "blah"
def test_source_collection(): # Create some test submissions and replies source = Source(journalist_designation="testy test", uuid="test", is_flagged=False, public_key='test', interaction_count=1, is_starred=False, last_updated='test') submission = Submission(source=source, uuid="test", size=123, filename="2-test.doc.gpg") user = User('hehe') reply = Reply(source=source, journalist=user, filename="1-reply.gpg", size=1234, uuid='test') source.submissions = [submission] source.replies = [reply] # Now these items should be in the source collection in the proper order assert source.collection[0] == reply assert source.collection[1] == submission
def test_submission_content_not_downloaded(): source = Source(journalist_designation="testy test", uuid="test", is_flagged=False, public_key='test', interaction_count=1, is_starred=False, last_updated='test') submission = Submission(source=source, uuid="test", size=123, filename="test.docx", download_url='http://test/test') assert submission.content is None
def update_submissions(remote_submissions, local_submissions, session): """ * Existing submissions are updated in the local database. * New submissions have an entry created in the local database. * Local submissions not returned in the remote submissions are deleted from the local database. """ local_uuids = {submission.uuid for submission in local_submissions} for submission in remote_submissions: if submission.uuid in local_uuids: # Update an existing record. local_submission = [ s for s in local_submissions if s.uuid == submission.uuid ][0] local_submission.filename = submission.filename local_submission.size = submission.size local_submission.is_read = submission.is_read local_submission.download_url = submission.download_url # Removing the UUID from local_uuids ensures this record won't be # deleted at the end of this function. local_uuids.remove(submission.uuid) logger.info('Updated submission {}'.format(submission.uuid)) else: # A new submission to be added to the database. _, source_uuid = submission.source_url.rsplit('/', 1) source = session.query(Source).filter_by(uuid=source_uuid)[0] ns = Submission(source=source, uuid=submission.uuid, size=submission.size, filename=submission.filename, download_url=submission.download_url) session.add(ns) logger.info('Added new submission {}'.format(submission.uuid)) # The uuids remaining in local_uuids do not exist on the remote server, so # delete the related records. for deleted_submission in [ s for s in local_submissions if s.uuid in local_uuids ]: session.delete(deleted_submission) logger.info('Deleted submission {}'.format(deleted_submission.uuid)) session.commit()