def recursively_delete_group_test(self, mocked_delete_file): """ Test that recursively_delete_group() works """ # GIVEN: An ImageGroups object and mocked functions ImageFilenames.group_id = 1 ImageGroups.parent_id = 1 self.media_item.manager = MagicMock() self.media_item.manager.get_all_objects.side_effect = self._recursively_delete_group_side_effect self.media_item.service_path = '' test_group = ImageGroups() test_group.id = 1 # WHEN: recursively_delete_group() is called self.media_item.recursively_delete_group(test_group) # THEN: delete_file() should have been called 12 times and manager.delete_object() 7 times. self.assertEquals(mocked_delete_file.call_count, 12, 'delete_file() should have been called 12 times') self.assertEquals( self.media_item.manager.delete_object.call_count, 7, 'manager.delete_object() should be called exactly 7 times') # CLEANUP: Remove added attribute from Image Filenames and ImageGroups delattr(ImageFilenames, 'group_id') delattr(ImageGroups, 'parent_id')
def recursively_delete_group_test(self): """ Test that recursively_delete_group() works """ # GIVEN: An ImageGroups object and mocked functions with patch('openlp.core.utils.delete_file') as mocked_delete_file: ImageFilenames.group_id = 1 ImageGroups.parent_id = 1 self.media_item.manager = MagicMock() self.media_item.manager.get_all_objects.side_effect = self._recursively_delete_group_side_effect self.media_item.servicePath = "" test_group = ImageGroups() test_group.id = 1 # WHEN: recursively_delete_group() is called self.media_item.recursively_delete_group(test_group) # THEN: assert mocked_delete_file.call_count == 0, 'delete_file() should not be called' assert self.media_item.manager.delete_object.call_count == 7, \ 'manager.delete_object() should be called exactly 7 times' # CLEANUP: Remove added attribute from ImageFilenames and ImageGroups delattr(ImageFilenames, 'group_id') delattr(ImageGroups, 'parent_id')
def test_recursively_delete_group(self, mocked_delete_file): """ Test that recursively_delete_group() works """ # GIVEN: An ImageGroups object and mocked functions ImageFilenames.group_id = 1 ImageGroups.parent_id = 1 self.media_item.manager = MagicMock() self.media_item.manager.get_all_objects.side_effect = self._recursively_delete_group_side_effect self.media_item.service_path = '' test_group = ImageGroups() test_group.id = 1 # WHEN: recursively_delete_group() is called self.media_item.recursively_delete_group(test_group) # THEN: delete_file() should have been called 12 times and manager.delete_object() 7 times. self.assertEquals(mocked_delete_file.call_count, 12, 'delete_file() should have been called 12 times') self.assertEquals(self.media_item.manager.delete_object.call_count, 7, 'manager.delete_object() should be called exactly 7 times') # CLEANUP: Remove added attribute from Image Filenames and ImageGroups delattr(ImageFilenames, 'group_id') delattr(ImageGroups, 'parent_id')
def load_list(self, images, target_group=None, initial_load=False): """ Add new images to the database. This method is called when adding images using the Add button or DnD. :param images: A List of strings containing the filenames of the files to be loaded :param target_group: The QTreeWidgetItem of the group that will be the parent of the added files :param initial_load: When set to False, the busy cursor and progressbar will be shown while loading images """ parent_group = None if target_group is None: # Find out if a group must be pre-selected preselect_group = None selected_items = self.list_view.selectedItems() if selected_items: selected_item = selected_items[0] if isinstance(selected_item.data(0, QtCore.Qt.UserRole), ImageFilenames): selected_item = selected_item.parent() if isinstance(selected_item, QtWidgets.QTreeWidgetItem): if isinstance(selected_item.data(0, QtCore.Qt.UserRole), ImageGroups): preselect_group = selected_item.data( 0, QtCore.Qt.UserRole).id # Enable and disable parts of the 'choose group' form if preselect_group is None: self.choose_group_form.nogroup_radio_button.setChecked(True) self.choose_group_form.nogroup_radio_button.setFocus() self.choose_group_form.existing_radio_button.setChecked(False) self.choose_group_form.new_radio_button.setChecked(False) else: self.choose_group_form.nogroup_radio_button.setChecked(False) self.choose_group_form.existing_radio_button.setChecked(True) self.choose_group_form.new_radio_button.setChecked(False) self.choose_group_form.group_combobox.setFocus() if self.manager.get_object_count(ImageGroups) == 0: self.choose_group_form.existing_radio_button.setDisabled(True) self.choose_group_form.group_combobox.setDisabled(True) else: self.choose_group_form.existing_radio_button.setDisabled(False) self.choose_group_form.group_combobox.setDisabled(False) # Ask which group the images should be saved in if self.choose_group_form.exec(selected_group=preselect_group): if self.choose_group_form.nogroup_radio_button.isChecked(): # User chose 'No group' parent_group = ImageGroups() parent_group.id = 0 elif self.choose_group_form.existing_radio_button.isChecked(): # User chose 'Existing group' group_id = self.choose_group_form.group_combobox.itemData( self.choose_group_form.group_combobox.currentIndex(), QtCore.Qt.UserRole) parent_group = self.manager.get_object_filtered( ImageGroups, ImageGroups.id == group_id) elif self.choose_group_form.new_radio_button.isChecked(): # User chose 'New group' parent_group = ImageGroups() parent_group.parent_id = 0 parent_group.group_name = self.choose_group_form.new_group_edit.text( ) self.manager.save_object(parent_group) self.fill_groups_combobox( self.choose_group_form.group_combobox) self.fill_groups_combobox( self.add_group_form.parent_group_combobox) else: parent_group = target_group.data(0, QtCore.Qt.UserRole) if isinstance(parent_group, ImageFilenames): if parent_group.group_id == 0: parent_group = ImageGroups() parent_group.id = 0 else: parent_group = target_group.parent().data( 0, QtCore.Qt.UserRole) # If no valid parent group is found, do nothing if not isinstance(parent_group, ImageGroups): return # Initialize busy cursor and progress bar self.application.set_busy_cursor() self.main_window.display_progress_bar(len(images)) # Save the new images in the database self.save_new_images_list(images, group_id=parent_group.id, reload_list=False) self.load_full_list(self.manager.get_all_objects( ImageFilenames, order_by_ref=ImageFilenames.filename), initial_load=initial_load, open_group=parent_group) self.application.set_normal_cursor()
def load_list(self, images, target_group=None, initial_load=False): """ Add new images to the database. This method is called when adding images using the Add button or DnD. :param images: A List of strings containing the filenames of the files to be loaded :param target_group: The QTreeWidgetItem of the group that will be the parent of the added files :param initial_load: When set to False, the busy cursor and progressbar will be shown while loading images """ parent_group = None if target_group is None: # Find out if a group must be pre-selected preselect_group = None selected_items = self.list_view.selectedItems() if selected_items: selected_item = selected_items[0] if isinstance(selected_item.data(0, QtCore.Qt.UserRole), ImageFilenames): selected_item = selected_item.parent() if isinstance(selected_item, QtGui.QTreeWidgetItem): if isinstance(selected_item.data(0, QtCore.Qt.UserRole), ImageGroups): preselect_group = selected_item.data(0, QtCore.Qt.UserRole).id # Enable and disable parts of the 'choose group' form if preselect_group is None: self.choose_group_form.nogroup_radio_button.setChecked(True) self.choose_group_form.nogroup_radio_button.setFocus() self.choose_group_form.existing_radio_button.setChecked(False) self.choose_group_form.new_radio_button.setChecked(False) else: self.choose_group_form.nogroup_radio_button.setChecked(False) self.choose_group_form.existing_radio_button.setChecked(True) self.choose_group_form.new_radio_button.setChecked(False) self.choose_group_form.group_combobox.setFocus() if self.manager.get_object_count(ImageGroups) == 0: self.choose_group_form.existing_radio_button.setDisabled(True) self.choose_group_form.group_combobox.setDisabled(True) else: self.choose_group_form.existing_radio_button.setDisabled(False) self.choose_group_form.group_combobox.setDisabled(False) # Ask which group the images should be saved in if self.choose_group_form.exec_(selected_group=preselect_group): if self.choose_group_form.nogroup_radio_button.isChecked(): # User chose 'No group' parent_group = ImageGroups() parent_group.id = 0 elif self.choose_group_form.existing_radio_button.isChecked(): # User chose 'Existing group' group_id = self.choose_group_form.group_combobox.itemData( self.choose_group_form.group_combobox.currentIndex(), QtCore.Qt.UserRole) parent_group = self.manager.get_object_filtered(ImageGroups, ImageGroups.id == group_id) elif self.choose_group_form.new_radio_button.isChecked(): # User chose 'New group' parent_group = ImageGroups() parent_group.parent_id = 0 parent_group.group_name = self.choose_group_form.new_group_edit.text() self.manager.save_object(parent_group) self.fill_groups_combobox(self.choose_group_form.group_combobox) self.fill_groups_combobox(self.add_group_form.parent_group_combobox) else: parent_group = target_group.data(0, QtCore.Qt.UserRole) if isinstance(parent_group, ImageFilenames): if parent_group.group_id == 0: parent_group = ImageGroups() parent_group.id = 0 else: parent_group = target_group.parent().data(0, QtCore.Qt.UserRole) # If no valid parent group is found, do nothing if not isinstance(parent_group, ImageGroups): return # Initialize busy cursor and progress bar self.application.set_busy_cursor() self.main_window.display_progress_bar(len(images)) # Save the new images in the database self.save_new_images_list(images, group_id=parent_group.id, reload_list=False) self.load_full_list(self.manager.get_all_objects(ImageFilenames, order_by_ref=ImageFilenames.filename), initial_load=initial_load, open_group=parent_group) self.application.set_normal_cursor()