Skip to content

Commit

Permalink
Fix up zope.app for new location of zope.traversing.
Browse files Browse the repository at this point in the history
(also sneaked in some minor cosmetics regarding zapi/ztapi)
  • Loading branch information
philikon committed Apr 5, 2006
1 parent daec302 commit 2933ad0
Show file tree
Hide file tree
Showing 10 changed files with 1,534 additions and 28 deletions.
147 changes: 147 additions & 0 deletions browser/ftests/test_booleanradiowidget.py
@@ -0,0 +1,147 @@
##############################################################################
#
# 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.1 (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.
#
##############################################################################
"""Radio Widget Functional Tests
$Id: $
"""
import unittest
import transaction
from persistent import Persistent

import zope.security.checker
from zope.interface import Interface, implements
from zope.schema import Bool
from zope.traversing.api import traverse

from zope.app.form.browser.ftests.support import *
from zope.app.testing.functional import BrowserTestCase

class IFoo(Interface):

bar = Bool(title=u'Bar')

class Foo(Persistent):

implements(IFoo)

def __init__(self):
self.bar = True

class Test(BrowserTestCase):

def setUp(self):
BrowserTestCase.setUp(self)
registerEditForm(IFoo, widgets={
'bar': { 'class': 'zope.app.form.browser.BooleanRadioWidget' }})
defineSecurity(Foo, IFoo)

def test_display_editform(self):
self.getRootFolder()['foo'] = Foo()
transaction.commit()

# display edit view
response = self.publish('/foo/edit.html')
self.assertEqual(response.getStatus(), 200)

# bar field should be displayed as two radio buttons
self.assert_(patternExists(
'<input .*checked="checked".*name="field.bar".*type="radio".*'
'value="on".* />',
response.getBody()))
self.assert_(patternExists(
'<input .*name="field.bar".*type="radio".*value="off".* />',
response.getBody()))

# a hidden element is used to note that the field is present
self.assert_(patternExists(
'<input name="field.bar-empty-marker" type="hidden" value="1".* />',
response.getBody()))


def test_submit_editform(self):
self.getRootFolder()['foo'] = Foo()
transaction.commit()

# submit edit view
response = self.publish('/foo/edit.html', form={
'UPDATE_SUBMIT' : '',
'field.bar' : 'off'})
self.assertEqual(response.getStatus(), 200)
self.assert_(updatedMsgExists(response.getBody()))

# check new values in object
object = traverse(self.getRootFolder(), 'foo')
self.assertEqual(object.bar, False)


def test_missing_value(self):
self.getRootFolder()['foo'] = Foo()
transaction.commit()

# temporarily make bar field not required
IFoo['bar'].required = False

# submit missing value for bar
response = self.publish('/foo/edit.html', form={
'UPDATE_SUBMIT' : '',
'field.bar-empty-marker' : '' })
self.assertEqual(response.getStatus(), 200)
self.assert_(updatedMsgExists(response.getBody()))

# confirm use of missing_value as new object value
self.assert_(IFoo['bar'].missing_value is None)
object = traverse(self.getRootFolder(), 'foo')
self.assert_(object.bar is None)

# restore bar required state
IFoo['bar'].required = True


def test_required_validation(self):
self.getRootFolder()['foo'] = Foo()
transaction.commit()

self.assert_(IFoo['bar'].required)

# submit missing value for required field bar
response = self.publish('/foo/edit.html', form={
'UPDATE_SUBMIT' : '',
'field.bar-empty-marker' : '1'})
self.assertEqual(response.getStatus(), 200)

# confirm error msgs
self.assert_(missingInputErrorExists('bar', response.getBody()))


def test_invalid_allowed_value(self):
self.getRootFolder()['foo'] = Foo()
transaction.commit()

# submit a value for bar isn't allowed
response = self.publish('/foo/edit.html', form={
'UPDATE_SUBMIT' : '',
'field.bar' : 'bogus' })
self.assertEqual(response.getStatus(), 200)

self.assert_(validationErrorExists('bar', 'Invalid value',
response.getBody()))


def test_suite():
suite = unittest.TestSuite()
suite.addTest(unittest.makeSuite(Test))
return suite

if __name__=='__main__':
unittest.main(defaultTest='test_suite')
148 changes: 148 additions & 0 deletions browser/ftests/test_checkboxwidget.py
@@ -0,0 +1,148 @@
##############################################################################
#
# 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.1 (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.
#
##############################################################################
"""Checkbox Widget tests
$Id$
"""
import unittest
import transaction
from persistent import Persistent

