source: products/quintagroup.plonegooglesitemaps/branches/test_refactoring/quintagroup/plonegooglesitemaps/tests/testSitemaps.py @ 2533

Last change on this file since 2533 was 2533, checked in by mylan, 14 years ago

#206: added workflow vocabularies tests for SitemapTypes?

  • Property svn:eol-style set to native
File size: 9.8 KB
Line 
1#
2# Tests related to general Sitemap type.
3#
4from base import *
5from Products.Archetypes import atapi
6from Products.CMFPlone.utils import _createObjectByType
7
8
9class TestSitemapType(FunctionalTestCase):
10
11    def afterSetUp(self):
12        super(TestSitemapType, self).afterSetUp()
13        self.auth = 'admin:admin'
14        self.contentSM = _createObjectByType('Sitemap', self.portal, id='google-sitemaps')
15        self.portal.portal_membership.addMember('admin', 'admin', ('Manager',), [])
16
17    def testFields(self):
18        field_ids = map(lambda x:x.getName(), self.contentSM.Schema().fields())
19        # test old Sitemap settings fields
20        self.assert_('id' in field_ids)
21        self.assert_('portalTypes' in field_ids)
22        self.assert_('states' in field_ids)
23        self.assert_('blackout_list' in field_ids)
24        self.assert_('urls' in field_ids)
25        self.assert_('pingTransitions' in field_ids)
26        # test new sitemap type field
27        self.assert_('sitemapType' in field_ids)
28
29    def testSitemapTypes(self):
30        sitemap_types = self.contentSM.getField('sitemapType').Vocabulary().keys()
31        self.assert_('content' in sitemap_types)
32        self.assert_('mobile' in sitemap_types)
33        self.assert_('news' in sitemap_types)
34
35    def testAutoSetLayout(self):
36        response = self.publish('/%s/createObject?type_name=Sitemap' % \
37                                self.portal.absolute_url(1), basic=self.auth)
38        location = response.getHeader('location')
39        newurl = location[location.find('/'+self.portal.absolute_url(1)):]
40
41        msm_id = 'mobile_sitemap'
42        form = {'id': msm_id,
43                'sitemapType':'mobile',
44                'portalTypes':['Document',],
45                'states':['published'],
46                'form_submit':'Save',
47                'form.submitted':1,
48                }
49        post_data = StringIO(urlencode(form))
50        response = self.publish(newurl, request_method='POST', stdin=post_data, basic=self.auth)
51        msitemap = getattr(self.portal, msm_id)
52
53        self.assertEqual(msitemap.defaultView(), 'mobile-sitemap.xml')
54
55    def txestPingSetting(self):
56        pwf = self.portal.portal_workflow['plone_workflow']
57        self.assertEqual(self.contentSM.getPingTransitions(), ())
58
59        self.contentSM.setPingTransitions(('plone_workflow#publish',))
60        self.assertEqual(self.contentSM.getPingTransitions(), ('plone_workflow#publish',))
61        self.assert_(ping_googlesitemap in pwf.scripts.keys(),"Not add wf script")
62
63    def testWorkflowStates(self):
64        wfstates = self.contentSM.getWorkflowStates()
65        self.assertEqual(isinstance(wfstates, atapi.DisplayList), True)
66        self.assertEqual("published" in wfstates.keys(), True)
67
68    def testWorkflowStates(self):
69        wftrans = self.contentSM.getWorkflowTransitions()
70        self.assertEqual(isinstance(wftrans, atapi.DisplayList), True)
71        self.assertEqual("simple_publication_workflow#publish" in wftrans.keys(), True)
72
73
74class TestSettings(FunctionalTestCase):
75
76    def afterSetUp(self):
77        super(TestSettings, self).afterSetUp()
78
79        self.workflow = self.portal.portal_workflow
80        self.gsm_props = self.portal.portal_properties['googlesitemap_properties']
81        self.auth = 'admin:admin'
82        self.contentSM = _createObjectByType('Sitemap', self.portal, id='google-sitemaps')
83
84        self.sitemapUrl = '/'+self.portal.absolute_url(1) + '/google-sitemaps'
85
86        self.portal.portal_membership.addMember('admin', 'admin', ('Manager',), [])
87
88        # Add testing document to portal
89        my_doc = self.portal.invokeFactory('Document', id='my_doc')
90        self.my_doc = self.portal['my_doc']
91        self.my_doc.edit(text_format='plain', text='hello world')
92        self.my_doc_url = self.my_doc.absolute_url()
93
94    def testMetaTypeToDig(self):
95        self.workflow.doActionFor(self.my_doc, 'publish')
96        sitemap = self.publish(self.sitemapUrl, self.auth).getBody()
97        self.assert_(hasURL(sitemap, self.my_doc_url))
98
99        self.contentSM.setPortalTypes([])
100
101        sitemap = self.publish(self.sitemapUrl, self.auth).getBody()
102        self.assert_(not hasURL(sitemap, self.my_doc_url))
103
104        self.contentSM.setPortalTypes(['Document'])
105
106        sitemap = self.publish(self.sitemapUrl, self.auth).getBody()
107        self.assert_(hasURL(sitemap, self.my_doc_url))
108
109    def testStates(self):
110        self.workflow.doActionFor(self.my_doc, 'publish')
111        self.contentSM.setStates(['visible'])
112
113        sitemap = self.publish(self.sitemapUrl, self.auth).getBody()
114        self.assert_(not hasURL(sitemap, self.my_doc_url))
115
116        self.contentSM.setStates(['published'])
117
118        sitemap = self.publish(self.sitemapUrl, self.auth).getBody()
119        self.assert_(hasURL(sitemap, self.my_doc_url))
120
121    def test_blackout_entries(self):
122        self.workflow.doActionFor(self.my_doc, 'publish')
123        self.contentSM.setBlackout_list((self.my_doc.getId(),))
124
125        sitemap = self.publish(self.sitemapUrl, self.auth).getBody()
126        self.assert_(not hasURL(sitemap, self.my_doc_url))
127
128        self.contentSM.setBlackout_list([])
129        sitemap = self.publish(self.sitemapUrl, self.auth).getBody()
130        self.assert_(hasURL(sitemap, self.my_doc_url))
131
132    def test_regexp(self):
133        self.workflow.doActionFor(self.my_doc, 'publish')
134        sitemap = self.publish(self.sitemapUrl, self.auth).getBody()
135        self.assert_(not hasURL(sitemap, self.portal.absolute_url()))
136
137        regexp = "s/\/%s//"%self.my_doc.getId()
138        self.contentSM.setReg_exp([regexp])
139
140        sitemap = self.publish(self.sitemapUrl, self.auth).getBody()
141        self.assert_(hasURL(sitemap, self.portal.absolute_url()))
142
143    def test_add_urls(self):
144        self.contentSM.setUrls(['http://w1', 'w2', '/w3'])
145        w1_url = 'http://w1'
146        w2_url = self.portal.absolute_url() + '/w2'
147        w3_url = self.portal.getPhysicalRoot().absolute_url() + '/w3'
148        sitemap = self.publish(self.sitemapUrl, self.auth).getBody()
149
150        self.assert_(hasURL(sitemap, w1_url))
151        self.assert_(hasURL(sitemap, w2_url))
152        self.assert_(hasURL(sitemap, w3_url))
153
154
155class TestPinging(FunctionalTestCase):
156
157    def afterSetUp(self):
158        super(TestPinging, self).afterSetUp()
159
160        self.workflow = self.portal.portal_workflow
161        self.workflow.setChainForPortalTypes(pt_names=('News Item','Document'),
162                                             chain="simple_publication_workflow")
163        self.gsm_props = self.portal.portal_properties['googlesitemap_properties']
164        self.auth = 'admin:admin'
165        self.portal.portal_membership.addMember('admin', 'admin', ('Manager',), [])
166        # Add sitemaps
167        self.contentSM = _createObjectByType('Sitemap', self.portal, id='google-sitemaps')
168        self.contentSM.setPingTransitions(('simple_publication_workflow#publish',))
169        self.newsSM = _createObjectByType('Sitemap', self.portal, id='news-sitemaps')
170        self.newsSM.setPortalTypes(('News Item','Document'))
171        self.newsSM.setPingTransitions(('simple_publication_workflow#publish',))
172        self.sitemapUrl = '/'+self.portal.absolute_url(1) + '/google-sitemaps'
173        # Add testing document to portal
174        my_doc = self.portal.invokeFactory('Document', id='my_doc')
175        self.my_doc = self.portal['my_doc']
176        my_news = self.portal.invokeFactory('News Item', id='my_news')
177        self.my_news = self.portal['my_news']
178
179    def testAutomatePinging(self):
180        # 1. Check for pinging both sitemaps
181        back_out, myout = sys.stdout, StringIO()
182        sys.stdout = myout
183        try:
184            self.workflow.doActionFor(self.my_doc, 'publish')
185            myout.seek(0)
186            data = myout.read()
187        finally:
188            sys.stdout = back_out
189
190        self.assert_('Pinged %s sitemap to Google' % self.contentSM.absolute_url() in data,
191                     "Not pinged %s: '%s'" % (self.contentSM.id, data))
192        self.assert_('Pinged %s sitemap to Google' % self.newsSM.absolute_url() in data,
193                     "Not pinged %s: '%s'" % (self.newsSM.id, data))
194
195        # 2. Check for pinging only news-sitemap sitemaps
196        back_out, myout = sys.stdout, StringIO()
197        sys.stdout = myout
198        try:
199            self.workflow.doActionFor(self.my_news, 'publish')
200            myout.seek(0)
201            data = myout.read()
202        finally:
203            sys.stdout = back_out
204
205        self.assert_('Pinged %s sitemap to Google' % self.newsSM.absolute_url() in data,
206                     "Not pinged %s: '%s'" % (self.newsSM.id, data))
207        self.assert_(not 'Pinged %s sitemap to Google' % self.contentSM.absolute_url() in data,
208                     "Pinged %s on news: '%s'" % (self.contentSM.id, data))
209
210    def testPingingWithSetupForm(self):
211        # Ping news and content sitemaps
212        formUrl = '/'+self.portal.absolute_url(1) + '/prefs_gsm_settings'
213        qs = 'smselected:list=%s&smselected:list=%s&form.button.Ping=1&form.submitted=1' % \
214             (self.contentSM.id, self.newsSM.id)
215
216        back_out, myout = sys.stdout, StringIO()
217        sys.stdout = myout
218        try:
219            response = self.publish("%s?%s" % (formUrl, qs), basic=self.auth)
220            myout.seek(0)
221            data = myout.read()
222        finally:
223            sys.stdout = back_out
224
225        self.assert_('Pinged %s sitemap to Google' % self.contentSM.absolute_url() in data,
226                     "Not pinged %s: '%s'" % (self.contentSM.id, data))
227        self.assert_('Pinged %s sitemap to Google' % self.newsSM.absolute_url() in data,
228                     "Not pinged %s: '%s'" % (self.newsSM.id, data))
229
230
231
232def test_suite():
233    from unittest import TestSuite, makeSuite
234    suite = TestSuite()
235    suite.addTest(makeSuite(TestSitemapType))
236    suite.addTest(makeSuite(TestSettings))
237    suite.addTest(makeSuite(TestPinging))
238    return suite
239
240if __name__ == '__main__':
241    unittest.main(defaultTest='test_suite')
242#    framework()
Note: See TracBrowser for help on using the repository browser.