1 | |
---|
2 | """ This module contains class that tests python script in portal root """ |
---|
3 | |
---|
4 | import os, sys, string |
---|
5 | if __name__ == '__main__': |
---|
6 | execfile(os.path.join(sys.path[0], 'framework.py')) |
---|
7 | |
---|
8 | from commonTestingStuff import * |
---|
9 | |
---|
10 | class TestFunctional(PloneTestCase.FunctionalTestCase): |
---|
11 | """ Class for functional testing """ |
---|
12 | |
---|
13 | def afterSetUp(self): |
---|
14 | """ AfterSetUp features """ |
---|
15 | |
---|
16 | self.auth = 'admin:secret' |
---|
17 | self.loginAsPortalOwner() |
---|
18 | self.membership = self.portal.portal_membership |
---|
19 | self.path = '%s/%s' % (self.portal.id, EXTERNAL_METHOD) |
---|
20 | for m in PORTAL_MEMBERS: |
---|
21 | addMember(self, m['id'], m['fullname'], m['email'], m['roles'], m['last_login_time']) |
---|
22 | |
---|
23 | def testExternalMethod(self): |
---|
24 | """ Test external method script for publishing """ |
---|
25 | |
---|
26 | if cmfmember_installed: |
---|
27 | getToolByName(self.portal, 'cmfmember_control').upgrade(swallow_errors=0) |
---|
28 | response = self.publish(self.path, self.auth, extra={'exclude_props':[], 'include_props':INCLUDE_PROPS}) |
---|
29 | forCompare = parseCSV(self, response.getBody()) |
---|
30 | self.failUnless(forCompare[0] == forCompare[1], '%s external method return bad CSV value' % EXTERNAL_METHOD) |
---|
31 | |
---|
32 | def testContentDispositionResponseHeader(self): |
---|
33 | """ Test response for content-disposition header """ |
---|
34 | |
---|
35 | import re |
---|
36 | pattern = re.compile(r'\s*attachment\;\s*filename=\s*memberdata\-\d{4}\-\d{2}\-\d{2}\-\d{2}\-\d{2}\-\d{2}\.csv\s*', re.I) |
---|
37 | response = self.publish(self.path, self.auth, extra={'exclude_props':[], 'include_props':INCLUDE_PROPS}) |
---|
38 | self.failUnless(pattern.search(response.getHeader('content-disposition')), |
---|
39 | 'Bad response header \'Content Disposition\'') |
---|
40 | |
---|
41 | def testContentTypeResponseHeader(self): |
---|
42 | """ Test response for content-type header """ |
---|
43 | |
---|
44 | response = self.publish(self.path, self.auth, extra={'exclude_props':[], 'include_props':INCLUDE_PROPS}) |
---|
45 | self.failUnless(response.getHeader('content-type').find('text/csv') != -1, |
---|
46 | 'Bad response header \'Content Type\'') |
---|
47 | |
---|
48 | def testExternalMethodSecurity(self): |
---|
49 | """ Test external method for 'View' permission """ |
---|
50 | |
---|
51 | response = self.publish(self.path, 'barney:secret') |
---|
52 | type_header = response.getHeader('bobo-exception-type') |
---|
53 | location_header = response.getHeader('location') or '' |
---|
54 | self.failUnless(type_header == 'Unauthorized' or location_header.find('login_form') != -1, |
---|
55 | 'Anonymous user have access to external method') |
---|
56 | |
---|
57 | def test_suite(): |
---|
58 | from unittest import TestSuite, makeSuite |
---|
59 | suite = TestSuite() |
---|
60 | suite.addTest(makeSuite(TestFunctional)) |
---|
61 | return suite |
---|
62 | |
---|
63 | if __name__ == '__main__': |
---|
64 | framework() |
---|