def test_last_modified_no_etags(self):
        """
        When a new content type is added, the resulting page should not be
        cached since it has messages. However, it should only trigger an etag
        if its been configured to use etags
        """
        # Add folder content
        setRoles(self.portal, TEST_USER_ID, ('Manager', ))
        self.portal.invokeFactory('Folder', 'f1')
        self.portal['f1'].title = u'Folder one'
        self.portal['f1'].description = u'Folder one description'
        self.portal['f1'].reindexObject()

        self.cacheSettings.operationMapping = {
            'plone.content.itemView': 'plone.app.caching.weakCaching'
        }
        self.registry['plone.app.caching.weakCaching.lastModified'] = True
        self.registry['plone.app.caching.weakCaching.etags'] = None

        import transaction
        transaction.commit()

        # log in and create a content type
        browser = Browser(self.app)
        browser.addHeader(
            'Authorization',
            'Basic {0}:{1}'.format(
                TEST_USER_NAME,
                TEST_USER_PASSWORD,
            ),
        )
        browser.open(
            '{0}/++add++Document'.format(self.portal['f1'].absolute_url()), )
        browser.getControl(
            name='form.widgets.IDublinCore.title').value = 'dummy content'
        browser.getControl('Save').click()
        self.assertNotIn('Etag', browser.headers)

        # now set up etags and make sure that a header is added
        self.registry['plone.app.caching.weakCaching.etags'] = (
            'lastModified', )
        import transaction
        transaction.commit()
        browser.open('{0}/dummy-content/edit?_authenticator={1}'.format(
            self.portal['f1'].absolute_url(), getToken(TEST_USER_NAME)))
        browser.getControl(
            name='form.widgets.IDublinCore.title').value = 'dummy content'
        browser.getControl('Save').click()
        self.assertIn('Etag', browser.headers)
Example #2
0
    def test_last_modified_no_etags(self):
        """
        When a new content type is added, the resulting page should not be
        cached since it has messages. However, it should only trigger an etag
        if its been configured to use etags
        """
        # Add folder content
        setRoles(self.portal, TEST_USER_ID, ('Manager',))
        self.portal.invokeFactory('Folder', 'f1')
        self.portal['f1'].title = u"Folder one"
        self.portal['f1'].description = u"Folder one description"
        self.portal['f1'].reindexObject()

        self.cacheSettings.operationMapping = {
            'plone.content.itemView': 'plone.app.caching.weakCaching'}
        self.registry['plone.app.caching.weakCaching.lastModified'] = True
        self.registry['plone.app.caching.weakCaching.etags'] = None

        import transaction
        transaction.commit()

        # log in and create a content type
        browser = Browser(self.app)
        browser.addHeader(
            'Authorization',
            'Basic {0}:{1}'.format(TEST_USER_NAME, TEST_USER_PASSWORD, ),
        )
        browser.open('{0}/++add++Document'.format(
            self.portal['f1'].absolute_url())
        )
        browser.getControl(
            name='form.widgets.IDublinCore.title').value = 'dummy content'
        browser.getControl('Save').click()
        self.assertFalse('Etag' in browser.headers)

        # now set up etags and make sure that a header is added
        self.registry['plone.app.caching.weakCaching.etags'] = (
            'lastModified',
        )
        import transaction
        transaction.commit()
        browser.open('{0}/dummy-content/edit?_authenticator={1}'.format(
            self.portal['f1'].absolute_url(),
            getToken(TEST_USER_NAME)))
        browser.getControl(
            name='form.widgets.IDublinCore.title').value = 'dummy content'
        browser.getControl('Save').click()
        self.assertTrue('Etag' in browser.headers)
