def test_that_period_columns_hidden_when_multi_period_is_false(self):
        presenter = RunTabPresenter(SANSFacility.ISIS)
        presenter.set_view(mock.MagicMock())

        presenter.on_multiperiod_changed(False)

        presenter._view.hide_period_columns.assert_called_once_with()
    def test_that_all_columns_shown_when_multi_period_is_true(self):
        presenter = RunTabPresenter(SANSFacility.ISIS)
        presenter.set_view(mock.MagicMock())

        presenter.on_multiperiod_changed(True)

        presenter._view.show_period_columns.assert_called_once_with()
    def test_on_erase_rows_clears_rows_from_table_model(self):
        presenter = RunTabPresenter(SANSFacility.ISIS)
        view = mock.MagicMock()
        view.get_selected_rows = mock.MagicMock(return_value=[1, 2])
        presenter.set_view(view)
        test_row_0 = [
            'SANS2D00022024', '', 'SANS2D00022048', '', 'SANS2D00022048', '',
            '', '', '', '', '', '', 'test_file', '', '1.0', '', '', '', ''
        ]
        empty_row = TableModel.create_empty_row()

        presenter.on_row_inserted(0, test_row_0)
        presenter.on_row_inserted(1, test_row_0)
        presenter.on_row_inserted(2, test_row_0)

        presenter.on_erase_rows()

        self.assertEqual(presenter._table_model.get_number_of_rows(), 3)
        self.assertEqual(
            presenter._table_model.get_table_entry(0).to_list(), test_row_0)
        empty_row.id = 3
        self.assertEqual(
            presenter._table_model.get_table_entry(1).__dict__,
            empty_row.__dict__)
        empty_row.id = 4
        self.assertEqual(
            presenter._table_model.get_table_entry(2).__dict__,
            empty_row.__dict__)
    def test_on_row_removed_removes_correct_row(self):
        presenter = RunTabPresenter(SANSFacility.ISIS)
        presenter.set_view(mock.MagicMock())
        row_0 = ['74040', '', '74040', '', '74040', '', '74040', '', '74040', '', '74040', '', 'test_reduction'
                 , 'user_file', '1.2', '']
        row_1 = ['74041', '', '74041', '', '74041', '', '74041', '', '74041', '', '74041', '', 'test_reduction'
                 , 'user_file', '1.2', '']
        row_2 = ['74042', '', '74042', '', '74042', '', '74042', '', '74042', '', '74042', '', 'test_reduction'
                 , 'user_file', '1.2', '']
        row_3 = ['74043', '', '74043', '', '74043', '', '74043', '', '74043', '', '74043', '', 'test_reduction'
                 , 'user_file', '1.2', '']
        presenter._table_model.add_table_entry(0, TableIndexModel(*row_0))
        presenter._table_model.add_table_entry(1, TableIndexModel(*row_1))
        presenter._table_model.add_table_entry(2, TableIndexModel(*row_2))
        presenter._table_model.add_table_entry(3, TableIndexModel(*row_3))
        rows = [0, 2]
        expected_row_0 = TableIndexModel(*row_1)
        expected_row_0.id = 1
        expected_row_0.file_finding = True
        expected_row_1 = TableIndexModel(*row_3)
        expected_row_1.id = 3
        expected_row_1.file_finding = True


        presenter.on_rows_removed(rows)

        self.assertEqual(presenter._table_model.get_number_of_rows(), 2)
        model_row_0 = presenter._table_model.get_table_entry(0)
        self.assertEqual(model_row_0, expected_row_0)
        model_row_1 = presenter._table_model.get_table_entry(1)
        self.assertEqual(model_row_1, expected_row_1)
Exemple #5
0
    def setUp(self):
        # Backup properties that the tests or GUI may change
        self._backup_facility = config["default.facility"]
        self._backup_instrument = config["default.instrument"]
        self._backup_datasearch_dirs = config["datasearch.directories"]
        self._backup_save_dir = config["defaultsave.directory"]

        config["default.facility"] = "ISIS"

        self._mock_model = mock.create_autospec(StateGuiModel, spec_set=True)
        self._mock_table = mock.create_autospec(TableModel, spec_set=True)
        self._mock_csv_parser = mock.create_autospec(BatchCsvParser,
                                                     spec_set=True)
        self._mock_view = mock.Mock()

        self._mock_model.instrument = SANSInstrument.SANS2D

        # TODO, this top level presenter should not be creating sub presenters, instead we should use
        # TODO  an observer pattern and common interface to exchange messages. However for the moment
        # TODO  we will skip patching each
        self.presenter = RunTabPresenter(SANSFacility.ISIS,
                                         model=self._mock_model,
                                         table_model=self._mock_table,
                                         view=self._mock_view)

        # The beam centre presenter will run QThreads which leads to flaky tests, so mock out
        self.presenter._beam_centre_presenter = mock.Mock()
        self.presenter._masking_table_presenter = mock.Mock()
        self.presenter._workspace_diagnostic_presenter = mock.Mock()

        self.presenter._csv_parser = self._mock_csv_parser
        # Allows us to use mock objs as the method tries to directly use int/floats
        self.presenter.update_view_from_table_model = mock.Mock()
