← Back to team overview

openlp-core team mailing list archive

[Merge] lp:~phill-ridout/openlp/bug1397570 into lp:openlp

 

Phill has proposed merging lp:~phill-ridout/openlp/bug1397570 into lp:openlp.

Requested reviews:
  Tim Bentley (trb143)
Related bugs:
  Bug #1397570 in OpenLP: "Libre Office no longer works on Fedora 21"
  https://bugs.launchpad.net/openlp/+bug/1397570

For more details, see:
https://code.launchpad.net/~phill-ridout/openlp/bug1397570/+merge/243918

Set connection type in each test. Not sure how or if module variables can be mocked. Unfortunately setting the connection test would still allow the test to pass if somebody changed the connection type "constant", which would affect the return value of the function under test.

--------------------------------
lp:~phill-ridout/openlp/bug1397570 (revision 2454)
[SUCCESS] http://ci.openlp.org/job/Branch-01-Pull/823/
[SUCCESS] http://ci.openlp.org/job/Branch-02-Functional-Tests/755/
[SUCCESS] http://ci.openlp.org/job/Branch-03-Interface-Tests/701/
[FAILURE] http://ci.openlp.org/job/Branch-04a-Windows_Functional_Tests/605/
-- 
Your team OpenLP Core is subscribed to branch lp:openlp.
=== modified file 'tests/functional/openlp_core_utils/test_init.py'
--- tests/functional/openlp_core_utils/test_init.py	2014-10-21 20:05:08 +0000
+++ tests/functional/openlp_core_utils/test_init.py	2014-12-07 20:04:51 +0000
@@ -32,6 +32,7 @@
 from unittest import TestCase
 
 from openlp.core.common.settings import Settings
+from openlp.core import utils
 from openlp.core.utils import VersionThread, get_application_version
 from tests.functional import MagicMock, patch
 from tests.helpers.testmixin import TestMixin
@@ -62,9 +63,78 @@
         # WHEN: We check to see if the version is different .
         with patch('PyQt4.QtCore.QThread'),\
                 patch('openlp.core.utils.get_application_version') as mocked_get_application_version:
-            mocked_get_application_version.return_value = \
-                {'version': '1.0.0', 'build': '', 'full': '2.0.4'}
+            mocked_get_application_version.return_value = {'version': '1.0.0', 'build': '', 'full': '2.0.4'}
             version_thread = VersionThread(mocked_main_window)
             version_thread.run()
         # THEN: If the version has changed the main window is notified
         self.assertTrue(mocked_main_window.emit.called, 'The main windows should have been notified')
+
+    def get_uno_command_libreoffice_command_exists_test(self):
+        """
+        Test the ``get_uno_command`` function uses the libreoffice command when available.
+        :return:
+        """
+
+        # GIVEN: A patched 'which' method which returns a path when called with 'libreoffice'
+        with patch('openlp.core.utils.which',
+                   **{'side_effect': lambda command: {'libreoffice': '/usr/bin/libreoffice'}[command]}):
+
+            # WHEN: Calling get_uno_command with a pipe connection type
+            utils.UNO_CONNECTION_TYPE = 'pipe'
+            result = utils.get_uno_command()
+
+            # THEN: The command 'libreoffice' should be called with the appropriate parameters
+            self.assertEquals(result, 'libreoffice --nologo --norestore --minimized --nodefault --nofirststartwizard'
+                                       ' "--accept=pipe,name=openlp_pipe;urp;"')
+
+    def get_uno_command_only_soffice_command_exists_test(self):
+        """
+        Test the ``get_uno_command`` function uses the soffice command when the libreoffice command is not available.
+        :return:
+        """
+
+        # GIVEN: A patched 'which' method which returns None when called with 'libreoffice' and a path when called with
+        #        'soffice'
+        with patch('openlp.core.utils.which',
+                   **{'side_effect': lambda command: {'libreoffice': None, 'soffice': '/usr/bin/soffice'}[command]}):
+
+            # WHEN: Calling get_uno_command with a pipe connection type
+            utils.UNO_CONNECTION_TYPE = 'pipe'
+            result = utils.get_uno_command()
+
+            # THEN: The command 'soffice' should be called with the appropriate parameters
+            self.assertEquals(result, 'soffice --nologo --norestore --minimized --nodefault --nofirststartwizard'
+                                       ' "--accept=pipe,name=openlp_pipe;urp;"')
+
+    def get_uno_command_when_no_command_exists_test(self):
+        """
+        Test the ``get_uno_command`` function raises an FileNotFoundError when neither the libreoffice or soffice
+        commands are available.
+        :return:
+        """
+
+        # GIVEN: A patched 'which' method which returns None
+        with patch('openlp.core.utils.which', **{'return_value': None}):
+
+            # WHEN: Calling get_uno_command with a pipe connection type
+            utils.UNO_CONNECTION_TYPE = 'pipe'
+
+            # THEN: a FileNotFoundError exception should be raised
+            self.assertRaises(FileNotFoundError, utils.get_uno_command)
+
+    def get_uno_command_connection_type_test(self):
+        """
+        Test the ``get_uno_command`` function when the connection type is anything other than pipe.
+        :return:
+        """
+
+        # GIVEN: A patched 'which' method which returns 'libreoffice'
+        with patch('openlp.core.utils.which', **{'return_value': 'libreoffice'}):
+
+            # WHEN: Calling get_uno_command with a connection type other than pipe
+            utils.UNO_CONNECTION_TYPE = 'socket'
+            result = utils.get_uno_command()
+
+            # THEN: The connection parameters should be set for socket
+            self.assertEqual(result, 'libreoffice --nologo --norestore --minimized --nodefault --nofirststartwizard'
+                                     ' "--accept=socket,host=localhost,port=2002;urp;"')