def export_same_filename_test(self): """ Test that files is not overwritten if songs has same title and author """ # GIVEN: A mocked song_to_xml, 2 mocked songs, a mocked application and an OpenLyricsExport instance with patch('openlp.plugins.songs.lib.openlyricsexport.OpenLyrics.song_to_xml') as mocked_song_to_xml: mocked_song_to_xml.return_value = '<?xml version="1.0" encoding="UTF-8"?>\n<empty/>' author = MagicMock() author.display_name = 'Test Author' song = MagicMock() song.authors = [author] song.title = 'Test Title' parent = MagicMock() parent.stop_export_flag = False mocked_application_object = MagicMock() Registry().register('application', mocked_application_object) ol_export = OpenLyricsExport(parent, [song, song], self.temp_folder) # WHEN: Doing the export ol_export.do_export() # THEN: The exporter should have created 2 files self.assertTrue(os.path.exists(os.path.join(self.temp_folder, '%s (%s).xml' % (song.title, author.display_name)))) self.assertTrue(os.path.exists(os.path.join(self.temp_folder, '%s (%s)-1.xml' % (song.title, author.display_name))))
def test_authors_match(self): """ Test the author matching when importing a song from a service """ # GIVEN: A song and a string with authors song = MagicMock() song.authors = [] author = MagicMock() author.display_name = "Hans Wurst" song.authors.append(author) author2 = MagicMock() author2.display_name = "Max Mustermann" song.authors.append(author2) # There are occasions where an author appears twice in a song (with different types). # We need to make sure that this case works (lp#1313538) author3 = MagicMock() author3.display_name = "Max Mustermann" song.authors.append(author3) authors_str = "Hans Wurst, Max Mustermann, Max Mustermann" # WHEN: Checking for matching result = self.media_item._authors_match(song, authors_str) # THEN: They should match self.assertTrue(result, "Authors should match")
def export_same_filename_test(self): """ Test that files is not overwritten if songs has same title and author """ # GIVEN: A mocked song_to_xml, 2 mocked songs, a mocked application and an OpenLyricsExport instance with patch( 'openlp.plugins.songs.lib.openlyricsexport.OpenLyrics.song_to_xml' ) as mocked_song_to_xml: mocked_song_to_xml.return_value = '<?xml version="1.0" encoding="UTF-8"?>\n<empty/>' author = MagicMock() author.display_name = 'Test Author' song = MagicMock() song.authors = [author] song.title = 'Test Title' parent = MagicMock() parent.stop_export_flag = False mocked_application_object = MagicMock() Registry().register('application', mocked_application_object) ol_export = OpenLyricsExport(parent, [song, song], self.temp_folder) # WHEN: Doing the export ol_export.do_export() # THEN: The exporter should have created 2 files self.assertTrue( os.path.exists( os.path.join( self.temp_folder, '%s (%s).xml' % (song.title, author.display_name)))) self.assertTrue( os.path.exists( os.path.join( self.temp_folder, '%s (%s)-1.xml' % (song.title, author.display_name))))
def test_display_results_song(self): """ Test displaying song search results with basic song """ # GIVEN: Search results, plus a mocked QtListWidgetItem with patch('openlp.core.lib.QtWidgets.QListWidgetItem') as MockedQListWidgetItem, \ patch('openlp.core.lib.QtCore.Qt.UserRole') as MockedUserRole: mock_search_results = [] mock_song = MagicMock() mock_song.id = 1 mock_song.title = 'My Song' mock_song.sort_key = 'My Song' mock_song.authors = [] mock_song_temp = MagicMock() mock_song_temp.id = 2 mock_song_temp.title = 'My Temporary' mock_song_temp.sort_key = 'My Temporary' mock_song_temp.authors = [] mock_author = MagicMock() mock_author.display_name = 'My Author' mock_song.authors.append(mock_author) mock_song_temp.authors.append(mock_author) mock_song.temporary = False mock_song_temp.temporary = True mock_search_results.append(mock_song) mock_search_results.append(mock_song_temp) mock_qlist_widget = MagicMock() MockedQListWidgetItem.return_value = mock_qlist_widget self.media_item.auto_select_id = 1 # WHEN: I display song search results self.media_item.display_results_song(mock_search_results) # THEN: The current list view is cleared, the widget is created, and the relevant attributes set self.media_item.list_view.clear.assert_called_with() self.media_item.save_auto_select_id.assert_called_with() MockedQListWidgetItem.assert_called_once_with('My Song (My Author)') mock_qlist_widget.setData.assert_called_once_with(MockedUserRole, mock_song.id) self.media_item.list_view.addItem.assert_called_once_with(mock_qlist_widget) self.media_item.list_view.setCurrentItem.assert_called_with(mock_qlist_widget)
def test_authors_dont_match(self): # GIVEN: A song and a string with authors song = MagicMock() song.authors = [] author = MagicMock() author.display_name = "Hans Wurst" song.authors.append(author) author2 = MagicMock() author2.display_name = "Max Mustermann" song.authors.append(author2) # There are occasions where an author appears twice in a song (with different types). # We need to make sure that this case works (lp#1313538) author3 = MagicMock() author3.display_name = "Max Mustermann" song.authors.append(author3) # WHEN: An author is missing in the string authors_str = "Hans Wurst, Max Mustermann" result = self.media_item._authors_match(song, authors_str) # THEN: They should not match self.assertFalse(result, "Authors should not match")