Exemple #6
0
 def _get_files_and_mock_presenter(content):
     batch_file_path = save_to_csv(content)
     user_file_path = create_user_file(sample_user_file)
     view, _, _ = create_mock_view(user_file_path, batch_file_path)
     # We just use the sample_user_file since it exists.
     view.get_mask_file = mock.MagicMock(return_value=user_file_path)
     presenter = RunTabPresenter(SANSFacility.ISIS)
     presenter.set_view(view)
     return batch_file_path, user_file_path, presenter, view
 def _get_files_and_mock_presenter(self, content, is_multi_period=True, row_user_file_path = ""):
     batch_parser = mock.MagicMock()
     batch_parser.parse_batch_file = mock.MagicMock(return_value=content)
     self.BatchCsvParserMock.return_value = batch_parser
     batch_file_path = 'batch_file_path'
     user_file_path = create_user_file(sample_user_file)
     view, _, _ = create_mock_view(user_file_path, batch_file_path, row_user_file_path)
     # We just use the sample_user_file since it exists.
     view.get_mask_file = mock.MagicMock(return_value=user_file_path)
     view.is_multi_period_view = mock.MagicMock(return_value=is_multi_period)
     presenter = RunTabPresenter(SANSFacility.ISIS)
     presenter.set_view(view)
     return batch_file_path, user_file_path, presenter, view
 def _get_files_and_mock_presenter(self, content, is_multi_period=True, row_user_file_path = ""):
     batch_parser = mock.MagicMock()
     batch_parser.parse_batch_file = mock.MagicMock(return_value=content)
     self.BatchCsvParserMock.return_value = batch_parser
     batch_file_path = 'batch_file_path'
     user_file_path = create_user_file(sample_user_file)
     view, _, _ = create_mock_view(user_file_path, batch_file_path, row_user_file_path)
     # We just use the sample_user_file since it exists.
     view.get_mask_file = mock.MagicMock(return_value=user_file_path)
     view.is_multi_period_view = mock.MagicMock(return_value=is_multi_period)
     presenter = RunTabPresenter(SANSFacility.ISIS)
     presenter.set_view(view)
     return batch_file_path, user_file_path, presenter, view
Exemple #9
0
    def test_on_insert_row_adds_row_to_table_model_after_selected_row(self):
        presenter = RunTabPresenter(SANSFacility.ISIS)
        view = mock.MagicMock()
        view.get_selected_rows = mock.MagicMock(return_value=[0])
        presenter.set_view(view)
        test_row_0 = [
            'SANS2D00022024', '', 'SANS2D00022048', '', 'SANS2D00022048', '',
            '', '', '', '', '', '', 'test_file', '', '1.0', ''
        ]
        test_row_1 = [
            'SANS2D00022024', '', '', '', '', '', '', '', '', '', '', '',
            'test_file2', '', '1.0', ''
        ]
        presenter.on_row_inserted(0, test_row_0)
        presenter.on_row_inserted(1, test_row_1)

        presenter.on_insert_row()

        self.assertEqual(presenter._table_model.get_number_of_rows(), 3)
        self.assertEqual(
            presenter._table_model.get_table_entry(1).to_list(), [''] * 16)
        self.assertEqual(
            presenter._table_model.get_table_entry(0).to_list(), test_row_0)
        self.assertEqual(
            presenter._table_model.get_table_entry(2).to_list(), test_row_1)
    def test_fails_silently_when_user_file_does_not_exist(self):
        self.os_patcher.stop()
        view, _, _ = create_mock_view("non_existent_user_file")

        presenter = RunTabPresenter(SANSFacility.ISIS)
        presenter.set_view(view)

        try:
            presenter.on_user_file_load()
            has_raised = False
        except:  # noqa
            has_raised = True
        self.assertFalse(has_raised)
        self.os_patcher.start()
    def test_that_checks_default_user_file(self):
        # Setup presenter and mock view
        view, settings_diagnostic_tab, _ = create_mock_view("")
        presenter = RunTabPresenter(SANSFacility.ISIS)
        presenter.set_view(view)

        self.assertEqual(
            presenter._view.set_out_default_user_file.call_count, 1,
            "Expected mock to have been called once. Called {} times.".format(
                presenter._view.set_out_default_user_file.call_count))

        self.assertEqual(
            presenter._view._call_settings_listeners.call_count, 0,
            "Expected mock to not have been called. Called {} times.".format(
                presenter._view._call_settings_listeners.call_count))
    def test_on_insert_row_updates_table_model(self):
        presenter = RunTabPresenter(SANSFacility.ISIS)
        presenter.set_view(mock.MagicMock())
        row = ['74044', '', '74044', '', '74044', '', '74044', '', '74044', '', '74044', '', 'test_reduction'
               , 'user_file', '1.2', '']
        index = 0
        expected_table_index_model = TableIndexModel(*row)
        expected_table_index_model.id = 0
        expected_table_index_model.file_finding = True

        presenter.on_row_inserted(index, row)

        self.assertEqual(presenter._table_model.get_number_of_rows(), 1)
        model_row = presenter._table_model.get_table_entry(0)
        self.assertEqual(model_row, expected_table_index_model)
    def test_that_checks_default_user_file(self):
        # Setup presenter and mock view
        view, settings_diagnostic_tab, _ = create_mock_view("")
        presenter = RunTabPresenter(SANSFacility.ISIS)
        presenter.set_view(view)

        self.assertEqual(
            presenter._view.set_out_default_user_file.call_count, 1,
            "Expected mock to have been called once. Called {} times.".format(
                presenter._view.set_out_default_user_file.call_count))

        self.assertEqual(
            presenter._view._call_settings_listeners.call_count, 0,
            "Expected mock to not have been called. Called {} times.".format(
                presenter._view._call_settings_listeners.call_count))
    def test_add_row_to_table_model_adds_row_to_table_model(self):
        presenter = RunTabPresenter(SANSFacility.ISIS)
        presenter.set_view(mock.MagicMock())
        parsed_data = BATCH_FILE_TEST_CONTENT_2

        for item, row in enumerate(parsed_data):
            presenter._add_row_to_table_model(row, item)

        table_entry_0 = presenter._table_model.get_table_entry(0)
        self.assertEqual(table_entry_0.output_name, 'test_file')
        self.assertEqual(table_entry_0.sample_scatter, 'SANS2D00022024')
        self.assertEqual(table_entry_0.sample_thickness, '')

        table_entry_1 = presenter._table_model.get_table_entry(1)
        self.assertEqual(table_entry_1.output_name, 'test_file2')
