def setUp(self): super(ApplicationViewTest, self).setUp() class TestFactory(object): def create_controller(self, view): return Mock(spec=AbstractController) self.appview = ApplicationView(TestFactory()) self.controller = self.appview.controller
def setUp(self): WxWidgetTestCase.setUp(self) parser = AstromParser() context = LocalDirectoryWorkingContext( self.get_abs_path("data/controller_testdir")) progress_manager = LocalProgressManager(context) workunit_provider = WorkUnitProvider(tasks.get_suffix(tasks.REALS_TASK), context, progress_manager, RealsWorkUnitBuilder( parser, context, context, progress_manager)) image_manager = Mock(spec=ImageManager) self.model = ValidationModel(workunit_provider, image_manager, None) self.model.start_work() self.model.get_writer = Mock(return_value=Mock(spec=mpc.MPCWriter)) # We don't actually have any images loaded, so mock this out source_cutout = Mock(spec=SourceCutout) source_cutout.pixel_x = 11 source_cutout.pixel_y = 50 self.model.get_current_cutout = Mock(return_value=source_cutout) x_cen = 10 y_cen = 50 mag = 24.0 self.model.get_current_source_observed_magnitude = Mock(return_value=(x_cen, y_cen, mag)) self.model.is_current_source_adjusted = Mock(return_value=False) self.model.get_current_fits_header = Mock() self.name_generator = Mock(spec=ProvisionalNameGenerator) self.name_generator.generate_name.return_value = TEST_PROVISIONAL_NAME class TestFactory(object): def __init__(self, model, name_generator): self.model = model self.name_generator = name_generator def create_controller(self, view): return ProcessRealsController(self.model, view, self.name_generator) self.view = ApplicationView( TestFactory(self.model, self.name_generator)) self.controller = self.view.controller self.controller.display_current_image = Mock()
class ApplicationViewTest(WxWidgetTestCase): def setUp(self): super(ApplicationViewTest, self).setUp() class TestFactory(object): def create_controller(self, view): return Mock(spec=AbstractController) self.appview = ApplicationView(TestFactory()) self.controller = self.appview.controller def tearDown(self): self.appview.close() def mock_image_viewer(self): image_viewer = Mock(spec=SingletViewer) self.appview.image_view_manager.image_viewer = image_viewer return image_viewer def test_press_exit(self): menubar = self.appview.mainframe.GetMenuBar() filemenu = menubar.GetMenu(menubar.FindMenu("File")) exit_button = self.get_menuitem_by_label(filemenu, "Exit") # Fire menu selection event event = wx.CommandEvent(wx.wxEVT_COMMAND_MENU_SELECTED, exit_button.GetId()) self.appview.mainframe.ProcessEvent(event) assert_that(self.controller.on_exit.call_count, equal_to(1)) def test_reset_colormap(self): image_viewer = self.mock_image_viewer() self.appview.reset_colormap() image_viewer.reset_colormap.assert_called_once_with() def test_toggle_reticule(self): image_viewer = self.mock_image_viewer() self.appview.toggle_reticule() image_viewer.toggle_reticule.assert_called_once_with()
class ProcessRealsControllerTest(WxWidgetTestCase, FileReadingTestCase, DirectoryCleaningTestCase): def setUp(self): WxWidgetTestCase.setUp(self) parser = AstromParser() context = LocalDirectoryWorkingContext( self.get_abs_path("data/controller_testdir")) progress_manager = LocalProgressManager(context) workunit_provider = WorkUnitProvider(tasks.get_suffix(tasks.REALS_TASK), context, progress_manager, RealsWorkUnitBuilder( parser, context, context, progress_manager)) image_manager = Mock(spec=ImageManager) self.model = ValidationModel(workunit_provider, image_manager, None) self.model.start_work() self.model.get_writer = Mock(return_value=Mock(spec=mpc.MPCWriter)) # We don't actually have any images loaded, so mock this out source_cutout = Mock(spec=SourceCutout) source_cutout.pixel_x = 11 source_cutout.pixel_y = 50 self.model.get_current_cutout = Mock(return_value=source_cutout) x_cen = 10 y_cen = 50 mag = 24.0 self.model.get_current_source_observed_magnitude = Mock(return_value=(x_cen, y_cen, mag)) self.model.is_current_source_adjusted = Mock(return_value=False) self.model.get_current_fits_header = Mock() self.name_generator = Mock(spec=ProvisionalNameGenerator) self.name_generator.generate_name.return_value = TEST_PROVISIONAL_NAME class TestFactory(object): def __init__(self, model, name_generator): self.model = model self.name_generator = name_generator def create_controller(self, view): return ProcessRealsController(self.model, view, self.name_generator) self.view = ApplicationView( TestFactory(self.model, self.name_generator)) self.controller = self.view.controller self.controller.display_current_image = Mock() 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"] @patch("ossos.gui.controllers.mpc.Observation", spec=mpc.Observation) def test_reject_disables_validation_controls(self, mock_Observation): comment = "test" assert_that(self.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(self.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(self.view.is_source_validation_enabled(), equal_to(False)) self.controller.on_next_obs() assert_that(self.view.is_source_validation_enabled(), equal_to(True)) self.controller.on_next_obs() assert_that(self.view.is_source_validation_enabled(), equal_to(True)) @patch("ossos.gui.controllers.mpc.Observation", spec=mpc.Observation) def test_reject_last_item_disables_validation_controls(self, mock_Observation): comment = "test" self.controller.on_next_obs() self.controller.on_next_obs() assert_that(self.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(self.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(self.view.is_source_validation_enabled(), equal_to(False)) self.controller.on_next_obs() assert_that(self.view.is_source_validation_enabled(), equal_to(True)) self.controller.on_next_obs() assert_that(self.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_NOTE1, TEST_NOTE2, TEST_DATE, TEST_RA, TEST_DEC, TEST_MAG, TEST_MAG_ERR, 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 test_phot_error_handling(self): view_mock = Mock(spec=ApplicationView) self.controller.view = view_mock error_message = "Photometry failed" self.model.get_current_source_observed_magnitude = Mock( side_effect=TaskError(error_message)) self.model.get_current_band = Mock(return_value="B") self.controller.on_accept() view_mock.show_accept_source_dialog.assert_called_once_with( ANY, ANY, ANY, ANY, "", # obs_mag -1, # obs_mag_err "", # band note1_choices=ANY, note2_choices=ANY, note1_default=ANY, note2_default=ANY, default_observatory_code=ANY, default_comment=error_message, phot_failure=True )
class ProcessRealsControllerTest(WxWidgetTestCase, FileReadingTestCase, DirectoryCleaningTestCase): def setUp(self): WxWidgetTestCase.setUp(self) parser = AstromParser() context = LocalDirectoryWorkingContext( self.get_abs_path("data/controller_testdir")) progress_manager = LocalProgressManager(context) workunit_provider = WorkUnitProvider(tasks.get_suffix(tasks.REALS_TASK), context, progress_manager, RealsWorkUnitBuilder( parser, context, context, progress_manager)) image_manager = Mock(spec=ImageManager) self.model = ValidationModel(workunit_provider, image_manager, None) self.model.start_work() self.model.get_writer = Mock(return_value=Mock(spec=mpc.MPCWriter)) # We don't actually have any images loaded, so mock this out source_cutout = Mock(spec=SourceCutout) source_cutout.pixel_x = 11 source_cutout.pixel_y = 50 self.model.get_current_cutout = Mock(return_value=source_cutout) x_cen = 10 y_cen = 50 mag = 24.0 self.model.get_current_source_observed_magnitude = Mock(return_value=(x_cen, y_cen, mag)) self.model.is_current_source_adjusted = Mock(return_value=False) self.model.get_current_fits_header = Mock() self.name_generator = Mock(spec=ProvisionalNameGenerator) self.name_generator.generate_name.return_value = TEST_PROVISIONAL_NAME class TestFactory(object): def __init__(self, model, name_generator): self.model = model self.name_generator = name_generator def create_controller(self, view): return ProcessRealsController(self.model, view, self.name_generator) self.view = ApplicationView( TestFactory(self.model, self.name_generator)) self.controller = self.view.controller self.controller.display_current_image = Mock() 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"] @patch("daomop.gui.controllers.mpc.Observation", spec=mpc.Observation) def test_reject_disables_validation_controls(self, mock_Observation): comment = "test" assert_that(self.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(self.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(self.view.is_source_validation_enabled(), equal_to(False)) self.controller.on_next_obs() assert_that(self.view.is_source_validation_enabled(), equal_to(True)) self.controller.on_next_obs() assert_that(self.view.is_source_validation_enabled(), equal_to(True)) @patch("daomop.gui.controllers.mpc.Observation", spec=mpc.Observation) def test_reject_last_item_disables_validation_controls(self, mock_Observation): comment = "test" self.controller.on_next_obs() self.controller.on_next_obs() assert_that(self.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(self.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(self.view.is_source_validation_enabled(), equal_to(False)) self.controller.on_next_obs() assert_that(self.view.is_source_validation_enabled(), equal_to(True)) self.controller.on_next_obs() assert_that(self.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_NOTE1, TEST_NOTE2, TEST_DATE, TEST_RA, TEST_DEC, TEST_MAG, TEST_MAG_ERR, 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 test_phot_error_handling(self): view_mock = Mock(spec=ApplicationView) self.controller.view = view_mock error_message = "Photometry failed" self.model.get_current_source_observed_magnitude = Mock( side_effect=TaskError(error_message)) self.model.get_current_band = Mock(return_value="B") self.controller.on_accept() view_mock.show_accept_source_dialog.assert_called_once_with( ANY, ANY, ANY, ANY, "", # obs_mag -1, # obs_mag_err "", # band note1_choices=ANY, note2_choices=ANY, note1_default=ANY, note2_default=ANY, default_observatory_code=ANY, default_comment=error_message, phot_failure=True )
def _create_view(self, model, debug=False): return ApplicationView(self._create_controller_factory(model), track_mode=True, debug=debug)