Skip to content
Snippets Groups Projects
ErrorReporterPresenterTest.py 5.06 KiB
Newer Older
from __future__ import (absolute_import, division, print_function)
import unittest
import sys
from ErrorReporter.error_report_presenter import ErrorReporterPresenter
if sys.version_info.major > 2:
    from unittest import mock
else:
    import mock


class ErrorReportPresenterTest(unittest.TestCase):

    def test_that_can_initialise(self):
        view = mock.MagicMock()
        exit_code = 0
        presenter = ErrorReporterPresenter(view, exit_code)

        self.assertEqual(view, presenter._view)
        self.assertEqual(exit_code, presenter._exit_code)
        presenter._view.connect_signal.called_once_with(presenter.error_handler)
        presenter._view.show.called_once_with()

    @mock.patch('ErrorReporter.error_report_presenter.ErrorReporter')
    def test_error_handler_sends_no_report_for_no_share(self, error_reporter_mock):
        error_reporter_mock_instance = mock.MagicMock()
        error_reporter_mock_instance.sendErrorReport.return_value = 201
        error_reporter_mock.return_value = error_reporter_mock_instance
        share = 2
        continue_working = True
        name = ''
        email = ''
        textBox = ''
        view = mock.MagicMock()
        exit_code = 0
        presenter = ErrorReporterPresenter(view, exit_code)

        presenter.error_handler(continue_working, share, name, email, textBox)

        self.assertEqual(error_reporter_mock.call_count, 0)
        self.assertEqual(presenter._view.quit.call_count, 0)

    @mock.patch('ErrorReporter.error_report_presenter.ErrorReporter')
    @mock.patch('ErrorReporter.error_report_presenter.UsageService')
    def test_error_handler_sends_report_for_share_all(self, usage_service, error_reporter_mock):
        usage_service.getUpTime.return_value = 'up_time'
        error_reporter_mock_instance = mock.MagicMock()
        error_reporter_mock_instance.sendErrorReport.return_value = 201
        error_reporter_mock.return_value = error_reporter_mock_instance
        share = 0
        continue_working = False
        name = ''
        email = ''
        textBox = ''
        view = mock.MagicMock()
        exit_code = 0
        presenter = ErrorReporterPresenter(view, exit_code)

        presenter.error_handler(continue_working, share, name, email, textBox)

        self.assertEqual(error_reporter_mock.call_count, 1)
        error_reporter_mock_instance.sendErrorReport.asser_called_once_with(
            "mantidplot", 'up_time', exit_code, False, str(name), str(email))
        presenter._view.quit.assert_called_once_with()

    @mock.patch('ErrorReporter.error_report_presenter.ErrorReporter')
    @mock.patch('ErrorReporter.error_report_presenter.UsageService')
    def test_error_handler_sends_report_for_share_non_id(self, usage_service, error_reporter_mock):
        usage_service.getUpTime.return_value = 'up_time'
        error_reporter_mock_instance = mock.MagicMock()
        error_reporter_mock_instance.sendErrorReport.return_value = 201
        error_reporter_mock.return_value = error_reporter_mock_instance
        share = 1
        continue_working = False
        name = ''
        email = ''
        textBox = ''
        view = mock.MagicMock()
        exit_code = 0
        presenter = ErrorReporterPresenter(view, exit_code)

        presenter.error_handler(continue_working, share, name, email, textBox)

        self.assertEqual(error_reporter_mock.call_count, 1)
        error_reporter_mock_instance.sendErrorReport.asser_called_once_with(
            "mantidplot", 'up_time', exit_code, True, str(name), str(email))
        presenter._view.quit.assert_called_once_with()

    @mock.patch('ErrorReporter.error_report_presenter.ErrorReporter')
    @mock.patch('ErrorReporter.error_report_presenter.UsageService')
    def test_error_handler_reports_if_incorrect_http_response_sent(self, usage_service, error_reporter_mock):
        usage_service.getUpTime.return_value = 'up_time'
        error_reporter_mock_instance = mock.MagicMock()
        error_reporter_mock_instance.sendErrorReport.return_value = 500
        error_reporter_mock.return_value = error_reporter_mock_instance
        share = 0
        continue_working = False
        name = ''
        email = ''
        textBox = ''
        view = mock.MagicMock()
        exit_code = 0
        presenter = ErrorReporterPresenter(view, exit_code)

        presenter.error_handler(continue_working, share, name, email, textBox)

        self.assertEqual(error_reporter_mock.call_count, 1)
        error_reporter_mock_instance.sendErrorReport.asser_called_once_with(
            "mantidplot", 'up_time', exit_code, False, str(name), str(email))
        presenter._view.display_message_box.assert_called_once_with('Error contacting server',
                                                                    'There was an error when sending the report.'
                                                                    'Please contact mantid-help@mantidproject.org directly',
                                                                    'http request returned with status 500')
        presenter._view.quit.assert_called_once_with()


if __name__ == '__main__':
    unittest.main()