Exemple #15
0
    def test_on_paste_rows_updates_table_in_view(self):
        presenter = RunTabPresenter(SANSFacility.ISIS)
        view = mock.MagicMock()
        view.get_selected_rows = mock.MagicMock(return_value=[])
        presenter.set_view(view)
        test_row_0 = ['SANS2D00022024', '', 'SANS2D00022048', '', 'SANS2D00022048', '', '', '', '', '', '', '',
                      'test_file', '', '1.0', '']
        test_row_1 = ['SANS2D00022024', '', '', '', '', '', '', '', '', '', '', '', 'test_file2', '', '1.0', '']
        presenter.on_row_inserted(0, test_row_0)
        presenter.on_row_inserted(1, test_row_1)
        presenter._clipboard = [test_row_0]
        presenter.update_view_from_table_model = mock.MagicMock()

        presenter.on_paste_rows_requested()

        presenter.update_view_from_table_model.assert_called_with()
    def test_on_view_update_updates_model():
        mocked_presenter = mock.Mock(spec=RunTabPresenter)
        listener = RunTabPresenter.ConcreteRunTabListener(
            presenter=mocked_presenter)

        listener.on_field_edit()
        mocked_presenter.update_model_from_view.assert_called_once()
    def test_that_process_selected_only_processes_selected_rows(self):
        # Naive test. Doesn't check that we are processing the correct processed rows,
        # just that we are processing the same number of rows as we have selected.
        # This would only really fail if on_process_selected_clicked and on_process_all_clicked 
        # get muddled-up
        presenter = RunTabPresenter(SANSFacility.ISIS)
        view = mock.MagicMock()
        view.get_selected_rows = mock.MagicMock(return_value=[0, 3, 4])
        
        presenter.set_view(view)
        presenter._table_model.reset_row_state = mock.MagicMock()

        presenter.on_process_selected_clicked()
        self.assertEqual(
            presenter._table_model.reset_row_state.call_count, 3,
            "Expected reset_row_state to have been called 3 times. Called {} times.".format(
                presenter._table_model.reset_row_state.call_count))
    def test_fails_silently_when_batch_file_does_not_exist(self):
        self.os_patcher.stop()
        presenter = RunTabPresenter(SANSFacility.ISIS)
        user_file_path = create_user_file(sample_user_file)
        view, settings_diagnostic_tab, masking_table = create_mock_view(user_file_path, "non_existent_batch_file")
        presenter.set_view(view)

        try:
            presenter.on_batch_file_load()
            has_raised = False
        except:  # noqa
            has_raised = True
        self.assertFalse(has_raised)

        # Clean up
        self._remove_files(user_file_path=user_file_path)
        self.os_patcher.start()
Exemple #19
0
 def test_table_model_is_initialised_upon_presenter_creation(self):
     presenter = RunTabPresenter(SANSFacility.ISIS)
     expected_table_model = TableModel()
     expected_table_model.subscribe_to_model_changes(presenter)
     expected_table_model.subscribe_to_model_changes(presenter._masking_table_presenter)
     expected_table_model.subscribe_to_model_changes(presenter._beam_centre_presenter)
     self.maxDiff = None
     self.assertEqual(presenter._table_model, expected_table_model)
Exemple #20
0
    def test_on_rows_removed_updates_view(self):
        presenter = RunTabPresenter(SANSFacility.ISIS)
        presenter.set_view(mock.MagicMock())
        row_0 = [
            '74040', '', '74040', '', '74040', '', '74040', '', '74040', '',
            '74040', '', 'test_reduction', 'user_file', '1.2', ''
        ]
        row_1 = [
            '74041', '', '74041', '', '74041', '', '74041', '', '74041', '',
            '74041', '', 'test_reduction', 'user_file', '1.2', ''
        ]
        row_2 = [
            '74042', '', '74042', '', '74042', '', '74042', '', '74042', '',
            '74042', '', 'test_reduction', 'user_file', '1.2', ''
        ]
        row_3 = [
            '74043', '', '74043', '', '74043', '', '74043', '', '74043', '',
            '74043', '', 'test_reduction', 'user_file', '1.2', ''
        ]
        presenter._table_model.add_table_entry(0, TableIndexModel(*row_0))
        presenter._table_model.add_table_entry(1, TableIndexModel(*row_1))
        presenter._table_model.add_table_entry(2, TableIndexModel(*row_2))
        presenter._table_model.add_table_entry(3, TableIndexModel(*row_3))
        presenter.update_view_from_table_model = mock.MagicMock()
        rows = [0, 2]

        presenter.on_rows_removed(rows)

        presenter.update_view_from_table_model.assert_called_once_with()
    def test_on_paste_rows_requested_replaces_row_if_one_row_is_selected(self):
        presenter = RunTabPresenter(SANSFacility.ISIS)
        view = mock.MagicMock()
        view.get_selected_rows = mock.MagicMock(return_value=[1])
        presenter.set_view(view)
        test_row_0 = ['SANS2D00022024', '', 'SANS2D00022048', '', 'SANS2D00022048', '', '', '', '', '', '', '',
                      'test_file', '', '1.0', '', '', '', '']
        test_row_1 = ['SANS2D00022024', '', '', '', '', '', '', '', '', '', '', '', 'test_file2', '', '1.0', '',
                      '', '', '']
        presenter.on_row_inserted(0, test_row_0)
        presenter.on_row_inserted(1, test_row_1)
        presenter.on_row_inserted(2, test_row_0)
        presenter._clipboard = [test_row_0]

        presenter.on_paste_rows_requested()

        self.assertEqual(presenter._table_model.get_number_of_rows(), 3)
        self.assertEqual(presenter._table_model.get_table_entry(1).to_list(), test_row_0)
