Viewing TTWViewTemplates through-the-web
========================================
Set Up
------
Make this test available as a module so that stuff defined in here can
be pickled properly:
>>> from zope.testing import module
>>> module.setUp(test, name='five.customerize.browsertest')
Making a site
-------------
>>> uf = app.acl_users
>>> _ignore = uf._doAddUser('manager', 'r00t', ['Manager'], [])
Create the test browser we'll be using:
# BBB Zope 2.12
>>> try:
... from Testing.testbrowser import Browser
... except ImportError:
... from Products.Five.testbrowser import Browser
>>> browser = Browser()
>>> browser.addHeader('Authorization', 'Basic manager:r00t')
Make a folder to use as a local site for component registration:
>>> browser.open('http://localhost/manage_addProduct/OFSP/folderAdd')
>>> browser.getControl(name='id').value = 'folder'
>>> browser.getControl('Add').click()
>>> browser.getLink('folder').click()
We can turn it into a site by using the ``components.html`` view:
>>> browser.open('http://localhost/folder/components.html')
>>> browser.getControl('Make site').click()
Create and a TTWViewTemplate instance as a view in our site manager:
XXX: We should be able to do this TTW
>>> from zope.interface import Interface
>>> from OFS.interfaces import IObjectManager
>>> from zope.publisher.interfaces.browser import IDefaultBrowserLayer
>>> from five.customerize.zpt import TTWViewTemplate
>>> template = TTWViewTemplate('ttwtemplate', 'hello')
>>> t_id = app.folder._setObject('ttwtemplate', template)
>>> sm = app.folder.getSiteManager()
>>> sm.registerAdapter(template, (IObjectManager, IDefaultBrowserLayer),
... Interface, name='myttwtemplate.html')
>>> import transaction
>>> transaction.commit()
Let's see if we can view it:
>>> browser.handleErrors = False
>>> browser.open('http://localhost/folder/myttwtemplate.html')
>>> print browser.contents
hello
Now we edit our view template TTW:
>>> browser.open('http://localhost/folder/ttwtemplate/pt_editForm')
>>> browser.getControl(name='text:text').value = '''\
...
...
... '''
>>> browser.getControl('Save Changes').click()
>>> browser.open('http://localhost/folder/myttwtemplate.html?foo=bar')
>>> print browser.contents
folder
bar
None
Make and register a view that we can customize with a TTWViewTemplate:
>>> from Products.Five.browser import BrowserView
>>> class TestView(BrowserView):
... """A view class"""
... __name__ = 'mystaticview.html'
... def foo_method(self):
... return 'baz'
...
... def __call__(self):
... return 'Original View'
>>> from zope.component import provideAdapter
>>> provideAdapter(TestView, (IObjectManager, IDefaultBrowserLayer),
... Interface, name='mystaticview.html')
>>> browser.open('http://localhost/folder/mystaticview.html')
>>> print browser.contents
Original View
Pass that view to the constructor for a new TTWViewTemplate, and register
it locally to override the static view:
>>> template = TTWViewTemplate('ttwtemplate2', 'Not so static',
... view=TestView)
>>> t_id = app.folder._setObject('ttwtemplate2', template)
>>> sm = app.folder.getSiteManager()
>>> sm.registerAdapter(template, (IObjectManager, IDefaultBrowserLayer),
... Interface, name='mystaticview.html')
Now we browse the view to ensure that is has changed:
>>> browser.open('http://localhost/folder/mystaticview.html')
>>> print browser.contents
Not so static
Edit the template to make it dynamic and see if we have access to the
view methods:
>>> browser.open('http://localhost/folder/ttwtemplate2/pt_editForm')
>>> browser.getControl(name='text:text').value = '''\
... Customized
... '''
>>> browser.getControl('Save Changes').click()
>>> browser.open('http://localhost/folder/mystaticview.html')
>>> print browser.contents
Customized
baz
Clean up:
---------
>>> module.tearDown(test, name='five.customerize.browsertest')
>>> from zope.testing.cleanup import cleanUp
>>> cleanUp()