← Back to team overview

openlp-core team mailing list archive

[Merge] lp:~raoul-snyman/openlp/fix-author_type into lp:openlp

 

Raoul Snyman has proposed merging lp:~raoul-snyman/openlp/fix-author_type into lp:openlp.

Commit message:
Fix the author_type import properly

Requested reviews:
  OpenLP Core (openlp-core)

For more details, see:
https://code.launchpad.net/~raoul-snyman/openlp/fix-author_type/+merge/321138

Fix the author_type import properly

Add this to your merge proposal:
--------------------------------
lp:~raoul-snyman/openlp/fix-author_type (revision 2731)
[SUCCESS] https://ci.openlp.io/job/Branch-01-Pull/1950/
[SUCCESS] https://ci.openlp.io/job/Branch-02-Functional-Tests/1861/
[SUCCESS] https://ci.openlp.io/job/Branch-03-Interface-Tests/1802/
[SUCCESS] https://ci.openlp.io/job/Branch-04a-Windows_Functional_Tests/1528/
[SUCCESS] https://ci.openlp.io/job/Branch-04b-Windows_Interface_Tests/1118/
[SUCCESS] https://ci.openlp.io/job/Branch-05a-Code_Analysis/1186/
[SUCCESS] https://ci.openlp.io/job/Branch-05b-Test_Coverage/1054/
[SUCCESS] https://ci.openlp.io/job/Branch-05c-Code_Analysis2/187/

-- 
Your team OpenLP Core is requested to review the proposed merge of lp:~raoul-snyman/openlp/fix-author_type into lp:openlp.
=== modified file 'openlp/core/ui/slidecontroller.py'
--- openlp/core/ui/slidecontroller.py	2016-12-31 11:01:36 +0000
+++ openlp/core/ui/slidecontroller.py	2017-03-28 05:26:11 +0000
@@ -921,7 +921,8 @@
                 Registry().execute('{name}_stop'.format(name=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_{item}_started'.format(item=self.type_prefix), [self.service_item])
+        if self.is_live:
+            Registry().execute('slidecontroller_{item}_started'.format(item=self.type_prefix), [self.service_item])
 
     def on_slide_selected_index(self, message):
         """

=== modified file 'openlp/plugins/songs/lib/importers/openlp.py'
--- openlp/plugins/songs/lib/importers/openlp.py	2017-03-23 04:43:13 +0000
+++ openlp/plugins/songs/lib/importers/openlp.py	2017-03-28 05:26:11 +0000
@@ -150,7 +150,12 @@
                 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
@@ -191,11 +196,6 @@
             class_mapper(OldTopic)
         except UnmappedClassError:
             mapper(OldTopic, source_topics_table)
-        if has_authors_songs:
-            try:
-                class_mapper(OldTopic)
-            except UnmappedClassError:
-                mapper(OldTopic, source_topics_table)
 
         source_songs = self.source_session.query(OldSong).all()
         if self.import_wizard:

=== modified file 'tests/functional/openlp_core/test_init.py'
--- tests/functional/openlp_core/test_init.py	2017-03-10 23:20:44 +0000
+++ tests/functional/openlp_core/test_init.py	2017-03-28 05:26:11 +0000
@@ -19,11 +19,12 @@
 # with this program; if not, write to the Free Software Foundation, Inc., 59  #
 # Temple Place, Suite 330, Boston, MA 02111-1307 USA                          #
 ###############################################################################
-
 import sys
 from unittest import TestCase, skip
 from unittest.mock import MagicMock, patch
 
+from PyQt5 import QtWidgets
+
 from openlp.core import OpenLP, parse_options
 
 
@@ -131,11 +132,11 @@
         self.assertEquals(args.rargs, 'dummy_temp', 'The service file should not be blank')
 
 
+@skip('Figure out why this is causing a segfault')
 class TestOpenLP(TestCase):
     """
     Test the OpenLP app class
     """
-    @skip('Figure out why this is causing a segfault')
     @patch('openlp.core.QtWidgets.QApplication.exec')
     def test_exec(self, mocked_exec):
         """
@@ -155,4 +156,72 @@
         app.shared_memory.detach.assert_called_once_with()
         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

=== modified file 'tests/functional/openlp_core_ui/test_slidecontroller.py'
--- tests/functional/openlp_core_ui/test_slidecontroller.py	2016-12-31 11:01:36 +0000
+++ tests/functional/openlp_core_ui/test_slidecontroller.py	2017-03-28 05:26:11 +0000
@@ -658,7 +658,7 @@
         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.')
 


Follow ups