コード例 #1
0
ファイル: test_volume.py プロジェクト: louika/vivi
    def test_all_volume_contents_should_change_access_value(self, mock):
        volume = zeit.cms.interfaces.ICMSContent(
            'http://xml.zeit.de/2015/01/ausgabe')
        repo = self.repository['2015']['01']
        content01 = ExampleContentType()
        content02 = ExampleContentType()
        content03 = ExampleContentType()
        repo['article01'] = content01
        repo['article02'] = content02
        repo['article03'] = content03

        # XXX We rely quite a bit on query structure here, but cannot test it.
        self.elastic.search.return_value = zeit.cms.interfaces.Result([
            {
                'url': '/2015/01/article01'
            },
            {
                'url': '/2015/01/article02'
            },
            {
                'url': '/2015/01/article03'
            },
        ])

        cnt = volume.all_content_via_search()
        for c in cnt:
            self.assertEqual('free', c.access)

        volume.change_contents_access('free', 'abo')
        for c in cnt:
            self.assertEqual('abo', c.access)
コード例 #2
0
    def test_materialize_creates_normal_teaser_block(self):
        self.repository['t1'] = ExampleContentType()
        self.repository['t2'] = ExampleContentType()

        lead = self.repository['cp']['lead']
        lead.count = 2
        lead.automatic = True
        lead.automatic_type = 'query'

        self.elastic.search.return_value = zeit.cms.interfaces.Result([{
            'url':
            '/t1'
        }, {
            'url':
            '/t2'
        }])
        self.elastic.search.return_value.hits = 2
        lead.values()[0].materialize()

        # since `AutomaticArea.values()` is cached on the transaction boundary
        # now, we'll only see the change with the next request/transaction...
        transaction.commit()

        result = IRenderedArea(lead).values()
        self.assertEqual(['teaser', 'auto-teaser'], [x.type for x in result])
コード例 #3
0
 def test_start_job_retracts_urls(self):
     self.repository['foo'] = ExampleContentType()
     self.repository['bar'] = ExampleContentType()
     IPublishInfo(self.repository['bar']).published = True
     IPublishInfo(self.repository['foo']).published = True
     job = zeit.cms.retractlog.retractlog.Job()
     job.urls = ['http://xml.zeit.de/foo', 'http://xml.zeit.de/bar']
     job.start()
     self.assertFalse(IPublishInfo(self.repository['foo']).published)
     self.assertFalse(IPublishInfo(self.repository['bar']).published)
コード例 #4
0
ファイル: test_volume.py プロジェクト: louika/vivi
 def test_contents_with_defined_dependency_adapt_to_same_volume(self):
     zei_content = ExampleContentType()
     zei_content.year = 2015
     zei_content.volume = 1
     zei_content.product = zeit.cms.content.sources.Product(u'ZEI')
     zmlb_content = ExampleContentType()
     zmlb_content.year = 2015
     zmlb_content.volume = 1
     zmlb_content.product = zeit.cms.content.sources.Product(u'ZMLB')
     self.assertEqual(zeit.content.volume.interfaces.IVolume(zei_content),
                      zeit.content.volume.interfaces.IVolume(zmlb_content))
コード例 #5
0
ファイル: test_corehandlers.py プロジェクト: louika/vivi
    def setUp(self):
        from zeit.cms.testcontenttype.testcontenttype import ExampleContentType
        super(CorehandlerTest, self).setUp()

        self.repository['parent'] = ExampleContentType()
        self.repository['reference'] = ExampleContentType()

        reference = self.repository['reference']
        related = zeit.cms.related.interfaces.IRelatedContent(reference)
        related.related = (self.repository['parent'], )
        self.repository['reference'] = reference
コード例 #6
0
 def test_event_dispatched_to_sublocation_should_be_ignored(self):
     # XXX: I'm not quite sure which use cases actually create this kind of
     # ObjectAddedEvent, but we've inherited this guard from zeit.solr and
     # they probably had a good reason. %-)
     content = ExampleContentType()
     content.uniqueId = 'xzy://bla/fasel'
     content_sub = ExampleContentType()
     content_sub.uniqueId = 'xzy://bla/fasel/sub'
     event = zope.lifecycleevent.ObjectAddedEvent(content)
     for ignored in zope.component.subscribers((content_sub, event), None):
         pass
     self.assertFalse(self.tms.index.called)
