[1646] | 1 | import urllib, re |
---|
| 2 | from Acquisition import aq_inner |
---|
| 3 | from base import getToolByName, FunctionalTestCase, newSecurityManager |
---|
| 4 | from config import * |
---|
| 5 | |
---|
| 6 | class TestUsageKeywords(FunctionalTestCase): |
---|
| 7 | |
---|
| 8 | def afterSetUp(self): |
---|
| 9 | self.qi = self.portal.portal_quickinstaller |
---|
| 10 | self.qi.installProduct(PROJECT_NAME) |
---|
| 11 | self.sp = self.portal.portal_properties.seo_properties |
---|
| 12 | self.pu = self.portal.plone_utils |
---|
| 13 | |
---|
| 14 | self.basic_auth = 'portal_manager:secret' |
---|
| 15 | uf = self.app.acl_users |
---|
| 16 | uf.userFolderAddUser('portal_manager', 'secret', ['Manager'], []) |
---|
| 17 | user = uf.getUserById('portal_manager') |
---|
| 18 | if not hasattr(user, 'aq_base'): |
---|
| 19 | user = user.__of__(uf) |
---|
| 20 | newSecurityManager(None, user) |
---|
| 21 | |
---|
| 22 | '''Preparation for functional testing''' |
---|
| 23 | self.my_doc = self.portal.invokeFactory('Document', id='my_doc') |
---|
| 24 | self.my_doc = self.portal['my_doc'] |
---|
| 25 | |
---|
| 26 | def test_default_values_radiobutton_in_configlet(self): |
---|
[1662] | 27 | self.assertEqual(self.sp.getProperty('settings_use_keywords_sg', 0), 3) |
---|
| 28 | self.assertEqual(self.sp.getProperty('settings_use_keywords_lg', 0), 2) |
---|
[1646] | 29 | |
---|
| 30 | def test_changes_using_keywords_in_configlet(self): |
---|
| 31 | for sg, lg in ((1, 1), (1, 2), (2, 1), (2, 2), (3, 1), (3, 2)): |
---|
| 32 | path = self.portal.id+'/@@seo-controlpanel?settingsUseKeywordsSG=%s'\ |
---|
| 33 | '&settingsUseKeywordsLG=%s&form.submitted=1' % (sg, lg) |
---|
| 34 | self.publish(path, self.basic_auth) |
---|
| 35 | self.assertEqual(self.sp.getProperty('settings_use_keywords_sg', 0), sg) |
---|
| 36 | self.assertEqual(self.sp.getProperty('settings_use_keywords_lg', 0), lg) |
---|
| 37 | |
---|
| 38 | def test_additional_keywords_in_configlet(self): |
---|
| 39 | quoted_keywords = urllib.quote('foo\nbar') |
---|
| 40 | path = self.portal.id+'/@@seo-controlpanel?additionalKeywords:lines=%s&form.submitted=1'%quoted_keywords |
---|
| 41 | self.publish(path, self.basic_auth) |
---|
| 42 | self.assertEqual(self.sp.additional_keywords, ('foo', 'bar')) |
---|
| 43 | self.publish(self.portal.id+'/@@seo-controlpanel?form.submitted=1', self.basic_auth) |
---|
| 44 | self.assertEqual(self.sp.additional_keywords, ()) |
---|
| 45 | |
---|
| 46 | def test_listMetaTags_empty(self): |
---|
| 47 | metatags = self.pu.listMetaTags(self.my_doc) |
---|
| 48 | self.assert_('keywords' not in metatags) |
---|
| 49 | |
---|
| 50 | def test_listMetaTags_one(self): |
---|
| 51 | self.my_doc.setText('<p>foo</p>') |
---|
| 52 | self.sp.manage_changeProperties(settings_use_keywords_sg=3, settings_use_keywords_lg=2) |
---|
| 53 | self.my_doc.manage_addProperty('qSEO_keywords', ('foo',), 'lines') |
---|
| 54 | self.html = str(self.publish(self.portal.id+'/my_doc', self.basic_auth)) |
---|
| 55 | m = re.match('.*(<meta\s+(?:(?:name="keywords"\s*)|(?:content="foo"\s*)){2}/>)', self.html, re.S|re.M) |
---|
| 56 | self.assert_(m, "No 'foo' keyword find") |
---|
| 57 | |
---|
| 58 | def test_listMetaTags_two(self): |
---|
| 59 | self.my_doc.setText('<p>foo bar</p>') |
---|
| 60 | self.sp.manage_changeProperties(settings_use_keywords_sg=3, settings_use_keywords_lg=2) |
---|
| 61 | self.my_doc.manage_addProperty('qSEO_keywords', ('foo', 'bar'), 'lines') |
---|
| 62 | self.html = str(self.publish(self.portal.id+'/my_doc', self.basic_auth)) |
---|
| 63 | m = re.match('.*(<meta\s+(?:(?:name="keywords"\s*)|(?:content="(?:foo|bar),\s*(?:foo|bar)"\s*)){2}/>)', |
---|
| 64 | self.html, re.S|re.M) |
---|
| 65 | self.assert_(m, "No 'foo, bar' keyword find") |
---|
| 66 | |
---|
| 67 | def test_additional_keywords_in_listMetaTags_empty(self): |
---|
| 68 | self.sp.manage_changeProperties(settings_use_keywords_sg=3, settings_use_keywords_lg=2) |
---|
| 69 | self.sp.additional_keywords = ('foo',) |
---|
| 70 | metatags = self.pu.listMetaTags(self.my_doc) |
---|
| 71 | self.assert_('keywords' not in metatags) |
---|
| 72 | |
---|
| 73 | def test_additional_keywords_in_listMetaTags_one(self): |
---|
| 74 | self.my_doc.setText('<p>foo</p>') |
---|
| 75 | self.sp.manage_changeProperties(settings_use_keywords_sg=3, settings_use_keywords_lg=2) |
---|
| 76 | self.sp.additional_keywords = ('foo',) |
---|
| 77 | self.html = str(self.publish(self.portal.id+'/my_doc', self.basic_auth)) |
---|
| 78 | m = re.match('.*(<meta\s+(?:(?:name="keywords"\s*)|(?:content="foo"\s*)){2}/>)', self.html, re.S|re.M) |
---|
| 79 | self.assert_(m, "No 'foo' keyword find") |
---|
| 80 | |
---|
| 81 | def test_additional_keywords_in_listMetaTags_two(self): |
---|
| 82 | self.my_doc.setText('<p>foo bar</p>') |
---|
| 83 | self.sp.manage_changeProperties(settings_use_keywords_sg=3, settings_use_keywords_lg=2) |
---|
| 84 | self.sp.additional_keywords = ('foo', 'bar') |
---|
| 85 | self.html = str(self.publish(self.portal.id+'/my_doc', self.basic_auth)) |
---|
| 86 | m = re.match('.*(<meta\s+(?:(?:name="keywords"\s*)|(?:content="(?:foo|bar),\s*(?:foo|bar)"\s*)){2}/>)', |
---|
| 87 | self.html, re.S|re.M) |
---|
| 88 | self.assert_(m, "No 'foo, bar' keyword find") |
---|
| 89 | |
---|
[1647] | 90 | def setup_testing_render_keywords(self, html='<p>global local subject</p>'): |
---|
| 91 | self.my_doc.setText(html) |
---|
[1646] | 92 | self.sp.additional_keywords = (('global',)) |
---|
| 93 | self.my_doc.manage_addProperty('qSEO_keywords', ('local'), 'lines') |
---|
| 94 | aq_inner(self.my_doc).aq_explicit.setSubject('subject') |
---|
| 95 | html = str(self.publish(self.portal.id+'/my_doc', self.basic_auth)) |
---|
| 96 | return html |
---|
| 97 | |
---|
| 98 | def test_render_only_subject(self): |
---|
| 99 | self.sp.manage_changeProperties(settings_use_keywords_sg=1, settings_use_keywords_lg=1) |
---|
| 100 | self.html = self.setup_testing_render_keywords() |
---|
| 101 | m = re.match('.*(<meta\s+(?:(?:name="keywords"\s*)|(?:content="subject"\s*)){2}/>)', self.html, re.S|re.M) |
---|
| 102 | self.assert_(m, "No 'subject' keyword find") |
---|
| 103 | |
---|
| 104 | def test_render_subject_and_local_seokeywords(self): |
---|
| 105 | self.sp.manage_changeProperties(settings_use_keywords_sg=1, settings_use_keywords_lg=2) |
---|
| 106 | self.html = self.setup_testing_render_keywords() |
---|
| 107 | m = re.match('.*(<meta\s+(?:(?:name="keywords"\s*)|(?:content="(?:subject|local),\s*(?:subject|local)"\s*)){2}/>)', |
---|
| 108 | self.html, re.S|re.M) |
---|
| 109 | self.assert_(m, "No 'subject, local' keywords find") |
---|
| 110 | |
---|
| 111 | def test_render_only_global_seokeywords(self): |
---|
| 112 | self.sp.manage_changeProperties(settings_use_keywords_sg=2, settings_use_keywords_lg=1) |
---|
| 113 | self.html = self.setup_testing_render_keywords() |
---|
| 114 | m = re.match('.*(<meta\s+(?:(?:name="keywords"\s*)|(?:content="global"\s*)){2}/>)', self.html, re.S|re.M) |
---|
| 115 | self.assert_(m, "No 'global' keyword find") |
---|
| 116 | |
---|
| 117 | def test_render_global_and_local_seokeywords(self): |
---|
| 118 | self.sp.manage_changeProperties(settings_use_keywords_sg=2, settings_use_keywords_lg=2) |
---|
| 119 | self.html = self.setup_testing_render_keywords() |
---|
| 120 | m = re.match('.*(<meta\s+(?:(?:name="keywords"\s*)|(?:content="(?:global|local),\s*(?:global|local)"\s*)){2}/>)', |
---|
| 121 | self.html, re.S|re.M) |
---|
| 122 | self.assert_(m, "No 'global, local' keywords find") |
---|
| 123 | |
---|
| 124 | def test_render_subject_and_global_seokeywords(self): |
---|
| 125 | self.sp.manage_changeProperties(settings_use_keywords_sg=3, settings_use_keywords_lg=1) |
---|
| 126 | self.html = self.setup_testing_render_keywords() |
---|
| 127 | m = re.match('.*(<meta\s+(?:(?:name="keywords"\s*)|(?:content="(?:subject|global),\s*(?:subject|global)"\s*)){2}/>)', |
---|
| 128 | self.html, re.S|re.M) |
---|
| 129 | self.assert_(m, "No 'subject, global' keywords find") |
---|
| 130 | |
---|
| 131 | def test_render_subject_and_global_and_local_seokeywords(self): |
---|
| 132 | self.sp.manage_changeProperties(settings_use_keywords_sg=3, settings_use_keywords_lg=2) |
---|
| 133 | self.html = self.setup_testing_render_keywords() |
---|
| 134 | m = re.match('.*(<meta\s+(?:(?:name="keywords"\s*)|(?:content="(?:subject|global|local),\s*(?:subject|global|local),\s*(?:subject|global|local)"\s*)){2}/>)', |
---|
| 135 | self.html, re.S|re.M) |
---|
| 136 | self.assert_(m, "No 'subject, global, local' keywords find") |
---|
| 137 | |
---|
| 138 | def test_suite(): |
---|
| 139 | from unittest import TestSuite, makeSuite |
---|
| 140 | suite = TestSuite() |
---|
| 141 | suite.addTest(makeSuite(TestUsageKeywords)) |
---|
| 142 | return suite |
---|