[1] | 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.qi = getToolByName(self.portal, 'portal_quickinstaller') |
---|
| 19 | self.qi.installProduct(PRODUCT) |
---|
| 20 | self.membership = self.portal.portal_membership |
---|
| 21 | for m in PORTAL_MEMBERS: |
---|
| 22 | addMember(self, m['id'], m['fullname'], m['email'], m['roles'], m['last_login_time']) |
---|
| 23 | self.response = self.sendRequest('%s/%s' % (self.portal.id, PYTHON_SCRIPT), {}, "GET") |
---|
| 24 | |
---|
| 25 | def sendRequest(self, path, params={}, method="POST"): |
---|
| 26 | """ Utility function """ |
---|
| 27 | |
---|
| 28 | return self.publish(path, self.auth, extra=params, request_method=method) |
---|
| 29 | |
---|
| 30 | |
---|
| 31 | def testExportMemberdataScript(self): |
---|
| 32 | """ Test exportMemberData python script """ |
---|
| 33 | |
---|
| 34 | forCompare = parseCSV(self, self.response.getBody()) |
---|
| 35 | self.failUnless(forCompare[0] == forCompare[1], '%s script return bad CSV value' % PYTHON_SCRIPT) |
---|
| 36 | |
---|
| 37 | def testContentDispositionResponseHeader(self): |
---|
| 38 | """ Test response for content-disposition header """ |
---|
| 39 | |
---|
| 40 | import re |
---|
| 41 | 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) |
---|
| 42 | self.failUnless(pattern.search(self.response.getHeader('content-disposition')), |
---|
| 43 | 'Bad response header \'Content Disposition\'') |
---|
| 44 | |
---|
| 45 | def testContentTypeResponseHeader(self): |
---|
| 46 | """ Test response for content-type header """ |
---|
| 47 | |
---|
| 48 | self.failUnless(self.response.getHeader('content-type').find('text/csv') != -1, |
---|
| 49 | 'Bad response header \'Content Type\'') |
---|
| 50 | |
---|
| 51 | def testScriptSecurity(self): |
---|
| 52 | """ Test external script 'View' permission via python script """ |
---|
| 53 | |
---|
| 54 | maps_login(self, 'anonym') |
---|
| 55 | response = self.publish('%s/%s' % (self.portal.id, PYTHON_SCRIPT)) |
---|
| 56 | |
---|
| 57 | self.failUnless(response.getHeader('bobo-exception-type') == 'Unauthorized', |
---|
| 58 | 'Anonymous user have access to external method via python script') |
---|
| 59 | |
---|
| 60 | def test_suite(): |
---|
| 61 | from unittest import TestSuite, makeSuite |
---|
| 62 | suite = TestSuite() |
---|
| 63 | suite.addTest(makeSuite(TestFunctional)) |
---|
| 64 | return suite |
---|
| 65 | |
---|
| 66 | if __name__ == '__main__': |
---|
| 67 | framework() |
---|