コード例 #7
0
ファイル: test_area.py プロジェクト: louika/vivi
    def test_disabling_automatic_keeps_order_of_teasers(self):
        from zeit.cms.testcontenttype.testcontenttype import ExampleContentType
        self.repository['t1'] = ExampleContentType()
        self.repository['t2'] = ExampleContentType()

        lead = self.repository['cp']['lead']
        lead.count = 2
        lead.automatic = True
        lead.create_item('teaser')
        lead.count = 3

        order = lead.keys()
        lead.automatic = False
        self.assertEqual(order, lead.keys())
コード例 #8
0
 def test_rename_stores_old_name_on_dav_property(self):
     self.repository['article'] = ExampleContentType()
     zope.copypastemove.interfaces.IObjectMover(
         self.repository['article']).moveTo(self.repository, 'changed')
     article = self.repository['changed']
     self.assertEqual(('http://xml.zeit.de/article', ),
                      IRenameInfo(article).previous_uniqueIds)
コード例 #9
0
ファイル: test_urbanairship.py プロジェクト: louika/vivi
 def setUp(self):
     from zeit.cms.testcontenttype.testcontenttype import ExampleContentType
     super(IntegrationTest, self).setUp()
     content = ExampleContentType()
     content.title = 'content_title'
     self.repository['content'] = content
     self.content = self.repository['content']
コード例 #10
0
ファイル: test_render.py プロジェクト: louika/vivi
 def test_returns_html_and_plain_text(self):
     content = ExampleContentType()
     content.uniqueId = 'http://xml.zeit.de/foo/bar'
     renderer = Renderer('http://localhost:%s' % self.layer['http_port'])
     result = renderer(content)
     self.assertEqual('html', result['html'])
     self.assertEqual('txt', result['text'])
コード例 #11
0
ファイル: test_section.py プロジェクト: louika/vivi
 def test_type_markers_are_more_specific_than_general_markers(self):
     self.repository['example']['test'] = ExampleContentType()
     obj = self.repository['example']['test']
     provides = list(zope.interface.providedBy(obj))
     self.assertLess(
         provides.index(zeit.cms.section.testing.IExampleTestcontent),
         provides.index(zeit.cms.section.testing.IExampleContent))
コード例 #12
0
ファイル: test_section.py プロジェクト: louika/vivi
    def test_content_is_marked_on_checkout(self):
        # The test setup is a little convoluted, we need to put an object into
        # a folder /without/ it being marked, so we can check that the marking
        # happens during checkout.
        self.repository['folder'] = zeit.cms.repository.folder.Folder()
        self.repository['folder']['test'] = ExampleContentType()
        # we cannot change the DAV-Properties of an existing folder
        # while it's checked in -- and checking out folders is not supported,
        # so we *replace* the folder object... don't try this at home, folks.
        folder = zeit.cms.repository.folder.Folder()
        zope.interface.alsoProvides(folder,
                                    zeit.cms.section.testing.IExampleSection)
        self.repository['folder'] = folder
        # Clear Repository's cache, so we get the replaced folder object,
        # not the cached version from above.
        transaction.commit()

        obj = self.repository['folder']['test']
        self.assertFalse(
            zeit.cms.section.testing.IExampleContent.providedBy(obj))
        self.assertTrue(
            zeit.cms.section.interfaces.IZONContent.providedBy(obj))

        with zeit.cms.checkout.helper.checked_out(
                self.repository['folder']['test']):
            pass
        obj = self.repository['folder']['test']
        self.assertTrue(
            zeit.cms.section.testing.IExampleContent.providedBy(obj))
        self.assertFalse(
            zeit.cms.section.interfaces.IZONContent.providedBy(obj))
コード例 #13
0
 def test_rename_menu_item_is_not_displayed_for_folder_with_content(self):
     folder = self.repository['testing']
     folder['foo'] = ExampleContentType()
     b = self.browser
     b.open('http://*****:*****@@rename-box')
コード例 #14
0
ファイル: test_section.py プロジェクト: louika/vivi
 def test_specific_types_are_marked_with_type_specific_interface(self):
     self.repository['example']['test'] = ExampleContentType()
     obj = self.repository['example']['test']
     self.assertTrue(
         zeit.cms.section.testing.IExampleContent.providedBy(obj))
     self.assertTrue(
         zeit.cms.section.testing.IExampleTestcontent.providedBy(obj))
