mirror of https://gitlab.com/openlp/openlp.git
Merge branch 'issue-878-repaint-service-list' into 'master'
Attempt to fix #878 Closes #878 See merge request openlp/openlp!457
This commit is contained in:
commit
59dde255a4
|
@ -34,7 +34,6 @@ from tempfile import NamedTemporaryFile
|
|||
from PyQt5 import QtCore, QtGui, QtWidgets
|
||||
|
||||
from openlp.core.common import ThemeLevel, delete_file, sha256_file_hash
|
||||
from openlp.core.state import State
|
||||
from openlp.core.common.actions import ActionList, CategoryOrder
|
||||
from openlp.core.common.applocation import AppLocation
|
||||
from openlp.core.common.enum import ServiceItemType
|
||||
|
@ -47,6 +46,7 @@ from openlp.core.lib.exceptions import ValidationError
|
|||
from openlp.core.lib.plugin import PluginStatus
|
||||
from openlp.core.lib.serviceitem import ServiceItem
|
||||
from openlp.core.lib.ui import create_widget_action, critical_error_message_box, find_and_set_in_combo_box
|
||||
from openlp.core.state import State
|
||||
from openlp.core.ui.icons import UiIcons
|
||||
from openlp.core.ui.media import AUDIO_EXT, VIDEO_EXT
|
||||
from openlp.core.ui.serviceitemeditform import ServiceItemEditForm
|
||||
|
@ -331,6 +331,7 @@ class ServiceManager(QtWidgets.QWidget, RegistryBase, Ui_ServiceManager, LogMixi
|
|||
self.service_has_all_original_files = True
|
||||
self.list_double_clicked = False
|
||||
self.servicefile_version = None
|
||||
self.tree_widget_items = []
|
||||
|
||||
def bootstrap_initialise(self):
|
||||
"""
|
||||
|
@ -679,7 +680,10 @@ class ServiceManager(QtWidgets.QWidget, RegistryBase, Ui_ServiceManager, LogMixi
|
|||
service_content_size = len(bytes(service_content, encoding='utf-8'))
|
||||
total_size = service_content_size
|
||||
for local_file_item, zip_file_item in write_list:
|
||||
total_size += local_file_item.stat().st_size
|
||||
try:
|
||||
total_size += local_file_item.stat().st_size
|
||||
except FileNotFoundError:
|
||||
self.log_exception(f'Local file {local_file_item} not found')
|
||||
self.log_debug('ServiceManager.save_file - ZIP contents size is %i bytes' % total_size)
|
||||
self.main_window.display_progress_bar(1000)
|
||||
try:
|
||||
|
@ -1315,11 +1319,13 @@ class ServiceManager(QtWidgets.QWidget, RegistryBase, Ui_ServiceManager, LogMixi
|
|||
if not item['service_item'].has_original_file_path:
|
||||
self.service_has_all_original_files = False
|
||||
# Repaint the screen
|
||||
self.service_manager_list.clear()
|
||||
self.tree_widget_items = []
|
||||
self.service_manager_list.clearSelection()
|
||||
self.service_manager_list.clear()
|
||||
for item_index, item in enumerate(self.service_items):
|
||||
service_item_from_item = item['service_item']
|
||||
tree_widget_item = QtWidgets.QTreeWidgetItem(self.service_manager_list)
|
||||
self.tree_widget_items.append(tree_widget_item)
|
||||
if service_item_from_item.is_valid:
|
||||
icon = service_item_from_item.icon.pixmap(80, 80).toImage()
|
||||
icon = icon.scaled(80, 80, QtCore.Qt.KeepAspectRatio, QtCore.Qt.SmoothTransformation)
|
||||
|
|
|
@ -1266,6 +1266,116 @@ def test_service_manager_load_file_str(MockPath, registry):
|
|||
MockPath.return_value.exists.assert_called_once()
|
||||
|
||||
|
||||
@patch('openlp.core.ui.servicemanager.QtWidgets.QMessageBox')
|
||||
def test_service_manager_delete_confirmation_dialog(MockMessageBox, registry):
|
||||
"""Test the _delete_confirmation_dialog() method"""
|
||||
# GIVEN: A service manager and a mocked QMessageBox class
|
||||
service_manager = ServiceManager(None)
|
||||
mocked_message_box = MagicMock()
|
||||
MockMessageBox.return_value = mocked_message_box
|
||||
# Restore a couple of items for a more realistic situation
|
||||
MockMessageBox.Question = QtWidgets.QMessageBox.Question
|
||||
MockMessageBox.Close = QtWidgets.QMessageBox.Close
|
||||
MockMessageBox.Cancel = QtWidgets.QMessageBox.Cancel
|
||||
MockMessageBox.StandardButtons = QtWidgets.QMessageBox.StandardButtons
|
||||
|
||||
# WHEN: _delete_confirmation_dialog() is called
|
||||
service_manager._delete_confirmation_dialog()
|
||||
|
||||
# THEN: All the correct things should have been called
|
||||
MockMessageBox.assert_called_once_with(QtWidgets.QMessageBox.Question, 'Delete item from service',
|
||||
'Are you sure you want to delete this item from the service?',
|
||||
QtWidgets.QMessageBox.StandardButtons(QtWidgets.QMessageBox.Close |
|
||||
QtWidgets.QMessageBox.Cancel),
|
||||
service_manager)
|
||||
mocked_message_box.button.assert_called_once_with(QtWidgets.QMessageBox.Close)
|
||||
mocked_message_box.setDefaultButton.assert_called_once_with(QtWidgets.QMessageBox.Close)
|
||||
mocked_message_box.exec.assert_called_once()
|
||||
|
||||
|
||||
@patch('openlp.core.ui.servicemanager.QtWidgets.QMessageBox.question')
|
||||
def test_service_manager_save_modified_service(mocked_question, registry):
|
||||
"""Test the save_modified_service() method"""
|
||||
# GIVEN: A service manager and a mocked main window
|
||||
mocked_main_window = MagicMock()
|
||||
registry.register('main_window', mocked_main_window)
|
||||
service_manager = ServiceManager(None)
|
||||
|
||||
# WHEN: save_modified_service() is called
|
||||
service_manager.save_modified_service()
|
||||
|
||||
# THEN: All the correct things should have been called
|
||||
mocked_question.assert_called_once_with(mocked_main_window, 'Modified Service',
|
||||
'The current service has been modified. '
|
||||
'Would you like to save this service?',
|
||||
QtWidgets.QMessageBox.Save | QtWidgets.QMessageBox.Discard |
|
||||
QtWidgets.QMessageBox.Cancel, QtWidgets.QMessageBox.Save)
|
||||
|
||||
|
||||
def test_service_manager_on_recent_service_clicked_cancel(registry):
|
||||
"""Test the on_recent_service_clicked() method"""
|
||||
# GIVEN: A service manager with some methods mocked out
|
||||
service_manager = ServiceManager(None)
|
||||
service_manager.is_modified = lambda: True
|
||||
service_manager.save_modified_service = lambda: QtWidgets.QMessageBox.Cancel
|
||||
|
||||
# WHEN: on_recent_service_clicked() is called
|
||||
result = service_manager.on_recent_service_clicked(True)
|
||||
|
||||
# THEN: The result should be False
|
||||
assert result is False, 'on_recent_service_clicked() should have returned False'
|
||||
|
||||
|
||||
def test_service_manager_on_recent_service_clicked_save(registry):
|
||||
"""Test the on_recent_service_clicked() method"""
|
||||
# GIVEN: A service manager with some methods mocked out
|
||||
service_manager = ServiceManager(None)
|
||||
service_manager.is_modified = lambda: True
|
||||
service_manager.save_modified_service = lambda: QtWidgets.QMessageBox.Save
|
||||
service_manager.decide_save_method = lambda: None
|
||||
service_manager.sender = lambda: MagicMock(**{'data.return_value': '/path/to/service'})
|
||||
service_manager.load_file = MagicMock()
|
||||
|
||||
# WHEN: on_recent_service_clicked() is called
|
||||
result = service_manager.on_recent_service_clicked(True)
|
||||
|
||||
# THEN: The result should be None
|
||||
assert result is None, 'on_recent_service_clicked() should have returned None'
|
||||
service_manager.load_file.assert_called_once_with(Path('/path/to/service'))
|
||||
|
||||
|
||||
def test_service_manager_decide_save_method_save(registry):
|
||||
"""Test the decide_save_method() method"""
|
||||
# GIVEN: A service manager with some methods mocked out
|
||||
service_manager = ServiceManager(None)
|
||||
service_manager.file_name = lambda: 'filename.osz'
|
||||
service_manager.save_file = MagicMock()
|
||||
service_manager.save_file_as = MagicMock()
|
||||
|
||||
# WHEN: decide_save_method() is called
|
||||
service_manager.decide_save_method()
|
||||
|
||||
# THEN: The correct methods should have been called
|
||||
service_manager.save_file.assert_called_once()
|
||||
assert service_manager.save_file_as.call_count == 0, 'The save_file_as method should not have been called'
|
||||
|
||||
|
||||
def test_service_manager_decide_save_method_save_as(registry):
|
||||
"""Test the decide_save_method() method"""
|
||||
# GIVEN: A service manager with some methods mocked out
|
||||
service_manager = ServiceManager(None)
|
||||
service_manager.file_name = lambda: None
|
||||
service_manager.save_file = MagicMock()
|
||||
service_manager.save_file_as = MagicMock()
|
||||
|
||||
# WHEN: decide_save_method() is called
|
||||
service_manager.decide_save_method()
|
||||
|
||||
# THEN: The correct methods should have been called
|
||||
service_manager.save_file_as.assert_called_once()
|
||||
assert service_manager.save_file.call_count == 0, 'The save_file method should not have been called'
|
||||
|
||||
|
||||
class TestServiceManager(TestCase, TestMixin):
|
||||
"""
|
||||
Test the service manager
|
||||
|
|
Loading…
Reference in New Issue