source: products/qSEOptimizer/tags/0.3.2rc2/tests/testQSEOptimizer.py @ 1

Last change on this file since 1 was 1, checked in by myroslav, 18 years ago

Building directory structure

File size: 9.0 KB
Line 
1#
2# Test installation script
3#
4
5import os, sys, string
6if __name__ == '__main__':
7    execfile(os.path.join(sys.path[0], 'framework.py'))
8
9from Products.PloneTestCase import PloneTestCase
10from Products.CMFCore.utils import getToolByName
11from Products.CMFQuickInstallerTool.InstalledProduct import InstalledProduct
12from Products.CMFCore.CMFCorePermissions import ManagePortal
13from AccessControl.SecurityManagement import newSecurityManager, noSecurityManager
14import re
15
16configlets = ({'id':'qSEOptimizer',
17    'name':'Search Engine Optimizer',
18    'action':'string:${portal_url}/prefs_qseo_setup_form',
19    'condition':'',
20    'category':'Products',
21    'visible':1,
22    'appId':'qSEOptimizer',
23    'permission':ManagePortal},)
24
25PRODUCT = 'qSEOptimizer'
26qSEO_CONTENT = ['File','Document','News Item','BlogEntry']
27qSEO_FOLDER  = []
28qSEO_TYPES   = qSEO_CONTENT + qSEO_FOLDER
29
30PloneTestCase.installProduct(PRODUCT)
31PloneTestCase.setupPloneSite()
32
33
34class TestInstallation(PloneTestCase.PloneTestCase):
35
36    def afterSetUp(self):
37        self.qi = self.portal.portal_quickinstaller
38        self.qi.installProduct(PRODUCT)
39
40    def test_configlet_install(self):
41        configTool = getToolByName(self.portal, 'portal_controlpanel', None)
42        self.assert_(PRODUCT in [a.getId() for a in configTool.listActions()], 'Configlet not found')
43
44    def test_actions_install(self):
45        portal_types = getToolByName(self.portal, 'portal_types')
46        for ptype in portal_types.objectValues():
47            action = ptype.getActionById('seo_properties', default=None )
48            if ptype.getId() in qSEO_TYPES:
49                self.assert_(action, 'Action for %s not found' % ptype.getId())
50            else:
51                self.assert_(not action, 'Action found for %s' % ptype.getId())
52
53    def test_skins_install(self):
54        skinstool=getToolByName(self.portal, 'portal_skins') 
55
56        for skin in skinstool.getSkinSelections():
57            path = skinstool.getSkinPath(skin)
58            path = map( string.strip, string.split( path,',' ) )
59            self.assert_(PRODUCT in path, 'qSEOptimizer layer not found in %s' %skin)
60
61    def test_versionedskin_install(self):
62        skinstool=getToolByName(self.portal, 'portal_skins')
63        mtool = getToolByName(self.portal, 'portal_migration')
64        plone_version = mtool.getFileSystemVersion()
65
66        for skin in skinstool.getSkinSelections():
67            path = skinstool.getSkinPath(skin)
68            path = map( string.strip, string.split( path,',' ) )
69            self.assert_(PRODUCT+'/%s' % plone_version in path, 'qSEOptimizer versioned layer not found in %s' %skin)
70
71    def test_actions_uninstall(self):
72        self.qi.uninstallProducts([PRODUCT])
73        self.assertNotEqual(self.qi.isProductInstalled(PRODUCT), True,'qSEOptimizer is already installed')
74        portal_types = getToolByName(self.portal, 'portal_types')
75        for ptype in portal_types.objectValues():
76            action = ptype.getActionById('seo_properties', default=None )
77            self.assert_(not action, 'Action for %s found after uninstallation' % ptype.getId())
78
79    def test_skins_uninstall(self):
80        self.qi.uninstallProducts([PRODUCT])
81        self.assertNotEqual(self.qi.isProductInstalled(PRODUCT), True,'qSEOptimizer is already installed')
82        skinstool=getToolByName(self.portal, 'portal_skins') 
83
84        for skin in skinstool.getSkinSelections():
85            path = skinstool.getSkinPath(skin)
86            path = map( string.strip, string.split( path,',' ) )
87            self.assert_(not PRODUCT in path, 'qSEOptimizer layer found in %s after uninstallation' %skin)
88
89    def test_versionedskin_uninstall(self):
90        self.qi.uninstallProducts([PRODUCT])
91        self.assertNotEqual(self.qi.isProductInstalled(PRODUCT), True,'qSEOptimizer is already installed')
92        skinstool=getToolByName(self.portal, 'portal_skins')
93        mtool = getToolByName(self.portal, 'portal_migration')
94        plone_version = mtool.getFileSystemVersion()
95
96        for skin in skinstool.getSkinSelections():
97            path = skinstool.getSkinPath(skin)
98            path = map( string.strip, string.split( path,',' ) )
99            self.assert_(not PRODUCT+'/%s' % plone_version in path, 'qSEOptimizer versioned layer found in %s after uninstallation' %skin)
100
101    def test_configlet_uninstall(self):
102        self.qi.uninstallProducts([PRODUCT])
103        self.assertNotEqual(self.qi.isProductInstalled(PRODUCT), True,'qSEOptimizer is already installed')
104
105        configTool = getToolByName(self.portal, 'portal_controlpanel', None)
106        self.assert_(not PRODUCT in [a.getId() for a in configTool.listActions()], 'Configlet found after uninstallation')
107
108class TestResponse(PloneTestCase.FunctionalTestCase):
109
110    def afterSetUp(self):
111        self.qi = self.portal.portal_quickinstaller
112        self.qi.installProduct(PRODUCT)
113        self.portal.changeSkin('Plone Default')
114
115        self.basic_auth = 'mgr:mgrpw'
116        self.loginAsPortalOwner()
117
118        '''Preparation for functional testing'''
119        my_doc = self.portal.invokeFactory('Document', id='my_doc')
120        my_doc = self.portal['my_doc']
121
122        my_doc.qseo_properties_edit(title='hello world', description='it is description',
123                                    keywords='my1|key2', html_comment='no comments',
124                                    robots='ALL', distribution='Global', title_override=1,
125                                    description_override=1, keywords_override=1,
126                                    html_comment_override=1, robots_override=1,
127                                    distribution_override=1)
128
129        self.html = str(self.publish(self.portal.id+'/my_doc', self.basic_auth))
130
131    def testTitle(self):
132        m = re.match('.*<title>\\s*hello world\\s*</title>', self.html, re.S|re.M)
133        self.assert_(m, 'Title not set in')
134
135    def testDescription(self):
136        m = re.match('.*<meta content="it is description" name="description" />', self.html, re.S|re.M)
137        self.assert_(m, 'Description not set in')
138
139    def testKeywords(self):
140        m = re.match('.*<meta content="my1|key2" name="keywords" />', self.html, re.S|re.M)
141        self.assert_(m, 'Keywords not set in')
142
143    def testRobots(self):
144        m = re.match('.*<meta content="ALL" name="robots" />', self.html, re.S|re.M)
145        self.assert_(m, 'Robots not set in')
146
147    def testDistribution(self):
148        m = re.match('.*<meta content="Global" name="distribution" />', self.html, re.S|re.M)
149        self.assert_(m, 'Distribution not set in')
150
151    def testHTMLComments(self):
152        m = re.match('.*<!--\\s*no comments\\s*-->', self.html, re.S|re.M)
153        self.assert_(m, 'Comments not set in')
154
155class TestExposeDCMetaTags(PloneTestCase.FunctionalTestCase):
156
157    def afterSetUp(self):
158        self.qi = self.portal.portal_quickinstaller
159        self.sp = self.portal.portal_properties.site_properties
160        self.qi.installProduct(PRODUCT)
161        self.portal.changeSkin('Plone Default')
162
163        self.basic_auth = 'portal_manager:secret'
164        uf = self.app.acl_users
165        uf.userFolderAddUser('portal_manager', 'secret', ['Manager'], [])
166        user = uf.getUserById('portal_manager')
167        if not hasattr(user, 'aq_base'):
168            user = user.__of__(uf)
169        newSecurityManager(None, user)
170
171        '''Preparation for functional testing'''
172        self.my_doc = self.portal.invokeFactory('Document', id='my_doc')
173        self.my_doc = self.portal['my_doc']
174
175    def test_exposeDCMetaTags_in_configletOn(self):
176        path = self.portal.id+'/prefs_qseo_setup?exposeDCMetaTags=on'
177        self.publish(path, self.basic_auth)
178        self.assert_(self.sp.exposeDCMetaTags)
179
180    def test_exposeDCMetaTags_in_configletOff(self):
181        self.publish(self.portal.id+'/prefs_qseo_setup', self.basic_auth)
182        self.assert_(not self.sp.exposeDCMetaTags)
183
184    def test_exposeDCMetaTagsPropertyOff(self):
185        self.sp.manage_changeProperties(exposeDCMetaTags = False)
186
187        self.my_doc.qseo_properties_edit()
188        self.html = str(self.publish(self.portal.id+'/my_doc', self.basic_auth))
189
190        m = re.match('.*<meta content=".*?" name="DC.format" />', self.html, re.S|re.M) or re.match('.*<meta content=".*?" name="DC.distribution" />', self.html, re.S|re.M)
191        self.assert_(not m, 'DC meta tags avaliable when exposeDCMetaTags=False')
192
193    def test_exposeDCMetaTagsPropertyOn(self):
194        self.sp.manage_changeProperties(exposeDCMetaTags = True)
195
196        self.my_doc.qseo_properties_edit()
197        self.html = str(self.publish(self.portal.id+'/my_doc', self.basic_auth))
198
199        m = re.match('.*<meta content=".*?" name="DC.format" />', self.html, re.S|re.M) and re.match('.*<meta content=".*?" name="DC.distribution" />', self.html, re.S|re.M)
200
201        self.assert_(m, 'DC meta tags not avaliable when createManager=True')
202
203TESTS = [TestInstallation, TestResponse, TestExposeDCMetaTags]
204
205def test_suite():
206    from unittest import TestSuite, makeSuite
207    suite = TestSuite()
208    suite.addTest(makeSuite(TestInstallation))
209    suite.addTest(makeSuite(TestResponse))
210    suite.addTest(makeSuite(TestExposeDCMetaTags))
211    return suite
212
213if __name__ == '__main__':
214    framework()
215
Note: See TracBrowser for help on using the repository browser.