Beispiel #1
0
class RealsControllerTest(unittest.TestCase):
    def setUp(self):
        self.model = MagicMock(spec=ValidationModel)
        self.model.get_current_source_observed_magnitude.return_value = 10, 20, 100, 1

        self.view = Mock(spec=ApplicationView)
        self.controller = ProcessRealsController(
            self.model, self.view, Mock(spec=ProvisionalNameGenerator))

    def test_accept_sets_note1_to_hand_adjusted_if_current_source_adjusted(self):
        self.model.is_current_source_adjusted.return_value = True

        self.controller.on_accept()
        self.view.show_accept_source_dialog.assert_called_once_with(
            ANY,
            ANY,
            ANY,
            ANY,
            ANY,
            ANY,
            ANY,
            note1_choices=ANY,
            note2_choices=ANY,
            note1_default=config.read("MPC.NOTE1_HAND_ADJUSTED"),
            note2_default=ANY,
            default_observatory_code=ANY,
            default_comment=ANY,
            phot_failure=ANY)

    def test_accept_doesnt_set_note1_to_hand_adjusted_if_current_source_not_adjusted(self):
        self.model.is_current_source_adjusted.return_value = False

        self.controller.on_accept()
        self.view.show_accept_source_dialog.assert_called_once_with(
            ANY,
            ANY,
            ANY,
            ANY,
            ANY,
            ANY,
            ANY,
            note1_choices=ANY,
            note2_choices=ANY,
            note1_default=None,
            note2_default=ANY,
            default_observatory_code=ANY,
            default_comment=ANY,
            phot_failure=ANY)
Beispiel #2
0
    def setUp(self):
        self.model = MagicMock(spec=ValidationModel)
        self.model.get_current_source_observed_magnitude.return_value = 10, 20, 100, 1

        self.view = Mock(spec=ApplicationView)
        self.controller = ProcessRealsController(
            self.model, self.view, Mock(spec=ProvisionalNameGenerator))
Beispiel #3
0
    def create_controller(self, view):
        if self.dry_run:
            name_generator = DryRunNameGenerator()
        else:
            name_generator = ProvisionalNameGenerator()

        return ProcessRealsController(self.model, view, name_generator)
Beispiel #4
0
    def setUp(self):
        WxWidgetTestCase.setUp(self)

        parser = AstromParser()
        directory_manager = DirectoryContext(
            self.get_abs_path("data/controller_testdir"))
        progress_manager = ProgressManager(directory_manager)
        workunit_provider = WorkUnitProvider(tasks.get_suffix(tasks.REALS_TASK),
                                             directory_manager, progress_manager,
                                             RealsWorkUnitBuilder(parser, progress_manager))

        download_manager = Mock(spec=AsynchronousImageDownloadManager)

        self.model = UIModel(workunit_provider, progress_manager, download_manager)

        self.name_generator = Mock()
        self.controller = ProcessRealsController(self.model, self.name_generator)
