def test_adapting_tag_url_to_cmscontent_yields_a_copy(self): from zeit.cms.interfaces import ICMSContent self.setup_tags('foo') t1 = ICMSContent('tag://foo') t2 = ICMSContent('tag://foo') t1.pinned = True self.assertFalse(t2.pinned)
def test_error_during_publish_multiple_is_written_to_objectlog(self): c1 = ICMSContent('http://xml.zeit.de/online/2007/01/Flugsicherheit') c2 = ICMSContent('http://xml.zeit.de/online/2007/01/Saarland') i1 = IPublishInfo(c1) i2 = IPublishInfo(c2) self.assertFalse(i1.published) self.assertFalse(i2.published) i1.urgent = True i2.urgent = True publish = IPublish(c1).publish_multiple([c1, c2]) transaction.commit() with self.assertRaises(Exception) as err: publish.get() transaction.begin() self.assertEqual("Error during publish/retract: ScriptError: ('', 1)", str(err.exception)) self.assertIn( "Error during publish/retract: ScriptError: ('', 1)", [zope.i18n.interpolate(m, m.mapping) for m in get_object_log(c1)]) self.assertIn( "Error during publish/retract: ScriptError: ('', 1)", [zope.i18n.interpolate(m, m.mapping) for m in get_object_log(c2)])
def test_publish_multiple_via_celery_end_to_end(self): c1 = ICMSContent('http://xml.zeit.de/online/2007/01/Flugsicherheit') c2 = ICMSContent('http://xml.zeit.de/online/2007/01/Saarland') i1 = IPublishInfo(c1) i2 = IPublishInfo(c2) self.assertFalse(i1.published) self.assertFalse(i2.published) i1.urgent = True i2.urgent = True publish = IPublish(c1).publish_multiple([c1, c2]) transaction.commit() self.assertEqual('Published.', publish.get()) transaction.begin() self.assertEllipsis( """\ Running job ... for http://xml.zeit.de/online/2007/01/Flugsicherheit, http://xml.zeit.de/online/2007/01/Saarland Publishing http://xml.zeit.de/online/2007/01/Flugsicherheit, http://xml.zeit.de/online/2007/01/Saarland ... Done http://xml.zeit.de/online/2007/01/Flugsicherheit, http://xml.zeit.de/online/2007/01/Saarland (...s)""", self.log.getvalue()) self.assertIn('Published', get_object_log(c1)) self.assertIn('Published', get_object_log(c2))
def test_ignored_video_should_not_be_added_to_cms(self): self.assertEqual( None, ICMSContent('http://xml.zeit.de/video/2017-05/myvid', None)) bc = self.create_video() bc.data['custom_fields']['ignore_for_update'] = '1' import_video(bc) self.assertEqual( None, ICMSContent('http://xml.zeit.de/video/2017-05/myvid', None))
def test_new_video_should_be_added_to_cms(self): self.assertEqual( None, ICMSContent('http://xml.zeit.de/video/2017-05/myvid', None)) import_video(self.create_video()) video = ICMSContent('http://xml.zeit.de/video/2017-05/myvid') self.assertEqual('title', video.title) info = zeit.cms.workflow.interfaces.IPublishInfo(video) self.assertEqual(True, info.published)
def test_new_playlist_should_be_added_to_cms(self): self.assertEqual( None, ICMSContent('http://xml.zeit.de/video/playlist/mypls', None)) import_playlist(self.create_playlist()) playlist = ICMSContent('http://xml.zeit.de/video/playlist/mypls') self.assertEqual('title', playlist.title) info = zeit.cms.workflow.interfaces.IPublishInfo(playlist) self.assertEqual(True, info.published)
def test_deleted_video_should_be_deleted_from_cms(self): bc = self.create_video() import_video(bc) video = ICMSContent('http://xml.zeit.de/video/2017-05/myvid') deleted = zeit.brightcove.convert.DeletedVideo(bc.id, video) import_video(deleted) self.assertEqual( None, ICMSContent('http://xml.zeit.de/video/2017-05/myvid', None))
def test_image_references(self): image = ICMSContent("http://xml.zeit.de/2006/DSC00109_2.JPG") image2 = ICMSContent("http://xml.zeit.de/2006/DSC00109_3.JPG") article = self.article animation = zeit.content.animation.animation.Animation() animation.article = article animation.images = (image, image2) assert len(animation.xml.body.image) == 2 assert animation.xml.body.image[0].xpath("@type")[0] == "JPG"
def test_properties_can_be_set_while_checked_out(self): content = ICMSContent('http://xml.zeit.de/testcontent') with checked_out(content) as co: push = IPushMessages(co) push.message_config = [{'type': 'mypush'}] content = ICMSContent('http://xml.zeit.de/testcontent') push = IPushMessages(content) self.assertEqual([{'type': 'mypush'}], push.message_config) # These DAV properties are not serialized to XML. self.assertNotIn('mypush', zeit.cms.testing.xmltotext(content.xml))
def test_unknown_playlist_should_be_deleted(self): bc = self.create_playlist() import_playlist(bc) other = self.create_playlist() other.data['id'] = 'other' import_playlist(other) import_playlist.delete_except([other]) self.assertEqual( None, ICMSContent('http://xml.zeit.de/video/playlist/mypls', None)) self.assertNotEqual( None, ICMSContent('http://xml.zeit.de/video/playlist/other', None))
def test_inactive_video_should_be_imported_but_not_published(self): bc = self.create_video() bc.data['state'] = 'INACTIVE' import_video(bc) video = ICMSContent('http://xml.zeit.de/video/2017-05/myvid') info = zeit.cms.workflow.interfaces.IPublishInfo(video) self.assertEqual(False, info.published)
def test_adapting_unicode_escaped_uniqueId_of_tag_yields_tag(self): from zeit.cms.interfaces import ICMSContent self.setup_tags(u'Bärlin') whitelist = zope.component.queryUtility( zeit.cms.tagging.interfaces.IWhitelist) tag = ICMSContent(whitelist.get(u'Bärlin').uniqueId) self.assertEqual(u'Bärlin', tag.label)
def test_synchronous_multi_publishing_works_with_unique_ids(self): article = ICMSContent('http://xml.zeit.de/online/2007/01/Somalia') info = IPublishInfo(article) info.urgent = True IPublish(article).publish_multiple([article.uniqueId], background=False) self.assertTrue(info.published)
def test_adapting_reference_url_to_cmscontent(self): content = self.repository['content'] self.set_reference( content, content.references.create(self.repository['target'])) reference = self.get_reference(content) self.assertEqual(reference.target.uniqueId, ICMSContent(reference.uniqueId).target.uniqueId)
def test_should_publish_after_update(self): bc = self.create_video() import_video(bc) video = ICMSContent('http://xml.zeit.de/video/2017-05/myvid') info = zeit.cms.workflow.interfaces.IPublishInfo(video) last_published = info.date_last_published import_video(bc) self.assertGreater(info.date_last_published, last_published)
def test_deleted_video_should_be_retracted(self): bc = self.create_video() import_video(bc) video = ICMSContent('http://xml.zeit.de/video/2017-05/myvid') deleted = zeit.brightcove.convert.DeletedVideo(bc.id, video) with mock.patch('zeit.workflow.publish.Publish.retract') as retract: import_video(deleted) self.assertEqual(True, retract.called)
def test_videos_should_be_resolvable(self): from zeit.cms.interfaces import ICMSContent expected_unique_id = 'http://xml.zeit.de/testcontent' with mock.patch('zeit.brightcove.resolve.resolve_video_id') as rvi: rvi.return_value = expected_unique_id result = ICMSContent('http://video.zeit.de/video/1234') self.assertEqual(expected_unique_id, result.uniqueId) rvi.assert_called_with('1234')
def create_gallery(self): gallery = zeit.content.gallery.gallery.Gallery() gallery.image_folder = self.repository['2007'] self.repository['2007']['image01'] = ICMSContent( 'http://xml.zeit.de/2006/DSC00109_2.JPG') transaction.commit() gallery.reload_image_folder() return gallery
def test_ignored_video_should_not_be_updated_in_cms(self): bc = self.create_video() import_video(bc) bc.data['name'] = 'changed' bc.data['custom_fields']['ignore_for_update'] = '1' import_video(bc) video = ICMSContent('http://xml.zeit.de/video/2017-05/myvid') self.assertEqual('title', video.title)
def test_provides_image_url_if_image_is_referenced(self): from zeit.cms.interfaces import ICMSContent image = ICMSContent('http://xml.zeit.de/2006/DSC00109_2.JPG') message = zope.component.getAdapter(self.create_content(image=image), zeit.push.interfaces.IMessage, name=self.name) self.assertEqual(image, message.image) self.assertEqual('http://img.zeit.de/2006/DSC00109_2.JPG', message.additional_parameters['image_url'])
def parent_folder(content): if not content.uniqueId.startswith(zeit.cms.interfaces.ID_NAMESPACE): return None id = content.uniqueId.replace(zeit.cms.interfaces.ID_NAMESPACE, '') if not id: return None if id.endswith('/'): id = id[:-1] return ICMSContent(zeit.cms.interfaces.ID_NAMESPACE + os.path.dirname(id))
def test_playlists_should_be_resolvable(self): from zeit.cms.testcontenttype.testcontenttype import ExampleContentType from zeit.cms.interfaces import ICMSContent from zeit.cms.repository.folder import Folder self.repository['video'] = Folder() self.repository['video']['playlist'] = Folder() self.repository['video']['playlist']['1234'] = ExampleContentType() expected_unique_id = 'http://xml.zeit.de/video/playlist/1234' result = ICMSContent('http://video.zeit.de/playlist/1234') self.assertEqual(expected_unique_id, result.uniqueId)
def test_new_video_should_bbb_copy_authors(self): author = zeit.content.author.author.Author() author.firstname = u'William' author.lastname = u'Shakespeare' self.repository['author'] = author bc = self.create_video() bc.data['custom_fields']['authors'] = 'http://xml.zeit.de/author' import_video(bc) video = ICMSContent('http://xml.zeit.de/video/2017-05/myvid') self.assertEqual(('William Shakespeare', ), video.authors)
def test_error_during_push_is_caught(self): self.notifier.send.side_effect = RuntimeError('provoked') content = ICMSContent('http://xml.zeit.de/testcontent') push = IPushMessages(content) push.message_config = [{'type': 'mypush', 'enabled': True}] self.publish(content) # This is sort of assertNothingRaised, except that publishing # runs in a separate thread (remotetask), so we would not see # the exception here anyway. self.assertNotEqual(None, push.date_last_pushed)
def setUp(self): super(AuthorLocationTest, self).setUp() shakespeare = zeit.content.author.author.Author() shakespeare.firstname = 'William' shakespeare.lastname = 'Shakespeare' self.repository['shakespeare'] = shakespeare with checked_out(ICMSContent( 'http://xml.zeit.de/online/2007/01/Somalia')) as co: co.authorships = [co.authorships.create( self.repository['shakespeare'])]
def test_object_already_checked_out_should_raise(self): article = ICMSContent('http://xml.zeit.de/online/2007/01/Somalia') IPublishInfo(article).urgent = True zeit.cms.checkout.interfaces.ICheckoutManager(article).checkout() zope.security.management.endInteraction() with zeit.cms.testing.interaction('zope.producer'): with self.assertRaises(Exception) as info: IPublish(article).publish(async=False) self.assertIn('LockingError', str(info.exception)) self.assertEqual(False, IPublishInfo(article).published)