source: products/quintagroup.seoptimizer/trunk/quintagroup/seoptimizer/tests/testCanonicalURL.py @ 1671

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

Added ICanonicalPath adapter and appropriate tests

  • Property svn:eol-style set to native
File size: 3.7 KB
Line 
1import re
2from zope.component import queryAdapter
3from Products.Archetypes.interfaces import IBaseContent
4
5from quintagroup.seoptimizer.interfaces import ICanonicalPath
6from base import getToolByName, FunctionalTestCase, newSecurityManager
7from config import *
8
9class TestCanonicalURL(FunctionalTestCase):
10
11    def afterSetUp(self):
12        self.qi = self.portal.portal_quickinstaller
13        self.qi.installProduct(PROJECT_NAME)
14        #self.portal.changeSkin('Plone Default')
15
16        self.basic_auth = 'portal_manager:secret'
17        uf = self.app.acl_users
18        uf.userFolderAddUser('portal_manager', 'secret', ['Manager'], [])
19        user = uf.getUserById('portal_manager')
20        if not hasattr(user, 'aq_base'):
21            user = user.__of__(uf)
22        newSecurityManager(None, user)
23
24        self.portal.invokeFactory('Document', id='mydoc')
25        self.mydoc = self.portal['mydoc']
26        self.mydoc_path = "/%s" % self.mydoc.absolute_url(1)
27        self.curl = re.compile('<link\srel\s*=\s*"canonical"\s+' \
28            '[^>]*href\s*=\s*\"([^\"]*)\"[^>]*>', re.S|re.M)
29
30
31    def test_CanonicalURL(self):
32        html = self.publish(self.mydoc_path, self.basic_auth).getBody()
33        foundcurls = self.curl.findall(html)
34        mydoc_url = self.mydoc.absolute_url()
35
36        self.assertTrue([1 for curl in foundcurls if curl==mydoc_url],
37           "Wrong CANONICAL URL for document: %s, all must be: %s" % (
38           foundcurls, mydoc_url))
39
40    def test_updateCanonicalURL(self):
41        mydoc_url_new = self.mydoc.absolute_url() + '.new'
42        # Update canonical url property
43        self.publish(self.mydoc_path + '/@@seo-context-properties?' \
44           'seo_canonical_override=checked&seo_canonical=%s&' \
45           'form.submitted=1' % mydoc_url_new, self.basic_auth)
46        # Test updated canonical url
47        html = self.publish(self.mydoc_path, self.basic_auth).getBody()
48        foundcurls = self.curl.findall(html)
49
50        qseo_url = self.mydoc.getProperty('qSEO_canonical','')
51        self.assertTrue(qseo_url == mydoc_url_new,
52           "Not set 'qSEO_canonical' property")
53        self.assertTrue([1 for curl in foundcurls if curl==mydoc_url_new],
54           "Wrong CANONICAL URL for document: %s, all must be: %s" % (
55           foundcurls, mydoc_url_new))
56
57    def test_canonicalAdapterRegistration(self):
58        canonical = queryAdapter(self.mydoc, interface=ICanonicalPath,
59            name='qseo_canonical')
60        self.assertTrue(canonical is not None,
61            "Not registered 'qseo_canonical' adapter")
62
63    def test_canonicalAdapter(self):
64        purl = getToolByName(self.portal, 'portal_url')
65        mydoc_path_rel = '/'+'/'.join(purl.getRelativeContentPath(self.mydoc))
66
67        canonical = queryAdapter(self.mydoc, ICanonicalPath, name='qseo_canonical')
68        cpath = canonical.canonical_path()
69        self.assertTrue(cpath == mydoc_path_rel,
70            "By canonical path adapter got: '%s', must be: '%s'" % (
71             cpath, mydoc_path_rel))
72       
73        # Update canonical url property
74        mydoc_url_new = self.mydoc.absolute_url() + '.new'
75        self.publish(self.mydoc_path + '/@@seo-context-properties?' \
76            'seo_canonical_override=checked&seo_canonical=%s' \
77            '&form.submitted=1' % mydoc_url_new, self.basic_auth)
78
79        mydoc_path_rel_new = mydoc_path_rel + '.new'
80        newcpath = canonical.canonical_path()
81        self.assertTrue(newcpath == mydoc_path_rel_new,
82            "By canonical path adapter got: '%s', must be: '%s'" % (
83             newcpath, mydoc_path_rel_new))
84       
85
86def test_suite():
87    from unittest import TestSuite, makeSuite
88    suite = TestSuite()
89    suite.addTest(makeSuite(TestCanonicalURL))
90    return suite
Note: See TracBrowser for help on using the repository browser.