def test_Client_on_file_download_Reply(safe_tmpdir):
    """
    If the handler is passed a reply, check the download_reply
    function is the one called against the API.
    """
    mock_gui = mock.MagicMock()
    mock_session = mock.MagicMock()
    cl = Client('http://localhost', mock_gui, mock_session, str(safe_tmpdir))
    source = models.Source('source-uuid', 'testy-mctestface', False,
                           'mah pub key', 1, False, datetime.now())
    journalist = models.User('Testy mcTestface')
    reply = models.Reply('reply-uuid', journalist, source, 'my-reply.gpg',
                         123)  # Not a sdclientapi.Submission
    cl.call_api = mock.MagicMock()
    cl.api = mock.MagicMock()
    reply_sdk_object = mock.MagicMock()
    with mock.patch('sdclientapi.Reply') as mock_reply:
        mock_reply.return_value = reply_sdk_object
        cl.on_file_download(source, reply)
    cl.call_api.assert_called_once_with(cl.api.download_reply,
                                        cl.on_file_downloaded,
                                        cl.on_download_timeout,
                                        reply_sdk_object,
                                        cl.data_dir,
                                        current_object=reply)
def test_FileWidget_mousePressEvent_open():
    """
    Should fire the expected open event handler in the logic layer.
    """
    mock_controller = mock.MagicMock()
    source = models.Source('source-uuid', 'testy-mctestface', False,
                           'mah pub key', 1, False, datetime.now())
    submission = models.Submission(source, 'submission-uuid', 123,
                                   'mah-reply.gpg',
                                   'http://mah-server/mah-reply-url')
    submission.is_downloaded = True

    fw = FileWidget(source, submission, mock_controller)
    fw.mouseReleaseEvent(None)
    fw.controller.on_file_open.assert_called_once_with(submission)
def test_FileWidget_init_right():
    """
    Check the FileWidget is configured correctly for align-right.
    """
    mock_controller = mock.MagicMock()
    source = models.Source('source-uuid', 'testy-mctestface', False,
                           'mah pub key', 1, False, datetime.now())
    submission = models.Submission(source, 'submission-uuid', 123,
                                   'mah-reply.gpg',
                                   'http://mah-server/mah-reply-url')
    submission.is_downloaded = True

    fw = FileWidget(source, submission, mock_controller, align='right')
    layout = fw.layout()
    assert isinstance(layout.takeAt(0), QSpacerItem)
    assert isinstance(layout.takeAt(0), QWidgetItem)
    assert isinstance(layout.takeAt(0), QWidgetItem)
    assert fw.controller == mock_controller
def test_Client_on_file_download_Submission(safe_tmpdir):
    """
    If the handler is passed a submission, check the download_submission
    function is the one called against the API.
    """
    mock_gui = mock.MagicMock()
    mock_session = mock.MagicMock()
    cl = Client('http://localhost', mock_gui, mock_session, str(safe_tmpdir))
    source = models.Source('source-uuid', 'testy-mctestface', False,
                           'mah pub key', 1, False, datetime.now())
    submission = models.Submission(source, 'submission-uuid', 1234,
                                   'myfile.doc.gpg', 'http://myserver/myfile')
    cl.call_api = mock.MagicMock()
    cl.api = mock.MagicMock()
    submission_sdk_object = mock.MagicMock()
    with mock.patch('sdclientapi.Submission') as mock_submission:
        mock_submission.return_value = submission_sdk_object
        cl.on_file_download(source, submission)
    cl.call_api.assert_called_once_with(cl.api.download_submission,
                                        cl.on_file_downloaded,
                                        cl.on_download_timeout,
                                        submission_sdk_object,
                                        cl.data_dir,
                                        current_object=submission)