import zope.security.checker
from zope.interface import Interface, implements
from zope.schema import Bool
from zope.traversing.api import traverse

from zope.app.form.browser import CheckBoxWidget
from zope.app.form.browser.ftests.support import *
from zope.app.testing.functional import BrowserTestCase

class IBoolTest(Interface):

b1 = Bool(
required=True)

b2 = Bool(
required=False)

class BoolTest(Persistent):

implements(IBoolTest)

def __init__(self):
self.b1 = True
self.b2 = False

class Test(BrowserTestCase):


def setUp(self):
BrowserTestCase.setUp(self)
registerEditForm(IBoolTest)
defineSecurity(BoolTest, IBoolTest)

def test_display_editform(self):
self.getRootFolder()['test'] = BoolTest()
transaction.commit()

# display edit view
response = self.publish('/test/edit.html')
self.assertEqual(response.getStatus(), 200)

# b1 and b2 should be displayed in checkbox input fields
self.assert_(patternExists(
'<input .* checked="checked".* name="field.b1".* ' \
'type="checkbox".* />',
response.getBody()))
self.assert_(patternExists(
'<input .* name="field.b2".* type="checkbox".* />',
response.getBody()))
# confirm that b2 is *not* checked
self.assert_(not patternExists(
'<input .* checked="checked".* name="field.b2".* ' \
'type="checkbox".* />',
response.getBody()))


def test_submit_editform(self):
self.getRootFolder()['test'] = BoolTest()
transaction.commit()

# submit edit view
response = self.publish('/test/edit.html', form={
'UPDATE_SUBMIT' : '',
'field.b1' : '',
'field.b2' : 'on' })
self.assertEqual(response.getStatus(), 200)
self.assert_(updatedMsgExists(response.getBody()))

# check new values in object
object = traverse(self.getRootFolder(), 'test')
self.assertEqual(object.b1, False)
self.assertEqual(object.b2, True)


def test_unexpected_value(self):
object = BoolTest()
object.b1 = True
object.b2 = True
self.getRootFolder()['test'] = object
transaction.commit()

# submit invalud type for text line
response = self.publish('/test/edit.html', form={
'UPDATE_SUBMIT' : '',
'field.b1' : 'true',
'field.b2' : 'foo' })
self.assertEqual(response.getStatus(), 200)
self.assert_(updatedMsgExists(response.getBody()))

# values other than 'on' should be treated as False
object = traverse(self.getRootFolder(), 'test')
self.assertEqual(object.b1, False)
self.assertEqual(object.b2, False)


def test_missing_value(self):
# Note: checkbox widget doesn't support a missing value. This
# test confirms that one cannot set a Bool field to None.

self.getRootFolder()['test'] = BoolTest()
transaction.commit()

# confirm default value of b1 is True
object = traverse(self.getRootFolder(), 'test')
self.assertEqual(object.b1, True)

# submit missing for b1
response = self.publish('/test/edit.html', form={
'UPDATE_SUBMIT' : '',
'field.b1' : CheckBoxWidget._missing })
self.assertEqual(response.getStatus(), 200)
self.assert_(updatedMsgExists(response.getBody()))

# confirm b1 is not missing
object = traverse(self.getRootFolder(), 'test')
self.assert_(object.b1 != Bool.missing_value)


def test_suite():
suite = unittest.TestSuite()
suite.addTest(unittest.makeSuite(Test))
return suite

if __name__=='__main__':
unittest.main(defaultTest='test_suite')


13 changes: 5 additions & 8 deletions browser/ftests/test_datetimewidget.py
Expand Up @@ -17,22 +17,19 @@
"""
import unittest
import re

import transaction
import zope.security.checker
from persistent import Persistent
from datetime import datetime

import zope.security.checker
from zope.datetime import parseDatetimetz, tzinfo
from zope.interface import Interface
from zope.interface import implements
from zope.interface import Interface, implements
from zope.schema import Datetime, Choice
from zope.traversing.api import traverse

from support import *
from zope.app.traversing.api import traverse

from zope.app.form.browser.ftests.support import *
from zope.app.testing.functional import BrowserTestCase


class IDatetimeTest(Interface):

d2 = Datetime(
Expand Down

0 comments on commit 2933ad0

Please sign in to comment.