Beispiel #5
0
class ProcessRealsControllerTest(WxWidgetTestCase, FileReadingTestCase, DirectoryCleaningTestCase):
    def setUp(self):
        WxWidgetTestCase.setUp(self)

        parser = AstromParser()
        directory_manager = DirectoryContext(
            self.get_abs_path("data/controller_testdir"))
        progress_manager = ProgressManager(directory_manager)
        workunit_provider = WorkUnitProvider(tasks.get_suffix(tasks.REALS_TASK),
                                             directory_manager, progress_manager,
                                             RealsWorkUnitBuilder(parser, progress_manager))

        download_manager = Mock(spec=AsynchronousImageDownloadManager)

        self.model = UIModel(workunit_provider, progress_manager, download_manager)

        self.name_generator = Mock()
        self.controller = ProcessRealsController(self.model, self.name_generator)

    def tearDown(self):
        WxWidgetTestCase.tearDown(self)
        DirectoryCleaningTestCase.tearDown(self)

    def get_directory_to_clean(self):
        return self.get_abs_path("data/controller_testdir")

    def get_files_to_keep(self):
        return ["1584431p15.measure3.reals.astrom", "1616681p10.measure3.reals.astrom"]

    def test_reject_disables_validation_controls(self):
        comment = "test"
        view = self.controller.get_view()

        assert_that(view.is_source_validation_enabled(), equal_to(True))
        self.controller.on_do_reject(comment)

        # We have moved to the next item, so it should still be enabled
        assert_that(view.is_source_validation_enabled(), equal_to(True))

        # Loop back to that first item
        self.controller.on_next_obs()
        self.controller.on_next_obs()
        assert_that(view.is_source_validation_enabled(), equal_to(False))

        self.controller.on_next_obs()
        assert_that(view.is_source_validation_enabled(), equal_to(True))
        self.controller.on_next_obs()
        assert_that(view.is_source_validation_enabled(), equal_to(True))

    def test_reject_last_item_disables_validation_controls(self):
        comment = "test"
        view = self.controller.get_view()

        self.controller.on_next_obs()
        self.controller.on_next_obs()
        assert_that(view.is_source_validation_enabled(), equal_to(True))
        self.controller.on_do_reject(comment)

        # We have moved to the next item (looped back to beginning), so it should still be enabled
        assert_that(view.is_source_validation_enabled(), equal_to(True))

        # Move forward to that last item again
        self.controller.on_next_obs()
        self.controller.on_next_obs()
        assert_that(view.is_source_validation_enabled(), equal_to(False))

        self.controller.on_next_obs()
        assert_that(view.is_source_validation_enabled(), equal_to(True))
        self.controller.on_next_obs()
        assert_that(view.is_source_validation_enabled(), equal_to(True))

    def accept_source_reading(self):
        self.controller.on_do_accept(TEST_MINOR_PLANET_NUMBER,
                                     TEST_PROVISIONAL_NAME,
                                     TEST_DISCOVERY_AST,
                                     TEST_NOTE1,
                                     TEST_NOTE2,
                                     TEST_DATE,
                                     TEST_RA,
                                     TEST_DEC,
                                     TEST_MAG,
                                     TEST_BAND,
                                     TEST_OBS_CODE,
                                     TEST_COMMENT
        )

    def reject_source_reading(self):
        self.controller.on_do_reject(TEST_COMMENT)

    def test_accept_moves_to_first_observation_of_new_workunit(self):
        workunit1 = self.model.get_current_workunit()

        assert_that(self.model.get_current_source_number(), equal_to(0))
        assert_that(self.model.get_current_obs_number(), equal_to(0))

        self.accept_source_reading()

        assert_that(self.model.get_current_source_number(), equal_to(0))
        assert_that(self.model.get_current_obs_number(), equal_to(1))

        self.accept_source_reading()

        assert_that(self.model.get_current_source_number(), equal_to(0))
        assert_that(self.model.get_current_obs_number(), equal_to(2))

        self.accept_source_reading()

        assert_that(self.model.get_current_source_number(), equal_to(1))
        assert_that(self.model.get_current_obs_number(), equal_to(0))

        self.accept_source_reading()

        assert_that(self.model.get_current_source_number(), equal_to(1))
        assert_that(self.model.get_current_obs_number(), equal_to(1))

        self.accept_source_reading()

        assert_that(self.model.get_current_source_number(), equal_to(1))
        assert_that(self.model.get_current_obs_number(), equal_to(2))

        self.accept_source_reading()

        assert_that(self.model.get_current_source_number(), equal_to(2))
        assert_that(self.model.get_current_obs_number(), equal_to(0))

        self.accept_source_reading()

        assert_that(self.model.get_current_source_number(), equal_to(2))
        assert_that(self.model.get_current_obs_number(), equal_to(1))

        self.accept_source_reading()

        assert_that(self.model.get_current_source_number(), equal_to(2))
        assert_that(self.model.get_current_obs_number(), equal_to(2))

        self.accept_source_reading()

        workunit2 = self.model.get_current_workunit()

        assert_that(workunit2, is_not(same_instance(workunit1)))

        assert_that(self.model.get_current_source_number(), equal_to(0))
        assert_that(self.model.get_current_obs_number(), equal_to(0))

    def read_written_results(self):
        writer = self.model.get_current_workunit().get_writer()
        filehandle = writer.filehandle
        filehandle.seek(0)
        return filehandle.read()

    def test_writer_flushing(self):
        def assert_sources_written_equals(num_sources):
            if num_sources == 0:
                assert_that(self.read_written_results(), equal_to(""))
            else:
                # Each source has 3 readings, and each reading has a comment
                # line and MPC line
                assert_that(self.read_written_results().rstrip().split("\n"),
                            has_length(6 * num_sources))

        # Should flush only after accepting all readings for a source
        assert_sources_written_equals(0)
        self.accept_source_reading()
        assert_sources_written_equals(0)
        self.accept_source_reading()
        assert_sources_written_equals(0)
        self.accept_source_reading()
        assert_sources_written_equals(1)

        self.reject_source_reading()
        assert_sources_written_equals(1)
        self.reject_source_reading()
        assert_sources_written_equals(1)
        self.reject_source_reading()
        assert_sources_written_equals(2)
Beispiel #6
0
 def create_controller(self, view):
     return ProcessRealsController(self.model, view,
                                   self.name_generator)
Beispiel #7
0
 def create_controller(self, model):
     return ProcessRealsController(model, ProvisionalNameGenerator())