Exemple #22
0
    def test_setup_instrument_specific_settings(self):
        presenter = RunTabPresenter(SANSFacility.ISIS)
        presenter.set_view(mock.MagicMock())
        presenter._beam_centre_presenter = mock.MagicMock()
        presenter._workspace_diagnostic_presenter = mock.MagicMock()
        instrument = SANSInstrument.LOQ

        presenter._setup_instrument_specific_settings(SANSInstrument.LOQ)

        presenter._view.set_instrument_settings.called_once_with(instrument)
        presenter._beam_centre_presenter.on_update_instrument.called_once_with(instrument)
        presenter._workspace_diagnostic_presenter.called_once_with(instrument)
Exemple #23
0
 def test_notify_progress_increments_progress(self):
     presenter = RunTabPresenter(SANSFacility.ISIS)
     view = mock.MagicMock()
     presenter.set_view(view)
     test_row_0 = [
         'SANS2D00022024', '', 'SANS2D00022048', '', 'SANS2D00022048', '',
         '', '', '', '', '', '', 'test_file', '', '1.0', ''
     ]
     presenter.on_row_inserted(0, test_row_0)
     presenter.notify_progress(0)
     self.assertEqual(presenter.progress, 1)
     self.assertEqual(presenter._view.progress_bar_value, 1)
Exemple #24
0
    def test_that_notify_progress_updates_state_and_tooltip_of_row(self):
        presenter = RunTabPresenter(SANSFacility.ISIS)
        view = mock.MagicMock()
        presenter.set_view(view)
        test_row_0 = ['SANS2D00022024', '', 'SANS2D00022048', '', 'SANS2D00022048', '', '', '', '', '', '', '',
                      'test_file', '', '1.0', '']
        presenter.on_row_inserted(0, test_row_0)

        presenter.notify_progress(0, [], [])

        self.assertEqual(presenter._table_model.get_table_entry(0).row_state, RowState.Processed)
        self.assertEqual(presenter._table_model.get_table_entry(0).tool_tip, '')
    def test_on_data_changed_updates_table_model(self):
        presenter = RunTabPresenter(SANSFacility.ISIS)
        presenter.set_view(mock.MagicMock())
        row = ['74044', '', '74044', '', '74044', '', '74044', '', '74044', '', '74044', '', 'test_reduction'
               , 'user_file', '1.2', '']
        expected_row = ['74044', '', '74040', '', '74044', '', '74044', '', '74044', '', '74044', '', 'test_reduction'
                        , 'user_file', '1.2', '']
        presenter._table_model.add_table_entry(0, TableIndexModel(*row))
        row = 0
        column = 2
        value = '74040'
        expected_table_index_model = TableIndexModel(*expected_row)
        expected_table_index_model.id = 0
        expected_table_index_model.file_finding = True

        presenter.on_data_changed(row, column, value, '')

        self.assertEqual(presenter._table_model.get_number_of_rows(), 1)
        model_row = presenter._table_model.get_table_entry(0)
        self.assertEqual(model_row, expected_table_index_model)
    def test_row_created_for_batch_file_correctly(self):
        presenter = RunTabPresenter(SANSFacility.ISIS)
        view = mock.MagicMock()
        presenter.set_view(view)

        test_row = [
            "SANS2D00022025", "another_file", "SANS2D00022052",
            "SANS2D00022022", "", "", "", "a_user_file.txt"
        ]

        expected_list = [
            "sample_sans", "SANS2D00022025", "output_as", "another_file",
            "sample_trans", "SANS2D00022052", "sample_direct_beam",
            "SANS2D00022022", "can_sans", "", "can_trans", "",
            "can_direct_beam", "", "user_file", "a_user_file.txt"
        ]

        actual_list = presenter._create_batch_entry_from_row(test_row)

        self.assertEqual(actual_list, expected_list)
Exemple #27
0
    def test_on_cut_rows_requested_updates_clipboard(self):
        presenter = RunTabPresenter(SANSFacility.ISIS)
        view = mock.MagicMock()
        view.get_selected_rows = mock.MagicMock(return_value=[0])
        presenter.set_view(view)
        test_row = ['SANS2D00022024', '', 'SANS2D00022048', '', 'SANS2D00022048', '', '', '', '', '', '', '',
                    'test_file', '', '1.0', '', '', '', '']

        presenter.on_row_inserted(0, test_row)

        presenter.on_cut_rows_requested()

        self.assertEqual(presenter._clipboard, [test_row])
