diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index 456399869..75616960b 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -909,7 +909,9 @@ class SlideController(DisplayController, RegistryProperties): Registry().execute('%s_stop' % old_item.name.lower(), [old_item, self.is_live]) if old_item.is_media() and not self.service_item.is_media(): self.on_media_close() - Registry().execute('slidecontroller_%s_started' % self.type_prefix, [self.service_item]) + if self.is_live: + # This even is only registered for live + Registry().execute('slidecontroller_%s_started' % self.type_prefix, [self.service_item]) def on_slide_selected_index(self, message): """ diff --git a/openlp/plugins/songs/lib/importers/openlp.py b/openlp/plugins/songs/lib/importers/openlp.py index f13ed4620..383ea0483 100644 --- a/openlp/plugins/songs/lib/importers/openlp.py +++ b/openlp/plugins/songs/lib/importers/openlp.py @@ -149,7 +149,12 @@ class OpenLPSongImport(SongImport): class_mapper(OldSongBookEntry) except UnmappedClassError: mapper(OldSongBookEntry, source_songs_songbooks_table, properties={'songbook': relation(OldBook)}) - if has_authors_songs and 'author_type' in source_authors_songs_table.c.values(): + if has_authors_songs: + try: + class_mapper(OldAuthorSong) + except UnmappedClassError: + mapper(OldAuthorSong, source_authors_songs_table) + if has_authors_songs and 'author_type' in source_authors_songs_table.c.keys(): has_author_type = True else: has_author_type = False @@ -190,11 +195,6 @@ class OpenLPSongImport(SongImport): class_mapper(OldTopic) except UnmappedClassError: mapper(OldTopic, source_topics_table) - if has_authors_songs: - try: - class_mapper(OldAuthorSong) - except UnmappedClassError: - mapper(OldAuthorSong, source_authors_songs_table) source_songs = self.source_session.query(OldSong).all() if self.import_wizard: diff --git a/tests/functional/openlp_core/test_init.py b/tests/functional/openlp_core/test_init.py index 0aef7d8cb..6684f0057 100644 --- a/tests/functional/openlp_core/test_init.py +++ b/tests/functional/openlp_core/test_init.py @@ -24,6 +24,8 @@ import sys from unittest import TestCase from unittest.mock import MagicMock, patch +from PyQt5 import QtWidgets + from openlp.core import OpenLP, parse_options @@ -156,3 +158,73 @@ class TestOpenLP(TestCase): assert result is False del app + + @patch('openlp.core.QtCore.QSharedMemory') + def test_is_already_running_not_running(self, MockedSharedMemory): + """ + Test the is_already_running() method when OpenLP is NOT running + """ + # GIVEN: An OpenLP app and some mocks + mocked_shared_memory = MagicMock() + mocked_shared_memory.attach.return_value = False + MockedSharedMemory.return_value = mocked_shared_memory + app = OpenLP([]) + + # WHEN: is_already_running() is called + result = app.is_already_running() + + # THEN: The result should be false + MockedSharedMemory.assert_called_once_with('OpenLP') + mocked_shared_memory.attach.assert_called_once_with() + mocked_shared_memory.create.assert_called_once_with(1) + assert result is False + + @patch('openlp.core.QtWidgets.QMessageBox.critical') + @patch('openlp.core.QtWidgets.QMessageBox.StandardButtons') + @patch('openlp.core.QtCore.QSharedMemory') + def test_is_already_running_is_running_continue(self, MockedSharedMemory, MockedStandardButtons, mocked_critical): + """ + Test the is_already_running() method when OpenLP IS running and the user chooses to continue + """ + # GIVEN: An OpenLP app and some mocks + mocked_shared_memory = MagicMock() + mocked_shared_memory.attach.return_value = True + MockedSharedMemory.return_value = mocked_shared_memory + MockedStandardButtons.return_value = 0 + mocked_critical.return_value = QtWidgets.QMessageBox.Yes + app = OpenLP([]) + + # WHEN: is_already_running() is called + result = app.is_already_running() + + # THEN: The result should be false + MockedSharedMemory.assert_called_once_with('OpenLP') + mocked_shared_memory.attach.assert_called_once_with() + MockedStandardButtons.assert_called_once_with(QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No) + mocked_critical.assert_called_once_with(None, 'Error', 'OpenLP is already running. Do you wish to continue?', 0) + assert result is False + + @patch('openlp.core.QtWidgets.QMessageBox.critical') + @patch('openlp.core.QtWidgets.QMessageBox.StandardButtons') + @patch('openlp.core.QtCore.QSharedMemory') + def test_is_already_running_is_running_stop(self, MockedSharedMemory, MockedStandardButtons, mocked_critical): + """ + Test the is_already_running() method when OpenLP IS running and the user chooses to stop + """ + # GIVEN: An OpenLP app and some mocks + mocked_shared_memory = MagicMock() + mocked_shared_memory.attach.return_value = True + MockedSharedMemory.return_value = mocked_shared_memory + MockedStandardButtons.return_value = 0 + mocked_critical.return_value = QtWidgets.QMessageBox.No + app = OpenLP([]) + + # WHEN: is_already_running() is called + result = app.is_already_running() + + # THEN: The result should be false + MockedSharedMemory.assert_called_once_with('OpenLP') + mocked_shared_memory.attach.assert_called_once_with() + MockedStandardButtons.assert_called_once_with(QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No) + mocked_critical.assert_called_once_with(None, 'Error', 'OpenLP is already running. Do you wish to continue?', 0) + assert result is True diff --git a/tests/functional/openlp_core_ui/test_slidecontroller.py b/tests/functional/openlp_core_ui/test_slidecontroller.py index 1bbf16227..4058f79c2 100644 --- a/tests/functional/openlp_core_ui/test_slidecontroller.py +++ b/tests/functional/openlp_core_ui/test_slidecontroller.py @@ -681,7 +681,7 @@ class TestSlideController(TestCase): slide_controller._process_item(mocked_media_item, 0) # THEN: Registry.execute should have been called to stop the presentation - self.assertEqual(3, mocked_execute.call_count, 'Execute should have been called 3 times') + self.assertEqual(2, mocked_execute.call_count, 'Execute should have been called 2 times') self.assertEqual('mocked_presentation_item_stop', mocked_execute.call_args_list[1][0][0], 'The presentation should have been stopped.') diff --git a/tests/functional/openlp_plugins/songs/test_openlpimporter.py b/tests/functional/openlp_plugins/songs/test_openlpimporter.py index 9682695a9..3166c1e7d 100644 --- a/tests/functional/openlp_plugins/songs/test_openlpimporter.py +++ b/tests/functional/openlp_plugins/songs/test_openlpimporter.py @@ -23,10 +23,10 @@ This module contains tests for the OpenLP song importer. """ from unittest import TestCase +from unittest.mock import patch, MagicMock -from openlp.plugins.songs.lib.importers.openlp import OpenLPSongImport from openlp.core.common import Registry -from tests.functional import patch, MagicMock +from openlp.plugins.songs.lib.importers.openlp import OpenLPSongImport class TestOpenLPImport(TestCase): diff --git a/tests/resources/opensongsongs/Amazing Grace.json b/tests/resources/opensongsongs/Amazing Grace.json index 97b8c77b7..83c19fb85 100644 --- a/tests/resources/opensongsongs/Amazing Grace.json +++ b/tests/resources/opensongsongs/Amazing Grace.json @@ -39,4 +39,4 @@ "v5" ] ] -} \ No newline at end of file +}