[Zope3-checkins] CVS: Zope3/lib/python/Zope/App/OFS/Services/ServiceManager/Browser/tests - __init__.py:1.1.2.1 testAddServiceContainer.py:1.1.2.1 testEditConfiguration.py:1.1.2.1 testServiceConfigURL.py:1.1.2.1 testServices.py:1.1.2.1
Jim Fulton
jim@zope.com
Sat, 30 Nov 2002 07:44:29 -0500
Update of /cvs-repository/Zope3/lib/python/Zope/App/OFS/Services/ServiceManager/Browser/tests
In directory cvs.zope.org:/tmp/cvs-serv30047/lib/python/Zope/App/OFS/Services/ServiceManager/Browser/tests
Added Files:
Tag: Zope3-Bangalore-TTW-Branch
__init__.py testAddServiceContainer.py
testEditConfiguration.py testServiceConfigURL.py
testServices.py
Log Message:
Refactored the way TTW component registration is done. There are now
separate registry objects that abstract the machinery for registering
multiple conflicting configurations and deciding which, if any are
active. Also provided a new field and widget for the status
information.
Along the way, cleaned up and streamlined placeful testing
infrastructure a bit.
Now checking into branch. Will give file-by-file (or at least more
specific logs) when the changes are merged into the head.
=== Added File Zope3/lib/python/Zope/App/OFS/Services/ServiceManager/Browser/tests/__init__.py ===
##############################################################################
#
# Copyright (c) 2001, 2002 Zope Corporation and Contributors.
# All Rights Reserved.
#
# This software is subject to the provisions of the Zope Public License,
# Version 2.0 (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.
#
##############################################################################
=== Added File Zope3/lib/python/Zope/App/OFS/Services/ServiceManager/Browser/tests/testAddServiceContainer.py ===
##############################################################################
#
# Copyright (c) 2001, 2002 Zope Corporation and Contributors.
# All Rights Reserved.
#
# This software is subject to the provisions of the Zope Public License,
# Version 2.0 (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.
#
##############################################################################
"""XXX short summary goes here.
XXX longer description goes here.
$Id: testAddServiceContainer.py,v 1.1.2.1 2002/11/30 12:44:28 jim Exp $
"""
from unittest import TestCase, TestSuite, main, makeSuite
from Zope.App.OFS.Services.ServiceManager.tests.PlacefulSetup \
import PlacefulSetup
from Zope.ComponentArchitecture.GlobalServiceManager import defineService
from Interface import Interface
from Zope.App.OFS.Services.ServiceManager.ServiceManager import ServiceManager
from Zope.ComponentArchitecture import getServiceManager
from Zope.App.OFS.Services.ServiceManager.Browser.AddServiceConfiguration \
import AddServiceConfiguration
from Zope.Publisher.Browser.BrowserRequest import TestRequest
from Zope.App.OFS.Services.ServiceManager.Browser.Adding import ComponentAdding
from Zope.App.OFS.Services.ServiceManager.Browser.PackagesContents \
import PackagesContents
from Zope.ComponentArchitecture import getService
from Zope.ComponentArchitecture.Exceptions import ComponentLookupError
from Zope.App.ZopePublication.TraversalViews.AbsoluteURL \
import AbsoluteURL, SiteAbsoluteURL
from Zope.Publisher.Browser.IBrowserPresentation import IBrowserPresentation
from Zope.App.OFS.Content.Folder.RootFolder import IRootFolder
from Zope.ComponentArchitecture.GlobalAdapterService import provideAdapter
from Zope.App.OFS.Container.IZopeContainer import IZopeContainer
from Zope.App.OFS.Container.IContainer import IContainer
from Zope.App.OFS.Container.ZopeContainerAdapter import ZopeContainerAdapter
from Zope.App.OFS.Annotation.IAnnotatable import IAnnotatable
from Zope.App.OFS.Annotation.IAttributeAnnotatable \
import IAttributeAnnotatable
from Zope.App.OFS.Annotation.AttributeAnnotations import AttributeAnnotations
from Zope.App.OFS.Annotation.IAnnotations import IAnnotations
from Zope.App.DependencyFramework.IDependable import IDependable
from Zope.App.DependencyFramework.Dependable import Dependable
from Zope.App.Traversing import traverse
from Zope.ComponentArchitecture.GlobalViewService import provideView
from Zope.ComponentArchitecture.GlobalViewService import setDefaultViewName
from Zope.App.OFS.Services.ConfigurationInterfaces import IConfigurationStatus
from Zope.App.OFS.Services.Browser.ConfigurationStatusWidget \
import ConfigurationStatusWidget
from Zope.Schema.IField import IField, ITextLine, IText
from Zope.App.Forms.Views.Browser.Widget import TextWidget, TextAreaWidget
class I1(Interface): pass
class C: __implements__ = IAttributeAnnotatable, I1
class Test(PlacefulSetup, TestCase):
def setUp(self):
PlacefulSetup.setUp(self)
provideAdapter(IContainer, IZopeContainer, ZopeContainerAdapter)
provideAdapter(IAttributeAnnotatable,
IAnnotations, AttributeAnnotations)
provideAdapter(IAnnotatable, IDependable, Dependable)
self.buildFolders()
defineService('s1', I1)
self.folder1_1.setServiceManager(ServiceManager())
self.__Packages = traverse(
self.rootFolder, "folder1/folder1_1/++etc++Services/Packages")
self.__default = traverse(self.__Packages, 'default')
setDefaultViewName(IField, IBrowserPresentation, "widget")
provideView(IConfigurationStatus, "widget", IBrowserPresentation,
ConfigurationStatusWidget)
provideView(ITextLine, "widget", IBrowserPresentation, TextWidget)
provideView(IText, "widget", IBrowserPresentation, TextAreaWidget)
def test_services(self):
class I2(Interface): pass
class I3(Interface): pass
defineService('s2', I2)
defineService('s3', I3)
request = TestRequest()
view = AddServiceConfiguration(
ComponentAdding(self.__default, request), request)
# We need the ContentAdding to have a contentName. It normally
# gets set during traversal, but we aren't traversing here.
view.context.contentName = 'sd1'
services = list(view.services())
services.sort()
self.failUnless((('s1' in services) and
('s2' in services) and
('s3' in services)), services)
def test_components(self):
request = TestRequest(service_type='s1')
packages = self.__Packages
PackagesContents(packages, request).addPackage('p1')
PackagesContents(packages, request).addPackage('p2')
packages['default'].setObject('cd1', C())
packages['default'].setObject('cd2', C())
packages['p1'].setObject('c11', C())
packages['p2'].setObject('c21', C())
packages['p2'].setObject('c22', C())
view = AddServiceConfiguration(
ComponentAdding(self.__default, request), request)
# We need the ContentAdding to have a contentName. It normally
# gets set during traversal, but we aren't traversing here.
view.context.contentName = 'sd1'
components = list(view.components())
components.sort()
self.assertEqual(
components,
['/folder1/folder1_1/++etc++Services/Packages/default/cd1',
'/folder1/folder1_1/++etc++Services/Packages/default/cd2',
'/folder1/folder1_1/++etc++Services/Packages/p1/c11',
'/folder1/folder1_1/++etc++Services/Packages/p2/c21',
'/folder1/folder1_1/++etc++Services/Packages/p2/c22'])
def test_action_unregistered(self):
request = TestRequest()
self.__default.setObject('cd1', C())
view = AddServiceConfiguration(
ComponentAdding(self.__default, request), request)
# We need the ContentAdding to have a contentName. It normally
# gets set during traversal, but we aren't traversing here.
view.context.contentName = 'sd1'
view.action('s1',
'/folder1/folder1_1/++etc++Services/Packages/default/cd1',
)
self.assertRaises(ComponentLookupError,
getService, self.folder1_1_1, 's1')
def test_action_active(self):
service = C()
self.__default.setObject('cd1', service)
request = TestRequest()
view = AddServiceConfiguration(
ComponentAdding(self.__default, request), request)
# We need the ContentAdding to have a contentName. It normally
# gets set during traversal, but we aren't traversing here.
view.context.contentName = 'sd1'
request.form["field.status"] = u"Active"
view.action('s1',
'/folder1/folder1_1/++etc++Services/Packages/default/cd1')
self.assertEqual(getService(self.folder1_1_1, 's1'), service)
def test_action_register(self):
service = C()
self.__default.setObject('cd1', service)
request = TestRequest()
view = AddServiceConfiguration(
ComponentAdding(self.__default, request), request)
# We need the ContentAdding to have a contentName. It normally
# gets set during traversal, but we aren't traversing here.
view.context.contentName = 'sd1'
request.form["field.status"] = u"Active"
view.action('s1',
'/folder1/folder1_1/++etc++Services/Packages/default/cd1')
view.context.contentName = 'sd2'
self.__default.setObject('cd2', C())
request.form["field.status"] = u"Registered"
view.action('s1',
'/folder1/folder1_1/++etc++Services/Packages/default/cd2')
self.assertEqual(getService(self.folder1_1_1, 's1'), service)
def test_suite():
return makeSuite(Test)
if __name__=='__main__':
main(defaultTest='test_suite')
=== Added File Zope3/lib/python/Zope/App/OFS/Services/ServiceManager/Browser/tests/testEditConfiguration.py ===
##############################################################################
#
# Copyright (c) 2001, 2002 Zope Corporation and Contributors.
# All Rights Reserved.
#
# This software is subject to the provisions of the Zope Public License,
# Version 2.0 (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.
#
##############################################################################
"""XXX short summary goes here.
XXX longer description goes here.
$Id: testEditConfiguration.py,v 1.1.2.1 2002/11/30 12:44:28 jim Exp $
"""
__metaclass__ = type
from unittest import TestCase, TestSuite, main, makeSuite
from Interface import Interface
from Zope.App.OFS.Services.ServiceManager.Browser.EditConfiguration \
import EditConfiguration
from Zope.Publisher.Browser.BrowserRequest import TestRequest
from Zope.App.tests.PlacelessSetup import PlacelessSetup
from Zope.Publisher.Browser.IBrowserPresentation import IBrowserPresentation
from Zope.ComponentArchitecture.GlobalViewService import provideView
from Zope.ComponentArchitecture.GlobalAdapterService import provideAdapter
from Zope.Publisher.Browser.BrowserView import BrowserView
from Zope.Event.tests.PlacelessSetup import getEvents
from Zope.Event.IObjectEvent import IObjectRemovedEvent, IObjectModifiedEvent
from Zope.App.OFS.Container.IContainer import IContainer
from Zope.App.OFS.Container.IZopeContainer import IZopeContainer
from Zope.App.OFS.Container.ZopeContainerAdapter import ZopeContainerAdapter
class Container(dict):
__implements__ = IContainer
class I(Interface):
pass
class C:
__implements__ = I
class Test(PlacelessSetup, TestCase):
def test_remove_objects(self):
provideAdapter(IContainer, IZopeContainer, ZopeContainerAdapter)
c1 = C()
c2 = C()
c7 = C()
d = Container({'1': c1, '2': c2, '7': c7})
view = EditConfiguration(d, TestRequest())
view.remove_objects(['2', '7'])
self.assertEqual(d, {'1': c1})
self.failUnless(
getEvents(IObjectRemovedEvent,
filter = lambda event: event.object == c2),
)
self.failUnless(
getEvents(IObjectRemovedEvent,
filter = lambda event: event.object == c7)
)
self.failUnless(
getEvents(IObjectModifiedEvent,
filter = lambda event: event.object == d)
)
def test_configInfo(self):
class V(BrowserView):
def setPrefix(self, p):
self._prefix = p
provideView(I, 'ItemEdit', IBrowserPresentation, V)
c1 = C()
c2 = C()
c7 = C()
d = Container({'1': c1, '2': c2, '7': c7})
view = EditConfiguration(d, TestRequest())
info = view.configInfo()
self.assertEqual(len(info), 3)
self.assertEqual(info[0]['key'], '1')
self.assertEqual(info[1]['key'], '2')
self.assertEqual(info[2]['key'], '7')
self.assertEqual(info[0]['view'].__class__, V)
self.assertEqual(info[0]['view'].context, c1)
self.assertEqual(info[0]['view']._prefix, 'config1')
self.assertEqual(info[1]['view'].__class__, V)
self.assertEqual(info[1]['view'].context, c2)
self.assertEqual(info[1]['view']._prefix, 'config2')
self.assertEqual(info[2]['view'].__class__, V)
self.assertEqual(info[2]['view'].context, c7)
self.assertEqual(info[2]['view']._prefix, 'config7')
def test_suite():
return TestSuite((
makeSuite(Test),
))
if __name__=='__main__':
main(defaultTest='test_suite')
=== Added File Zope3/lib/python/Zope/App/OFS/Services/ServiceManager/Browser/tests/testServiceConfigURL.py ===
##############################################################################
#
# Copyright (c) 2001, 2002 Zope Corporation and Contributors.
# All Rights Reserved.
#
# This software is subject to the provisions of the Zope Public License,
# Version 2.0 (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.
#
##############################################################################
"""XXX short summary goes here.
XXX longer description goes here.
$Id: testServiceConfigURL.py,v 1.1.2.1 2002/11/30 12:44:28 jim Exp $
"""
from unittest import TestCase, TestSuite, main, makeSuite
from Zope.App.OFS.Services.ServiceManager.tests.PlacefulSetup \
import PlacefulSetup
from Zope.App.OFS.Services.ServiceManager.ServiceManager import ServiceManager
from Zope.App.OFS.Services.ServiceManager.ServiceConfiguration \
import ServiceConfiguration
from Zope.App.Traversing import traverse
from Zope.Publisher.Browser.BrowserView import BrowserView
from Zope.App.OFS.Services.ServiceManager.Browser.ServiceConfigURL \
import ServiceConfigURL
from Zope.Publisher.Browser.BrowserRequest import TestRequest
class V(BrowserView, ServiceConfigURL):
pass
class C:
pass
class Test(PlacefulSetup, TestCase):
def test(self):
self.buildFolders()
self.rootFolder.setServiceManager(ServiceManager())
default = traverse(
self.rootFolder,
'++etc++Services/Packages/default',
)
default.setObject('c', C())
traverse(default, 'configure').setObject(
'',
ServiceConfiguration('test_service',
'/++etc++Services/Packages/default/c')
)
config = traverse(default, 'configure/1')
view = V(config, TestRequest())
self.assertEqual(view.componentURL(),
'http://127.0.0.1/++etc++Services/Packages/default/c')
def test_suite():
return TestSuite((
makeSuite(Test),
))
if __name__=='__main__':
main(defaultTest='test_suite')
=== Added File Zope3/lib/python/Zope/App/OFS/Services/ServiceManager/Browser/tests/testServices.py ===
##############################################################################
#
# Copyright (c) 2001, 2002 Zope Corporation and Contributors.
# All Rights Reserved.
#
# This software is subject to the provisions of the Zope Public License,
# Version 2.0 (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.
#
##############################################################################
"""XXX short summary goes here.
XXX longer description goes here.
$Id: testServices.py,v 1.1.2.1 2002/11/30 12:44:28 jim Exp $
"""
from unittest import TestCase, TestSuite, main, makeSuite
from Interface import Interface
from Zope.App.OFS.Services.ServiceManager.Browser.Services import Services
from Zope.Publisher.Browser.BrowserRequest import TestRequest
from Zope.App.tests.PlacelessSetup import PlacelessSetup
from Zope.Publisher.Browser.IBrowserPresentation import IBrowserPresentation
from Zope.ComponentArchitecture.GlobalViewService import provideView
from Zope.Publisher.Browser.BrowserView import BrowserView
class SM:
def __init__(self, **data):
self._data = data
def getBoundServiceTypes(self):
return self._data.keys()
def queryConfigurations(self, name):
return self._data[name]
class I(Interface): pass
class Registry:
__implements__ = I
def __init__(self, active):
self._active = active
def active(self):
return self._active
class V(BrowserView):
_update = 0
def setPrefix(self, p):
self._prefix = p
def update(self):
self._update += 1
class Test(PlacelessSetup, TestCase):
def test_update(self):
provideView(I, 'ChangeConfigurations', IBrowserPresentation, V)
r1 = Registry(None)
r2 = Registry(1)
r3 = Registry(1)
sm = SM(test1=r1, test2=r2, test3=r3)
services = Services(sm, TestRequest()).update()
self.assertEqual(len(services), 3)
self.assertEqual(services[0]['name'], 'test1')
self.assertEqual(services[0]['active'], False)
self.assertEqual(services[0]['inactive'], True)
self.assertEqual(services[0]['view'].context, r1)
self.assertEqual(services[0]['view']._prefix, "test1")
self.assertEqual(services[0]['view']._update, 1)
self.assertEqual(services[1]['name'], 'test2')
self.assertEqual(services[1]['active'], True)
self.assertEqual(services[1]['inactive'], False)
self.assertEqual(services[1]['view'].context, r2)
self.assertEqual(services[1]['view']._prefix, "test2")
self.assertEqual(services[1]['view']._update, 1)
self.assertEqual(services[2]['name'], 'test3')
self.assertEqual(services[2]['active'], True)
self.assertEqual(services[2]['inactive'], False)
self.assertEqual(services[2]['view'].context, r3)
self.assertEqual(services[2]['view']._prefix, "test3")
self.assertEqual(services[2]['view']._update, 1)
def test_suite():
return TestSuite((
makeSuite(Test),
))
if __name__=='__main__':
main(defaultTest='test_suite')