def test_single_click_timeout_single(self, mocked_make_preview): """ Test that when a single click has been registered, the item is sent to preview """ # GIVEN: A service manager. service_manager = ServiceManager(None) # WHEN: on_single_click_preview() is called service_manager.on_single_click_preview_timeout() # THEN: make_preview() should have been called assert mocked_make_preview.call_count == 1, 'ServiceManager.make_preview() should have been called once'
def setUp(self): """ Create the UI """ Registry.create() self.setup_application() Registry().register('application', MagicMock()) Registry().register('main_window', MagicMock(service_manager_settings_section='servicemanager')) self.service_manager = ServiceManager() self.add_toolbar_action_patcher = patch('openlp.core.ui.servicemanager.OpenLPToolbar.add_toolbar_action') self.mocked_add_toolbar_action = self.add_toolbar_action_patcher.start() self.mocked_add_toolbar_action.side_effect = self._create_mock_action
def test_save_file_raises_permission_error(self, mocked_os, mocked_save_file_as, mocked_zipfile): """ Test that when a PermissionError is raised when trying to save a file, it is handled correctly """ # GIVEN: A service manager, a service to save mocked_main_window = MagicMock() mocked_main_window.service_manager_settings_section = 'servicemanager' Registry().register('main_window', mocked_main_window) Registry().register('application', MagicMock()) service_manager = ServiceManager(None) service_manager._service_path = MagicMock() service_manager._save_lite = False service_manager.service_items = [] service_manager.service_theme = 'Default' service_manager.service_manager_list = MagicMock() mocked_save_file_as.return_value = True mocked_zipfile.ZipFile.return_value = MagicMock() mocked_os.link.side_effect = PermissionError # WHEN: The service is saved and a PermissionError is raised result = service_manager.save_file() # THEN: The "save_as" method is called to save the service assert result is True mocked_save_file_as.assert_called_with()
def test_single_click_preview_false(self, mocked_singleShot, MockedSettings): """ Test that when "Preview items when clicked in Service Manager" disabled the preview timer doesn't start """ # GIVEN: A setting to enable "Preview items when clicked in Service Manager" and a service manager. mocked_settings = MagicMock() mocked_settings.value.return_value = False MockedSettings.return_value = mocked_settings service_manager = ServiceManager(None) # WHEN: on_single_click_preview() is called service_manager.on_single_click_preview() # THEN: timer should not be started assert mocked_singleShot.call_count == 0, 'Should not be called'
def test_create_basic_service(self): """ Test the create basic service array """ # GIVEN: A new service manager instance. service_manager = ServiceManager(None) # WHEN: when the basic service array is created. service_manager._save_lite = False service_manager.service_theme = 'test_theme' service = service_manager.create_basic_service()[0] # THEN: The controller should be registered in the registry. assert service is not None, 'The base service should be created' assert service['openlp_core'][ 'service-theme'] == 'test_theme', 'The test theme should be saved' assert service['openlp_core'][ 'lite-service'] is False, 'The lite service should be saved'
def test_single_click_preview_true(self, mocked_singleShot, MockedSettings): """ Test that when "Preview items when clicked in Service Manager" enabled the preview timer starts """ # GIVEN: A setting to enable "Preview items when clicked in Service Manager" and a service manager. mocked_settings = MagicMock() mocked_settings.value.return_value = True MockedSettings.return_value = mocked_settings service_manager = ServiceManager(None) # WHEN: on_single_click_preview() is called service_manager.on_single_click_preview() # THEN: timer should have been started mocked_singleShot.assert_called_with( PyQt5.QtWidgets.QApplication.instance().doubleClickInterval(), service_manager.on_single_click_preview_timeout)
def test_initial_service_manager(self): """ Test the initial of service manager. """ # GIVEN: A new service manager instance. ServiceManager(None) # WHEN: the default service manager is built. # THEN: The the controller should be registered in the registry. assert Registry().get( 'service_manager' ) is not None, 'The base service manager should be registered'
def test_theme_change_song(self, mocked_regenerate_service_items): """ Test that when a Toolbar theme combobox displays correctly when the theme is set to Song """ # GIVEN: A service manager, a service to display with a theme level in the renderer mocked_renderer = MagicMock() service_manager = ServiceManager(None) Registry().register('renderer', mocked_renderer) service_manager.toolbar = OpenLPToolbar(None) service_manager.toolbar.add_toolbar_action('theme_combo_box', triggers=MagicMock()) service_manager.toolbar.add_toolbar_action('theme_label', triggers=MagicMock()) # WHEN: The service manager has a Song theme mocked_renderer.theme_level = ThemeLevel.Song service_manager.theme_change() # THEN: The the theme toolbar should be visible assert service_manager.toolbar.actions['theme_combo_box'].isVisible() is True, \ 'The visibility should be True'
def test_single_click_timeout_double(self, mocked_make_live, mocked_make_preview): """ Test that when a double click has been registered, the item does not goes to preview """ # GIVEN: A service manager. service_manager = ServiceManager(None) # WHEN: on_single_click_preview() is called after a double click service_manager.on_double_click_live() service_manager.on_single_click_preview_timeout() # THEN: make_preview() should not have been called assert mocked_make_preview.call_count == 0, 'ServiceManager.make_preview() should not be called'
def test_supported_suffixes(self): """ Test the create basic service array """ # GIVEN: A new service manager instance. service_manager = ServiceManager(None) # WHEN: a suffix is added as an individual or a list. service_manager.supported_suffixes('txt') service_manager.supported_suffixes(['pptx', 'ppt']) # THEN: The suffixes should be available to test. assert 'txt' in service_manager.suffixes, 'The suffix txt should be in the list' assert 'ppt' in service_manager.suffixes, 'The suffix ppt should be in the list' assert 'pptx' in service_manager.suffixes, 'The suffix pptx should be in the list'
def test_single_click_preview_double(self, mocked_make_live, mocked_singleShot, MockedSettings): """ Test that when a double click has registered the preview timer doesn't start """ # GIVEN: A setting to enable "Preview items when clicked in Service Manager" and a service manager. mocked_settings = MagicMock() mocked_settings.value.return_value = True MockedSettings.return_value = mocked_settings service_manager = ServiceManager(None) # WHEN: on_single_click_preview() is called following a double click service_manager.on_double_click_live() service_manager.on_single_click_preview() # THEN: timer should not be started mocked_make_live.assert_called_with() assert mocked_singleShot.call_count == 0, 'Should not be called'
class TestServiceManager(TestCase, TestMixin): """ Test the service manager """ def _create_mock_action(self, name, **kwargs): """ Create a fake action with some "real" attributes """ action = QtWidgets.QAction(self.service_manager) action.setObjectName(name) if kwargs.get('triggers'): action.triggered.connect(kwargs.pop('triggers')) self.service_manager.toolbar.actions[name] = action return action def setUp(self): """ Create the UI """ Registry.create() self.setup_application() Registry().register('application', MagicMock()) Registry().register( 'main_window', MagicMock(service_manager_settings_section='servicemanager')) self.service_manager = ServiceManager() self.add_toolbar_action_patcher = patch( 'openlp.core.ui.servicemanager.OpenLPToolbar.add_toolbar_action') self.mocked_add_toolbar_action = self.add_toolbar_action_patcher.start( ) self.mocked_add_toolbar_action.side_effect = self._create_mock_action def tearDown(self): """ Delete all the C++ objects at the end so that we don't have a segfault """ self.add_toolbar_action_patcher.stop() del self.service_manager def test_basic_service_manager(self): """ Test the Service Manager UI Functionality """ # GIVEN: A New Service Manager instance # WHEN I have set up the display self.service_manager.setup_ui(self.service_manager) # THEN the count of items should be zero assert self.service_manager.service_manager_list.topLevelItemCount() == 0, \ 'The service manager list should be empty ' @patch('openlp.core.ui.servicemanager.QtWidgets.QTreeWidget.itemAt') @patch('openlp.core.ui.servicemanager.QtWidgets.QWidget.mapToGlobal') @patch('openlp.core.ui.servicemanager.QtWidgets.QMenu.exec') def test_default_context_menu(self, mocked_exec, mocked_mapToGlobal, mocked_item_at_method): """ Test the context_menu() method with a default service item """ # GIVEN: A service item added mocked_item = MagicMock() mocked_item.parent.return_value = None mocked_item_at_method.return_value = mocked_item mocked_item.data.return_value = 1 self.service_manager.setup_ui(self.service_manager) # A service item without capabilities. service_item = ServiceItem() self.service_manager.service_items = [{'service_item': service_item}] q_point = None # Mocked actions. self.service_manager.edit_action.setVisible = MagicMock() self.service_manager.create_custom_action.setVisible = MagicMock() self.service_manager.maintain_action.setVisible = MagicMock() self.service_manager.notes_action.setVisible = MagicMock() self.service_manager.time_action.setVisible = MagicMock() self.service_manager.auto_start_action.setVisible = MagicMock() # WHEN: Show the context menu. self.service_manager.context_menu(q_point) # THEN: The following actions should be not visible. self.service_manager.edit_action.setVisible.assert_called_once_with(False), \ 'The action should be set invisible.' self.service_manager.create_custom_action.setVisible.assert_called_once_with(False), \ 'The action should be set invisible.' self.service_manager.maintain_action.setVisible.assert_called_once_with(False), \ 'The action should be set invisible.' self.service_manager.notes_action.setVisible.assert_called_with( True), 'The action should be set visible.' self.service_manager.time_action.setVisible.assert_called_once_with(False), \ 'The action should be set invisible.' self.service_manager.auto_start_action.setVisible.assert_called_once_with(False), \ 'The action should be set invisible.' def test_edit_context_menu(self): """ Test the context_menu() method with a edit service item """ # GIVEN: A service item added self.service_manager.setup_ui(self.service_manager) with patch('PyQt5.QtWidgets.QTreeWidget.itemAt') as mocked_item_at_method, \ patch('PyQt5.QtWidgets.QWidget.mapToGlobal'), \ patch('PyQt5.QtWidgets.QMenu.exec'): mocked_item = MagicMock() mocked_item.parent.return_value = None mocked_item_at_method.return_value = mocked_item # We want 1 to be returned for the position mocked_item.data.return_value = 1 # A service item without capabilities. service_item = ServiceItem() service_item.add_capability(ItemCapabilities.CanEdit) service_item.edit_id = 1 self.service_manager.service_items = [{ 'service_item': service_item }] q_point = None # Mocked actions. self.service_manager.edit_action.setVisible = MagicMock() self.service_manager.create_custom_action.setVisible = MagicMock() self.service_manager.maintain_action.setVisible = MagicMock() self.service_manager.notes_action.setVisible = MagicMock() self.service_manager.time_action.setVisible = MagicMock() self.service_manager.auto_start_action.setVisible = MagicMock() # WHEN: Show the context menu. self.service_manager.context_menu(q_point) # THEN: The following actions should be not visible. self.service_manager.edit_action.setVisible.assert_called_with(True), \ 'The action should be set visible.' self.service_manager.create_custom_action.setVisible.assert_called_once_with(False), \ 'The action should be set invisible.' self.service_manager.maintain_action.setVisible.assert_called_once_with(False), \ 'The action should be set invisible.' self.service_manager.notes_action.setVisible.assert_called_with( True), 'The action should be set visible.' self.service_manager.time_action.setVisible.assert_called_once_with(False), \ 'The action should be set invisible.' self.service_manager.auto_start_action.setVisible.assert_called_once_with(False), \ 'The action should be set invisible.' def test_maintain_context_menu(self): """ Test the context_menu() method with a maintain """ # GIVEN: A service item added self.service_manager.setup_ui(self.service_manager) with patch('PyQt5.QtWidgets.QTreeWidget.itemAt') as mocked_item_at_method, \ patch('PyQt5.QtWidgets.QWidget.mapToGlobal'), \ patch('PyQt5.QtWidgets.QMenu.exec'): mocked_item = MagicMock() mocked_item.parent.return_value = None mocked_item_at_method.return_value = mocked_item # We want 1 to be returned for the position mocked_item.data.return_value = 1 # A service item without capabilities. service_item = ServiceItem() service_item.add_capability(ItemCapabilities.CanMaintain) self.service_manager.service_items = [{ 'service_item': service_item }] q_point = None # Mocked actions. self.service_manager.edit_action.setVisible = MagicMock() self.service_manager.create_custom_action.setVisible = MagicMock() self.service_manager.maintain_action.setVisible = MagicMock() self.service_manager.notes_action.setVisible = MagicMock() self.service_manager.time_action.setVisible = MagicMock() self.service_manager.auto_start_action.setVisible = MagicMock() # WHEN: Show the context menu. self.service_manager.context_menu(q_point) # THEN: The following actions should be not visible. self.service_manager.edit_action.setVisible.assert_called_once_with(False), \ 'The action should be set invisible.' self.service_manager.create_custom_action.setVisible.assert_called_once_with(False), \ 'The action should be set invisible.' self.service_manager.maintain_action.setVisible.assert_called_with(True), \ 'The action should be set visible.' self.service_manager.notes_action.setVisible.assert_called_with( True), 'The action should be set visible.' self.service_manager.time_action.setVisible.assert_called_once_with(False), \ 'The action should be set invisible.' self.service_manager.auto_start_action.setVisible.assert_called_once_with(False), \ 'The action should be set invisible.' def test_loopy_context_menu(self): """ Test the context_menu() method with a loop """ # GIVEN: A service item added self.service_manager.setup_ui(self.service_manager) with patch('PyQt5.QtWidgets.QTreeWidget.itemAt') as mocked_item_at_method, \ patch('PyQt5.QtWidgets.QWidget.mapToGlobal'), \ patch('PyQt5.QtWidgets.QMenu.exec'): mocked_item = MagicMock() mocked_item.parent.return_value = None mocked_item_at_method.return_value = mocked_item # We want 1 to be returned for the position mocked_item.data.return_value = 1 # A service item without capabilities. service_item = ServiceItem() service_item.add_capability(ItemCapabilities.CanLoop) service_item.slides.append("One") service_item.slides.append("Two") self.service_manager.service_items = [{ 'service_item': service_item }] q_point = None # Mocked actions. self.service_manager.edit_action.setVisible = MagicMock() self.service_manager.create_custom_action.setVisible = MagicMock() self.service_manager.maintain_action.setVisible = MagicMock() self.service_manager.notes_action.setVisible = MagicMock() self.service_manager.time_action.setVisible = MagicMock() self.service_manager.auto_start_action.setVisible = MagicMock() # WHEN: Show the context menu. self.service_manager.context_menu(q_point) # THEN: The following actions should be not visible. self.service_manager.edit_action.setVisible.assert_called_once_with(False), \ 'The action should be set invisible.' self.service_manager.create_custom_action.setVisible.assert_called_once_with(False), \ 'The action should be set invisible.' self.service_manager.maintain_action.setVisible.assert_called_once_with(False), \ 'The action should be set invisible.' self.service_manager.notes_action.setVisible.assert_called_with( True), 'The action should be set visible.' self.service_manager.time_action.setVisible.assert_called_once_with(False), \ 'The action should be set invisible.' self.service_manager.auto_start_action.setVisible.assert_called_once_with(False), \ 'The action should be set invisible.' def test_start_time_context_menu(self): """ Test the context_menu() method with a start time """ # GIVEN: A service item added self.service_manager.setup_ui(self.service_manager) with patch('PyQt5.QtWidgets.QTreeWidget.itemAt') as mocked_item_at_method, \ patch('PyQt5.QtWidgets.QWidget.mapToGlobal'), \ patch('PyQt5.QtWidgets.QMenu.exec'): mocked_item = MagicMock() mocked_item.parent.return_value = None mocked_item_at_method.return_value = mocked_item # We want 1 to be returned for the position mocked_item.data.return_value = 1 # A service item without capabilities. service_item = ServiceItem() service_item.add_capability(ItemCapabilities.HasVariableStartTime) self.service_manager.service_items = [{ 'service_item': service_item }] q_point = None # Mocked actions. self.service_manager.edit_action.setVisible = MagicMock() self.service_manager.create_custom_action.setVisible = MagicMock() self.service_manager.maintain_action.setVisible = MagicMock() self.service_manager.notes_action.setVisible = MagicMock() self.service_manager.time_action.setVisible = MagicMock() self.service_manager.auto_start_action.setVisible = MagicMock() # WHEN: Show the context menu. self.service_manager.context_menu(q_point) # THEN: The following actions should be not visible. self.service_manager.edit_action.setVisible.assert_called_once_with(False), \ 'The action should be set invisible.' self.service_manager.create_custom_action.setVisible.assert_called_once_with(False), \ 'The action should be set invisible.' self.service_manager.maintain_action.setVisible.assert_called_once_with(False), \ 'The action should be set invisible.' self.service_manager.notes_action.setVisible.assert_called_with( True), 'The action should be set visible.' self.service_manager.time_action.setVisible.assert_called_with(True), \ 'The action should be set visible.' self.service_manager.auto_start_action.setVisible.assert_called_once_with(False), \ 'The action should be set invisible.' def test_auto_start_context_menu(self): """ Test the context_menu() method with can auto start """ # GIVEN: A service item added self.service_manager.setup_ui(self.service_manager) with patch('PyQt5.QtWidgets.QTreeWidget.itemAt') as mocked_item_at_method, \ patch('PyQt5.QtWidgets.QWidget.mapToGlobal'), \ patch('PyQt5.QtWidgets.QMenu.exec'): mocked_item = MagicMock() mocked_item.parent.return_value = None mocked_item_at_method.return_value = mocked_item # We want 1 to be returned for the position mocked_item.data.return_value = 1 # A service item without capabilities. service_item = ServiceItem() service_item.add_capability(ItemCapabilities.CanAutoStartForLive) self.service_manager.service_items = [{ 'service_item': service_item }] q_point = None # Mocked actions. self.service_manager.edit_action.setVisible = MagicMock() self.service_manager.create_custom_action.setVisible = MagicMock() self.service_manager.maintain_action.setVisible = MagicMock() self.service_manager.notes_action.setVisible = MagicMock() self.service_manager.time_action.setVisible = MagicMock() self.service_manager.auto_start_action.setVisible = MagicMock() self.service_manager.rename_action.setVisible = MagicMock() # WHEN: Show the context menu. self.service_manager.context_menu(q_point) # THEN: The following actions should be not visible. self.service_manager.edit_action.setVisible.assert_called_once_with(False), \ 'The action should be set invisible.' self.service_manager.create_custom_action.setVisible.assert_called_once_with(False), \ 'The action should be set invisible.' self.service_manager.maintain_action.setVisible.assert_called_once_with(False), \ 'The action should be set invisible.' self.service_manager.notes_action.setVisible.assert_called_with( True), 'The action should be set visible.' self.service_manager.time_action.setVisible.assert_called_once_with(False), \ 'The action should be set invisible.' self.service_manager.auto_start_action.setVisible.assert_called_with(True), \ 'The action should be set visible.' self.service_manager.rename_action.setVisible.assert_called_once_with(False), \ 'The action should be set invisible.' def test_click_on_new_service(self): """ Test the on_new_service event handler is called by the UI """ # GIVEN: An initial form mocked_event = MagicMock() self.service_manager.on_new_service_clicked = mocked_event self.service_manager.setup_ui(self.service_manager) # WHEN displaying the UI and pressing cancel new_service = self.service_manager.toolbar.actions['newService'] new_service.trigger() assert mocked_event.call_count == 1, 'The on_new_service_clicked method should have been called once' def test_expand_selection_on_right_arrow(self): """ Test that a right arrow key press event calls the on_expand_selection function """ # GIVEN a mocked expand function self.service_manager.on_expand_selection = MagicMock() # WHEN the right arrow key event is called self.service_manager.setup_ui(self.service_manager) event = QtGui.QKeyEvent(QtCore.QEvent.KeyPress, QtCore.Qt.Key_Right, QtCore.Qt.NoModifier) self.service_manager.service_manager_list.keyPressEvent(event) # THEN the on_expand_selection function should have been called. self.service_manager.on_expand_selection.assert_called_once_with() def test_collapse_selection_on_left_arrow(self): """ Test that a left arrow key press event calls the on_collapse_selection function """ # GIVEN a mocked collapse function self.service_manager.on_collapse_selection = MagicMock() # WHEN the left arrow key event is called self.service_manager.setup_ui(self.service_manager) event = QtGui.QKeyEvent(QtCore.QEvent.KeyPress, QtCore.Qt.Key_Left, QtCore.Qt.NoModifier) self.service_manager.service_manager_list.keyPressEvent(event) # THEN the on_collapse_selection function should have been called. self.service_manager.on_collapse_selection.assert_called_once_with() def test_move_selection_down_on_down_arrow(self): """ Test that a down arrow key press event calls the on_move_selection_down function """ # GIVEN a mocked move down function self.service_manager.on_move_selection_down = MagicMock() # WHEN the down arrow key event is called self.service_manager.setup_ui(self.service_manager) event = QtGui.QKeyEvent(QtCore.QEvent.KeyPress, QtCore.Qt.Key_Down, QtCore.Qt.NoModifier) self.service_manager.service_manager_list.keyPressEvent(event) # THEN the on_move_selection_down function should have been called. self.service_manager.on_move_selection_down.assert_called_once_with() def test_move_selection_up_on_up_arrow(self): """ Test that an up arrow key press event calls the on_move_selection_up function """ # GIVEN a mocked move up function self.service_manager.on_move_selection_up = MagicMock() # WHEN the up arrow key event is called self.service_manager.setup_ui(self.service_manager) event = QtGui.QKeyEvent(QtCore.QEvent.KeyPress, QtCore.Qt.Key_Up, QtCore.Qt.NoModifier) self.service_manager.service_manager_list.keyPressEvent(event) # THEN the on_move_selection_up function should have been called. self.service_manager.on_move_selection_up.assert_called_once_with() def _setup_service_manager_list(self): self.service_manager.expanded = MagicMock() self.service_manager.collapsed = MagicMock() verse_1 = QtWidgets.QTreeWidgetItem(0) verse_2 = QtWidgets.QTreeWidgetItem(0) song_item = QtWidgets.QTreeWidgetItem(0) song_item.addChild(verse_1) song_item.addChild(verse_2) self.service_manager.setup_ui(self.service_manager) self.service_manager.service_manager_list.addTopLevelItem(song_item) return verse_1, verse_2, song_item def test_on_expand_selection(self): """ Test that the on_expand_selection function successfully expands an item and moves to its first child """ # GIVEN a mocked servicemanager list verse_1, verse_2, song_item = self._setup_service_manager_list() self.service_manager.service_manager_list.setCurrentItem(song_item) # Reset expanded function in case it has been called and/or changed in initialisation of the service manager. self.service_manager.expanded = MagicMock() # WHEN on_expand_selection is called self.service_manager.on_expand_selection() # THEN selection should be expanded selected_index = self.service_manager.service_manager_list.currentIndex( ) above_selected_index = self.service_manager.service_manager_list.indexAbove( selected_index) assert self.service_manager.service_manager_list.isExpanded(above_selected_index) is True, \ 'Item should have been expanded' self.service_manager.expanded.assert_called_once_with(song_item) def test_on_collapse_selection_with_parent_selected(self): """ Test that the on_collapse_selection function successfully collapses an item """ # GIVEN a mocked servicemanager list verse_1, verse_2, song_item = self._setup_service_manager_list() self.service_manager.service_manager_list.setCurrentItem(song_item) self.service_manager.service_manager_list.expandItem(song_item) # Reset collapsed function in case it has been called and/or changed in initialisation of the service manager. self.service_manager.collapsed = MagicMock() # WHEN on_expand_selection is called self.service_manager.on_collapse_selection() # THEN selection should be expanded selected_index = self.service_manager.service_manager_list.currentIndex( ) assert self.service_manager.service_manager_list.isExpanded(selected_index) is False, \ 'Item should have been collapsed' assert self.service_manager.service_manager_list.currentItem() == song_item, \ 'Top item should have been selected' self.service_manager.collapsed.assert_called_once_with(song_item) def test_on_collapse_selection_with_child_selected(self): """ Test that the on_collapse_selection function successfully collapses child's parent item and moves selection to its parent. """ # GIVEN a mocked servicemanager list verse_1, verse_2, song_item = self._setup_service_manager_list() self.service_manager.service_manager_list.setCurrentItem(verse_2) self.service_manager.service_manager_list.expandItem(song_item) # Reset collapsed function in case it has been called and/or changed in initialisation of the service manager. self.service_manager.collapsed = MagicMock() # WHEN on_expand_selection is called self.service_manager.on_collapse_selection() # THEN selection should be expanded selected_index = self.service_manager.service_manager_list.currentIndex( ) assert self.service_manager.service_manager_list.isExpanded(selected_index) is False, \ 'Item should have been collapsed' assert self.service_manager.service_manager_list.currentItem() == song_item, \ 'Top item should have been selected' self.service_manager.collapsed.assert_called_once_with(song_item)
class TestSelectPlanForm(TestCase, TestMixin): """ Test the SelectPlanForm class """ def setUp(self): """ Create the UI """ self.registry = Registry() Registry.create() self.setup_application() self.build_settings() State().load_settings() Registry().register('settings', Settings()) Registry().register( 'main_window', MagicMock(service_manager_settings_section='servicemanager')) self.application_id = 'abc' self.secret = '123' Settings().setValue('planningcenter/application_id', self.application_id) Settings().setValue('planningcenter/secret', self.secret) # init the planning center plugin so we have default values defined for Settings() self.planning_center_plugin = PlanningCenterPlugin() # setup our form self.form = SelectPlanForm() self.form.planning_center_api.airplane_mode = True self.form.planning_center_api.airplane_mode_directory = TEST_PATH self.theme_manager = ThemeManager(None) self.theme_manager.get_theme_names = MagicMock() self.theme_manager.get_theme_names.return_value = ['themeA', 'themeB'] def tearDown(self): """ Delete all the C++ objects at the end so that we don't have a segfault """ del self.form del self.planning_center_plugin del self.theme_manager del self.registry self.destroy_settings() def test_initial_defaults(self): """ Test that the SelectPlanForm displays with correct defaults """ # GIVEN: An SelectPlanForm instance with airplane mode enabled, resources available, # a theme manager with mocked themes, and a fake date = Sunday (7/29/2018) with patch('PyQt5.QtWidgets.QDialog.exec'), \ patch('openlp.plugins.planningcenter.forms.selectplanform.date') as mock_date: # need to always return 9/29/2019 for date.today() mock_date.today.return_value = date(2019, 9, 29) mock_date.side_effect = lambda *args, **kw: date(*args, **kw) # WHEN: The form is shown self.form.exec() # THEN: The correct count of service types show up in the combo box combo_box_count = self.form.service_type_combo_box.count() self.assertEqual(combo_box_count, 2, 'The service_type_combo_box contains 2 items') # The first service type is selected self.assertEqual(self.form.service_type_combo_box.currentText(), 'gbf', 'The service_type_combo_box defaults to "gbf"') # the selected plan is today (the mocked date is a Sunday) self.assertEqual( self.form.plan_selection_combo_box.currentText(), date.strftime(mock_date.today.return_value, '%B %d, %Y'), 'Incorrect default date selected for Plan Date') # count the number of themes listed and make sure it matches expected value self.assertEqual(self.form.song_theme_selection_combo_box.count(), 2, 'Count of song themes is incorrect') self.assertEqual(self.form.slide_theme_selection_combo_box.count(), 2, 'Count of custom slide themes is incorrect') def test_warning_messagebox_shown_for_bad_credentials(self): """ Test that if we don't have good credentials, then it will show a QMessageBox with a warning in it """ # GIVEN: A SelectPlanForm instance with airplane mode enabled, resources, available, # mocked check_credentials function to return '' with patch('PyQt5.QtWidgets.QDialog.exec'), \ patch.object(self.form.planning_center_api, 'check_credentials', return_value=''), \ patch('PyQt5.QtWidgets.QMessageBox.warning') as mock_warning: # WHEN: form is displayed self.form.exec() # THEN: we should have called a warning messagebox mock_warning.assert_called_once() def test_disable_import_buttons(self): """ Test that the import buttons are disabled when the "Select Plan Date" element in the Plan Selection List is selected. """ # GIVEN: An SelectPlanForm instance with airplane mode enabled, resources available, and the form with patch('PyQt5.QtWidgets.QDialog.exec'): self.form.exec() # WHEN: The Select Plan combo box is set to "Select Plan Date" index = self.form.plan_selection_combo_box.findText( 'Select Plan Date') self.form.plan_selection_combo_box.setCurrentIndex(index) # THEN: "Import New" and "Refresh Service" buttons become inactive self.assertEqual(self.form.import_as_new_button.isEnabled(), False, '"Import as New" button should be disabled') self.assertEqual(self.form.update_existing_button.isEnabled(), False, '"Refresh Service" button should be disabled') def test_default_plan_date_is_next_sunday(self): """ Test that the SelectPlanForm displays Next Sunday's Date by Default """ # GIVEN: An SelectPlanForm instance with airplane mode enabled, resources available, # a theme manager with mocked themes, and a fake date = (9/24/2019) with patch('PyQt5.QtWidgets.QDialog.exec'), \ patch('openlp.plugins.planningcenter.forms.selectplanform.date') as mock_date: # need to always return 9/24/2019 for date.today() mock_date.today.return_value = date(2019, 9, 24) mock_date.side_effect = lambda *args, **kw: date(*args, **kw) self.form.exec() # WHEN: The second (index=1) service type is selected self.form.service_type_combo_box.setCurrentIndex(1) # THEN: The plan selection date is 9/29 (the following Sunday) self.assertEqual( self.form.plan_selection_combo_box.currentText(), 'September 29, 2019', 'The next Sunday\'s Date is not selected in the plan_selection_combo_box' ) def test_service_type_changed_called_when_service_type_combo_changed(self): """ Test that the "on_service_type_combobox_changed" function is executed when the service_type_combobox is changed """ # GIVEN: An SelectPlanForm instance with airplane mode enabled, resources available with patch('PyQt5.QtWidgets.QDialog.exec'): self.form.exec() # WHEN: The Service Type combo is set to index 1 self.form.service_type_combo_box.setCurrentIndex(1) # THEN: The on_service_type_combobox_changed function is called assert self.form.plan_selection_combo_box.count( ) > 0, 'Plan Selection Combo Box is not empty' assert self.form.plan_selection_combo_box.itemText( 0) == 'Select Plan Date', 'Plan Combo Box has default text' def test_plan_selection_changed_called_when_plan_selection_combo_changed( self): """ Test that the "on_plan_selection_combobox_changed" function is executed when the plan_selection_combobox is changed """ # GIVEN: An SelectPlanForm instance with airplane mode enabled, resources available, with patch('PyQt5.QtWidgets.QDialog.exec'): self.form.exec() # WHEN: The Service Type combo is set to index 1 self.form.service_type_combo_box.setCurrentIndex(1) self.form.plan_selection_combo_box.setCurrentIndex(1) # THEN: The import and update buttons should be enabled assert self.form.import_as_new_button.isEnabled( ) is True, 'Import button should be enabled' assert self.form.update_existing_button.isEnabled( ) is True, 'Update button should be enabled' def test_settings_tab_displayed_when_edit_auth_button_clicked(self): """ Test that the settings dialog is displayed when the edit_auth_button is clicked """ # GIVEN: A SelectPlanForm instance with airplane mode enabled and resources available with patch('PyQt5.QtWidgets.QDialog.exec'), \ patch('openlp.core.ui.settingsform.SettingsForm.exec') as mock_settings_form: SettingsForm() self.form.exec() # WHEN: the edit_auth_button is clicked QtTest.QTest.mouseClick(self.form.edit_auth_button, QtCore.Qt.LeftButton) self.assertEqual(mock_settings_form.called, 1, "Settings Form opened when edit_auth_button clicked") def test_import_function_called_when_import_button_clicked(self): """ Test that the "on_import_as_new_button_clicked" function is executed when the "Import New" button is clicked """ # GIVEN: An SelectPlanForm instance with airplane mode enabled, resources available, with patch('PyQt5.QtWidgets.QDialog.exec'), \ patch('openlp.plugins.planningcenter.forms.selectplanform.SelectPlanForm._do_import') \ as mock_do_import: self.form.exec() # WHEN: The Service Type combo is set to index 1 and the Select Plan combo box is set # to index 1 and the "Import New" button is clicked self.form.service_type_combo_box.setCurrentIndex(1) self.form.plan_selection_combo_box.setCurrentIndex(4) QtTest.QTest.mouseClick(self.form.import_as_new_button, QtCore.Qt.LeftButton) # THEN: The on_import_as_new_button_cliced function is called mock_do_import.assert_called_with(update=False) def test_service_imported_when_import_button_clicked(self): """ Test that a service is imported when the "Import New" button is clicked """ # GIVEN: An SelectPlanForm instance with airplane mode enabled, resources available, # mocked out "on_new_service_clicked" with patch('PyQt5.QtWidgets.QDialog.exec'), \ patch('openlp.core.common.registry.Registry.get'), \ patch('openlp.plugins.planningcenter.lib.songimport.PlanningCenterSongImport.finish') \ as mock_song_import, \ patch('openlp.plugins.planningcenter.lib.customimport.CustomSlide') as mock_custom_slide_import, \ patch('openlp.plugins.planningcenter.forms.selectplanform.parse_reference') as mock_bible_import, \ patch('openlp.plugins.planningcenter.forms.selectplanform.date') as mock_date: # need to always return 9/29/2019 for date.today() mock_date.today.return_value = date(2019, 9, 29) mock_date.side_effect = lambda *args, **kw: date(*args, **kw) self.form.exec() # WHEN: The Service Type combo is set to index 1 and the Select Plan combo box is set to # index 1 and the "Import New" button is clicked self.form.service_type_combo_box.setCurrentIndex(1) QtTest.QTest.mouseClick(self.form.import_as_new_button, QtCore.Qt.LeftButton) # THEN: There should be 5 service items added, 1 song, 3 custom slides (one is a bible # title slide), and 1 bible verse self.assertEqual(mock_song_import.call_count, 1, '1 song added via song_media_item') self.assertEqual(mock_custom_slide_import.call_count, 4, '4 custom slide added via custom_media_item') self.assertEqual(mock_bible_import.call_count, 2, '2 bible verses submitted for parsing') def test_service_refreshed_when_refresh_button_clicked(self): """ Test that a service is refreshed when the "Refresh Service" button is clicked """ # GIVEN: An SelectPlanForm instance with airplane mode enabled, resources available, # mocked out "on_new_service_clicked" with patch('PyQt5.QtWidgets.QDialog.exec'), \ patch('openlp.core.common.registry.Registry.get'), \ patch('openlp.plugins.planningcenter.lib.songimport.PlanningCenterSongImport.finish') \ as mock_song_import, \ patch('openlp.plugins.planningcenter.lib.customimport.CustomSlide') as mock_custom_slide_import, \ patch('openlp.plugins.planningcenter.forms.selectplanform.parse_reference') as mock_bible_import, \ patch('openlp.plugins.planningcenter.forms.selectplanform.date') as mock_date: # need to always return 9/29/2019 for date.today() mock_date.today.return_value = date(2019, 9, 29) mock_date.side_effect = lambda *args, **kw: date(*args, **kw) self.form.exec() # WHEN: The Service Type combo is set to index 1 and the Select Plan combo box is # set to index 1 and the "Update" button is clicked self.form.service_type_combo_box.setCurrentIndex(1) QtTest.QTest.mouseClick(self.form.update_existing_button, QtCore.Qt.LeftButton) # THEN: There should be 5 service items added, 1 song, 3 custom slides (one is a bible # title slide), and 1 bible verse self.assertEqual(mock_song_import.call_count, 1, '1 song added via song_media_item') self.assertEqual(mock_custom_slide_import.call_count, 4, '4 custom slide added via custom_media_item') self.assertEqual(mock_bible_import.call_count, 2, '2 bible verses submitted for parsing') def test_other_bible_is_used_when_bible_gui_form_is_blank(self): """ Test that an other bible is used when the GUI has an empty string for current selected bible """ # GIVEN: An SelectPlanForm instance with airplane mode enabled, resources available, # mocked out "on_new_service_clicked" with patch('PyQt5.QtWidgets.QDialog.exec'), \ patch('openlp.core.common.registry.Registry.get') as mock_get, \ patch('openlp.plugins.planningcenter.lib.songimport.PlanningCenterSongImport.finish'), \ patch('openlp.plugins.planningcenter.lib.customimport.CustomSlide'), \ patch('openlp.plugins.planningcenter.forms.selectplanform.parse_reference') as mock_bible_import, \ patch('openlp.plugins.planningcenter.forms.selectplanform.date') as mock_date: # need to always return 9/29/2019 for date.today() mock_date.today.return_value = date(2019, 9, 29) mock_date.side_effect = lambda *args, **kw: date(*args, **kw) mock_bibles = {} mock_bibles['other_bible'] = MagicMock() mock_get.return_value.plugin.manager.get_bibles.return_value = mock_bibles mock_get.return_value.version_combo_box.currentText.return_value = '' self.form.exec() # WHEN: The Service Type combo is set to index 1 and the Select Plan combo box # is set to index 1 and the "Import New" button is clicked self.form.service_type_combo_box.setCurrentIndex(1) QtTest.QTest.mouseClick(self.form.import_as_new_button, QtCore.Qt.LeftButton) # THEN: There should be 2 bible verse parse attempts self.assertEqual(mock_bible_import.call_count, 2, '2 bible verses submitted for parsing') def _create_mock_action(self, name, **kwargs): """ Create a fake action with some "real" attributes for Service Manager """ action = QtWidgets.QAction(self.service_manager) action.setObjectName(name) if kwargs.get('triggers'): action.triggered.connect(kwargs.pop('triggers')) self.service_manager.toolbar.actions[name] = action return action @skip( "fails to run when executed with all other openlp tests. awaiting pytest fixtures to enable again" ) def test_less_mocking_service_refreshed_when_refresh_button_clicked_test( self): """ Test that a service is refreshed when the "Refresh Service" button is clicked """ # GIVEN: An SelectPlanForm instance with airplane mode enabled, resources available, # mocked out "on_new_service_clicked" with patch('PyQt5.QtWidgets.QDialog.exec'), \ patch('openlp.plugins.planningcenter.forms.selectplanform.date') as mock_date: # need to always return 9/29/2019 for date.today() mock_date.today.return_value = date(2019, 9, 29) mock_date.side_effect = lambda *args, **kw: date(*args, **kw) # init ServiceManager Registry().register('plugin_manager', MagicMock()) Registry().register('application', MagicMock()) Registry().register('renderer', MagicMock()) self.service_manager = ServiceManager() self.service_manager.setup_ui(self.service_manager) # init songs plugin with patch('openlp.plugins.songs.lib.mediaitem.EditSongForm'), \ patch('openlp.plugins.custom.lib.mediaitem.EditCustomForm'), \ patch('openlp.core.lib.mediamanageritem.create_widget_action'), \ patch('openlp.core.widgets.toolbar.create_widget_action'): # init songs plugin songs_plugin = SongsPlugin() song_media_item = SongMediaItem(None, songs_plugin) song_media_item.search_text_edit = MagicMock() song_media_item.settings_section = 'songs' song_media_item.initialise() # init custom plugin custom_plugin = CustomPlugin() CustomMediaItem(None, custom_plugin) # init bible plugin bible_plugin = BiblePlugin() bible_media_item = BibleMediaItem(None, bible_plugin) bible_media_item.build_display_results = MagicMock() self.form.exec() # WHEN: # The Service Type combo is set to index 1 and "Import New" button is clicked self.form.service_type_combo_box.setCurrentIndex(1) QtTest.QTest.mouseClick(self.form.import_as_new_button, QtCore.Qt.LeftButton) # make changes to the now imported service items # first, for serviceitem[0] update last_updated in xml_string and change "sweet" to "sublime" old_match = re.search( 'modifiedDate="(.+?)Z*"', self.service_manager.service_items[0] ['service_item'].xml_version) old_string = old_match.group(1) now_string = datetime.now().strftime('%Y-%m-%dT%H:%M:%S') self.service_manager.service_items[0]['service_item'].xml_version = \ self.service_manager.service_items[0]['service_item'].xml_version.replace(old_string, now_string) self.service_manager.service_items[0]['service_item'].xml_version = \ self.service_manager.service_items[0]['service_item'].xml_version.replace("sweet", "sublime") # second, add the word modified to the slide text for serviceitem[1] self.service_manager.service_items[1]['service_item'].slides[0]['text'] = \ self.service_manager.service_items[1]['service_item'].slides[0]['text'].replace("Test", "Modified Test") # third, delete serviceitems[2] and serviceitem[3] del self.service_manager.service_items[3] del self.service_manager.service_items[2] # last, draw the form again and request refresh self.form.exec() self.form.service_type_combo_box.setCurrentIndex(1) QtTest.QTest.mouseClick(self.form.update_existing_button, QtCore.Qt.LeftButton) # THEN: # There should be 4 service items added self.assertEqual(len(self.service_manager.service_items), 5, '5 items should be in the ServiceManager') # Amazon Grace should still include sublime self.assertTrue('sublime' in self.service_manager.service_items[0] ['service_item'].xml_version) # Slides in service_item[1] should still contain the word "Modified" self.assertTrue('Modified' in self.service_manager.service_items[1] ['service_item'].slides[0]['text'])
def test_less_mocking_service_refreshed_when_refresh_button_clicked_test( self): """ Test that a service is refreshed when the "Refresh Service" button is clicked """ # GIVEN: An SelectPlanForm instance with airplane mode enabled, resources available, # mocked out "on_new_service_clicked" with patch('PyQt5.QtWidgets.QDialog.exec'), \ patch('openlp.plugins.planningcenter.forms.selectplanform.date') as mock_date: # need to always return 9/29/2019 for date.today() mock_date.today.return_value = date(2019, 9, 29) mock_date.side_effect = lambda *args, **kw: date(*args, **kw) # init ServiceManager Registry().register('plugin_manager', MagicMock()) Registry().register('application', MagicMock()) Registry().register('renderer', MagicMock()) self.service_manager = ServiceManager() self.service_manager.setup_ui(self.service_manager) # init songs plugin with patch('openlp.plugins.songs.lib.mediaitem.EditSongForm'), \ patch('openlp.plugins.custom.lib.mediaitem.EditCustomForm'), \ patch('openlp.core.lib.mediamanageritem.create_widget_action'), \ patch('openlp.core.widgets.toolbar.create_widget_action'): # init songs plugin songs_plugin = SongsPlugin() song_media_item = SongMediaItem(None, songs_plugin) song_media_item.search_text_edit = MagicMock() song_media_item.settings_section = 'songs' song_media_item.initialise() # init custom plugin custom_plugin = CustomPlugin() CustomMediaItem(None, custom_plugin) # init bible plugin bible_plugin = BiblePlugin() bible_media_item = BibleMediaItem(None, bible_plugin) bible_media_item.build_display_results = MagicMock() self.form.exec() # WHEN: # The Service Type combo is set to index 1 and "Import New" button is clicked self.form.service_type_combo_box.setCurrentIndex(1) QtTest.QTest.mouseClick(self.form.import_as_new_button, QtCore.Qt.LeftButton) # make changes to the now imported service items # first, for serviceitem[0] update last_updated in xml_string and change "sweet" to "sublime" old_match = re.search( 'modifiedDate="(.+?)Z*"', self.service_manager.service_items[0] ['service_item'].xml_version) old_string = old_match.group(1) now_string = datetime.now().strftime('%Y-%m-%dT%H:%M:%S') self.service_manager.service_items[0]['service_item'].xml_version = \ self.service_manager.service_items[0]['service_item'].xml_version.replace(old_string, now_string) self.service_manager.service_items[0]['service_item'].xml_version = \ self.service_manager.service_items[0]['service_item'].xml_version.replace("sweet", "sublime") # second, add the word modified to the slide text for serviceitem[1] self.service_manager.service_items[1]['service_item'].slides[0]['text'] = \ self.service_manager.service_items[1]['service_item'].slides[0]['text'].replace("Test", "Modified Test") # third, delete serviceitems[2] and serviceitem[3] del self.service_manager.service_items[3] del self.service_manager.service_items[2] # last, draw the form again and request refresh self.form.exec() self.form.service_type_combo_box.setCurrentIndex(1) QtTest.QTest.mouseClick(self.form.update_existing_button, QtCore.Qt.LeftButton) # THEN: # There should be 4 service items added self.assertEqual(len(self.service_manager.service_items), 5, '5 items should be in the ServiceManager') # Amazon Grace should still include sublime self.assertTrue('sublime' in self.service_manager.service_items[0] ['service_item'].xml_version) # Slides in service_item[1] should still contain the word "Modified" self.assertTrue('Modified' in self.service_manager.service_items[1] ['service_item'].slides[0]['text'])
def test_build_context_menu(self): """ Test the creation of a context menu from a null service item. """ # GIVEN: A new service manager instance and a default service item. service_manager = ServiceManager(None) item = MagicMock() item.parent.return_value = False item.data.return_value = 0 service_manager.service_manager_list = MagicMock() service_manager.service_manager_list.itemAt.return_value = item service_item = ServiceItem(None) service_manager.service_items.insert(1, {'service_item': service_item}) service_manager.edit_action = MagicMock() service_manager.rename_action = MagicMock() service_manager.create_custom_action = MagicMock() service_manager.maintain_action = MagicMock() service_manager.notes_action = MagicMock() service_manager.time_action = MagicMock() service_manager.auto_start_action = MagicMock() service_manager.auto_play_slides_menu = MagicMock() service_manager.auto_play_slides_once = MagicMock() service_manager.auto_play_slides_loop = MagicMock() service_manager.timed_slide_interval = MagicMock() service_manager.theme_menu = MagicMock() service_manager.menu = MagicMock() # WHEN I define a context menu service_manager.context_menu(1) # THEN the following calls should have occurred. assert service_manager.edit_action.setVisible.call_count == 1, 'Should have been called once' assert service_manager.rename_action.setVisible.call_count == 1, 'Should have been called once' assert service_manager.create_custom_action.setVisible.call_count == 1, 'Should have been called once' assert service_manager.maintain_action.setVisible.call_count == 1, 'Should have been called once' assert service_manager.notes_action.setVisible.call_count == 1, 'Should have been called once' assert service_manager.time_action.setVisible.call_count == 1, 'Should have been called once' assert service_manager.auto_start_action.setVisible.call_count == 1, 'Should have been called once' assert service_manager.auto_play_slides_menu.menuAction().setVisible.call_count == 1, \ 'Should have been called once' assert service_manager.auto_play_slides_once.setChecked.call_count == 0, 'Should not be called' assert service_manager.auto_play_slides_loop.setChecked.call_count == 0, 'Should not be called' assert service_manager.timed_slide_interval.setChecked.call_count == 0, 'Should not be called' assert service_manager.theme_menu.menuAction().setVisible.call_count == 1, \ 'Should have been called once'
def test_build_custom_context_menu(self): """ Test the creation of a context menu from service item of type text from Custom. """ # GIVEN: A new service manager instance and a default service item. mocked_renderer = MagicMock() mocked_renderer.theme_level = ThemeLevel.Song Registry().register('plugin_manager', MagicMock()) Registry().register('renderer', mocked_renderer) service_manager = ServiceManager(None) item = MagicMock() item.parent.return_value = False item.data.return_value = 0 service_manager.service_manager_list = MagicMock() service_manager.service_manager_list.itemAt.return_value = item service_item = ServiceItem(None) service_item.add_capability(ItemCapabilities.CanEdit) service_item.add_capability(ItemCapabilities.CanPreview) service_item.add_capability(ItemCapabilities.CanLoop) service_item.add_capability(ItemCapabilities.CanSoftBreak) service_item.add_capability(ItemCapabilities.OnLoadUpdate) service_item.service_item_type = ServiceItemType.Text service_item.edit_id = 1 service_item._display_slides = [] service_item._display_slides.append(MagicMock()) service_manager.service_items.insert(1, {'service_item': service_item}) service_manager.edit_action = MagicMock() service_manager.rename_action = MagicMock() service_manager.create_custom_action = MagicMock() service_manager.maintain_action = MagicMock() service_manager.notes_action = MagicMock() service_manager.time_action = MagicMock() service_manager.auto_start_action = MagicMock() service_manager.auto_play_slides_menu = MagicMock() service_manager.auto_play_slides_once = MagicMock() service_manager.auto_play_slides_loop = MagicMock() service_manager.timed_slide_interval = MagicMock() service_manager.theme_menu = MagicMock() service_manager.menu = MagicMock() # WHEN I define a context menu service_manager.context_menu(1) # THEN the following calls should have occurred. assert service_manager.edit_action.setVisible.call_count == 2, 'Should have be called twice' assert service_manager.rename_action.setVisible.call_count == 1, 'Should have be called once' assert service_manager.create_custom_action.setVisible.call_count == 1, 'Should have be called once' assert service_manager.maintain_action.setVisible.call_count == 1, 'Should have be called once' assert service_manager.notes_action.setVisible.call_count == 1, 'Should have be called once' assert service_manager.time_action.setVisible.call_count == 1, 'Should have be called once' assert service_manager.auto_start_action.setVisible.call_count == 1, 'Should have be called once' assert service_manager.auto_play_slides_menu.menuAction().setVisible.call_count == 1, \ 'Should have be called once' assert service_manager.auto_play_slides_once.setChecked.call_count == 0, 'Should not be called' assert service_manager.auto_play_slides_loop.setChecked.call_count == 0, 'Should not be called' assert service_manager.timed_slide_interval.setChecked.call_count == 0, 'Should not be called' assert service_manager.theme_menu.menuAction().setVisible.call_count == 2, \ 'Should have be called twice' # THEN we add a 2nd display frame service_item._display_slides.append(MagicMock()) service_manager.context_menu(1) # THEN the following additional calls should have occurred. assert service_manager.auto_play_slides_menu.menuAction().setVisible.call_count == 2, \ 'Should have be called twice' assert service_manager.auto_play_slides_once.setChecked.call_count == 1, 'Should have be called once' assert service_manager.auto_play_slides_loop.setChecked.call_count == 1, 'Should have be called once' assert service_manager.timed_slide_interval.setChecked.call_count == 1, 'Should have be called once'
def test_build_presentation_non_pdf_context_menu(self): """ Test the creation of a context menu from service item of type Command with Impress from Presentation. """ # GIVEN: A new service manager instance and a default service item. Registry().register('plugin_manager', MagicMock()) Registry().register('renderer', MagicMock()) service_manager = ServiceManager(None) item = MagicMock() item.parent.return_value = False item.data.return_value = 0 service_manager.service_manager_list = MagicMock() service_manager.service_manager_list.itemAt.return_value = item service_item = ServiceItem(None) service_item.add_capability(ItemCapabilities.ProvidesOwnDisplay) service_item.service_item_type = ServiceItemType.Command service_item.edit_id = 1 service_item.slides.append(MagicMock()) service_manager.service_items.insert(1, {'service_item': service_item}) service_manager.edit_action = MagicMock() service_manager.rename_action = MagicMock() service_manager.create_custom_action = MagicMock() service_manager.maintain_action = MagicMock() service_manager.notes_action = MagicMock() service_manager.time_action = MagicMock() service_manager.auto_start_action = MagicMock() service_manager.auto_play_slides_menu = MagicMock() service_manager.auto_play_slides_once = MagicMock() service_manager.auto_play_slides_loop = MagicMock() service_manager.timed_slide_interval = MagicMock() service_manager.theme_menu = MagicMock() service_manager.menu = MagicMock() # WHEN I define a context menu service_manager.context_menu(1) # THEN the following calls should have occurred. assert service_manager.edit_action.setVisible.call_count == 1, 'Should have be called once' assert service_manager.rename_action.setVisible.call_count == 1, 'Should have be called once' assert service_manager.create_custom_action.setVisible.call_count == 1, 'Should have be called once' assert service_manager.maintain_action.setVisible.call_count == 1, 'Should have be called once' assert service_manager.notes_action.setVisible.call_count == 1, 'Should have be called once' assert service_manager.time_action.setVisible.call_count == 1, 'Should have be called once' assert service_manager.auto_start_action.setVisible.call_count == 1, 'Should have be called once' assert service_manager.auto_play_slides_menu.menuAction().setVisible.call_count == 1, \ 'Should have be called once' assert service_manager.auto_play_slides_once.setChecked.call_count == 0, 'Should not be called' assert service_manager.auto_play_slides_loop.setChecked.call_count == 0, 'Should not be called' assert service_manager.timed_slide_interval.setChecked.call_count == 0, 'Should not be called' assert service_manager.theme_menu.menuAction().setVisible.call_count == 1, \ 'Should have be called once'
def test_build_media_context_menu(self): """ Test the creation of a context menu from service item of type Command from Media. """ # GIVEN: A new service manager instance and a default service item. Registry().register('plugin_manager', MagicMock()) Registry().register('renderer', MagicMock()) service_manager = ServiceManager(None) item = MagicMock() item.parent.return_value = False item.data.return_value = 0 service_manager.service_manager_list = MagicMock() service_manager.service_manager_list.itemAt.return_value = item service_item = ServiceItem(None) service_item.add_capability(ItemCapabilities.CanAutoStartForLive) service_item.add_capability(ItemCapabilities.CanEditTitle) service_item.add_capability(ItemCapabilities.RequiresMedia) service_item.service_item_type = ServiceItemType.Command service_item.edit_id = 1 service_item.slides.append(MagicMock()) service_manager.service_items.insert(1, {'service_item': service_item}) service_manager.edit_action = MagicMock() service_manager.rename_action = MagicMock() service_manager.create_custom_action = MagicMock() service_manager.maintain_action = MagicMock() service_manager.notes_action = MagicMock() service_manager.time_action = MagicMock() service_manager.auto_start_action = MagicMock() service_manager.auto_play_slides_menu = MagicMock() service_manager.auto_play_slides_once = MagicMock() service_manager.auto_play_slides_loop = MagicMock() service_manager.timed_slide_interval = MagicMock() service_manager.theme_menu = MagicMock() service_manager.menu = MagicMock() # WHEN I define a context menu service_manager.context_menu(1) # THEN the following calls should have occurred. assert service_manager.edit_action.setVisible.call_count == 1, 'Should have be called once' assert service_manager.rename_action.setVisible.call_count == 2, 'Should have be called twice' assert service_manager.create_custom_action.setVisible.call_count == 1, 'Should have be called once' assert service_manager.maintain_action.setVisible.call_count == 1, 'Should have be called once' assert service_manager.notes_action.setVisible.call_count == 1, 'Should have be called once' assert service_manager.time_action.setVisible.call_count == 1, 'Should have be called once' assert service_manager.auto_start_action.setVisible.call_count == 2, 'Should have be called twice' assert service_manager.auto_play_slides_menu.menuAction().setVisible.call_count == 1, \ 'Should have be called once' assert service_manager.auto_play_slides_once.setChecked.call_count == 0, 'Should not be called' assert service_manager.auto_play_slides_loop.setChecked.call_count == 0, 'Should not be called' assert service_manager.timed_slide_interval.setChecked.call_count == 0, 'Should not be called' assert service_manager.theme_menu.menuAction().setVisible.call_count == 1, \ 'Should have be called once' # THEN I change the length of the media and regenerate the menu. service_item.set_media_length(5) service_manager.context_menu(1) # THEN the following additional calls should have occurred. assert service_manager.time_action.setVisible.call_count == 3, 'Should have be called three times'