Changeset 2900 in products


Ignore:
Timestamp:
Oct 20, 2010 1:10:45 PM (14 years ago)
Author:
mylan
Message:

#233: Updated tests for correct errors handling in keyword check view

File:
1 edited

Legend:

Unmodified
Added
Removed
  • quintagroup.seoptimizer/trunk/quintagroup/seoptimizer/tests/testUsageKeywords.py

    r2894 r2900  
    11from base import * 
    22import urllib2 
     3from StringIO import StringIO 
    34from zope.component import queryMultiAdapter 
    45from zope.interface import alsoProvides 
     
    8182            name="checkSEOKeywords") 
    8283         
    83     def patchURLLib(self): 
     84    def patchURLLib(self, fnc): 
    8485        self.orig_urlopen = urllib2.urlopen 
    85         def patch_urlopen(*args, **kwargs): 
    86             if args[0] == self.my_doc.absolute_url(): 
    87                 return unicode(self.my_doc() + self.key).encode("utf-8") 
    88             else: 
    89                 return self.orig_urlopen(*args, **kwargs) 
    90         urllib2.urlopen = patch_urlopen 
     86        self.urlfd = StringIO() 
     87        urllib2.urlopen = fnc 
    9188     
    9289    def unpatchURLLib(self): 
    9390        urllib2.urlopen = self.orig_urlopen 
     91        self.urlfd.close() 
    9492 
    9593    def test_InternalPageRendering(self): 
    9694        self.assertTrue(not self.seo.external_keywords_test) 
     95        # Only keywords from content must present in check view 
    9796        self.assertTrue('2' in self.chckView()) 
    9897 
    9998    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) 
    100106        self.seo._updateProperty("external_keywords_test", True) 
    101         self.patchURLLib() 
     107        self.patchURLLib(fnc=patch_urlopen) 
    102108        self.assertTrue(self.seo.external_keywords_test) 
     109        # 1. Extra keyword must present in check view 
    103110        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.") 
    104151        self.unpatchURLLib() 
    105152         
Note: See TracChangeset for help on using the changeset viewer.