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)
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)
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))
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))