[Checkins] SVN: megrok.z3cform/branches/megrok.z3cform-pagelt/src/megrok/z3cform/ Changed the test setup a bit
Christian Klinger
cklinger at novareto.de
Wed Apr 22 03:49:05 EDT 2009
Log message for revision 99360:
Changed the test setup a bit
Changed:
U megrok.z3cform/branches/megrok.z3cform-pagelt/src/megrok/z3cform/__init__.py
U megrok.z3cform/branches/megrok.z3cform-pagelt/src/megrok/z3cform/components.py
A megrok.z3cform/branches/megrok.z3cform-pagelt/src/megrok/z3cform/ftesting.zcml
U megrok.z3cform/branches/megrok.z3cform-pagelt/src/megrok/z3cform/meta.zcml
D megrok.z3cform/branches/megrok.z3cform-pagelt/src/megrok/z3cform/testing.zcml
A megrok.z3cform/branches/megrok.z3cform-pagelt/src/megrok/z3cform/tests/
A megrok.z3cform/branches/megrok.z3cform-pagelt/src/megrok/z3cform/tests/__init__.py
A megrok.z3cform/branches/megrok.z3cform-pagelt/src/megrok/z3cform/tests/templates/
A megrok.z3cform/branches/megrok.z3cform-pagelt/src/megrok/z3cform/tests/templates/layout.pt
A megrok.z3cform/branches/megrok.z3cform-pagelt/src/megrok/z3cform/tests/test_field.py
A megrok.z3cform/branches/megrok.z3cform-pagelt/src/megrok/z3cform/tests/test_form.py
A megrok.z3cform/branches/megrok.z3cform-pagelt/src/megrok/z3cform/tests/test_wizard.py
-=-
Modified: megrok.z3cform/branches/megrok.z3cform-pagelt/src/megrok/z3cform/__init__.py
===================================================================
--- megrok.z3cform/branches/megrok.z3cform-pagelt/src/megrok/z3cform/__init__.py 2009-04-22 04:28:47 UTC (rev 99359)
+++ megrok.z3cform/branches/megrok.z3cform-pagelt/src/megrok/z3cform/__init__.py 2009-04-22 07:49:04 UTC (rev 99360)
@@ -1,3 +1,4 @@
#
-from components import Form, AddForm, EditForm, DisplayForm
+from components import Form, AddForm, EditForm, DisplayForm, WizardForm, Step
from skin import FormLayer
+from z3c.wizard import step
Modified: megrok.z3cform/branches/megrok.z3cform-pagelt/src/megrok/z3cform/components.py
===================================================================
--- megrok.z3cform/branches/megrok.z3cform-pagelt/src/megrok/z3cform/components.py 2009-04-22 04:28:47 UTC (rev 99359)
+++ megrok.z3cform/branches/megrok.z3cform-pagelt/src/megrok/z3cform/components.py 2009-04-22 07:49:04 UTC (rev 99360)
@@ -7,6 +7,7 @@
import martian
import grokcore.view
+import grokcore.component
from grokcore.view.interfaces import ITemplate as IGrokTemplate
from megrok.z3cform.interfaces import IGrokForm
@@ -15,6 +16,9 @@
from z3c.form.interfaces import IFormLayer
from z3c.template.interfaces import ILayoutTemplate
+from z3c.wizard import wizard, step
+import z3c.wizard.interfaces
+
import megrok.pagelet
class DefaultFields(field.Fields):
@@ -77,12 +81,12 @@
# override it.
def __call__(self):
- #mapply(self.update, (), self.request)
- #if self.request.response.getStatus() in (302, 303):
- # # A redirect was triggered somewhere in update(). Don't
- # # continue rendering the template or doing anything else.
- # return
- self.update()
+ mapply(self.update, (), self.request)
+ if self.request.response.getStatus() in (302, 303):
+ # A redirect was triggered somewhere in update(). Don't
+ # continue rendering the template or doing anything else.
+ return
+ #self.update()
self.updateForm()
if self.layout is None:
layout = component.getMultiAdapter(
@@ -127,3 +131,15 @@
martian.baseclass()
+class WizardForm(GrokForm, wizard.Wizard, megrok.pagelet.Pagelet):
+ """z3c wizdard.
+ """
+
+ martian.baseclass()
+
+
+class Step(step.EditStep, grokcore.component.MultiAdapter):
+ """A Step for the Witzard
+ """
+ grokcore.component.provides(z3c.wizard.interfaces.IStep)
+ martian.baseclass()
Copied: megrok.z3cform/branches/megrok.z3cform-pagelt/src/megrok/z3cform/ftesting.zcml (from rev 99347, megrok.z3cform/branches/megrok.z3cform-pagelt/src/megrok/z3cform/testing.zcml)
===================================================================
--- megrok.z3cform/branches/megrok.z3cform-pagelt/src/megrok/z3cform/ftesting.zcml (rev 0)
+++ megrok.z3cform/branches/megrok.z3cform-pagelt/src/megrok/z3cform/ftesting.zcml 2009-04-22 07:49:04 UTC (rev 99360)
@@ -0,0 +1,43 @@
+<configure
+ xmlns="http://namespaces.zope.org/zope"
+ xmlns:grok="http://namespaces.zope.org/grok">
+
+
+ <include package="grok" />
+ <include package="grok" file="meta.zcml" />
+
+ <include package="megrok.z3cform" file="meta.zcml" />
+ <include package="megrok.z3cform" />
+
+
+
+ <grok:grok package="megrok.z3cform.tests" />
+
+ <securityPolicy
+ component="zope.securitypolicy.zopepolicy.ZopeSecurityPolicy"
+ />
+
+ <unauthenticatedPrincipal
+ id="zope.anybody"
+ title="Unauthenticated User"
+ />
+ <grant
+ permission="zope.View"
+ principal="zope.anybody"
+ />
+
+ <principal
+ id="zope.mgr"
+ title="Manager"
+ login="mgr"
+ password="mgrpw"
+ />
+
+ <role id="zope.Manager" title="Site Manager" />
+ <grantAll role="zope.Manager" />
+ <grant role="zope.Manager" principal="zope.mgr" />
+
+
+
+
+</configure>
Modified: megrok.z3cform/branches/megrok.z3cform-pagelt/src/megrok/z3cform/meta.zcml
===================================================================
--- megrok.z3cform/branches/megrok.z3cform-pagelt/src/megrok/z3cform/meta.zcml 2009-04-22 04:28:47 UTC (rev 99359)
+++ megrok.z3cform/branches/megrok.z3cform-pagelt/src/megrok/z3cform/meta.zcml 2009-04-22 07:49:04 UTC (rev 99360)
@@ -8,6 +8,7 @@
<include package="z3c.macro" file="meta.zcml" />
<include package="z3c.formui"/>
<include package="grokcore.view" file="meta-minimal.zcml" />
+ <include package="megrok.pagelet" file="meta.zcml" />
<grok:grok package=".meta" />
Deleted: megrok.z3cform/branches/megrok.z3cform-pagelt/src/megrok/z3cform/testing.zcml
===================================================================
--- megrok.z3cform/branches/megrok.z3cform-pagelt/src/megrok/z3cform/testing.zcml 2009-04-22 04:28:47 UTC (rev 99359)
+++ megrok.z3cform/branches/megrok.z3cform-pagelt/src/megrok/z3cform/testing.zcml 2009-04-22 07:49:04 UTC (rev 99360)
@@ -1,11 +0,0 @@
-<configure
- xmlns="http://namespaces.zope.org/zope">
-
-
- <include package="grok" />
- <include package="grok" file="meta.zcml" />
-
- <include package="megrok.z3cform" file="meta.zcml" />
- <include package="megrok.z3cform" />
-
-</configure>
Added: megrok.z3cform/branches/megrok.z3cform-pagelt/src/megrok/z3cform/tests/__init__.py
===================================================================
--- megrok.z3cform/branches/megrok.z3cform-pagelt/src/megrok/z3cform/tests/__init__.py (rev 0)
+++ megrok.z3cform/branches/megrok.z3cform-pagelt/src/megrok/z3cform/tests/__init__.py 2009-04-22 07:49:04 UTC (rev 99360)
@@ -0,0 +1,9 @@
+import os.path
+import megrok.z3cform
+from zope.app.testing.functional import ZCMLLayer
+
+ftesting_zcml = os.path.join(os.path.dirname(megrok.z3cform.__file__),
+ 'ftesting.zcml')
+FunctionalLayer = ZCMLLayer(ftesting_zcml, __name__, 'FunctionalLayer',
+ allow_teardown=True)
+
Added: megrok.z3cform/branches/megrok.z3cform-pagelt/src/megrok/z3cform/tests/templates/layout.pt
===================================================================
--- megrok.z3cform/branches/megrok.z3cform-pagelt/src/megrok/z3cform/tests/templates/layout.pt (rev 0)
+++ megrok.z3cform/branches/megrok.z3cform-pagelt/src/megrok/z3cform/tests/templates/layout.pt 2009-04-22 07:49:04 UTC (rev 99360)
@@ -0,0 +1,7 @@
+<html>
+ <body>
+ <div class="layout" tal:content="structure view/render">
+ here comes the content
+ </div>
+ </body>
+</html>
Added: megrok.z3cform/branches/megrok.z3cform-pagelt/src/megrok/z3cform/tests/test_field.py
===================================================================
--- megrok.z3cform/branches/megrok.z3cform-pagelt/src/megrok/z3cform/tests/test_field.py (rev 0)
+++ megrok.z3cform/branches/megrok.z3cform-pagelt/src/megrok/z3cform/tests/test_field.py 2009-04-22 07:49:04 UTC (rev 99360)
@@ -0,0 +1,55 @@
+"""
+ >>> manfred = Mammoth()
+
+ >>> from zope import component
+ >>> from zope.publisher.browser import TestRequest
+ >>> request = TestRequest()
+
+ Check that fields have been created on the edition page:
+
+ >>> view = component.getMultiAdapter((manfred, request), name='edit')
+ >>> len(view.fields)
+ 2
+ >>> [field.__name__ for field in view.fields.values()]
+ ['name', 'age']
+
+
+ And on the display page:
+
+ >>> view = component.getMultiAdapter((manfred, request), name='index')
+ >>> len(view.fields)
+ 2
+ >>> [field.__name__ for field in view.fields.values()]
+ ['name', 'age']
+"""
+import grok
+
+from zope import interface, schema
+from zope.schema.fieldproperty import FieldProperty
+from megrok import z3cform
+
+class IMammoth(interface.Interface):
+
+ name = schema.TextLine(title=u"Name")
+ age = schema.Int(title=u"Age")
+
+class Mammoth(grok.Model):
+
+ interface.implements(IMammoth)
+
+ name = FieldProperty(IMammoth['name'])
+ age = FieldProperty(IMammoth['age'])
+
+class Edit(z3cform.EditForm):
+ pass
+
+class Index(z3cform.DisplayForm):
+ pass
+
+def test_suite():
+ from zope.testing import doctest
+ from megrok.z3cform.tests import FunctionalLayer
+ suite = doctest.DocTestSuite(optionflags=doctest.NORMALIZE_WHITESPACE|doctest.ELLIPSIS)
+ suite.layer = FunctionalLayer
+ return suite
+
Added: megrok.z3cform/branches/megrok.z3cform-pagelt/src/megrok/z3cform/tests/test_form.py
===================================================================
--- megrok.z3cform/branches/megrok.z3cform-pagelt/src/megrok/z3cform/tests/test_form.py (rev 0)
+++ megrok.z3cform/branches/megrok.z3cform-pagelt/src/megrok/z3cform/tests/test_form.py 2009-04-22 07:49:04 UTC (rev 99360)
@@ -0,0 +1,127 @@
+"""
+ >>> from zope.app.testing.functional import getRootFolder
+ >>> manfred = Mammoth()
+ >>> getRootFolder()["manfred"] = manfred
+ >>> import interlude
+
+ >>> from zope import component
+ >>> from zope.interface import alsoProvides
+ >>> from zope.publisher.browser import TestRequest
+ >>> request = TestRequest()
+ >>> alsoProvides(request, FormSkin)
+
+ Check that fields have been created on the edition page:
+
+ >>> view = component.getMultiAdapter((manfred, request), name='edit')
+ >>> view
+ <megrok.z3cform.tests.test_form.Edit object at ...>
+
+ If we call the EditPage we found it in the renderd Layout
+
+ >>> '<div class="layout">' in view()
+ True
+
+ If we call the render method we get the edit-page without the layout
+
+ >>> print view.render()
+ <form action="http://127.0.0.1" method="post"
+ enctype="multipart/form-data" class="edit-form"
+ name="form" id="form">
+ <div class="viewspace">
+ <div class="required-info">
+ <span class="required">*</span>
+ – required
+ </div>
+ <div>
+ <div id="form-widgets-name-row" class="row">
+ <div class="label">
+ <label for="form-widgets-name">
+ <span>Name</span>
+ <span class="required">*</span>
+ </label>
+ </div>
+ <div class="widget"><input type="text" id="form-widgets-name"
+ name="form.widgets.name"
+ class="text-widget required textline-field" value="" />
+ </div>
+ </div>
+ <div id="form-widgets-age-row" class="row">
+ <div class="label">
+ <label for="form-widgets-age">
+ <span>Age</span>
+ <span class="required">*</span>
+ </label>
+ </div>
+ <div class="widget"><input type="text" id="form-widgets-age"
+ name="form.widgets.age"
+ class="text-widget required int-field" value="" />
+ </div>
+ </div>
+ </div>
+ </div>
+ <div>
+ <div class="buttons">
+ <input type="submit" id="form-buttons-apply"
+ name="form.buttons.apply"
+ class="submit-widget button-field" value="Apply" />
+ </div>
+ </div>
+ </form>
+
+Does the handy url function works
+
+ >>> view.url()
+ 'http://127.0.0.1/manfred/edit'
+
+We set in the update method of our EditForm the property updateMaker
+to true.
+
+ >>> view.updateMarker
+ True
+
+"""
+
+import grok
+import megrok.pagelet
+
+from megrok import z3cform
+from zope import interface, schema
+from zope.schema.fieldproperty import FieldProperty
+
+from z3c.form import button, field
+
+class FormSkin(z3cform.FormLayer):
+ grok.skin('formskin')
+
+grok.layer(FormSkin)
+
+
+
+class IMammoth(interface.Interface):
+ name = schema.TextLine(title=u"Name")
+ age = schema.Int(title=u"Age")
+
+class Mammoth(grok.Model):
+ interface.implements(IMammoth)
+
+ name = FieldProperty(IMammoth['name'])
+ age = FieldProperty(IMammoth['age'])
+
+
+class MyLayout(megrok.pagelet.Layout):
+ grok.context(Mammoth)
+ megrok.pagelet.template('templates/layout.pt')
+
+class Edit(z3cform.EditForm):
+ fields = field.Fields(IMammoth)
+
+ def update(self):
+ self.updateMarker = True
+
+
+def test_suite():
+ from zope.testing import doctest
+ from megrok.z3cform.tests import FunctionalLayer
+ suite = doctest.DocTestSuite(optionflags=doctest.NORMALIZE_WHITESPACE|doctest.ELLIPSIS)
+ suite.layer = FunctionalLayer
+ return suite
Added: megrok.z3cform/branches/megrok.z3cform-pagelt/src/megrok/z3cform/tests/test_wizard.py
===================================================================
--- megrok.z3cform/branches/megrok.z3cform-pagelt/src/megrok/z3cform/tests/test_wizard.py (rev 0)
+++ megrok.z3cform/branches/megrok.z3cform-pagelt/src/megrok/z3cform/tests/test_wizard.py 2009-04-22 07:49:04 UTC (rev 99360)
@@ -0,0 +1,181 @@
+"""
+ >>> from zope.app.testing.functional import getRootFolder
+ >>> manfred = Person()
+ >>> getRootFolder()["person"] = manfred
+ >>> import interlude
+
+ >>> from zope import component
+ >>> from zope.interface import alsoProvides
+ >>> from zope.publisher.browser import TestRequest
+ >>> request = TestRequest()
+ >>> alsoProvides(request, WizardSkin)
+
+ Check that fields have been created on the edition page:
+
+ >>> view = component.getMultiAdapter((manfred, request), name='personwizard')
+ >>> view
+ <PersonWizard 'personwizard'>
+
+ >>> view.steps
+ [<PersonStep 'person'>, <AdressStep 'address'>]
+
+ >>> wiz = PersonWizard(manfred,request)
+ >>> wiz.__name__ = u'wizard'
+
+ >>> obj, names = wiz.browserDefault(request)
+ >>> obj
+ <PersonWizard 'personwizard'>
+ >>> names
+ ('person',)
+
+ >>> personStep = obj.publishTraverse(request, names[0])
+ >>> personStep.update()
+ >>> print personStep.render()
+ <form action="http://127.0.0.1" method="post"
+ enctype="multipart/form-data" class="edit-form"
+ id="form">
+ <BLANKLINE>
+ <div class="viewspace">
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <div class="required-info">
+ <span class="required">*</span>
+ – required
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <div id="form-widgets-street-row" class="row">
+ <BLANKLINE>
+ <div class="label">
+ <label for="form-widgets-street">
+ <span>Street</span>
+ <span class="required">*</span>
+ </label>
+ </div>
+ <div class="widget"><input type="text" id="form-widgets-street"
+ name="form.widgets.street"
+ class="text-widget required textline-field" value="" />
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <div id="form-widgets-city-row" class="row">
+ <BLANKLINE>
+ <div class="label">
+ <label for="form-widgets-city">
+ <span>City</span>
+ <span class="required">*</span>
+ </label>
+ </div>
+ <div class="widget"><input type="text" id="form-widgets-city"
+ name="form.widgets.city"
+ class="text-widget required textline-field" value="" />
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ </div>
+ <BLANKLINE>
+ <div>
+ <div class="buttons">
+ <input type="submit" id="form-buttons-apply"
+ name="form.buttons.apply"
+ class="submit-widget button-field" value="Apply" />
+ <BLANKLINE>
+ </div>
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ </form>
+ <BLANKLINE>
+
+
+"""
+
+import grok
+import megrok.pagelet
+
+from megrok import z3cform
+from zope import interface, schema
+from zope.schema.fieldproperty import FieldProperty
+
+from z3c.form import button, field
+
+class WizardSkin(z3cform.FormLayer):
+ grok.skin('wizardskin')
+
+grok.layer(WizardSkin)
+
+
+class IPerson(interface.Interface):
+ firstName = schema.TextLine(title=u'First Name')
+ lastName = schema.TextLine(title=u'Last Name')
+ street = schema.TextLine(title=u'Street')
+ city = schema.TextLine(title=u'City')
+
+
+class Person(grok.Model):
+ interface.implements(IPerson)
+
+ firstName = FieldProperty(IPerson['firstName'])
+ lastName = FieldProperty(IPerson['lastName'])
+ street = FieldProperty(IPerson['street'])
+ city = FieldProperty(IPerson['city'])
+
+
+class MyLayout(megrok.pagelet.Layout):
+ grok.context(Person)
+ megrok.pagelet.template('templates/layout.pt')
+
+class PersonWizard(z3cform.WizardForm):
+ grok.context(Person)
+ fields = field.Fields(IPerson)
+ label = u'Person Wizard'
+
+ def setUpSteps(self):
+ return [
+ z3cform.step.addStep(self, 'person', weight=1),
+ z3cform.step.addStep(self, 'address', weight=2),
+ ]
+
+from zope.publisher.interfaces.http import IHTTPRequest
+class AdressStep(z3cform.Step):
+ grok.name('address')
+ grok.adapts(Person, IHTTPRequest, PersonWizard)
+ grok.context(PersonWizard)
+ fields = field.Fields(IPerson).select('firstName', 'lastName')
+
+class PersonStep(z3cform.Step):
+ grok.name('person')
+ grok.adapts(Person, IHTTPRequest, PersonWizard)
+ grok.context(PersonWizard)
+ fields = field.Fields(IPerson).select('street', 'city')
+
+
+def test_suite():
+ from zope.testing import doctest
+ from megrok.z3cform.tests import FunctionalLayer
+ suite = doctest.DocTestSuite(optionflags=doctest.NORMALIZE_WHITESPACE|doctest.ELLIPSIS)
+ suite.layer = FunctionalLayer
+ return suite
More information about the Checkins
mailing list