Exemple #28
0
    def test_on_paste_rows_requested_appends_new_row_if_no_row_selected(self):
        presenter = RunTabPresenter(SANSFacility.ISIS)
        view = mock.MagicMock()
        view.get_selected_rows = mock.MagicMock(return_value=[])
        presenter.set_view(view)
        test_row_0 = ['SANS2D00022024', '', 'SANS2D00022048', '', 'SANS2D00022048', '', '', '', '', '', '', '',
                      'test_file', '', '1.0', '', '', '', '']
        test_row_1 = ['SANS2D00022024', '', '', '', '', '', '', '', '', '', '', '', 'test_file2', '', '1.0', '',
                      '', '', '']
        presenter.on_row_inserted(0, test_row_0)
        presenter.on_row_inserted(1, test_row_1)
        presenter._clipboard = [test_row_0]

        presenter.on_paste_rows_requested()

        self.assertEqual(presenter._table_model.get_number_of_rows(), 3)
        self.assertEqual(presenter._table_model.get_table_entry(2).to_list(), test_row_0)
Exemple #29
0
    def test_that_all_columns_shown_when_multi_period_is_true(self):
        presenter = RunTabPresenter(SANSFacility.ISIS)
        presenter.set_view(mock.MagicMock())

        presenter.on_multiperiod_changed(True)

        presenter._view.show_period_columns.assert_called_once_with()
Exemple #30
0
    def test_that_period_columns_hidden_when_multi_period_is_false(self):
        presenter = RunTabPresenter(SANSFacility.ISIS)
        presenter.set_view(mock.MagicMock())

        presenter.on_multiperiod_changed(False)

        presenter._view.hide_period_columns.assert_called_once_with()
Exemple #31
0
    def test_on_row_removed_removes_correct_row(self):
        presenter = RunTabPresenter(SANSFacility.ISIS)
        presenter.set_view(mock.MagicMock())
        row_0 = [
            '74040', '', '74040', '', '74040', '', '74040', '', '74040', '',
            '74040', '', 'test_reduction', 'user_file', '1.2', ''
        ]
        row_1 = [
            '74041', '', '74041', '', '74041', '', '74041', '', '74041', '',
            '74041', '', 'test_reduction', 'user_file', '1.2', ''
        ]
        row_2 = [
            '74042', '', '74042', '', '74042', '', '74042', '', '74042', '',
            '74042', '', 'test_reduction', 'user_file', '1.2', ''
        ]
        row_3 = [
            '74043', '', '74043', '', '74043', '', '74043', '', '74043', '',
            '74043', '', 'test_reduction', 'user_file', '1.2', ''
        ]
        presenter._table_model.add_table_entry(0, TableIndexModel(*row_0))
        presenter._table_model.add_table_entry(1, TableIndexModel(*row_1))
        presenter._table_model.add_table_entry(2, TableIndexModel(*row_2))
        presenter._table_model.add_table_entry(3, TableIndexModel(*row_3))
        rows = [0, 2]

        presenter.on_rows_removed(rows)

        self.assertEqual(presenter._table_model.get_number_of_rows(), 2)
        model_row_0 = presenter._table_model.get_table_entry(0)
        self.assertEqual(model_row_0, TableIndexModel(*row_1))
        model_row_1 = presenter._table_model.get_table_entry(1)
        self.assertEqual(model_row_1, TableIndexModel(*row_3))
    def test_observers_subscribed_to(self):
        mocked_view_observers = mock.create_autospec(SansGuiObservable())
        self._mock_view.get_observable = mock.Mock(
            return_value=mocked_view_observers)
        presenter = RunTabPresenter(facility=SANSFacility.ISIS,
                                    run_tab_model=self.mock_run_tab_model,
                                    view=self._mock_view)

        self._mock_view.get_observable.assert_called_once()
        mocked_view_observers.reduction_dim.add_subscriber.assert_called_once_with(
            presenter._observers.reduction_dim)
        mocked_view_observers.save_options.add_subscriber.assert_called_once_with(
            presenter._observers.save_options)
    def test_that_returns_none_when_index_does_not_exist(self):
        # Arrange
        batch_file_path = save_to_csv(BATCH_FILE_TEST_CONTENT_2)
        user_file_path = create_user_file(sample_user_file)
        view, _, _ = create_mock_view(user_file_path, batch_file_path)
        presenter = RunTabPresenter(SANSFacility.ISIS)
        presenter.set_view(view)
        presenter.on_user_file_load()
        presenter.on_batch_file_load()

        # Act
        state = presenter.get_state_for_row(3)

        # Assert
        self.assertTrue(state is None)

        # Clean up
        remove_file(batch_file_path)
        remove_file(user_file_path)
    def test_that_process_selected_does_nothing_if_no_states_selected(self):
        presenter = RunTabPresenter(SANSFacility.ISIS)
        view = mock.MagicMock()
        view.get_selected_rows = mock.MagicMock(return_value=[])
        presenter.set_view(view)
        presenter._process_rows = mock.MagicMock()

        presenter.on_process_selected_clicked()
        self.assertEqual(
            presenter._process_rows.call_count, 0,
            "Expected presenter._process_rows to not have been called. Called {} times."
            .format(presenter._process_rows.call_count))
    def test_notify_progress_increments_progress(self):
        presenter = RunTabPresenter(SANSFacility.ISIS)
        view = mock.MagicMock()
        presenter.set_view(view)
        test_row_0 = ['SANS2D00022024', '', 'SANS2D00022048', '', 'SANS2D00022048', '', '', '', '', '', '', '',
                      'test_file', '', '1.0', '']
        presenter.on_row_inserted(0, test_row_0)

        presenter.notify_progress(0, [0.0], [1.0])

        self.assertEqual(presenter.progress, 1)
        self.assertEqual(presenter._view.progress_bar_value, 1)
