##############################################################################
#
# Copyright (c) 2004 Zope Corporation and Contributors.
# All Rights Reserved.
#
# This software is subject to the provisions of the Zope Public License,
# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution.
# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
# FOR A PARTICULAR PURPOSE.
#
##############################################################################
"""Session functional tests.
$Id: tests.py 26427 2004-07-12 16:05:02Z Zen $
"""
import unittest
from zope.component import provideHandler, getGlobalSiteManager
from zope.app.folder import Folder
from zope.app.publication.interfaces import IBeforeTraverseEvent
from zope.app.testing.functional import BrowserTestCase
from zope.app.zptpage.zptpage import ZPTPage
from interfaces import ISession
class ZPTSessionTest(BrowserTestCase):
content = u'''
'''
def setUp(self):
BrowserTestCase.setUp(self)
page = ZPTPage()
page.source = self.content
page.evaluateInlineCode = True
root = self.getRootFolder()
root['page'] = page
self.commit()
def tearDown(self):
root = self.getRootFolder()
del root['page']
BrowserTestCase.tearDown(self)
def fetch(self, page='/page'):
response = self.publish(page)
self.failUnlessEqual(response.getStatus(), 200)
return response.getBody().strip()
def test(self):
response1 = self.fetch()
self.failUnlessEqual(response1, u'1')
response2 = self.fetch()
self.failUnlessEqual(response2, u'2')
response3 = self.fetch()
self.failUnlessEqual(response3, u'3')
class VirtualHostSessionTest(BrowserTestCase):
def setUp(self):
super(VirtualHostSessionTest, self).setUp()
page = ZPTPage()
page.source = (u'')
page.evaluateInlineCode = True
root = self.getRootFolder()
root['folder'] = Folder()
root['folder']['page'] = page
self.commit()
provideHandler(self.accessSessionOnTraverse, (IBeforeTraverseEvent,))
def tearDown(self):
getGlobalSiteManager().unregisterHandler(self.accessSessionOnTraverse,
(IBeforeTraverseEvent,))
def accessSessionOnTraverse(self, event):
session = ISession(event.request)
def assertCookiePath(self, path):
cookie = self.cookies.values()[0]
self.assertEqual(cookie['path'], path)
def testShortendPath(self):
self.publish(
'/++skin++Rotterdam/folder/++vh++http:localhost:80/++/page')
self.assertCookiePath('/')
def testLongerPath(self):
self.publish(
'/folder/++vh++http:localhost:80/foo/bar/++/page')
self.assertCookiePath('/foo/bar')
def testDifferentHostname(self):
self.publish(
'/folder/++vh++http:foo.bar:80/++/page')
self.assertCookiePath('/')
def test_suite():
return unittest.TestSuite((
unittest.makeSuite(ZPTSessionTest),
unittest.makeSuite(VirtualHostSessionTest),
))
if __name__ == '__main__':
unittest.main()
# vim: set filetype=python ts=4 sw=4 et si