← Back to team overview

openlp-core team mailing list archive

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

 

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

Requested reviews:
  Tomas Groth (tomasgroth)
  Tim Bentley (trb143)
Related bugs:
  Bug #1222534 in OpenLP: "KeyError when "Allow presentation application to be overridden" and Spanish language is selected"
  https://bugs.launchpad.net/openlp/+bug/1222534

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

Fixes bug 1222534 by using userdata rather than relying on a translated string

lp:~phill-ridout/openlp/bug1222534 (revision 2392)
[SUCCESS] http://ci.openlp.org/job/Branch-01-Pull/659/
[SUCCESS] http://ci.openlp.org/job/Branch-02-Functional-Tests/607/
[SUCCESS] http://ci.openlp.org/job/Branch-03-Interface-Tests/551/
[SUCCESS] http://ci.openlp.org/job/Branch-04a-Windows_Functional_Tests/500/
[SUCCESS] http://ci.openlp.org/job/Branch-04b-Windows_Interface_Tests/109/
[SUCCESS] http://ci.openlp.org/job/Branch-05a-Code_Analysis/317/
[SUCCESS] http://ci.openlp.org/job/Branch-05b-Test_Coverage/191/
-- 
https://code.launchpad.net/~phill-ridout/openlp/bug1222534/+merge/236962
Your team OpenLP Core is subscribed to branch lp:openlp.
=== modified file 'openlp/plugins/presentations/lib/mediaitem.py'
--- openlp/plugins/presentations/lib/mediaitem.py	2014-08-25 20:04:33 +0000
+++ openlp/plugins/presentations/lib/mediaitem.py	2014-10-02 20:04:41 +0000
@@ -145,7 +145,7 @@
             if self.controllers[item].enabled():
                 self.display_type_combo_box.addItem(item)
         if self.display_type_combo_box.count() > 1:
-            self.display_type_combo_box.insertItem(0, self.automatic)
+            self.display_type_combo_box.insertItem(0, self.automatic, userData='automatic')
             self.display_type_combo_box.setCurrentIndex(0)
         if Settings().value(self.settings_section + '/override app') == QtCore.Qt.Checked:
             self.presentation_widget.show()
@@ -313,7 +313,7 @@
                 (path, name) = os.path.split(filename)
                 service_item.title = name
                 if os.path.exists(filename):
-                    if service_item.processor == self.automatic:
+                    if self.display_type_combo_box.itemData(self.display_type_combo_box.currentIndex()) == 'automatic':
                         service_item.processor = self.find_controller_by_type(filename)
                         if not service_item.processor:
                             return False

