source: products/vendor/Products.CacheSetup/current/Products/CacheSetup/tests/test_base_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: 10.7 KB
Line 
1import unittest
2
3from base import CacheFuTestCase
4
5from DateTime import DateTime
6from Products.CMFCore.utils  import getToolByName
7import Products.CacheSetup.config as config
8
9# util for making content in a container
10def makeContent(container, id, portal_type, title=None):
11    container.invokeFactory(id=id, type_name=portal_type)
12    o = getattr(container, id)
13    if title is not None:
14        o.setTitle(title)
15    return o
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 TestBaseRule(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        self.folder.invokeFactory(id='doc', type_name='Document')
37        pcs = self.portal.portal_cache_settings
38        pcs.setEnabled(True)
39        headers = pcs.getHeaderSets()
40        headers.invokeFactory(id='my_hs', type_name='HeaderSet')
41        rules = pcs.getRules()
42        rules.invokeFactory(id='my_rule', type_name='ContentCacheRule')
43        rules.moveObjectsToTop(['my_rule'])
44
45    def test_last_modified(self):
46        pcs = self.portal.portal_cache_settings
47        rule = getattr(pcs.getRules(), 'my_rule')
48
49        # test default value
50        expr = rule.getLastModifiedExpression()
51        self.assertEqual(expr, 'python:object.modified()')
52
53        # make sure getting and setting work
54        rule.setLastModifiedExpression('python:3')
55        self.assertEqual(rule.getLastModifiedExpression(), 'python:3')
56
57        # test validation
58        self.assertEqual(rule.validate_lastModifiedExpression(''), None)
59        self.assertEqual(rule.validate_lastModifiedExpression('python:3'), None)
60        self.assertNotEqual(rule.validate_lastModifiedExpression('python:foo bar'), None)
61       
62        doc = self.folder.doc
63        expr_context = rule._getExpressionContext(doc.REQUEST, doc, 'document_view', None)
64        self.assertEqual(rule.getLastModified(expr_context), 3)
65
66
67    def test_etag_expression(self):
68        pcs = self.portal.portal_cache_settings
69        rule = getattr(pcs.getRules(), 'my_rule')
70
71        # test default value
72        expr = rule.getEtagExpression()
73        self.assertEqual(expr, '')
74
75        # make sure getting and setting work
76        rule.setEtagExpression('python:2')
77        self.assertEqual(rule.getEtagExpression(), 'python:2')
78
79        # test validation
80        self.assertEqual(rule.validate_etagExpression('python:2'), None)
81        self.assertNotEqual(rule.validate_etagExpression('python: foo bar'), None)
82
83        doc = self.folder.doc
84        expr_context = rule._getExpressionContext(doc.REQUEST, doc, 'document_view', None)
85        self.assertEqual(rule.getEtagExpressionValue(expr_context), 2)
86
87    def test_headersetid_expression(self):
88        pcs = self.portal.portal_cache_settings
89        rule = getattr(pcs.getRules(), 'my_rule')
90
91        # test default value
92        expr = rule.getHeaderSetIdExpression()
93        self.assertEqual(expr, '')
94
95        # make sure getting and setting work
96        rule.setHeaderSetIdExpression('python:2')
97        self.assertEqual(rule.getHeaderSetIdExpression(), 'python:2')
98
99        # test validation
100        self.assertEqual(rule.validate_etagExpression('python:2'), None)
101        self.assertNotEqual(rule.validate_etagExpression('python: foo bar'), None)
102
103        doc = self.folder.doc
104        expr_context = rule._getExpressionContext(doc.REQUEST, doc, 'document_view', None)
105        self.assertEqual(rule.getHeaderSetIdExpressionValue(expr_context), 2)
106
107    def test_get_default_view(self):
108        pcs = self.portal.portal_cache_settings
109        rule = getattr(pcs.getRules(), 'my_rule')
110        doc = self.folder.doc
111        self.assertEqual(rule.getObjectDefaultView(doc), 'document_view')
112
113    def test_get_etag(self):
114        pcs = self.portal.portal_cache_settings
115        rule = getattr(pcs.getRules(), 'my_rule')
116        hs = getattr(pcs.getHeaderSets(), 'my_hs')
117        doc = self.folder.doc
118        request = doc.REQUEST
119        pcs.setGzip('accept-encoding')
120
121        rule.setEtagComponents([])
122        rule.setEtagTimeout(None)
123        rule.setEtagRequestValues([])
124        etag = rule.getEtag(request, doc, 'document_view', None)
125        self.assertEqual(etag, '')
126
127        rule.setEtagComponents(['member'])
128        etag = rule.getEtag(request, doc, 'document_view', None)
129        self.assertEqual(etag, '|')
130        member = self.portal.portal_membership.getMemberById(self.USER1)
131        etag = rule.getEtag(request, doc, 'document_view', member)
132        self.assertEqual(etag, '|'+self.USER1)
133
134        rule.setEtagComponents(['member','roles'])
135        etag = rule.getEtag(request, doc, 'document_view', None)
136        self.assertEqual(etag, '||Anonymous')
137        member = self.portal.portal_membership.getMemberById(self.USER1)
138        etag = rule.getEtag(request, doc, 'document_view', member)
139        self.assertEqual(etag, '|%s|%s' % (self.USER1, ';'.join(['Authenticated','Member'])))
140
141        rule.setEtagComponents(['member','permissions'])
142        etag = rule.getEtag(request, doc, 'document_view', None)
143        self.assertEqual(etag, '||%s|%s' % ('Anonymous', str(pcs.getPermissionCount())))
144        member = self.portal.portal_membership.getMemberById(self.USER1)
145        etag = rule.getEtag(request, doc, 'document_view', member)
146        self.assertEqual(etag, '|%s|%s|%s' % (self.USER1, ';'.join(['Authenticated','Member']), str(pcs.getPermissionCount())))
147
148        rule.setEtagComponents(['member','role', 'permissions'])
149        etag = rule.getEtag(request, doc, 'document_view', None)
150        self.assertEqual(etag, '||%s|%s' % ('Anonymous', str(pcs.getPermissionCount())))
151        member = self.portal.portal_membership.getMemberById(self.USER1)
152        etag = rule.getEtag(request, doc, 'document_view', member)
153        self.assertEqual(etag, '|%s|%s|%s' % (self.USER1, ';'.join(['Authenticated','Member']), str(pcs.getPermissionCount())))
154        cumulative_etag = etag
155       
156        rule.setEtagComponents(['skin'])
157        etag = rule.getEtag(request, doc, 'document_view', None)
158        self.assertEqual(etag, '|'+self.portal.getCurrentSkinName())
159        rule.setEtagComponents(['member','role','permissions','skin'])
160        etag = rule.getEtag(request, doc, 'document_view', member)
161        self.assertEqual(etag, cumulative_etag + '|' + self.portal.getCurrentSkinName())
162        cumulative_etag = etag
163       
164        rule.setEtagComponents(['language'])
165        request.set('HTTP_ACCEPT_LANGUAGE', 'en-us, en-uk')
166        etag = rule.getEtag(request, doc, 'document_view', None)
167        self.assertEqual(etag, '|en-us; en-uk')
168        rule.setEtagComponents(['member','role','permissions','skin','language'])
169        etag = rule.getEtag(request, doc, 'document_view', member)
170        self.assertEqual(etag, cumulative_etag + '|en-us; en-uk')
171        cumulative_etag = etag
172
173        rule.setEtagComponents(['gzip'])
174        request.set('HTTP_ACCEPT_ENCODING', '')
175        etag = rule.getEtag(request, doc, 'document_view', None)
176        self.assertEqual(etag, '|0')
177        request.set('HTTP_ACCEPT_ENCODING', 'gzip')
178        etag = rule.getEtag(request, doc, 'document_view', None)
179        self.assertEqual(etag, '|1')
180        rule.setEtagComponents(['member','role','permissions','skin','language','gzip'])
181        etag = rule.getEtag(request, doc, 'document_view', member)
182        self.assertEqual(etag, cumulative_etag + '|1')
183        cumulative_etag = etag
184       
185        rule.setEtagComponents(['last_modified'])
186        etag = rule.getEtag(request, doc, 'document_view', None)
187        self.assertEqual(etag, '|'+str(doc.modified().timeTime()))
188        rule.setEtagComponents(['member','role','permissions','skin','language','gzip','last_modified'])
189        etag = rule.getEtag(request, doc, 'document_view', member)
190        self.assertEqual(etag, cumulative_etag + '|' + str(doc.modified().timeTime()))
191        cumulative_etag = etag
192       
193        rule.setEtagComponents(['catalog_modified'])
194        etag = rule.getEtag(request, doc, 'document_view', None)
195        self.assertEqual(etag, '|'+str(pcs.getCatalogCount()))
196        rule.setEtagComponents(['member','role','permissions','skin','language','gzip','last_modified','catalog_modified'])
197        etag = rule.getEtag(request, doc, 'document_view', member)
198        self.assertEqual(etag, cumulative_etag + '|' + str(pcs.getCatalogCount()))
199        cumulative_etag = etag
200
201        rule.setEtagComponents([])
202        rule.setEtagExpression('string:my, value')
203        etag = rule.getEtag(request, doc, 'document_view', None)
204        self.assertEqual(etag, '|my; value')
205        rule.setEtagComponents(['member','role','permissions','skin','language','gzip','last_modified','catalog_modified'])
206        etag = rule.getEtag(request, doc, 'document_view', member)
207        self.assertEqual(etag, cumulative_etag + '|my; value')
208        cumulative_etag = etag
209
210        rule.setEtagRequestValues([])
211        rule.setEtagRequestValues(['foo','bar','foobar'])
212        request.set('foo', 'FOO')
213        request.set('bar', 'BAR')
214        rule.setEtagComponents([])
215        rule.setEtagExpression('')
216        etag = rule.getEtag(request, doc, 'document_view', None)
217        self.assertEqual(etag, '|FOO|BAR|')
218        rule.setEtagComponents(['member','role','permissions','skin','language','gzip','last_modified','catalog_modified'])
219        rule.setEtagExpression('string:my, value')
220        etag = rule.getEtag(request, doc, 'document_view', member)
221        self.assertEqual(etag, cumulative_etag + '|FOO|BAR|')
222        cumulative_etag = etag
223
224        now = DateTime()
225        rule.setEtagComponents([])
226        rule.setEtagExpression('')
227        rule.setEtagRequestValues([])
228        rule.setEtagTimeout(3600)
229        etag = rule.getEtag(request, doc, 'document_view', None, time=now)
230        timeout = str(int(now.timeTime()/3600))
231        self.assertEqual(etag, '|'+timeout)
232        rule.setEtagComponents(['member','role','permissions','skin','language','gzip','last_modified','catalog_modified'])
233        rule.setEtagExpression('string:my, value')
234        rule.setEtagRequestValues(['foo','bar','foobar'])
235        etag = rule.getEtag(request, doc, 'document_view', member, time=now)
236        self.assertEqual(etag, cumulative_etag + '|' + timeout)
237        cumulative_etag = etag
238       
239
240def test_suite():
241    suite = unittest.TestSuite()
242    suite.addTest(unittest.makeSuite(TestBaseRule))
243    return suite
Note: See TracBrowser for help on using the repository browser.