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

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

#203: added overrides.zcml for BBB and test for #19 and #22 related issues from plone.org

File size: 4.2 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
105def test_suite():
106    from unittest import TestSuite, makeSuite
107    suite = TestSuite()
108    suite.addTest(makeSuite(TestBugs))
109    return suite
Note: See TracBrowser for help on using the repository browser.