From 3639785151ef57223c991766925ef66c36fba15f Mon Sep 17 00:00:00 2001 From: Raoul Snyman Date: Thu, 15 Dec 2016 16:11:42 +0200 Subject: [PATCH] Fix bug #1642684 by rather just setting the edit text to a blank string Fixes: https://launchpad.net/bugs/1642684 --- openlp/plugins/songs/forms/editsongform.py | 19 ++++++------ .../openlp_plugins/songs/test_editsongform.py | 31 +++++++++++++++++++ 2 files changed, 40 insertions(+), 10 deletions(-) diff --git a/openlp/plugins/songs/forms/editsongform.py b/openlp/plugins/songs/forms/editsongform.py index a17c9fb5f..271dadce7 100644 --- a/openlp/plugins/songs/forms/editsongform.py +++ b/openlp/plugins/songs/forms/editsongform.py @@ -118,13 +118,13 @@ class EditSongForm(QtWidgets.QDialog, Ui_EditSongDialog, RegistryProperties): objects = self.manager.get_all_objects(cls) objects.sort(key=get_key) combo.clear() - combo.addItem('') for obj in objects: row = combo.count() combo.addItem(obj.name) cache.append(obj.name) combo.setItemData(row, obj.id) set_case_insensitive_completer(cache, combo) + combo.setEditText('') def _add_author_to_list(self, author, author_type): """ @@ -360,7 +360,6 @@ class EditSongForm(QtWidgets.QDialog, Ui_EditSongDialog, RegistryProperties): authors = self.manager.get_all_objects(Author) authors.sort(key=get_author_key) self.authors_combo_box.clear() - self.authors_combo_box.addItem('') self.authors = [] for author in authors: row = self.authors_combo_box.count() @@ -368,6 +367,7 @@ class EditSongForm(QtWidgets.QDialog, Ui_EditSongDialog, RegistryProperties): self.authors_combo_box.setItemData(row, author.id) self.authors.append(author.display_name) set_case_insensitive_completer(self.authors, self.authors_combo_box) + self.authors_combo_box.setEditText('') # Types self.author_types_combo_box.clear() @@ -398,11 +398,11 @@ class EditSongForm(QtWidgets.QDialog, Ui_EditSongDialog, RegistryProperties): return get_natural_key(theme) self.theme_combo_box.clear() - self.theme_combo_box.addItem('') self.themes = theme_list self.themes.sort(key=get_theme_key) self.theme_combo_box.addItems(theme_list) set_case_insensitive_completer(self.themes, self.theme_combo_box) + self.theme_combo_box.setEditText('') def load_media_files(self): """ @@ -442,7 +442,6 @@ class EditSongForm(QtWidgets.QDialog, Ui_EditSongDialog, RegistryProperties): self.load_songbooks() self.load_media_files() self.theme_combo_box.setEditText('') - self.theme_combo_box.setCurrentIndex(0) # it's a new song to preview is not possible self.preview_button.setVisible(False) @@ -591,7 +590,7 @@ class EditSongForm(QtWidgets.QDialog, Ui_EditSongDialog, RegistryProperties): self.manager.save_object(author) self._add_author_to_list(author, author_type) self.load_authors() - self.authors_combo_box.setCurrentIndex(0) + self.authors_combo_box.setEditText('') else: return elif item > 0: @@ -602,7 +601,7 @@ class EditSongForm(QtWidgets.QDialog, Ui_EditSongDialog, RegistryProperties): message=translate('SongsPlugin.EditSongForm', 'This author is already in the list.')) else: self._add_author_to_list(author, author_type) - self.authors_combo_box.setCurrentIndex(0) + self.authors_combo_box.setEditText('') else: QtWidgets.QMessageBox.warning( self, UiStrings().NISs, @@ -666,7 +665,7 @@ class EditSongForm(QtWidgets.QDialog, Ui_EditSongDialog, RegistryProperties): topic_item.setData(QtCore.Qt.UserRole, topic.id) self.topics_list_view.addItem(topic_item) self.load_topics() - self.topics_combo_box.setCurrentIndex(0) + self.topics_combo_box.setEditText('') else: return elif item > 0: @@ -679,7 +678,7 @@ class EditSongForm(QtWidgets.QDialog, Ui_EditSongDialog, RegistryProperties): topic_item = QtWidgets.QListWidgetItem(str(topic.name)) topic_item.setData(QtCore.Qt.UserRole, topic.id) self.topics_list_view.addItem(topic_item) - self.topics_combo_box.setCurrentIndex(0) + self.topics_combo_box.setEditText('') else: QtWidgets.QMessageBox.warning( self, UiStrings().NISs, @@ -709,7 +708,7 @@ class EditSongForm(QtWidgets.QDialog, Ui_EditSongDialog, RegistryProperties): self.manager.save_object(songbook) self.add_songbook_entry_to_list(songbook.id, songbook.name, self.songbook_entry_edit.text()) self.load_songbooks() - self.songbooks_combo_box.setCurrentIndex(0) + self.songbooks_combo_box.setEditText('') self.songbook_entry_edit.clear() else: return @@ -721,7 +720,7 @@ class EditSongForm(QtWidgets.QDialog, Ui_EditSongDialog, RegistryProperties): message=translate('SongsPlugin.EditSongForm', 'This Songbook is already in the list.')) else: self.add_songbook_entry_to_list(songbook.id, songbook.name, self.songbook_entry_edit.text()) - self.songbooks_combo_box.setCurrentIndex(0) + self.songbooks_combo_box.setEditText('') self.songbook_entry_edit.clear() else: QtWidgets.QMessageBox.warning( diff --git a/tests/functional/openlp_plugins/songs/test_editsongform.py b/tests/functional/openlp_plugins/songs/test_editsongform.py index 184c59717..ba53fa525 100644 --- a/tests/functional/openlp_plugins/songs/test_editsongform.py +++ b/tests/functional/openlp_plugins/songs/test_editsongform.py @@ -76,3 +76,34 @@ class TestEditSongForm(TestCase, TestMixin): # THEN they should be valid self.assertTrue(valid, "The tags list should be valid") + + @patch('openlp.plugins.songs.forms.editsongform.set_case_insensitive_completer') + def test_load_objects(self, mocked_set_case_insensitive_completer): + """ + Test the _load_objects() method + """ + # GIVEN: A song edit form and some mocked stuff + mocked_class = MagicMock() + mocked_class.name = 'Author' + mocked_combo = MagicMock() + mocked_combo.count.return_value = 0 + mocked_cache = MagicMock() + mocked_object = MagicMock() + mocked_object.name = 'Charles' + mocked_object.id = 1 + mocked_manager = MagicMock() + mocked_manager.get_all_objects.return_value = [mocked_object] + self.edit_song_form.manager = mocked_manager + + # WHEN: _load_objects() is called + self.edit_song_form._load_objects(mocked_class, mocked_combo, mocked_cache) + + # THEN: All the correct methods should have been called + self.edit_song_form.manager.get_all_objects.assert_called_once_with(mocked_class) + mocked_combo.clear.assert_called_once_with() + mocked_combo.count.assert_called_once_with() + mocked_combo.addItem.assert_called_once_with('Charles') + mocked_cache.append.assert_called_once_with('Charles') + mocked_combo.setItemData.assert_called_once_with(0, 1) + mocked_set_case_insensitive_completer.assert_called_once_with(mocked_cache, mocked_combo) + mocked_combo.setEditText.assert_called_once_with('')