#
# Tests for quintagroup.plonegooglesitemaps
#
from quintagroup.plonegooglesitemaps.tests.base import FunctionalTestCase
from quintagroup.plonegooglesitemaps.tests.XMLParser import parse
from StringIO import StringIO
from urllib import urlencode
import re
import unittest
from cgi import FieldStorage
from tempfile import 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'
gsm_properties = 'googlesitemap_properties'
self.gsm_props = self.portal.portal_properties[gsm_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():
suite = unittest.TestSuite()
suite.addTest(unittest.makeSuite(TestGoogleSitemaps))
return suite
if __name__ == '__main__':
unittest.main(defaultTest='test_suite')
# framework()