=== modified file 'tests/functional/openlp_plugins/presentations/test_presentationcontroller.py'
--- tests/functional/openlp_plugins/presentations/test_presentationcontroller.py	2014-07-15 10:02:56 +0000
+++ tests/functional/openlp_plugins/presentations/test_presentationcontroller.py	2014-10-02 20:04:41 +0000
@@ -1,166 +1,300 @@
-# -*- coding: utf-8 -*-
-# vim: autoindent shiftwidth=4 expandtab textwidth=120 tabstop=4 softtabstop=4
-
-###############################################################################
-# OpenLP - Open Source Lyrics Projection                                      #
-# --------------------------------------------------------------------------- #
-# Copyright (c) 2008-2014 Raoul Snyman                                        #
-# Portions copyright (c) 2008-2014 Tim Bentley, Gerald Britton, Jonathan      #
-# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub,      #
-# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer.   #
-# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru,          #
-# Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith,             #
-# Maikel Stuivenberg, Martin Thompson, Jon Tibble, Dave Warnock,              #
-# Frode Woldsund, Martin Zibricky, Patrick Zimmermann                         #
-# --------------------------------------------------------------------------- #
-# This program is free software; you can redistribute it and/or modify it     #
-# under the terms of the GNU General Public License as published by the Free  #
-# Software Foundation; version 2 of the License.                              #
-#                                                                             #
-# This program is distributed in the hope that it will be useful, but WITHOUT #
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or       #
-# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for    #
-# more details.                                                               #
-#                                                                             #
-# You should have received a copy of the GNU General Public License along     #
-# with this program; if not, write to the Free Software Foundation, Inc., 59  #
-# Temple Place, Suite 330, Boston, MA 02111-1307 USA                          #
-###############################################################################
-"""
-Functional tests to test the PresentationController and PresentationDocument
-classes and related methods.
-"""
-from unittest import TestCase
-import os
-from openlp.plugins.presentations.lib.presentationcontroller import PresentationController, PresentationDocument
-from tests.functional import MagicMock, patch, mock_open
-
-FOLDER_TO_PATCH = 'openlp.plugins.presentations.lib.presentationcontroller.PresentationDocument.get_thumbnail_folder'
-
-
-class TestPresentationController(TestCase):
-    """
-    Test the PresentationController.
-    """
-    def setUp(self):
-        mocked_plugin = MagicMock()
-        mocked_plugin.settings_section = 'presentations'
-        self.presentation = PresentationController(mocked_plugin)
-        self.document = PresentationDocument(self.presentation, '')
-
-    def constructor_test(self):
-        """
-        Test the Constructor
-        """
-        # GIVEN: A mocked plugin
-
-        # WHEN: The PresentationController is created
-
-        # THEN: The name of the presentation controller should be correct
-        self.assertEqual('PresentationController', self.presentation.name,
-                         'The name of the presentation controller should be correct')
-
-    def save_titles_and_notes_test(self):
-        """
-        Test PresentationDocument.save_titles_and_notes method with two valid lists
-        """
-        # GIVEN: two lists of length==2 and a mocked open and get_thumbnail_folder
-        mocked_open = mock_open()
-        with patch('builtins.open', mocked_open), patch(FOLDER_TO_PATCH) as mocked_get_thumbnail_folder:
-            titles = ['uno', 'dos']
-            notes = ['one', 'two']
-
-            # WHEN: calling save_titles_and_notes
-            mocked_get_thumbnail_folder.return_value = 'test'
-            self.document.save_titles_and_notes(titles, notes)
-
-            # THEN: the last call to open should have been for slideNotes2.txt
-            mocked_open.assert_any_call(os.path.join('test', 'titles.txt'), mode='w')
-            mocked_open.assert_any_call(os.path.join('test', 'slideNotes1.txt'), mode='w')
-            mocked_open.assert_any_call(os.path.join('test', 'slideNotes2.txt'), mode='w')
-            self.assertEqual(mocked_open.call_count, 3, 'There should be exactly three files opened')
-            mocked_open().writelines.assert_called_once_with(['uno', 'dos'])
-            mocked_open().write.assert_called_any('one')
-            mocked_open().write.assert_called_any('two')
-
-    def save_titles_and_notes_with_None_test(self):
-        """
-        Test PresentationDocument.save_titles_and_notes method with no data
-        """
-        # GIVEN: None and an empty list and a mocked open and get_thumbnail_folder
-        with patch('builtins.open') as mocked_open, patch(FOLDER_TO_PATCH) as mocked_get_thumbnail_folder:
-            titles = None
-            notes = None
-
-            # WHEN: calling save_titles_and_notes
-            mocked_get_thumbnail_folder.return_value = 'test'
-            self.document.save_titles_and_notes(titles, notes)
-
-            # THEN: No file should have been created
-            self.assertEqual(mocked_open.call_count, 0, 'No file should be created')
-
-    def get_titles_and_notes_test(self):
-        """
-        Test PresentationDocument.get_titles_and_notes method
-        """
-        # GIVEN: A mocked open, get_thumbnail_folder and exists
-
-        with patch('builtins.open', mock_open(read_data='uno\ndos\n')) as mocked_open, \
-                patch(FOLDER_TO_PATCH) as mocked_get_thumbnail_folder, \
-                patch('openlp.plugins.presentations.lib.presentationcontroller.os.path.exists') as mocked_exists:
-            mocked_get_thumbnail_folder.return_value = 'test'
-            mocked_exists.return_value = True
-
-            # WHEN: calling get_titles_and_notes
-            result_titles, result_notes = self.document.get_titles_and_notes()
-
-            # THEN: it should return two items for the titles and two empty strings for the notes
-            self.assertIs(type(result_titles), list, 'result_titles should be of type list')
-            self.assertEqual(len(result_titles), 2, 'There should be two items in the titles')
-            self.assertIs(type(result_notes), list, 'result_notes should be of type list')
-            self.assertEqual(len(result_notes), 2, 'There should be two items in the notes')
-            self.assertEqual(mocked_open.call_count, 3, 'Three files should be opened')
-            mocked_open.assert_any_call(os.path.join('test', 'titles.txt'))
-            mocked_open.assert_any_call(os.path.join('test', 'slideNotes1.txt'))
-            mocked_open.assert_any_call(os.path.join('test', 'slideNotes2.txt'))
-            self.assertEqual(mocked_exists.call_count, 3, 'Three files should have been checked')
-
-    def get_titles_and_notes_with_file_not_found_test(self):
-        """
-        Test PresentationDocument.get_titles_and_notes method with file not found
-        """
-        # GIVEN: A mocked open, get_thumbnail_folder and exists
-        with patch('builtins.open') as mocked_open, \
-                patch(FOLDER_TO_PATCH) as mocked_get_thumbnail_folder, \
-                patch('openlp.plugins.presentations.lib.presentationcontroller.os.path.exists') as mocked_exists:
-            mocked_get_thumbnail_folder.return_value = 'test'
-            mocked_exists.return_value = False
-
-            # WHEN: calling get_titles_and_notes
-            result_titles, result_notes = self.document.get_titles_and_notes()
-
-            # THEN: it should return two empty lists
-            self.assertIs(type(result_titles), list, 'result_titles should be of type list')
-            self.assertEqual(len(result_titles), 0, 'there be no titles')
-            self.assertIs(type(result_notes), list, 'result_notes should be a list')
-            self.assertEqual(len(result_notes), 0, 'but the list should be empty')
-            self.assertEqual(mocked_open.call_count, 0, 'No calls to open files')
-            self.assertEqual(mocked_exists.call_count, 1, 'There should be one call to file exists')
-
-    def get_titles_and_notes_with_file_error_test(self):
-        """
-        Test PresentationDocument.get_titles_and_notes method with file errors
-        """
-        # GIVEN: A mocked open, get_thumbnail_folder and exists
-        with patch('builtins.open') as mocked_open, \
-                patch(FOLDER_TO_PATCH) as mocked_get_thumbnail_folder, \
-                patch('openlp.plugins.presentations.lib.presentationcontroller.os.path.exists') as mocked_exists:
-            mocked_get_thumbnail_folder.return_value = 'test'
-            mocked_exists.return_value = True
-            mocked_open.side_effect = IOError()
-
-            # WHEN: calling get_titles_and_notes
-            result_titles, result_notes = self.document.get_titles_and_notes()
-
-            # THEN: it should return two empty lists
-            self.assertIs(type(result_titles), list, 'result_titles should be a list')
+# -*- coding: utf-8 -*-
+# vim: autoindent shiftwidth=4 expandtab textwidth=120 tabstop=4 softtabstop=4
+
+###############################################################################
+# OpenLP - Open Source Lyrics Projection                                      #
+# --------------------------------------------------------------------------- #
+# Copyright (c) 2008-2014 Raoul Snyman                                        #
+# Portions copyright (c) 2008-2014 Tim Bentley, Gerald Britton, Jonathan      #
+# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub,      #
+# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer.   #
+# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru,          #
+# Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith,             #
+# Maikel Stuivenberg, Martin Thompson, Jon Tibble, Dave Warnock,              #
+# Frode Woldsund, Martin Zibricky, Patrick Zimmermann                         #
+# --------------------------------------------------------------------------- #
+# This program is free software; you can redistribute it and/or modify it     #
+# under the terms of the GNU General Public License as published by the Free  #
+# Software Foundation; version 2 of the License.                              #
+#                                                                             #
+# This program is distributed in the hope that it will be useful, but WITHOUT #
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or       #
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for    #
+# more details.                                                               #
+#                                                                             #
+# You should have received a copy of the GNU General Public License along     #
+# with this program; if not, write to the Free Software Foundation, Inc., 59  #
+# Temple Place, Suite 330, Boston, MA 02111-1307 USA                          #
+###############################################################################
+"""
+Functional tests to test the PresentationController and PresentationDocument
+classes and related methods.
+"""
+from unittest import TestCase
+import os
+from openlp.plugins.presentations.lib.presentationcontroller import PresentationController, PresentationDocument
+from tests.functional import MagicMock, mock_open, patch
+
+FOLDER_TO_PATCH = 'openlp.plugins.presentations.lib.presentationcontroller.PresentationDocument.get_thumbnail_folder'
+
+
+class TestPresentationController(TestCase):
+    """
+    Test the PresentationController.
+    """
+    # TODO: Items left to test
+    #   PresentationController
+    #       __init__
+    #       enabled
+    #       is_available
+    #       check_available
+    #       start_process
+    #       kill
+    #       add_document
+    #       remove_doc
+    #       close_presentation
+    #       _get_plugin_manager
+
+    def setUp(self):
+        mocked_plugin = MagicMock()
+        mocked_plugin.settings_section = 'presentations'
+        self.presentation = PresentationController(mocked_plugin)
+        self.document = PresentationDocument(self.presentation, '')
+
+    def constructor_test(self):
+        """
+        Test the Constructor
+        """
+        # GIVEN: A mocked plugin
+
+        # WHEN: The PresentationController is created
+
+        # THEN: The name of the presentation controller should be correct
+        self.assertEqual('PresentationController', self.presentation.name,
+                         'The name of the presentation controller should be correct')
+
+    def save_titles_and_notes_test(self):
+        """
+        Test PresentationDocument.save_titles_and_notes method with two valid lists
+        """
+        # GIVEN: two lists of length==2 and a mocked open and get_thumbnail_folder
+        mocked_open = mock_open()
+        with patch('builtins.open', mocked_open), patch(FOLDER_TO_PATCH) as mocked_get_thumbnail_folder:
+            titles = ['uno', 'dos']
+            notes = ['one', 'two']
+
+            # WHEN: calling save_titles_and_notes
+            mocked_get_thumbnail_folder.return_value = 'test'
+            self.document.save_titles_and_notes(titles, notes)
+
+            # THEN: the last call to open should have been for slideNotes2.txt
+            mocked_open.assert_any_call(os.path.join('test', 'titles.txt'), mode='w')
+            mocked_open.assert_any_call(os.path.join('test', 'slideNotes1.txt'), mode='w')
+            mocked_open.assert_any_call(os.path.join('test', 'slideNotes2.txt'), mode='w')
+            self.assertEqual(mocked_open.call_count, 3, 'There should be exactly three files opened')
+            mocked_open().writelines.assert_called_once_with(['uno', 'dos'])
+            mocked_open().write.assert_called_any('one')
+            mocked_open().write.assert_called_any('two')
+
+    def save_titles_and_notes_with_None_test(self):
+        """
+        Test PresentationDocument.save_titles_and_notes method with no data
+        """
+        # GIVEN: None and an empty list and a mocked open and get_thumbnail_folder
+        with patch('builtins.open') as mocked_open, patch(FOLDER_TO_PATCH) as mocked_get_thumbnail_folder:
+            titles = None
+            notes = None
+
+            # WHEN: calling save_titles_and_notes
+            mocked_get_thumbnail_folder.return_value = 'test'
+            self.document.save_titles_and_notes(titles, notes)
+
+            # THEN: No file should have been created
+            self.assertEqual(mocked_open.call_count, 0, 'No file should be created')
+
+    def get_titles_and_notes_test(self):
+        """
+        Test PresentationDocument.get_titles_and_notes method
+        """
+        # GIVEN: A mocked open, get_thumbnail_folder and exists
+
+        with patch('builtins.open', mock_open(read_data='uno\ndos\n')) as mocked_open, \
+                patch(FOLDER_TO_PATCH) as mocked_get_thumbnail_folder, \
+                patch('openlp.plugins.presentations.lib.presentationcontroller.os.path.exists') as mocked_exists:
+            mocked_get_thumbnail_folder.return_value = 'test'
+            mocked_exists.return_value = True
+
+            # WHEN: calling get_titles_and_notes
+            result_titles, result_notes = self.document.get_titles_and_notes()
+
+            # THEN: it should return two items for the titles and two empty strings for the notes
+            self.assertIs(type(result_titles), list, 'result_titles should be of type list')
+            self.assertEqual(len(result_titles), 2, 'There should be two items in the titles')
+            self.assertIs(type(result_notes), list, 'result_notes should be of type list')
+            self.assertEqual(len(result_notes), 2, 'There should be two items in the notes')
+            self.assertEqual(mocked_open.call_count, 3, 'Three files should be opened')
+            mocked_open.assert_any_call(os.path.join('test', 'titles.txt'))
+            mocked_open.assert_any_call(os.path.join('test', 'slideNotes1.txt'))
+            mocked_open.assert_any_call(os.path.join('test', 'slideNotes2.txt'))
+            self.assertEqual(mocked_exists.call_count, 3, 'Three files should have been checked')
+
+    def get_titles_and_notes_with_file_not_found_test(self):
+        """
+        Test PresentationDocument.get_titles_and_notes method with file not found
+        """
+        # GIVEN: A mocked open, get_thumbnail_folder and exists
+        with patch('builtins.open') as mocked_open, \
+                patch(FOLDER_TO_PATCH) as mocked_get_thumbnail_folder, \
+                patch('openlp.plugins.presentations.lib.presentationcontroller.os.path.exists') as mocked_exists:
+            mocked_get_thumbnail_folder.return_value = 'test'
+            mocked_exists.return_value = False
+
+            # WHEN: calling get_titles_and_notes
+            result_titles, result_notes = self.document.get_titles_and_notes()
+
+            # THEN: it should return two empty lists
+            self.assertIs(type(result_titles), list, 'result_titles should be of type list')
+            self.assertEqual(len(result_titles), 0, 'there be no titles')
+            self.assertIs(type(result_notes), list, 'result_notes should be a list')
+            self.assertEqual(len(result_notes), 0, 'but the list should be empty')
+            self.assertEqual(mocked_open.call_count, 0, 'No calls to open files')
+            self.assertEqual(mocked_exists.call_count, 1, 'There should be one call to file exists')
+
+    def get_titles_and_notes_with_file_error_test(self):
+        """
+        Test PresentationDocument.get_titles_and_notes method with file errors
+        """
+        # GIVEN: A mocked open, get_thumbnail_folder and exists
+        with patch('builtins.open') as mocked_open, \
+                patch(FOLDER_TO_PATCH) as mocked_get_thumbnail_folder, \
+                patch('openlp.plugins.presentations.lib.presentationcontroller.os.path.exists') as mocked_exists:
+            mocked_get_thumbnail_folder.return_value = 'test'
+            mocked_exists.return_value = True
+            mocked_open.side_effect = IOError()
+
+            # WHEN: calling get_titles_and_notes
+            result_titles, result_notes = self.document.get_titles_and_notes()
+
+            # THEN: it should return two empty lists
+            self.assertIs(type(result_titles), list, 'result_titles should be a list')
+
+
+class TestPresentationDocument(TestCase):
+    """
+    Test the PresentationDocument Class
+    """
+    # TODO: Items left to test
+    #   PresentationDocument
+    #       __init__
+    #       presentation_deleted
+    #       get_thumbnail_folder
+    #       get_temp_folder
+    #       check_thumbnails
+    #       close_presentation
+    #       is_active
+    #       is_loaded
+    #       blank_screen
+    #       unblank_screen
+    #       is_blank
+    #       stop_presentation
+    #       start_presentation
+    #       get_slide_number
+    #       get_slide_count
+    #       goto_slide
+    #       next_step
+    #       previous_step
+    #       convert_thumbnail
+    #       get_thumbnail_path
+    #       poll_slidenumber
+    #       get_slide_text
+    #       get_slide_notes
+
+    def setUp(self):
+        """
+        Set up the patches and mocks need for all tests.
+        """
+        self.check_directory_exists_patcher = \
+            patch('openlp.plugins.presentations.lib.presentationcontroller.check_directory_exists')
+        self.get_thumbnail_folder_patcher = \
+            patch('openlp.plugins.presentations.lib.presentationcontroller.PresentationDocument.get_thumbnail_folder')
+        self.os_patcher = patch('openlp.plugins.presentations.lib.presentationcontroller.os')
+        self._setup_patcher = \
+            patch('openlp.plugins.presentations.lib.presentationcontroller.PresentationDocument._setup')
+
+        self.mock_check_directory_exists = self.check_directory_exists_patcher.start()
+        self.mock_get_thumbnail_folder = self.get_thumbnail_folder_patcher.start()
+        self.mock_os = self.os_patcher.start()
+        self.mock_setup = self._setup_patcher.start()
+
+        self.mock_controller = MagicMock()
+
+        self.mock_get_thumbnail_folder.return_value = 'returned/path/'
+
+    def tearDown(self):
+        """
+        Stop the patches
+        """
+        self.check_directory_exists_patcher.stop()
+        self.get_thumbnail_folder_patcher.stop()
+        self.os_patcher.stop()
+        self._setup_patcher.stop()
+
+    def initialise_presentation_document_test(self):
+        """
+        Test the PresentationDocument __init__ method when initialising the PresentationDocument Class
+        """
+        # GIVEN: A reset mock_setup and mocked controller
+        self.mock_setup.reset()
+
+        # WHEN: Creating an instance of PresentationDocument
+        PresentationDocument(self.mock_controller, 'Name')
+
+        # THEN: PresentationDocument.__init__ should have been called with the correct arguments
+        self.mock_setup.assert_called_once_with('Name')
+
+    def presentation_document_setup_test(self):
+        """
+        Test the PresentationDocument _setup method when initialising the PresentationDocument Class
+        """
+        self._setup_patcher.stop()
+
+        # GIVEN: A  mocked controller, patched check_directory_exists_patcher and patched get_thumbnail_folder method
+
+        # WHEN: Creating an instance of PresentationDocument
+        PresentationDocument(self.mock_controller, 'Name')
+
+        # THEN: check_directory_exists should have been called with the correct arguments
+        self.mock_check_directory_exists.assert_called_once_with('returned/path/')
+
+        self._setup_patcher.start()
+
+    def load_presentation_test(self):
+        """
+        Test the PresentationDocument load_presentation method.
+        """
+
+        # GIVEN: An instance of PresentationDocument
+        instance = PresentationDocument(self.mock_controller, 'Name')
+
+        # WHEN: Calling load_presentation()
+        result = instance.load_presentation()
+
+        # THEN: False should be returned
+        self.assertFalse(result, "PresentationDocument.load_presentation should return false.")
+
+    def get_file_name_test(self):
+        """
+        Test the get_file_name method.
+        """
+
+        # GIVEN: A mocked out os.path.split with specified return value, an instance of PresentationDocument and
+        #       arbitary file_path
+        self.mock_os.path.split.return_value = ['directory', 'file.ext']
+        instance = PresentationDocument(self.mock_controller, 'Name')
+        instance.file_path = 'filepath'
+
+        # WHEN: Calling get_file_name
+        result = instance.get_file_name()
+
+        # THEN: The file name should have been returned
+        self.assertEqual(result, 'file.ext')


Follow ups