Exemple #36
0
    def test_that_notify_progress_updates_state_and_tooltip_of_row_for_scale_and_shift(self):
        presenter = RunTabPresenter(SANSFacility.ISIS)
        view = mock.MagicMock()
        presenter.set_view(view)
        test_row_0 = ['SANS2D00022024', '', 'SANS2D00022048', '', 'SANS2D00022048', '', '', '', '', '', '', '',
                      'test_file', '', '1.0', '']
        presenter.on_row_inserted(0, test_row_0)

        presenter.notify_progress(0, [0.0], [1.0])

        self.assertEqual(presenter._table_model.get_table_entry(0).row_state, RowState.Processed)
        self.assertEqual(presenter._table_model.get_table_entry(0).options_column_model.get_options_string(),
                         'MergeScale=1.0, MergeShift=0.0')

        self.assertEqual(presenter.progress, 1)
        self.assertEqual(presenter._view.progress_bar_value, 1)
    def __init__(self, facility):
        super(MantidQt.MantidWidgets.DataProcessor.DataProcessorMainPresenter, self).__init__()

        self._view = None

        # Algorithm details
        self._gui_algorithm_name = None
        self._white_list = None
        self._black_list = None
        self._facility = facility

        # Set of sub presenters
        self._presenters = {}
        self._presenters.update({PresenterEnum.RunTabPresenter: RunTabPresenter(facility=self._facility)})
    def test_on_erase_rows_updates_view(self):
        presenter = RunTabPresenter(SANSFacility.ISIS)
        view = mock.MagicMock()
        view.get_selected_rows = mock.MagicMock(return_value=[1, 2])
        presenter.set_view(view)
        test_row_0 = ['SANS2D00022024', '', 'SANS2D00022048', '', 'SANS2D00022048', '', '', '', '', '', '', '',
                      'test_file', '', '1.0', '', '', '', '']
        presenter.on_row_inserted(0, test_row_0)
        presenter.on_row_inserted(1, test_row_0)
        presenter.on_row_inserted(2, test_row_0)
        presenter.update_view_from_table_model = mock.MagicMock()

        presenter.on_erase_rows()

        self.assertEqual(presenter._table_model._table_entries[0].to_list(),
                         ['SANS2D00022024', '', 'SANS2D00022048', '', 'SANS2D00022048', '', '', '', '', '', '', '',
                          'test_file', '', '1.0', '', '', '', ''])
        self.assertEqual(presenter._table_model._table_entries[1].to_list(),
                         ['', '', '', '', '', '', '', '', '', '', '', '',
                          '', '', '', '', '', '', ''])
        self.assertEqual(presenter._table_model._table_entries[2].to_list(),
                         ['', '', '', '', '', '', '', '', '', '', '', '',
                          '', '', '', '', '', '', ''])
    def test_that_table_not_exported_if_table_is_empty(self):
        presenter = RunTabPresenter(SANSFacility.ISIS)
        view = mock.MagicMock()
        presenter.set_view(view)

        presenter._export_table = mock.MagicMock()

        presenter.on_export_table_clicked()
        self.assertEqual(
            presenter._export_table.call_count, 0,
            "_export table should not have been called."
            " It was called {} times.".format(
                presenter._export_table.call_count))
    def test_on_erase_rows_clears_rows_from_table_model(self):
        presenter = RunTabPresenter(SANSFacility.ISIS)
        view = mock.MagicMock()
        view.get_selected_rows = mock.MagicMock(return_value=[1, 2])
        presenter.set_view(view)
        test_row_0 = ['SANS2D00022024', '', 'SANS2D00022048', '', 'SANS2D00022048', '', '', '', '', '', '', '',
                      'test_file', '', '1.0', '', '', '', '']
        empty_row = TableModel.create_empty_row()

        presenter.on_row_inserted(0, test_row_0)
        presenter.on_row_inserted(1, test_row_0)
        presenter.on_row_inserted(2, test_row_0)

        presenter.on_erase_rows()

        self.assertEqual(presenter._table_model.get_number_of_rows(), 3)
        self.assertEqual(presenter._table_model.get_table_entry(0).to_list(), test_row_0)
        empty_row.id = 3
        self.assertEqual(presenter._table_model.get_table_entry(1).__dict__, empty_row.__dict__)
        empty_row.id = 4
        self.assertEqual(presenter._table_model.get_table_entry(2).__dict__, empty_row.__dict__)
