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>")
Beispiel #2
0
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__()
Beispiel #3
0
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"
Beispiel #4
0
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
Beispiel #5
0
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
Beispiel #6
0
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()