[Checkins] SVN: megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/ Working on more tests for the wizard story...

Christian Klinger cklinger at novareto.de
Tue Jul 7 09:27:57 EDT 2009


Log message for revision 101701:
  Working on more tests for the wizard story...

Changed:
  U   megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/__init__.py
  U   megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/directives.py
  U   megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/interfaces.py
  U   megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/meta.py
  U   megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/skin.py
  U   megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/tests/test_wizard.py

-=-
Modified: megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/__init__.py
===================================================================
--- megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/__init__.py	2009-07-07 12:48:50 UTC (rev 101700)
+++ megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/__init__.py	2009-07-07 13:27:56 UTC (rev 101701)
@@ -2,10 +2,10 @@
 from components import Form, AddForm, EditForm, DisplayForm
 from components import PageForm, PageAddForm, PageEditForm, PageDisplayForm
 from components import WidgetTemplate
+from directives import field
+from skin import FormLayer, TableLayer
+from utils import apply_data_event
 from wizard import WizardForm, Step
+from z3c.form import widget, field, button, action
+from z3c.form.form import extends
 from z3c.wizard.interfaces import IWizard
-from skin import FormLayer, TableLayer
-from directives import field
-from z3c.form import widget, field, button, action 
-from z3c.form.form import extends
-from utils import apply_data_event

Modified: megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/directives.py
===================================================================
--- megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/directives.py	2009-07-07 12:48:50 UTC (rev 101700)
+++ megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/directives.py	2009-07-07 13:27:56 UTC (rev 101701)
@@ -2,18 +2,21 @@
 from martian import validateInterfaceOrClass
 from z3c.form import interfaces
 
+
 class field(martian.Directive):
     scope = martian.CLASS
     store = martian.ONCE
     default = None
     # validate = validateInterfaceOrClass
 
+
 class mode(martian.Directive):
     scope = martian.CLASS
     store = martian.ONCE
-    default = interfaces.INPUT_MODE 
+    default = interfaces.INPUT_MODE
     # validate = validateInterfaceOrClass
 
+
 class widget(martian.Directive):
     scope = martian.CLASS
     store = martian.ONCE

Modified: megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/interfaces.py
===================================================================
--- megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/interfaces.py	2009-07-07 12:48:50 UTC (rev 101700)
+++ megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/interfaces.py	2009-07-07 13:27:56 UTC (rev 101701)
@@ -1,6 +1,6 @@
-
 from zope import interface
 
+
 class IGrokForm(interface.Interface):
     """A grok z3c form. This marker interface is used to have a
     different default template.

Modified: megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/meta.py
===================================================================
--- megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/meta.py	2009-07-07 12:48:50 UTC (rev 101700)
+++ megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/meta.py	2009-07-07 13:27:56 UTC (rev 101701)
@@ -6,7 +6,7 @@
 
 from z3c.form import field
 from martian.error import GrokError
-from megrok.z3cform import wizard 
+from megrok.z3cform import wizard
 from zope.interface import Interface
 from megrok.z3cform import directives
 from megrok.z3cform import components
@@ -20,7 +20,6 @@
 
 def get_auto_fields(context):
     """Get the form fields for context.
