[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>
+           &ndash; 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>
+           &ndash; 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