source: products/vendor/Products.CacheSetup/current/Products/CacheSetup/tests/test_template_rule.py @ 3296

Last change on this file since 3296 was 3296, checked in by fenix, 13 years ago

Load Products.CacheSetup?-1.2.1 into vendor/Products.CacheSetup?/current.

  • Property svn:eol-style set to native
File size: 4.7 KB
Line 
1import unittest
2
3from base import CacheFuTestCase
4
5from Products.CMFCore.utils  import getToolByName
6import Products.CacheSetup.config as config
7
8# util for making content in a container
9def makeContent(container, id, portal_type, title=None):
10    container.invokeFactory(id=id, type_name=portal_type)
11    o = getattr(container, id)
12    if title is not None:
13        o.setTitle(title)
14    return o
15
16
17# This is the test case. You will have to add test_<methods> to your
18# class inorder to assert things about your Product.
19class CacheManagerTest(CacheFuTestCase):
20    USER1 = 'user1'
21   
22    def afterSetUp(self):
23        CacheFuTestCase.afterSetUp(self)
24       
25        # Add a couple of users
26        self.portal.acl_users._doAddUser('manager', 'secret', ['Manager'], [])
27        self.portal.acl_users._doAddUser(self.USER1, 'secret', ['Member'], [])
28        self.login('manager')
29
30        self.portal.portal_quickinstaller.installProducts(['CacheSetup'])
31
32        # We have added a skin so we need to rebuild the skin object
33        # (since the object is cached in the current request)
34        self._refreshSkinData()
35
36        pcs = self.portal.portal_cache_settings
37        pcs.setEnabled(True)
38
39        headers = pcs.getHeaderSets()
40        headers.manage_delObjects(headers.objectIds())
41        headers.invokeFactory(id='hs1', type_name='HeaderSet')
42        headers.invokeFactory(id='hs2', type_name='HeaderSet')
43        rules = pcs.getRules()
44        rules.manage_delObjects(rules.objectIds())
45
46    def test_template_do_cache(self):
47        pcs = self.portal.portal_cache_settings
48        h = getattr(pcs.getHeaderSets(), 'hs1')
49        h2 = getattr(pcs.getHeaderSets(), 'hs2')
50        rules = pcs.getRules()
51        rules.invokeFactory(id='my_rule', type_name='TemplateCacheRule')
52        rule = getattr(pcs.getRules(), 'my_rule')
53
54        rule.setTitle('Template')
55        self.assertEqual(rule.Title(), 'Template')
56        rule.setTemplates(('foo','bar'))
57        self.assertEqual(rule.getTemplates(), ('foo','bar'))
58        rule.setHeaderSetIdAnon('hs1')
59        self.assertEqual(rule.getHeaderSetIdAnon(), 'hs1')
60        rule.setHeaderSetIdAuth('hs2')
61        self.assertEqual(rule.getHeaderSetIdAuth(), 'hs2')
62        rule.setCacheStop(['portal_status_message',
63                           'statusmessages'])
64        self.assertEqual(rule.getCacheStop(),
65                         ('portal_status_message', 'statusmessages'))
66
67        rule.setEtagComponents(['member','last_modified'])
68        rule.setEtagRequestValues([])
69        rule.setEtagTimeout(3600)
70        rule.reindexObject()
71
72        member = self.portal.portal_membership.getAuthenticatedMember()
73        self.assertEqual(rule.getHeaderSet(self.portal.REQUEST, self.portal, 'foo', member).getId(), 'hs2')
74        self.assertEqual(rule.getHeaderSet(self.portal.REQUEST, self.portal, 'foo', None).getId(), 'hs1')
75        self.assertEqual(rule.getHeaderSet(self.portal.REQUEST, self.portal, 'bar', member).getId(), 'hs2')
76        self.assertEqual(rule.getHeaderSet(self.portal.REQUEST, self.portal, 'foobar', member), None)
77
78        # make sure stop words stop
79        self.assertEqual(rule.getHeaderSet({}, self.portal, 'foo', member).getId(), 'hs2')
80        self.assertEqual(rule.getHeaderSet({'portal_status_message':'foo'}, self.portal, 'foo', member), None)
81
82        # make sure we can check getHeaderSetId by script
83        self.portal.manage_addProduct['PythonScripts'].manage_addPythonScript('test_script')
84        self.portal.test_script.ZPythonScript_edit('view', 'return view==\'foobar\' and \'hs1\' or \'hs2\'')
85        rule.setHeaderSetIdAuth('expression')
86        rule.setHeaderSetIdExpression('python:object.test_script(view)')
87        rule.setTemplates(['foo', 'foobar'])
88        self.assertEqual(rule.getHeaderSet(self.portal.REQUEST, self.portal, 'foo', member).getId(), 'hs2')
89        self.assertEqual(rule.getHeaderSet(self.portal.REQUEST, self.portal, 'foobar', member).getId(), 'hs1')
90
91        # make sure we can associate templates with PageCacheManager
92        self.portal.manage_addProduct['PageTemplates'].manage_addPageTemplate('template', 'Title', '<html></html>')
93        rule.setTemplates(['template'])
94        h2.setPageCache(False)
95        self.assertEqual(rule.getHeaderSet(self.portal.REQUEST, self.portal, 'template', member).getId(), 'hs2')
96        self.assertEqual(self.portal.template.ZCacheable_getManagerId(), None)
97        h2.setPageCache(True)
98        self.assertEqual(rule.getHeaderSet(self.portal.REQUEST, self.portal, 'template', member).getId(), 'hs2')
99        self.assertEqual(self.portal.template.ZCacheable_getManagerId(), config.PAGE_CACHE_MANAGER_ID)
100
101def test_suite():
102    suite = unittest.TestSuite()
103    suite.addTest(unittest.makeSuite(CacheManagerTest))
104    return suite
Note: See TracBrowser for help on using the repository browser.