def test_less_mocking_service_refreshed_when_refresh_button_clicked_test( self): """ Test that a service is refreshed when the "Refresh Service" button is clicked """ # GIVEN: An SelectPlanForm instance with airplane mode enabled, resources available, # mocked out "on_new_service_clicked" with patch('PyQt5.QtWidgets.QDialog.exec'), \ patch('openlp.plugins.planningcenter.forms.selectplanform.date') as mock_date: # need to always return 9/29/2019 for date.today() mock_date.today.return_value = date(2019, 9, 29) mock_date.side_effect = lambda *args, **kw: date(*args, **kw) # init ServiceManager Registry().register('plugin_manager', MagicMock()) Registry().register('application', MagicMock()) Registry().register('renderer', MagicMock()) self.service_manager = ServiceManager() self.service_manager.setup_ui(self.service_manager) # init songs plugin with patch('openlp.plugins.songs.lib.mediaitem.EditSongForm'), \ patch('openlp.plugins.custom.lib.mediaitem.EditCustomForm'), \ patch('openlp.core.lib.mediamanageritem.create_widget_action'), \ patch('openlp.core.widgets.toolbar.create_widget_action'): # init songs plugin songs_plugin = SongsPlugin() song_media_item = SongMediaItem(None, songs_plugin) song_media_item.search_text_edit = MagicMock() song_media_item.settings_section = 'songs' song_media_item.initialise() # init custom plugin custom_plugin = CustomPlugin() CustomMediaItem(None, custom_plugin) # init bible plugin bible_plugin = BiblePlugin() bible_media_item = BibleMediaItem(None, bible_plugin) bible_media_item.build_display_results = MagicMock() self.form.exec() # WHEN: # The Service Type combo is set to index 1 and "Import New" button is clicked self.form.service_type_combo_box.setCurrentIndex(1) QtTest.QTest.mouseClick(self.form.import_as_new_button, QtCore.Qt.LeftButton) # make changes to the now imported service items # first, for serviceitem[0] update last_updated in xml_string and change "sweet" to "sublime" old_match = re.search( 'modifiedDate="(.+?)Z*"', self.service_manager.service_items[0] ['service_item'].xml_version) old_string = old_match.group(1) now_string = datetime.now().strftime('%Y-%m-%dT%H:%M:%S') self.service_manager.service_items[0]['service_item'].xml_version = \ self.service_manager.service_items[0]['service_item'].xml_version.replace(old_string, now_string) self.service_manager.service_items[0]['service_item'].xml_version = \ self.service_manager.service_items[0]['service_item'].xml_version.replace("sweet", "sublime") # second, add the word modified to the slide text for serviceitem[1] self.service_manager.service_items[1]['service_item'].slides[0]['text'] = \ self.service_manager.service_items[1]['service_item'].slides[0]['text'].replace("Test", "Modified Test") # third, delete serviceitems[2] and serviceitem[3] del self.service_manager.service_items[3] del self.service_manager.service_items[2] # last, draw the form again and request refresh self.form.exec() self.form.service_type_combo_box.setCurrentIndex(1) QtTest.QTest.mouseClick(self.form.update_existing_button, QtCore.Qt.LeftButton) # THEN: # There should be 4 service items added self.assertEqual(len(self.service_manager.service_items), 5, '5 items should be in the ServiceManager') # Amazon Grace should still include sublime self.assertTrue('sublime' in self.service_manager.service_items[0] ['service_item'].xml_version) # Slides in service_item[1] should still contain the word "Modified" self.assertTrue('Modified' in self.service_manager.service_items[1] ['service_item'].slides[0]['text'])