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): |
---|
27 | self.assertEqual(self.sp.getProperty('settings_use_keywords_sg', 0), 1) |
---|
28 | self.assertEqual(self.sp.getProperty('settings_use_keywords_lg', 0), 1) |
---|
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 | |
---|
90 | def setup_testing_render_keywords(self, html='<p>global local subject</p>'): |
---|
91 | self.my_doc.setText(html) |
---|
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_default_values_filter_keywords_by_content_in_configlet(self): |
---|
139 | self.assertEqual(self.sp.getProperty('filter_keywords_by_content', None), True) |
---|
140 | |
---|
141 | def test_changes_filter_keywords_by_content_in_configlet(self): |
---|
142 | path = self.portal.id+'/@@seo-controlpanel?filter_keywords_by_content=False&form.submitted=1' |
---|
143 | self.publish(path, self.basic_auth) |
---|
144 | self.assertEqual(self.sp.getProperty('filter_keywords_by_content', 0), None) |
---|
145 | |
---|
146 | def test_filter_keywords_by_content_true(self): |
---|
147 | # Usage metatags keywords, which present in content (filter_keywords_by_content=True) |
---|
148 | self.sp.manage_changeProperties(settings_use_keywords_sg=3, settings_use_keywords_lg=2, filter_keywords_by_content=True) |
---|
149 | self.html = self.setup_testing_render_keywords(html='<p>subject global</p>') |
---|
150 | m = re.match('.*(<meta\s+(?:(?:name="keywords"\s*)|(?:content="(?:subject|global),\s*(?:subject|global)"\s*)){2}/>)', |
---|
151 | self.html, re.S|re.M) |
---|
152 | self.assert_(m, "In metatags keywords not finded \"subject, global\". Checkbox filter_keywords_by_content in configlet is not working.") |
---|
153 | |
---|
154 | def test_filter_keywords_by_content_false(self): |
---|
155 | # Usage metatags keywords, without taking into consideration presece in content (filter_keywords_by_content=False) |
---|
156 | self.sp.manage_changeProperties(settings_use_keywords_sg=3, settings_use_keywords_lg=2, filter_keywords_by_content=False) |
---|
157 | self.html = self.setup_testing_render_keywords(html='<p>subject global</p>') |
---|
158 | m = re.match('.*(<meta\s+(?:(?:name="keywords"\s*)|(?:content="(?:subject|global|local),\s*(?:subject|global|local),\s*(?:subject|global|local)"\s*)){2}/>)', |
---|
159 | self.html, re.S|re.M) |
---|
160 | self.assert_(m, "In metatags keywords not finded \"subject, global, locals\". Checkbox filter_keywords_by_content in configlet is not working.") |
---|
161 | |
---|
162 | def test_suite(): |
---|
163 | from unittest import TestSuite, makeSuite |
---|
164 | suite = TestSuite() |
---|
165 | suite.addTest(makeSuite(TestUsageKeywords)) |
---|
166 | return suite |
---|