[1493] | 1 | """Test setup for integration and functional tests. |
---|
| 2 | |
---|
| 3 | When we import PloneTestCase and then call setupPloneSite(), all of |
---|
| 4 | Plone's products are loaded, and a Plone site will be created. This |
---|
| 5 | happens at module level, which makes it faster to run each test, but |
---|
| 6 | slows down test runner startup. |
---|
| 7 | """ |
---|
[2139] | 8 | import transaction |
---|
| 9 | from zope.component import getUtility |
---|
[1493] | 10 | |
---|
[2139] | 11 | # Starting from plone.memoize v1.1a4 (used in plone4), global ram cache |
---|
| 12 | # utility provides other IRAMCache interface, than before |
---|
| 13 | try: |
---|
| 14 | # In plone4 provides |
---|
| 15 | from zope.ramcache.interfaces.ram import IRAMCache |
---|
[3141] | 16 | IRAMCache |
---|
[2139] | 17 | except ImportError: |
---|
| 18 | # In plone3 provides |
---|
| 19 | from zope.app.cache.interfaces.ram import IRAMCache |
---|
| 20 | |
---|
[1493] | 21 | from Products.Five import zcml |
---|
| 22 | from Products.Five import fiveconfigure |
---|
| 23 | |
---|
| 24 | from Testing import ZopeTestCase as ztc |
---|
| 25 | |
---|
[2139] | 26 | from Products.PloneTestCase.layer import PloneSite |
---|
[1493] | 27 | from Products.PloneTestCase import PloneTestCase as ptc |
---|
[2139] | 28 | from Products.PloneTestCase import setup as ptc_setup |
---|
[1493] | 29 | |
---|
[2139] | 30 | from quintagroup.seoptimizer.config import PROJECT_NAME |
---|
[1493] | 31 | |
---|
[2139] | 32 | ptc.setupPloneSite() |
---|
[1493] | 33 | |
---|
[3134] | 34 | |
---|
[2139] | 35 | class NotInstalled(PloneSite): |
---|
| 36 | """ Only package register, without installation into portal |
---|
[1493] | 37 | """ |
---|
| 38 | |
---|
[2139] | 39 | @classmethod |
---|
| 40 | def setUp(cls): |
---|
| 41 | fiveconfigure.debug_mode = True |
---|
| 42 | import quintagroup.seoptimizer |
---|
| 43 | zcml.load_config('configure.zcml', quintagroup.seoptimizer) |
---|
| 44 | fiveconfigure.debug_mode = False |
---|
| 45 | ztc.installPackage(PROJECT_NAME) |
---|
[1493] | 46 | |
---|
| 47 | |
---|
[2139] | 48 | class Installed(NotInstalled): |
---|
| 49 | """ Install product into the portal |
---|
| 50 | """ |
---|
| 51 | @classmethod |
---|
| 52 | def setUp(cls): |
---|
| 53 | app = ztc.app() |
---|
| 54 | portal = app[ptc_setup.portal_name] |
---|
[1493] | 55 | |
---|
[2139] | 56 | # Sets the local site/manager |
---|
| 57 | ptc_setup._placefulSetUp(portal) |
---|
| 58 | # Install PROJECT |
---|
| 59 | qi = getattr(portal, 'portal_quickinstaller', None) |
---|
[2936] | 60 | if not ptc.PLONE31: |
---|
| 61 | qi.installProduct("plone.browserlayer") |
---|
[2139] | 62 | qi.installProduct(PROJECT_NAME) |
---|
| 63 | transaction.commit() |
---|
[1493] | 64 | |
---|
[2139] | 65 | @classmethod |
---|
| 66 | def tearDown(cls): |
---|
| 67 | ptc_setup._placefulTearDown() |
---|
[1493] | 68 | |
---|
[3134] | 69 | |
---|
[2139] | 70 | class MixinTestCase: |
---|
[1493] | 71 | |
---|
[2139] | 72 | def _getauth(self): |
---|
| 73 | # Fix authenticator for the form |
---|
| 74 | import re |
---|
| 75 | try: |
---|
| 76 | authenticator = self.portal.restrictedTraverse("@@authenticator") |
---|
| 77 | except: |
---|
[3134] | 78 | handle = "" |
---|
[2139] | 79 | else: |
---|
| 80 | html = authenticator.authenticator() |
---|
| 81 | handle = re.search('value="(.*)"', html).groups()[0] |
---|
| 82 | return handle |
---|
[1493] | 83 | |
---|
[2139] | 84 | def beforeTearDown(self): |
---|
| 85 | getUtility(IRAMCache).invalidateAll() |
---|
[1493] | 86 | |
---|
[3011] | 87 | def installBrowserLayer(self): |
---|
| 88 | if not ptc.PLONE31: |
---|
| 89 | qi = getattr(self.portal, 'portal_quickinstaller', None) |
---|
| 90 | qi.installProduct("plone.browserlayer") |
---|
[1493] | 91 | |
---|
[3011] | 92 | |
---|
[2139] | 93 | class TestCase(MixinTestCase, ptc.PloneTestCase): |
---|
| 94 | layer = Installed |
---|
[1493] | 95 | |
---|
[3134] | 96 | |
---|
[2139] | 97 | class TestCaseNotInstalled(MixinTestCase, ptc.PloneTestCase): |
---|
| 98 | layer = NotInstalled |
---|
[1493] | 99 | |
---|
| 100 | |
---|
[2139] | 101 | class FunctionalTestCase(MixinTestCase, ptc.FunctionalTestCase): |
---|
| 102 | layer = Installed |
---|
[1493] | 103 | |
---|
[3011] | 104 | def afterSetUp(self): |
---|
| 105 | self.installBrowserLayer() |
---|
| 106 | |
---|
[3134] | 107 | |
---|
[2139] | 108 | class FunctionalTestCaseNotInstalled(MixinTestCase, ptc.FunctionalTestCase): |
---|
| 109 | layer = NotInstalled |
---|
[2936] | 110 | |
---|
| 111 | def afterSetUp(self): |
---|
[3011] | 112 | self.installBrowserLayer() |
---|