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 | """ |
---|
8 | import re |
---|
9 | import transaction |
---|
10 | from zope.component import getUtility |
---|
11 | |
---|
12 | # Starting from plone.memoize v1.1a4 (used in plone4), global ram cache |
---|
13 | # utility provides other IRAMCache interface, than before |
---|
14 | try: |
---|
15 | # In plone4 provides |
---|
16 | from zope.ramcache.interfaces.ram import IRAMCache |
---|
17 | except ImportError: |
---|
18 | # In plone3 provides |
---|
19 | from zope.app.cache.interfaces.ram import IRAMCache |
---|
20 | |
---|
21 | from Products.Five import zcml |
---|
22 | from Products.Five import fiveconfigure |
---|
23 | |
---|
24 | from Testing import ZopeTestCase as ztc |
---|
25 | |
---|
26 | from Products.CMFCore.utils import getToolByName |
---|
27 | |
---|
28 | from Products.PloneTestCase.layer import PloneSite |
---|
29 | from Products.PloneTestCase import PloneTestCase as ptc |
---|
30 | from Products.PloneTestCase import setup as ptc_setup |
---|
31 | |
---|
32 | from Products.PloneTestCase.PloneTestCase import portal_owner |
---|
33 | from Products.PloneTestCase.PloneTestCase import default_password |
---|
34 | |
---|
35 | from quintagroup.seoptimizer.config import PROJECT_NAME |
---|
36 | from quintagroup.seoptimizer.config import SUPPORT_BLAYER |
---|
37 | |
---|
38 | ptc.setupPloneSite() |
---|
39 | |
---|
40 | class NotInstalled(PloneSite): |
---|
41 | """ Only package register, without installation into portal |
---|
42 | """ |
---|
43 | |
---|
44 | @classmethod |
---|
45 | def setUp(cls): |
---|
46 | fiveconfigure.debug_mode = True |
---|
47 | import quintagroup.seoptimizer |
---|
48 | zcml.load_config('configure.zcml', quintagroup.seoptimizer) |
---|
49 | fiveconfigure.debug_mode = False |
---|
50 | ztc.installPackage(PROJECT_NAME) |
---|
51 | |
---|
52 | |
---|
53 | class Installed(NotInstalled): |
---|
54 | """ Install product into the portal |
---|
55 | """ |
---|
56 | @classmethod |
---|
57 | def setUp(cls): |
---|
58 | app = ztc.app() |
---|
59 | portal = app[ptc_setup.portal_name] |
---|
60 | |
---|
61 | # Sets the local site/manager |
---|
62 | ptc_setup._placefulSetUp(portal) |
---|
63 | # Install PROJECT |
---|
64 | qi = getattr(portal, 'portal_quickinstaller', None) |
---|
65 | qi.installProduct(PROJECT_NAME) |
---|
66 | transaction.commit() |
---|
67 | |
---|
68 | @classmethod |
---|
69 | def tearDown(cls): |
---|
70 | ptc_setup._placefulTearDown() |
---|
71 | |
---|
72 | |
---|
73 | class MixinTestCase: |
---|
74 | |
---|
75 | def _getauth(self): |
---|
76 | # Fix authenticator for the form |
---|
77 | import re |
---|
78 | |
---|
79 | authenticator = self.portal.restrictedTraverse("@@authenticator") |
---|
80 | html = authenticator.authenticator() |
---|
81 | handle = re.search('value="(.*)"', html).groups()[0] |
---|
82 | return handle |
---|
83 | |
---|
84 | def beforeTearDown(self): |
---|
85 | getUtility(IRAMCache).invalidateAll() |
---|
86 | |
---|
87 | |
---|
88 | class TestCase(MixinTestCase, ptc.PloneTestCase): |
---|
89 | layer = Installed |
---|
90 | |
---|
91 | class TestCaseNotInstalled(MixinTestCase, ptc.PloneTestCase): |
---|
92 | layer = NotInstalled |
---|
93 | |
---|
94 | |
---|
95 | class FunctionalTestCase(MixinTestCase, ptc.FunctionalTestCase): |
---|
96 | layer = Installed |
---|
97 | |
---|
98 | class FunctionalTestCaseNotInstalled(MixinTestCase, ptc.FunctionalTestCase): |
---|
99 | layer = NotInstalled |
---|