コード例 #15
0
 def test_renameinfo_has_security_declaration(self):
     # Since the IObjectMover for IRepository is a trusted adapter,
     # we don't usually notice that we need a security declaration for
     # IRenameInfo.
     self.repository['article'] = ExampleContentType()
     wrapped = zope.security.proxy.ProxyFactory(self.repository['article'])
     self.assertEqual((), IRenameInfo(wrapped).previous_uniqueIds)
コード例 #16
0
ファイル: test_publish.py プロジェクト: louika/vivi
 def test_opening_dialog_from_folder_view_points_to_content(self):
     # Regression VIV-452
     from zeit.cms.testcontenttype.testcontenttype import ExampleContentType
     from zeit.cms.workflow.interfaces import IPublish, IPublishInfo
     zope.component.hooks.setSite(self.getRootFolder())
     self.repository['other'] = ExampleContentType()
     self.prepare_content('http://xml.zeit.de/other')
     self.prepare_content('http://xml.zeit.de/testcontent')
     transaction.commit()
     IPublish(self.repository['other']).publish(background=False)
     IPublish(self.repository['testcontent']).publish(background=False)
     transaction.commit()
     self.open('/repository')
     s = self.selenium
     s.click('xpath=//*[contains(text(), "testcontent")]')
     s.waitForElementPresent('css=#bottomcontent a[title=Retract]')
     s.click('css=#bottomcontent a[title="Additional actions"]')
     s.click('css=#bottomcontent a[title=Retract]')
     s.waitForElementPresent('css=ol#worklist')
     s.waitForElementPresent('css=li.busy[action=start_job]')
     s.waitForElementNotPresent('css=li.busy[action=start_job]')
     s.waitForPageToLoad()
     self.assertFalse(
         IPublishInfo(self.repository['testcontent']).published)
     self.assertTrue(IPublishInfo(self.repository['other']).published)
コード例 #17
0
ファイル: test_add.py プロジェクト: JulianTenschert/zeit.cms
 def setUp(self):
     super(TestJobView, self).setUp()
     # Add content
     test_folder = zeit.cms.content.add.find_or_create_folder('test')
     test_folder['foo'] = ExampleContentType()
     test_folder['bar'] = ExampleContentType()
     # Create test job
     root = self.getRootFolder()
     logfolder = root['retractlog']
     job = zeit.cms.retractlog.retractlog.Job()
     job.title = 'foo'
     logfolder['foo'] = job
     job.urls = ['http://xml.zeit.de/test/foo',
                 'http://xml.zeit.de/test/bar']
     job.invalid = ['http://xml.zeit.de/online/2007/01/Somalia']
     job.unknown = ['http://xml.zeit.de/test/baz']
コード例 #18
0
 def create_content(self, short_text=None):
     content = ExampleContentType()
     if short_text is not None:
         push = zeit.push.interfaces.IPushMessages(content)
         push.short_text = 'mytext'
     self.repository['foo'] = content
     return self.repository['foo']
コード例 #19
0
ファイル: test_clipboard.py プロジェクト: louika/vivi
 def test_get_type_of_content_object(self):
     folder = self.clipboard.addClip('Favoriten')
     self.repository['test'] = ExampleContentType()
     content = self.repository['test']
     self.clipboard.addContent(folder, content, 'testname', insert=True)
     clip = list(folder.values())[0]
     self.assertEqual('testcontenttype', self.view.getType(clip))
コード例 #20
0
ファイル: test_volume.py プロジェクト: louika/vivi
 def test_content_with_year_and_volume_and_product_adapts_to_IVolume(self):
     content = ExampleContentType()
     content.year = 2015
     content.volume = 1
     content.product = zeit.cms.content.sources.Product(u'ZEI')
     volume = zeit.content.volume.interfaces.IVolume(content)
     self.assertEqual(volume, self.repository['2015']['01']['ausgabe'])
コード例 #21
0
ファイル: test_sources.py プロジェクト: louika/vivi
 def test_resolves_reference_from_source_config(self):
     self.repository['storystream'] = ExampleContentType()
     with checked_out(self.repository['testcontent']) as co:
         co.storystreams = (zeit.cms.content.sources.StorystreamSource()(
             None).find('test'),)
     self.assertEqual(
         self.repository['storystream'],
         self.repository['testcontent'].storystreams[0].references)
コード例 #22
0
ファイル: test_update.py プロジェクト: louika/vivi
 def test_should_pass_parameters_through_recursion(self):
     self.repository['testing']['foo'] = ExampleContentType()
     zeit.retresco.update.index_parallel.delay(
         'http://xml.zeit.de/testing/',
         enrich=True, publish=True)
     self.assertEqual(
         dict(enrich=True, update_keywords=True, publish=True),
         self.index.call_args[1])
