Changeset 2902 in products for quintagroup.seoptimizer/branches/plone4/quintagroup/seoptimizer/tests/testUsageKeywords.py
- Timestamp:
- Oct 20, 2010 1:35:24 PM (14 years ago)
- Location:
- quintagroup.seoptimizer/branches/plone4
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
quintagroup.seoptimizer/branches/plone4
- Property svn:mergeinfo
-
old new 1 1 /quintagroup.seoptimizer/branches/refactoring2.3.0:1776-2133 2 /quintagroup.seoptimizer/trunk:2435-2440 2 /quintagroup.seoptimizer/trunk:2435-2440,2885-2901
-
- Property svnmerge-integrated changed from /quintagroup.seoptimizer/trunk:1-3473 /quintagroup.seoptimizer/branches/refactoring2.3.0:1-3174 to /quintagroup.seoptimizer/trunk:1-3478,3480-3513,3515-3631,3633-3940 /quintagroup.seoptimizer/branches/refactoring2.3.0:1-3174
- Property svn:mergeinfo
-
quintagroup.seoptimizer/branches/plone4/quintagroup/seoptimizer/tests/testUsageKeywords.py
r2139 r2902 1 1 from base import * 2 import urllib2 3 from StringIO import StringIO 4 from zope.component import queryMultiAdapter 5 from zope.interface import alsoProvides 6 from quintagroup.seoptimizer.browser.interfaces import IPloneSEOLayer 2 7 3 8 KWSTMPL = '.*(<meta\s+(?:(?:name="keywords"\s*)|(?:content="%s"\s*)){2}/>)' … … 59 64 60 65 66 class TestCalcKeywords(FunctionalTestCase): 67 68 def afterSetUp(self): 69 self.loginAsPortalOwner() 70 self.seo = self.portal.portal_properties.seo_properties 71 #Preparation for functional testing 72 self.key = "SEO_KEYWORD " 73 self.portal.invokeFactory('Document', id='my_doc') 74 self.my_doc = getattr(self.portal, 'my_doc') 75 self.my_doc.setText(self.key * 2) 76 # Emulate JS request 77 self.app.REQUEST.set("text", self.key) 78 # Mark request with IPloneSEOLayer browser layer interface 79 alsoProvides(self.app.REQUEST, IPloneSEOLayer) 80 # Get checkSEOKeywords view 81 self.chckView = queryMultiAdapter((self.my_doc, self.app.REQUEST), 82 name="checkSEOKeywords") 83 84 def patchURLLib(self, fnc): 85 self.orig_urlopen = urllib2.urlopen 86 self.urlfd = StringIO() 87 urllib2.urlopen = fnc 88 89 def unpatchURLLib(self): 90 urllib2.urlopen = self.orig_urlopen 91 self.urlfd.close() 92 93 def test_InternalPageRendering(self): 94 self.assertTrue(not self.seo.external_keywords_test) 95 # Only keywords from content must present in check view 96 self.assertTrue('2' in self.chckView()) 97 98 def test_ExternalPageRendering(self): 99 def patch_urlopen(*args, **kwargs): 100 if args[0] == self.my_doc.absolute_url(): 101 self.urlfd.write(unicode(self.my_doc() + self.key).encode("utf-8")) 102 self.urlfd.seek(0) 103 return self.urlfd 104 else: 105 return self.orig_urlopen(*args, **kwargs) 106 self.seo._updateProperty("external_keywords_test", True) 107 self.patchURLLib(fnc=patch_urlopen) 108 self.assertTrue(self.seo.external_keywords_test) 109 # 1. Extra keyword must present in check view 110 self.assertTrue('3' in self.chckView()) 111 # 2. Opened urllib file descriptor must be closed 112 self.assertTrue(self.urlfd.closed, "Opened file descriptor was not closed.") 113 self.unpatchURLLib() 114 115 def test_ExternalURLError(self): 116 def patch_urlopen(*args, **kwargs): 117 if args[0] == self.my_doc.absolute_url(): 118 raise urllib2.URLError("Some URL Error occured") 119 else: 120 return self.orig_urlopen(*args, **kwargs) 121 self.seo._updateProperty("external_keywords_test", True) 122 self.patchURLLib(fnc=patch_urlopen) 123 self.assertTrue(self.seo.external_keywords_test) 124 # 1. Information about problem must present in check view 125 self.assertTrue("Problem with page retrieval" in self.chckView()) 126 # 2. Opened urllib file descriptor should not be closed because 127 # it even not returned to the view 128 self.assertFalse(self.urlfd.closed, "Opened file descriptor was closed.") 129 self.unpatchURLLib() 130 131 def test_ExternalIOError(self): 132 def patch_urlopen(*args, **kwargs): 133 if args[0] == self.my_doc.absolute_url(): 134 self.urlfd.write(unicode(self.my_doc() + self.key).encode("utf-8")) 135 self.urlfd.seek(0) 136 return self.urlfd 137 else: 138 return self.orig_urlopen(*args, **kwargs) 139 def patch_read(*args, **kwargs): 140 raise IOError() 141 # Patch urllib2.urlopen to emulate external url retrieval 142 self.patchURLLib(fnc=patch_urlopen) 143 # Patch opened by urllib2 file descriptor to emulate IOError during reading 144 self.urlfd.read = patch_read 145 self.seo._updateProperty("external_keywords_test", True) 146 self.assertTrue(self.seo.external_keywords_test) 147 # 1. Information about problem must present in check view 148 self.assertTrue("Problem with page retrieval" in self.chckView()) 149 # 2. Opened urllib file descriptor must be closed 150 self.assertTrue(self.urlfd.closed, "Opened file descriptor was not closed.") 151 self.unpatchURLLib() 152 153 61 154 def test_suite(): 62 155 from unittest import TestSuite, makeSuite 63 156 suite = TestSuite() 64 157 suite.addTest(makeSuite(TestUsageKeywords)) 158 suite.addTest(makeSuite(TestCalcKeywords)) 65 159 return suite 160
Note: See TracChangeset
for help on using the changeset viewer.