-
     This methods is the same than for formlib implementation, but use
     z3cform fields instead.
     """
@@ -47,7 +46,7 @@
         # Set fields by default.
         if isinstance(form.fields, components.DefaultFields):
             form.fields = get_auto_fields(context)
- 
+
         # Don't override render method.
         if not getattr(form.render, 'base_method', False):
             raise GrokError(
@@ -72,13 +71,15 @@
 
     def grok(self, name, factory, module_info, **kw):
         factory.module_info = module_info
-        return super(WidgetTemplateGrokker, self).grok(name, factory, module_info, **kw)
+        return super(WidgetTemplateGrokker, self).grok(
+                          name, factory, module_info, **kw)
 
-    def execute(self, factory, config, context, layer, template, view, field, widget, mode, **kw):
+    def execute(self, factory, config, context, layer,
+                template, view, field, widget, mode, **kw):
         template_path = '/'.join(factory.module_info.path.split('/')[:-1])
-	template = "%s/%s" %(template_path, template)
-        widgetTemplateDirective(config, template, context, layer, 
-	                        view=view, field=field, widget=widget, mode=mode)  
+        template = "%s/%s" %(template_path, template)
+        widgetTemplateDirective(config, template, context, layer,
+                    view=view, field=field, widget=widget, mode=mode)
         return True
 
 
@@ -89,6 +90,6 @@
 
     def execute(self, factory, config, context, name, **kw):
 
-        wizardStepDirective(config, factory, name, 'zope.Public', wizard=context)
+        wizardStepDirective(config, factory, name,
+                            'zope.Public', wizard=context)
         return True
-	

Modified: megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/skin.py
===================================================================
--- megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/skin.py	2009-07-07 12:48:50 UTC (rev 101700)
+++ megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/skin.py	2009-07-07 13:27:56 UTC (rev 101701)
@@ -1,10 +1,17 @@
-import grok                                                                                                       
+import grok
 import z3c.formui.interfaces
 
+
 from z3c.form.interfaces import IFormLayer
 
-class FormLayer(grok.IDefaultBrowserLayer, IFormLayer, z3c.formui.interfaces.IDivFormLayer):
+
+class FormLayer(grok.IDefaultBrowserLayer, 
+                IFormLayer, 
+                z3c.formui.interfaces.IDivFormLayer):
     """ A div -based layer for a z3c.forms"""
 
-class TableLayer(grok.IDefaultBrowserLayer, IFormLayer, z3c.formui.interfaces.ITableFormLayer):
+
+class TableLayer(grok.IDefaultBrowserLayer, 
+                 IFormLayer, 
+                 z3c.formui.interfaces.ITableFormLayer):
     """ A table -based layer for a z3c.forms"""

Modified: megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/tests/test_wizard.py
===================================================================
--- megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/tests/test_wizard.py	2009-07-07 12:48:50 UTC (rev 101700)
+++ megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/tests/test_wizard.py	2009-07-07 13:27:56 UTC (rev 101701)
@@ -31,81 +31,116 @@
   >>> names
   ('personstep',)
 
+Render the personStep
+
   >>> personStep = obj.publishTraverse(request, names[0])
   >>> personStep.update()
-  >>> print personStep.render()
+  >>> page = personStep.render()
+  >>> print page
   <div class="wizard">
-        <div class="header">Person Wizard</div>
-        <div class="wizardMenu">
-          <span class="selected">
-              <span>Person</span>
-          </span>
-          <span>
-              <a href="http://127.0.0.1/person/personwizard/addressstep">Address</a>
-          </span>
-        </div>
-      <form action="http://127.0.0.1" method="post"
-            enctype="multipart/form-data" class="edit-form"
-            id="form">
-          <div class="viewspace">
-              <div class="label">Person</div>
-              <div class="required-info">
-                 <span class="required">*</span>
-                 &ndash; required
-              </div>
-            <div class="step">
-              <div id="form-widgets-firstName-row" class="row">
-                  <div class="label">
-                    <label for="form-widgets-firstName">
-                      <span>First Name</span>
-                      <span class="required">*</span>
-                    </label>
-                  </div>
-                  <div class="widget">
-        <input id="form-widgets-firstName"
-               name="form.widgets.firstName"
-               class="text-widget required textline-field"
-               value="" type="text" />
+      <div class="header">Person Wizard</div>
+      <div class="wizardMenu">
+        <span class="selected">
+            <span>Person</span>
+        </span>
+        <span>
+            <a href="http://127.0.0.1/person/personwizard/addressstep">Address</a>
+        </span>
+      </div>
+    <form action="http://127.0.0.1" method="post"
+          enctype="multipart/form-data" class="edit-form"
+          id="form">
+        <div class="viewspace">
+            <div class="label">Person</div>
+            <div class="required-info">
+               <span class="required">*</span>
+               &ndash; required
+            </div>
+          <div class="step">
+            <div id="form-widgets-firstName-row" class="row">
+                <div class="label">
+                  <label for="form-widgets-firstName">
+                    <span>First Name</span>
+                    <span class="required">*</span>
+                  </label>
+                </div>
+                <div class="widget">
+      <input id="form-widgets-firstName"
+             name="form.widgets.firstName"
+             class="text-widget required textline-field"
+             value="" type="text" />
     </div>
-              </div>
-              <div id="form-widgets-lastName-row" class="row">
-                  <div class="label">
-                    <label for="form-widgets-lastName">
-                      <span>Last Name</span>
-                      <span class="required">*</span>
-                    </label>
-                  </div>
-                  <div class="widget">
-        <input id="form-widgets-lastName"
-               name="form.widgets.lastName"
-               class="text-widget required textline-field"
-               value="" type="text" />
+            </div>
+            <div id="form-widgets-lastName-row" class="row">
+                <div class="label">
+                  <label for="form-widgets-lastName">
+                    <span>Last Name</span>
+                    <span class="required">*</span>
+                  </label>
+                </div>
+                <div class="widget">
+      <input id="form-widgets-lastName"
+             name="form.widgets.lastName"
+             class="text-widget required textline-field"
+             value="" type="text" />
     </div>
+            </div>
+          </div>
+            <div>
+              <div class="buttons">
+                <span class="back">
+                </span>
+                <span class="step">
+  <input id="form-buttons-apply" name="form.buttons.apply"
+         class="submit-widget button-field" value="Apply"
+         type="submit" />
+                </span>
+                <span class="forward">
+  <input id="form-buttons-next" name="form.buttons.next"
+         class="submit-widget button-field" value="Next"
+         type="submit" />
+                </span>
               </div>
             </div>
-              <div>
-                <div class="buttons">
-                  <span class="back">
-                  </span>
-                  <span class="step">
-    <input id="form-buttons-apply" name="form.buttons.apply"
-           class="submit-widget button-field" value="Apply"
-           type="submit" />
-                  </span>
-                  <span class="forward">
-                  </span>
-                </div>
-              </div>
-          </div>
-      </form>
-    </div>
+        </div>
+    </form>
+  </div>
 
+Sending an request but with no data
 
-  >>> #from zope.testbrowser.testing import Browser
-  >>> #browser = Browser()
-  >>> #browser.addHeader('Authorization', 'Basic mgr:mgrpw')
-  >>> #browser.open('http://localhost/++skin++formwizardlayer/person')  
-  >>> #import pdb; pdb.set_trace()
+  >>> request = TestRequest(form={'form.buttons.next': 'Next'})
+  >>> alsoProvides(request, FormWizardLayer)
+  >>> personWizard = PersonWizard(person, request)
+  >>> personWizard.__parent__ = person
+  >>> personWizard.__name__ = u'wizard'
+  >>> personStep = personWizard.publishTraverse(request, names[0])
+  >>> personStep.update()
+  >>> print personStep.render()
+  <div class="wizard">
+  ...
+    <div class="summary">There were some errors.</div>
+  ...
+    <div class="error">Required input is missing.</div>
+  ...
+    <div class="error">Required input is missing.</div>
+  ...
+  
+Sending an request with a working data set...
+
+  >>> request = TestRequest(form={'form.widgets.firstName': u'Roger',
+  ...                             'form.widgets.lastName': u'Ineichen',
+  ...                             'form.buttons.next': 'Next'})
+  >>> alsoProvides(request, FormWizardLayer)
+  >>> personWizard = PersonWizard(person, request)
+  >>> personWizard.__parent__ = person
+  >>> personWizard.__name__ = u'wizard'
+  >>> personStep = personWizard.publishTraverse(request, names[0])
+  >>> personStep.update()
+  >>> print personStep.render()
+
+  >>> print personWizard.nextURL
+  http://127.0.0.1/person/wizard/addressstep
+
 """
 
 import grok



More information about the Checkins mailing list