#
# Tests for quintagroup.plonegooglesitemaps
#
from base import *
from cgi import FieldStorage
from tempfile import TemporaryFile, NamedTemporaryFile
from OFS.Image import cookId
from Products.CMFPlone.utils import _createObjectByType
from ZPublisher.HTTPRequest import FileUpload
def prepareUploadFile(prefix=""):
""" Helper function for prerare file to uploading """
fp = NamedTemporaryFile(mode='w+', prefix=prefix)
fp.write("google-site-verification: " + fp.name)
fp.seek(0,2)
fsize = fp.tell()
fp.seek(0)
env = {'REQUEST_METHOD':'PUT'}
headers = {'content-type':'text/plain',
'content-length': fsize,
'content-disposition':'attachment; filename=%s' % fp.name}
fs = FieldStorage(fp=fp, environ=env, headers=headers)
return FileUpload(fs), fp
class TestGoogleSitemaps(FunctionalTestCase):
def afterSetUp(self):
super(TestGoogleSitemaps, self).afterSetUp()
_createObjectByType('Sitemap', self.portal, id='google-sitemaps')
self.sitemapUrl = '/'+self.portal.absolute_url(1) + '/google-sitemaps'
self.gsm_props = self.portal.portal_properties['googlesitemap_properties']
# Add testing document to portal
self.my_doc = _createObjectByType('Document', self.portal, id='my_doc')
self.my_doc.edit(text_format='plain', text='hello world')
def testSitemap(self):
sitemap = self.publish(self.sitemapUrl, self.auth).getBody()
parsed_sitemap = parse(sitemap)
start = parsed_sitemap['start']
data = parsed_sitemap['data']
self.assert_('urlset' in start.keys())
self.assertFalse(self.my_doc.absolute_url(0) in data,
'Wrong content present in the sitemap')
self.workflow.doActionFor(self.my_doc, 'publish')
sitemap = self.publish(self.sitemapUrl, self.auth).getBody()
parsed_sitemap = parse(sitemap)
start = parsed_sitemap['start']
data = parsed_sitemap['data']
self.assertEqual(len(start.keys()), 4)
self.assert_('urlset' in start.keys())
self.assert_('url' in start.keys())
self.assert_('loc' in start.keys())
self.assert_('lastmod' in start.keys())
self.assertTrue(self.my_doc.absolute_url(0) in data, 'Incorect url')
def testVerificationFileCreation(self):
fp, fname = None, None
try:
fupload, fp = prepareUploadFile()
fname, ftitle = cookId('', '', fupload)
self.portal.REQUEST.form['verification_file'] = fupload
self.portal.gsm_create_verify_file()
finally:
if fp: fp.close()
vf_created = hasattr(self.portal, fname)
self.assert_(vf_created, 'Verification file not created')
def testVerificationForm(self):
verifyConfigUrl = '/'+self.portal.absolute_url(1) + '/prefs_gsm_verification'
verif_config = self.publish(verifyConfigUrl, self.auth).getBody()
rexp_input_acitve = re.compile(']*)>', re.I|re.S)
rexp_button_acitve = re.compile(']*)>', re.I|re.S)
rexp_delete_button = re.compile(']*>', re.I|re.S)
input_acitve = rexp_input_acitve.search(verif_config)
button_acitve = rexp_button_acitve.search(verif_config)
delete_button = rexp_delete_button.match(verif_config)
self.assert_(input_acitve and not 'disabled' in input_acitve.groups(1))
self.assert_(button_acitve and not 'disabled' in button_acitve.groups(1))
self.assert_(not delete_button)
fp, fname = None, None
try:
fupload, fp = prepareUploadFile()
fname, ftitle = cookId('', '', fupload)
self.portal.REQUEST.form['verification_file'] = fupload
self.portal.gsm_create_verify_file()
finally:
if fp: fp.close()
input_acitve = rexp_input_acitve.search(verif_config)
button_acitve = rexp_button_acitve.search(verif_config)
delete_button = rexp_delete_button.match(verif_config)
verif_config = self.publish(verifyConfigUrl, self.auth).getBody()
self.assert_(input_acitve and not 'disabled' in input_acitve.groups(1))
self.assert_(not delete_button)
def testMultiplyVerificationFiles(self):
verifyConfigUrl = '/'+self.portal.absolute_url(1) + '/prefs_gsm_verification'
fnames = []
for i in [1,2]:
fp, fname, response = None, None, None
try:
fupload, fp = prepareUploadFile(prefix=str(i))
fname, ftitle = cookId('', '', fupload)
form = {'form.button.CreateFile': 'Create verification file',
'form.submitted': 1}
extra_update = {'verification_file': fupload}
response = self.publish(verifyConfigUrl, request_method='POST',
stdin=StringIO(urlencode(form)),
basic=self.auth, extra=extra_update)
finally:
if fp: fp.close()
self.assertEqual(response.getStatus(), 200)
self.assert_(fname in self.gsm_props.getProperty('verification_filenames',[]),
self.gsm_props.getProperty('verification_filenames',[]))
fnames.append(fname)
self.assertEqual(len([1 for vf in fnames \
if vf in self.gsm_props.getProperty('verification_filenames',[])]), 2,
self.gsm_props.getProperty('verification_filenames',[]))
def test_suite():
from unittest import TestSuite, makeSuite
suite = TestSuite()
suite.addTest(makeSuite(TestGoogleSitemaps))
return suite
if __name__ == '__main__':
unittest.main(defaultTest='test_suite')
# framework()