コード例 #23
0
ファイル: test_volume.py プロジェクト: louika/vivi
 def test_cant_adapt_content_with_dependency_defined_to_a_non_volume(self):
     zecw_content = ExampleContentType()
     zecw_content.year = 2015
     zecw_content.volume = 1
     zecw_content.product = zeit.cms.content.sources.Product(
         u'BADDEPENDENCY')
     with self.assertRaises(TypeError):
         zeit.content.volume.interfaces.IVolume(zecw_content)
コード例 #24
0
 def test_checkin_should_enrich_marked_content(self):
     content = ExampleContentType()
     zope.interface.alsoProvides(content,
                                 zeit.retresco.interfaces.ISkipEnrich)
     self.repository['t1'] = content
     with zeit.cms.checkout.helper.checked_out(self.repository['t1']):
         pass
     self.assertFalse(self.tms.enrich.called)
コード例 #25
0
    def test_renaming_referenced_obj_updates_uniqueId_in_referencing_obj(self):
        self.repository['2007']['article'] = ExampleContentType()
        article = self.repository['2007']['article']
        self.repository['referencing'] = ExampleContentType()
        with checked_out(self.repository['referencing']) as co:
            IRelatedContent(co).related = (article, )

        zope.copypastemove.interfaces.IObjectMover(article).moveTo(
            self.repository, 'changed')
        referencing = self.repository['referencing']
        with mock.patch('zeit.cms.redirect.interfaces.ILookup') as lookup:
            self.assertEqual(
                ['http://xml.zeit.de/changed'],
                [x.uniqueId for x in IRelatedContent(referencing).related])
            self.assertFalse(lookup().find.called)
        self.assertIn('http://xml.zeit.de/changed',
                      zeit.cms.testing.xmltotext(referencing.xml))
コード例 #26
0
ファイル: test_widget.py プロジェクト: louika/vivi
    def setUp(self):
        super(TestReferenceSequenceWidget, self).setUp()
        ExampleContentType.references = \
            zeit.cms.content.reference.ReferenceProperty(
                '.body.references.reference', 'related')
        self.repository['content'] = ExampleContentType()
        self.repository['target'] = ExampleContentType()

        @zope.interface.implementer(zope.schema.interfaces.ISource)
        class FakeSource(object):
            def __contains__(self, value):
                return True

        self.field = zeit.cms.content.interfaces.ReferenceField(
            source=FakeSource())
        self.field.__name__ = 'references'
        self.field = self.field.bind(self.repository['content'])
コード例 #27
0
ファイル: test_author.py プロジェクト: louika/vivi
 def test_authorships_should_be_copied_to_freetext_on_create(self):
     content = ExampleContentType()
     content.authorships = [
         content.authorships.create(self.repository['author'])]
     zope.event.notify(ObjectCreatedEvent(content))
     self.repository['foo'] = content
     self.assertEqual(
         ('William Shakespeare',), self.repository['foo'].authors)
コード例 #28
0
ファイル: test_add.py プロジェクト: louika/vivi
 def test_non_existing_folder_should_be_created(self):
     ANY = None
     adder = zeit.cms.content.add.ContentAdder(
         ANY, ressort='wirtschaft', year='2009', month='02')
     folder = zope.component.getMultiAdapter(
         (ExampleContentType(), adder),
         zeit.cms.content.interfaces.IAddLocation)
     self.assertEqual(self.repository['wirtschaft']['2009-02'], folder)
コード例 #29
0
 def test_uses_long_text_as_bbb_for_facebook_override_text(self):
     content = ExampleContentType()
     self.repository['foo'] = content
     push = zeit.push.interfaces.IPushMessages(content)
     push.long_text = 'facebook'
     message = zope.component.getAdapter(content,
                                         zeit.push.interfaces.IMessage,
                                         name='facebook')
     self.assertEqual('facebook', message.text)
コード例 #30
0
 def setUp(self):
     super(RetractBannerTest, self).setUp()
     with zeit.cms.testing.site(self.getRootFolder()):
         for name in ['homepage', 'ios-legacy', 'wrapper']:
             content = ExampleContentType()
             self.repository[name] = content
             notifier = zope.component.getUtility(
                 zeit.push.interfaces.IPushNotifier, name=name)
             notifier.uniqueId = content.uniqueId