From e959511021a22e5d06edd77b575a269618c8c431 Mon Sep 17 00:00:00 2001 From: Ken Roberts Date: Sun, 18 Jan 2015 15:42:59 -0800 Subject: [PATCH 1/2] Fix invalid call to QMessageBox --- openlp/core/ui/projector/sourceselectform.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/openlp/core/ui/projector/sourceselectform.py b/openlp/core/ui/projector/sourceselectform.py index ab85ba08b..879bffebf 100644 --- a/openlp/core/ui/projector/sourceselectform.py +++ b/openlp/core/ui/projector/sourceselectform.py @@ -339,8 +339,7 @@ class SourceSelectTabs(QDialog): msg = QtGui.QMessageBox() msg.setText(translate('OpenLP.SourceSelectForm', 'Delete entries for this projector')) msg.setInformativeText(translate('OpenLP.SourceSelectForm', - 'Are you sure you want to delete ALL user-defined '), - translate('OpenLP.SourceSelectForm', + 'Are you sure you want to delete ALL user-defined ' 'source input text for this projector?')) msg.setStandardButtons(msg.Cancel | msg.Ok) msg.setDefaultButton(msg.Cancel) @@ -478,8 +477,7 @@ class SourceSelectSingle(QDialog): msg = QtGui.QMessageBox() msg.setText(translate('OpenLP.SourceSelectForm', 'Delete entries for this projector')) msg.setInformativeText(translate('OpenLP.SourceSelectForm', - 'Are you sure you want to delete ALL user-defined '), - translate('OpenLP.SourceSelectForm', + 'Are you sure you want to delete ALL user-defined ' 'source input text for this projector?')) msg.setStandardButtons(msg.Cancel | msg.Ok) msg.setDefaultButton(msg.Cancel) From 44bf096bbbf2be35358df6e100834beeb9106bdc Mon Sep 17 00:00:00 2001 From: Ken Roberts Date: Sun, 18 Jan 2015 20:24:45 -0800 Subject: [PATCH 2/2] Source edit form button test --- .../test_projectorsourceform.py | 82 ++++++++++++++++++- tests/resources/projector/data.py | 3 + 2 files changed, 83 insertions(+), 2 deletions(-) diff --git a/tests/interfaces/openlp_core_ui/test_projectorsourceform.py b/tests/interfaces/openlp_core_ui/test_projectorsourceform.py index f8624c0f7..4ddf88768 100644 --- a/tests/interfaces/openlp_core_ui/test_projectorsourceform.py +++ b/tests/interfaces/openlp_core_ui/test_projectorsourceform.py @@ -36,11 +36,18 @@ log = logging.getLogger(__name__) log.debug('test_projectorsourceform loaded') from unittest import TestCase +from PyQt4 import QtGui +from PyQt4.QtGui import QDialog +from tests.functional import patch +from tests.functional.openlp_core_lib.test_projectordb import tmpfile from tests.helpers.testmixin import TestMixin -from openlp.core.lib.projector.constants import PJLINK_DEFAULT_CODES, PJLINK_DEFAULT_SOURCES +from tests.resources.projector.data import TEST_DB, TEST1_DATA -from openlp.core.ui.projector.sourceselectform import source_group +from openlp.core.common import Registry, Settings +from openlp.core.lib.projector.db import ProjectorDB +from openlp.core.lib.projector.constants import PJLINK_DEFAULT_CODES, PJLINK_DEFAULT_SOURCES +from openlp.core.ui.projector.sourceselectform import source_group, SourceSelectSingle def build_source_dict(): @@ -61,6 +68,37 @@ class ProjectorSourceFormTest(TestCase, TestMixin): """ Test class for the Projector Source Select form module """ + @patch('openlp.core.lib.projector.db.init_url') + def setUp(self, mocked_init_url): + """ + Set up anything necessary for all tests + """ + mocked_init_url.start() + mocked_init_url.return_value = 'sqlite:///{}'.format(tmpfile) + self.build_settings() + self.setup_application() + Registry.create() + # Do not try to recreate if we've already been created from a previous test + if not hasattr(self, 'projectordb'): + self.projectordb = ProjectorDB() + # Retrieve/create a database record + self.projector = self.projectordb.get_projector_by_ip(TEST1_DATA.ip) + if not self.projector: + self.projectordb.add_projector(projector=TEST1_DATA) + self.projector = self.projectordb.get_projector_by_ip(TEST1_DATA.ip) + self.projector.dbid = self.projector.id + self.projector.db_item = self.projector + + def tearDown(self): + """ + Close database session. + Delete all C++ objects at end so we don't segfault. + """ + self.projectordb.session.close() + del(self.projectordb) + del(self.projector) + self.destroy_settings() + def source_dict_test(self): """ Test that source list dict returned from sourceselectform module is a valid dict with proper entries @@ -77,3 +115,43 @@ class ProjectorSourceFormTest(TestCase, TestMixin): # THEN: return dictionary should match test dictionary self.assertEquals(check, build_source_dict(), "Source group dictionary should match test dictionary") + + @patch.object(QDialog, 'exec_') + def source_select_edit_button_test(self, mocked_qdialog): + """ + Test source select form edit has Ok, Cancel, Reset, and Revert buttons + """ + # GIVEN: Initial setup and mocks + self.projector.source_available = ['11', ] + self.projector.source = '11' + + # WHEN we create a source select widget and set edit=True + select_form = SourceSelectSingle(parent=None, projectordb=self.projectordb) + select_form.edit = True + select_form.exec_(projector=self.projector) + projector = select_form.projector + + # THEN: Verify all 4 buttons are available + self.assertEquals(len(select_form.button_box.buttons()), 4, + 'SourceSelect dialog box should have "OK", "Cancel" ' + '"Rest", and "Revert" buttons available') + + @patch.object(QDialog, 'exec_') + def source_select_noedit_button_test(self, mocked_qdialog): + """ + Test source select form view has OK and Cancel buttons only + """ + # GIVEN: Initial setup and mocks + self.projector.source_available = ['11', ] + self.projector.source = '11' + + # WHEN we create a source select widget and set edit=False + select_form = SourceSelectSingle(parent=None, projectordb=self.projectordb) + select_form.edit = False + select_form.exec_(projector=self.projector) + projector = select_form.projector + + # THEN: Verify only 2 buttons are available + self.assertEquals(len(select_form.button_box.buttons()), 2, + 'SourceSelect dialog box should only have "OK" ' + 'and "Cancel" buttons available') diff --git a/tests/resources/projector/data.py b/tests/resources/projector/data.py index 2525b8b8c..412369495 100644 --- a/tests/resources/projector/data.py +++ b/tests/resources/projector/data.py @@ -30,9 +30,12 @@ The :mod:`tests.resources.projector.data file contains test data """ +import os from openlp.core.lib.projector.db import Projector # Test data +TEST_DB = os.path.join('tmp', 'openlp-test-projectordb.sql') + TEST1_DATA = Projector(ip='111.111.111.111', port='1111', pin='1111',