Exemple #41
0
    def test_fails_silently_when_user_file_does_not_exist(self):
        view, _, _ = create_mock_view("non_existent_user_file")

        presenter = RunTabPresenter(SANSFacility.ISIS)
        presenter.set_view(view)

        try:
            presenter.on_user_file_load()
            has_raised = False
        except:  # noqa
            has_raised = True
        self.assertFalse(has_raised)
    def test_that_process_selected_does_nothing_if_no_states_selected(self):
        presenter = RunTabPresenter(SANSFacility.ISIS)
        view = mock.MagicMock()
        view.get_selected_rows = mock.MagicMock(return_value=[])
        presenter.set_view(view)
        presenter._process_rows = mock.MagicMock()

        presenter.on_process_selected_clicked()
        self.assertEqual(
            presenter._process_rows.call_count, 0,
            "Expected presenter._process_rows to not have been called. Called {} times.".format(
                presenter._process_rows.call_count))
    def test_that_process_selected_ignores_all_empty_rows(self):
        presenter = RunTabPresenter(SANSFacility.ISIS)
        view = mock.MagicMock()
        view.get_selected_rows = mock.MagicMock(return_value=[0, 1])
        presenter.set_view(view)

        table_model = TableModel()
        row_entry0 = [''] * 16
        row_entry1 = [
            '74040', '', '74040', '', '74040', '', '74040', '', '74040', '',
            '74040', '', 'test_reduction', 'user_file', '1.2', ''
        ]
        table_model.add_table_entry(0, TableIndexModel(*row_entry0))
        table_model.add_table_entry(1, TableIndexModel(*row_entry1))

        presenter._table_model = table_model
        presenter._process_rows = mock.MagicMock()

        presenter.on_process_selected_clicked()
        presenter._process_rows.assert_called_with([1])
    def test_batch_file_dir_not_added_to_config_if_batch_file_load_fails(self):
        presenter = RunTabPresenter(SANSFacility.ISIS)
        user_file_path = create_user_file(sample_user_file)
        view, settings_diagnostic_tab, masking_table = create_mock_view(
            user_file_path, "A/Path/batch_file.csv")
        presenter.set_view(view)

        presenter.on_batch_file_load()
        config_dirs = config["datasearch.directories"]
        result = "A/Path/" in config_dirs

        self.assertFalse(
            result, "We do not expect A/Path/ to be added to config, "
            "datasearch.directories is now {}".format(config_dirs))
Exemple #45
0
    def test_on_insert_row_updates_table_model(self):
        presenter = RunTabPresenter(SANSFacility.ISIS)
        presenter.set_view(mock.MagicMock())
        row = [
            '74044', '', '74044', '', '74044', '', '74044', '', '74044', '',
            '74044', '', 'test_reduction', 'user_file', '1.2', ''
        ]
        index = 0

        presenter.on_row_inserted(index, row)

        self.assertEqual(presenter._table_model.get_number_of_rows(), 1)
        model_row = presenter._table_model.get_table_entry(0)
        self.assertEqual(model_row, TableIndexModel(*row))