Example #3
0
    def test_auto_purge_content_types(self):

        setRoles(self.portal, TEST_USER_ID, ('Manager',))

        # Non-folder content
        self.portal.invokeFactory('Document', 'd1')
        self.portal['d1'].title = u"Document one"
        self.portal['d1'].description = u"Document one description"
        self.portal['d1'].text = RichTextValue(
            u"<p>Body one</p>",
            'text/plain',
            'text/html'
        )
        self.portal['d1'].reindexObject()

        setRoles(self.portal, TEST_USER_ID, ('Member',))

        # Purging disabled
        self.cachePurgingSettings.enabled = False
        self.cachePurgingSettings.cachingProxies = ()
        self.ploneCacheSettings.purgedContentTypes = ()

        editURL = '{0}/edit?_authenticator={1}'.format(
            self.portal['d1'].absolute_url(),
            getToken(TEST_USER_NAME)
        )

        import transaction
        transaction.commit()

        browser = Browser(self.app)
        browser.handleErrors = False
        browser.addHeader(
            'Authorization',
            'Basic {0}:{1}'.format(TEST_USER_NAME, TEST_USER_PASSWORD, ),
        )

        browser.open(editURL)

        browser.getControl(
            name='form.widgets.IDublinCore.title').value = u"Title 1"
        browser.getControl('Save').click()

        self.assertEqual([], self.purger._sync)
        self.assertEqual([], self.purger._async)

        # Enable purging, but not the content type
        self.cachePurgingSettings.enabled = True
        self.cachePurgingSettings.cachingProxies = ('http://localhost:1234',)
        self.ploneCacheSettings.purgedContentTypes = ()

        import transaction
        transaction.commit()

        browser.open(editURL)
        browser.getControl(
            name='form.widgets.IDublinCore.title').value = u"Title 2"
        browser.getControl('Save').click()

        self.assertEqual([], self.purger._sync)
        self.assertEqual([], self.purger._async)

        # Enable the content type, but disable purging
        self.cachePurgingSettings.enabled = False
        self.cachePurgingSettings.cachingProxies = ('http://localhost:1234',)
        self.ploneCacheSettings.purgedContentTypes = ()

        import transaction
        transaction.commit()

        browser.open(editURL)
        browser.getControl(
            name='form.widgets.IDublinCore.title').value = u"Title 3"
        browser.getControl('Save').click()

        self.assertEqual([], self.purger._sync)
        self.assertEqual([], self.purger._async)

        # Enable properly
        self.cachePurgingSettings.enabled = True
        self.cachePurgingSettings.cachingProxies = ('http://localhost:1234',)
        self.ploneCacheSettings.purgedContentTypes = ('Document',)

        import transaction
        transaction.commit()

        browser.open(editURL)
        browser.getControl(
            name='form.widgets.IDublinCore.title').value = u"Title 4"
        browser.getControl('Save').click()

        self.assertEqual([], self.purger._sync)
        self.assertEqual(set([
            'http://localhost:1234/plone/d1',
            'http://localhost:1234/plone/d1/document_view',
            'http://localhost:1234/plone/d1/',
            'http://localhost:1234/plone/d1/view']),
            set(self.purger._async))
Example #4
0
    def test_auto_purge_content_types(self):

        setRoles(self.portal, TEST_USER_ID, ('Manager', ))

        # Non-folder content
        self.portal.invokeFactory('Document', 'd1')
        self.portal['d1'].title = u'Document one'
        self.portal['d1'].description = u'Document one description'
        self.portal['d1'].text = RichTextValue(
            u'<p>Body one</p>',
            u'text/plain',
            u'text/html',
        )
        self.portal['d1'].reindexObject()

        setRoles(self.portal, TEST_USER_ID, ('Member', ))

        # Purging disabled
        self.cachePurgingSettings.enabled = False
        self.cachePurgingSettings.cachingProxies = ()
        self.ploneCacheSettings.purgedContentTypes = ()

        editURL = '{0}/edit?_authenticator={1}'.format(
            self.portal['d1'].absolute_url(),
            getToken(TEST_USER_NAME),
        )

        import transaction
        transaction.commit()

        browser = Browser(self.app)
        browser.handleErrors = False
        browser.addHeader(
            'Authorization',
            'Basic {0}:{1}'.format(
                TEST_USER_NAME,
                TEST_USER_PASSWORD,
            ),
        )

        browser.open(editURL)

        browser.getControl(
            name='form.widgets.IDublinCore.title').value = u'Title 1'
        browser.getControl('Save').click()

        self.assertEqual([], self.purger._sync)
        self.assertEqual([], self.purger._async)

        # Enable purging, but not the content type
        self.cachePurgingSettings.enabled = True
        self.cachePurgingSettings.cachingProxies = ('http://localhost:1234', )
        self.ploneCacheSettings.purgedContentTypes = ()

        import transaction
        transaction.commit()

        browser.open(editURL)
        browser.getControl(
            name='form.widgets.IDublinCore.title').value = u'Title 2'
        browser.getControl('Save').click()

        self.assertEqual([], self.purger._sync)
        self.assertEqual([], self.purger._async)

        # Enable the content type, but disable purging
        self.cachePurgingSettings.enabled = False
        self.cachePurgingSettings.cachingProxies = ('http://localhost:1234', )
        self.ploneCacheSettings.purgedContentTypes = ()

        import transaction
        transaction.commit()

        browser.open(editURL)
        browser.getControl(
            name='form.widgets.IDublinCore.title').value = u'Title 3'
        browser.getControl('Save').click()

        self.assertEqual([], self.purger._sync)
        self.assertEqual([], self.purger._async)

        # Enable properly
        self.cachePurgingSettings.enabled = True
        self.cachePurgingSettings.cachingProxies = ('http://localhost:1234', )
        self.ploneCacheSettings.purgedContentTypes = ('Document', )

        import transaction
        transaction.commit()

        browser.open(editURL)
        browser.getControl(
            name='form.widgets.IDublinCore.title').value = u'Title 4'
        browser.getControl('Save').click()

        self.assertEqual([], self.purger._sync)
        self.assertEqual(
            set([
                'http://localhost:1234/plone/d1',
                'http://localhost:1234/plone/d1/document_view',
                'http://localhost:1234/plone/d1/',
                'http://localhost:1234/plone/d1/view'
            ]), set(self.purger._async))