source: products/quintagroup.seoptimizer/trunk/quintagroup/seoptimizer/tests/testBugs.py @ 2249

Last change on this file since 2249 was 2249, checked in by crchemist, 14 years ago

fix for #204

File size: 5.3 KB
Line 
1import urllib
2from cStringIO import StringIO
3
4from OFS.interfaces import ITraversable
5
6from zope.component import providedBy
7from zope.component import getGlobalSiteManager
8from zope.component import queryAdapter, getMultiAdapter
9from zope.interface import directlyProvides
10from zope.viewlet.interfaces import IViewlet, IViewletManager
11from zope.publisher.browser import TestRequest
12
13from quintagroup.seoptimizer.browser.interfaces import IPloneSEOLayer
14from quintagroup.canonicalpath.interfaces import ICanonicalLink
15from quintagroup.canonicalpath.adapters import DefaultCanonicalLinkAdapter
16from base import *
17
18
19class TestBugs(FunctionalTestCase):
20
21    def afterSetUp(self):
22        self.basic_auth = ':'.join((portal_owner,default_password))
23        self.loginAsPortalOwner()
24        # prepare test document
25        my_doc = self.portal.invokeFactory('Document', id='my_doc')
26        self.my_doc = self.portal['my_doc']
27        self.mydoc_path = "/%s" % self.my_doc.absolute_url(1)
28
29    def test_modification_date(self):
30        """ Modification date changing on SEO properties edit """
31        form_data = {'seo_title': 'New Title',
32                     'seo_title_override:int': 1,
33                     'form.submitted:int': 1}
34
35        md_before = self.my_doc.modification_date
36        self.publish(path=self.mydoc_path+'/@@seo-context-properties',
37                     basic=self.basic_auth, request_method='POST',
38                     stdin=StringIO(urllib.urlencode(form_data)))
39        md_after = self.my_doc.modification_date
40
41        self.assertNotEqual(md_before, md_after)
42
43    def test_bug_20_at_plone_org(self):
44        portal = self.portal
45        fp = portal['front-page']
46        request = portal.REQUEST
47        view = portal.restrictedTraverse('@@plone')
48
49        manager = getMultiAdapter((fp, request, view), IViewletManager,
50                        name=u'plone.htmlhead')
51        viewlet = getMultiAdapter((fp, request, view, manager), IViewlet,
52                        name=u'plone.htmlhead.title')
53        viewlet.update()
54        old_title = viewlet.render()
55
56        # add IPloneSEOLayer
57        directlyProvides(request, IPloneSEOLayer)
58
59        viewlet = getMultiAdapter((fp, request, view, manager), IViewlet,
60                        name=u'plone.htmlhead.title')
61        viewlet.update()
62        new_title = viewlet.render()
63
64        self.assertEqual(old_title, new_title)
65
66    def test_bug_22_at_plone_org(self):
67        """If ICanonicalLink adapter is not found for the context object
68           - page rendering should not break, but only canonical link
69           should disappear.
70        """
71        curl = re.compile('<link\srel\s*=\s*"canonical"\s+' \
72                         '[^>]*href\s*=\s*\"([^\"]*)\"[^>]*>', re.S|re.M)
73        # When adapter registered for the object - canoncal link present on the page
74        self.assertNotEqual( queryAdapter(self.my_doc, ICanonicalLink), None)
75
76        res = self.publish(path=self.mydoc_path, basic=self.basic_auth)
77        self.assertNotEqual(curl.search(res.getBody()), None)
78
79        # Now remove adapter from the registry -> this should :
80        #     - not break page on rendering;
81        #     - canonical link will be absent on the page
82        gsm = getGlobalSiteManager()
83        gsm.unregisterAdapter(DefaultCanonicalLinkAdapter, [ITraversable,],
84                              ICanonicalLink)
85        self.assertEqual( queryAdapter(self.my_doc, ICanonicalLink), None)
86
87        res = self.publish(path=self.mydoc_path, basic=self.basic_auth)
88        self.assertEqual(curl.search(res.getBody()), None)
89
90        # register adapter back in the global site manager
91        gsm.registerAdapter(DefaultCanonicalLinkAdapter, [ITraversable,],
92                            ICanonicalLink)
93
94
95    def test_bug_19_23_at_plone_org(self):
96        """overrides.zcml should present in the root of the package"""
97        import quintagroup.seoptimizer
98        try:
99            zcml.load_config('overrides.zcml', quintagroup.seoptimizer)
100        except IOError:
101            self.fail("overrides.zcml removed from the package root")
102
103
104    def test_bug_24_at_plone_org(self):
105        member_id = 'test_member'
106        editor_id = 'test_editor'
107        test_pswd = 'pswd'
108        uf = self.portal.acl_users
109        uf.userFolderAddUser(member_id, test_pswd,
110                        ['Member'], [])
111        uf.userFolderAddUser(editor_id, test_pswd,
112                        ['Member','Editor'], [])
113
114        member_auth = '%s:%s'%(member_id, test_pswd)
115        editor_auth = '%s:%s'%(editor_id, test_pswd)
116
117        portal_url = '/'.join(self.portal.getPhysicalPath())
118
119        resp = self.publish(path=portal_url, basic=member_auth)
120        self.assertEqual(resp.getStatus(), 200)
121
122        # This fails, althought must pass
123        resp = self.publish(path=portal_url, basic=editor_auth)
124        self.assertEqual(resp.getStatus(), 200)
125
126    def test_seo_context_properties_perms(self):
127        # Anonymous are not allowed to access to @@seo-context-properties
128        self.portal.portal_workflow.doActionFor(self.my_doc, 'publish')
129        resp = self.publish(path=self.mydoc_path+'/@@seo-context-properties')
130        self.assertNotEqual(resp.getStatus(), 200)
131
132
133def test_suite():
134    from unittest import TestSuite, makeSuite
135    suite = TestSuite()
136    suite.addTest(makeSuite(TestBugs))
137    return suite
138
Note: See TracBrowser for help on using the repository browser.