Example #1
0
    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')
Example #2
0
    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')
Example #3
0
    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')
Example #4
0
    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()
Example #5
0
    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()