Exemple #46
0
 def test_that_process_all_ignores_selected_rows(self):
     presenter = RunTabPresenter(SANSFacility.ISIS)
     view = mock.MagicMock()
     view.get_selected_rows = mock.MagicMock(return_value=[0, 3, 4])
     
     presenter._table_model.get_number_of_rows = mock.MagicMock(return_value=7)
     presenter.set_view(view)
     presenter._table_model.reset_row_state = mock.MagicMock()
     
     presenter.on_process_all_clicked()
     self.assertEqual(
         presenter._table_model.reset_row_state.call_count, 7,
         "Expected reset_row_state to have been called 7 times. Called {} times.".format(
             presenter._table_model.reset_row_state.call_count))
    def test_on_insert_row_adds_row_to_table_model_after_selected_row(self):
        presenter = RunTabPresenter(SANSFacility.ISIS)
        view = mock.MagicMock()
        view.get_selected_rows = mock.MagicMock(return_value=[0])
        presenter.set_view(view)
        test_row_0 = ['SANS2D00022024', '', 'SANS2D00022048', '', 'SANS2D00022048', '', '', '', '', '', '', '',
                      'test_file', '', '1.0', '', '', '', '']
        test_row_1 = ['SANS2D00022024', '', '', '', '', '', '', '', '', '', '', '', 'test_file2', '', '1.0', '',
                      '', '', '']
        presenter.on_row_inserted(0, test_row_0)
        presenter.on_row_inserted(1, test_row_1)

        presenter.on_insert_row()

        self.assertEqual(presenter._table_model.get_number_of_rows(), 3)
        self.assertEqual(presenter._table_model.get_table_entry(1).to_list(), [''] * 19)
        self.assertEqual(presenter._table_model.get_table_entry(0).to_list(), test_row_0)
        self.assertEqual(presenter._table_model.get_table_entry(2).to_list(), test_row_1)
    def test_on_rows_removed_updates_view(self):
        presenter = RunTabPresenter(SANSFacility.ISIS)
        presenter.set_view(mock.MagicMock())
        row_0 = ['74040', '', '74040', '', '74040', '', '74040', '', '74040', '', '74040', '', 'test_reduction'
            , 'user_file', '1.2', '']
        row_1 = ['74041', '', '74041', '', '74041', '', '74041', '', '74041', '', '74041', '', 'test_reduction'
            , 'user_file', '1.2', '']
        row_2 = ['74042', '', '74042', '', '74042', '', '74042', '', '74042', '', '74042', '', 'test_reduction'
            , 'user_file', '1.2', '']
        row_3 = ['74043', '', '74043', '', '74043', '', '74043', '', '74043', '', '74043', '', 'test_reduction'
            , 'user_file', '1.2', '']
        presenter._table_model.add_table_entry(0, TableIndexModel(*row_0))
        presenter._table_model.add_table_entry(1, TableIndexModel(*row_1))
        presenter._table_model.add_table_entry(2, TableIndexModel(*row_2))
        presenter._table_model.add_table_entry(3, TableIndexModel(*row_3))
        presenter.update_view_from_table_model = mock.MagicMock()
        rows = [0, 2]

        presenter.on_rows_removed(rows)

        presenter.update_view_from_table_model.assert_called_once_with()
    def test_that_will_load_user_file(self):
        # Setup presenter and mock view
        user_file_path = create_user_file(sample_user_file)
        view, settings_diagnostic_tab, _ = create_mock_view(user_file_path)
        presenter = RunTabPresenter(SANSFacility.ISIS)
        presenter.set_view(view)

        # Act
        presenter.on_user_file_load()

        # Assert
        # Note that the event slices are not set in the user file
        self.assertFalse(view.event_slices)
        self.assertTrue(view.reduction_dimensionality is ReductionDimensionality.OneDim)
        self.assertTrue(view.save_types[0] is SaveType.NXcanSAS)
        self.assertTrue(view.zero_error_free)
        self.assertTrue(view.use_optimizations)
        self.assertTrue(view.reduction_mode is ISISReductionMode.LAB)
        self.assertTrue(view.merge_scale == 1.)
        self.assertTrue(view.merge_shift == 0.)
        self.assertFalse(view.merge_scale_fit)
        self.assertFalse(view.merge_shift_fit)
        self.assertTrue(view.event_binning == "7000.0,500.0,60000.0")
        self.assertTrue(view.wavelength_step_type is RangeStepType.Lin)
        self.assertTrue(view.wavelength_min == 1.5)
        self.assertTrue(view.wavelength_max == 12.5)
        self.assertTrue(view.wavelength_step == 0.125)
        self.assertTrue(view.absolute_scale == 0.074)
        self.assertTrue(view.z_offset == 53.)
        self.assertTrue(view.normalization_incident_monitor == 1)
        self.assertTrue(view.normalization_interpolate)
        self.assertTrue(view.transmission_incident_monitor == 1)
        self.assertTrue(view.transmission_interpolate)
        self.assertTrue(view.transmission_roi_files == "test2.xml")
        self.assertTrue(view.transmission_mask_files == "test4.xml")
        self.assertTrue(view.transmission_radius == 7.)
        self.assertTrue(view.transmission_monitor == 4)
        self.assertTrue(view.transmission_mn_shift == -70)
        self.assertTrue(view.transmission_sample_use_fit)
        self.assertTrue(view.transmission_sample_fit_type is FitType.Logarithmic)
        self.assertTrue(view.transmission_sample_polynomial_order == 2)
        self.assertTrue(view.transmission_sample_wavelength_min == 1.5)
        self.assertTrue(view.transmission_sample_wavelength_max == 12.5)
        self.assertTrue(view.transmission_sample_use_wavelength)
        self.assertFalse(view.pixel_adjustment_det_1)
        self.assertFalse(view.pixel_adjustment_det_2)
        self.assertFalse(view.wavelength_adjustment_det_1)
        self.assertFalse(view.wavelength_adjustment_det_2)
        self.assertTrue(view.q_1d_min_or_rebin_string == "0.001,0.001,0.0126,-0.08,0.2")
        self.assertTrue(view.q_xy_max == 0.05)
        self.assertTrue(view.q_xy_step == 0.001)
        self.assertTrue(view.q_xy_step_type == RangeStepType.Lin)
        self.assertTrue(view.gravity_on_off)
        self.assertTrue(view.use_q_resolution)
        self.assertTrue(view.q_resolution_sample_a == 14.)
        self.assertTrue(view.q_resolution_source_a == 13.)
        self.assertTrue(view.q_resolution_delta_r == 11.)
        self.assertTrue(view.q_resolution_collimation_length == 12.)
        self.assertTrue(view.q_resolution_moderator_file == "moderator_rkh_file.txt")
        self.assertFalse(view.phi_limit_use_mirror)
        self.assertTrue(view.radius_limit_min == 12.)
        self.assertTrue(view.radius_limit_min == 12.)
        self.assertTrue(view.radius_limit_max == 15.)
        self.assertFalse(view.compatibility_mode)
        self.assertFalse(view.show_transmission)

        # Assert that Beam Centre View is updated correctly
        self.assertEqual(view.beam_centre.lab_pos_1, 155.45)
        self.assertEqual(view.beam_centre.lab_pos_2, -169.6)
        self.assertEqual(view.beam_centre.hab_pos_1, 155.45)
        self.assertEqual(view.beam_centre.hab_pos_2, -169.6)

        # Assert certain function calls
        self.assertTrue(view.get_user_file_path.call_count == 3)
        self.assertTrue(view.get_batch_file_path.call_count == 2)  # called twice for the sub presenter updates (masking table and settings diagnostic tab)  # noqa
        self.assertTrue(view.get_cell.call_count == 64)

        self.assertTrue(view.get_number_of_rows.call_count == 6)

        # clean up
        remove_file(user_file_path)
#
# Copyright © 2018 ISIS Rutherford Appleton Laboratory UKRI,
#     NScD Oak Ridge National Laboratory, European Spallation Source
#     & Institut Laue - Langevin
# SPDX - License - Identifier: GPL - 3.0 +
#pylint: disable=invalid-name
"""
    Script used to start the Test Interface from MantidPlot
"""
from ui.sans_isis import sans_data_processor_gui
from sans.gui_logic.presenter.run_tab_presenter import RunTabPresenter
from sans.common.enums import SANSFacility

# -----------------------------------------------
# Create presenter
# -----------------------------------------------
run_tab_presenter = RunTabPresenter(SANSFacility.ISIS)
# -------------------------------------------------
# Create view
# ------------------------------------------------
ui = sans_data_processor_gui.SANSDataProcessorGui()

# -----------------------------------------------
# Set view on the presenter.
# The presenter delegates the view.
# -----------------------------------------------
run_tab_presenter.set_view(ui)

# Show
ui.show()