Skip to content

Commit

Permalink
Backported my XXX removals.
Browse files Browse the repository at this point in the history
  • Loading branch information
strichter committed Jul 9, 2004
1 parent 55e4540 commit dca2a8c
Show file tree
Hide file tree
Showing 13 changed files with 892 additions and 30 deletions.
153 changes: 153 additions & 0 deletions browser/ftests/test_checkboxwidget.py
@@ -0,0 +1,153 @@
##############################################################################
#
# 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
from persistent import Persistent
from transaction import get_transaction

from zope.interface import Interface
from zope.interface import implements

from zope.schema import Bool
from zope.app.form.browser import CheckBoxWidget

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

from zope.app.tests.functional import BrowserTestCase


class IBoolTest(Interface):

b1 = Bool(
required=True)

b2 = Bool(
required=False)


registerEditForm(IBoolTest)


class BoolTest(Persistent):

implements(IBoolTest)

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

defineSecurity(BoolTest, IBoolTest)


class Test(BrowserTestCase):


def test_display_editform(self):
self.getRootFolder()['test'] = BoolTest()
get_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()
get_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
get_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()
get_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')


239 changes: 239 additions & 0 deletions browser/ftests/test_datetimewidget.py
@@ -0,0 +1,239 @@
##############################################################################
#
# 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.
#
##############################################################################
"""DateTime Widget Functional Tests
$Id$
"""
import unittest
import re
from persistent import Persistent
from transaction import get_transaction
from datetime import datetime
from zope.app.datetimeutils import parseDatetimetz, tzinfo

from zope.interface import Interface
from zope.interface import implements

from zope.schema import Datetime, Choice

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

from zope.app.tests.functional import BrowserTestCase


class IDatetimeTest(Interface):

d1 = Datetime(
required=True,
min=datetime(2003, 1, 1, tzinfo=tzinfo(0)),
max=datetime(2020, 12, 31, tzinfo=tzinfo(0)))

d2 = Datetime(
required=False)

d3 = Choice(
required=False,
values=(
datetime(2003, 9, 15, tzinfo=tzinfo(0)),
datetime(2003, 10, 15, tzinfo=tzinfo(0))),
missing_value=datetime(2000, 1, 1, tzinfo=tzinfo(0)))

registerEditForm(IDatetimeTest)


class DatetimeTest(Persistent):

implements(IDatetimeTest)

def __init__(self):
self.d1 = datetime(2003, 4, 6, tzinfo=tzinfo(0))
self.d2 = datetime(2003, 8, 6, tzinfo=tzinfo(0))
self.d3 = None

defineSecurity(DatetimeTest, IDatetimeTest)


def getDateForField(field, source):
"""Returns a datetime object for the specified field in source.
Returns None if the field value cannot be converted to date.
"""

# look in input element first
pattern = '<input .* name="field.%s".* value="(.*)".*>' % field
m = re.search(pattern, source)
if m is None:
# look in a select element
pattern = '<select .* name="field.%s".*>.*' \
'<option value="(.*)" selected>*.</select>' % field
m = re.search(pattern, source, re.DOTALL)
if m is None:
return None

try:
return parseDatetimetz(m.group(1))
except:
# ignore specifics
return None


class Test(BrowserTestCase):


def test_display_editform(self):
self.getRootFolder()['test'] = DatetimeTest()
get_transaction().commit()
object = traverse(self.getRootFolder(), 'test')

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

# confirm date values in form with actual values
self.assertEqual(getDateForField('d1', response.getBody()), object.d1)
self.assertEqual(getDateForField('d2', response.getBody()), object.d2)
self.assert_(getDateForField('d3', response.getBody()) is None)


def test_submit_editform(self):
self.getRootFolder()['test'] = DatetimeTest()
get_transaction().commit()

d1 = datetime(2003, 2, 1, tzinfo=tzinfo(0))
d2 = datetime(2003, 2, 2, tzinfo=tzinfo(0))
d3 = datetime(2003, 10, 15, tzinfo=tzinfo(0))

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

# check new values in object
object = traverse(self.getRootFolder(), 'test')

self.assertEqual(object.d1, d1)
self.assertEqual(object.d2, d2)
self.assertEqual(object.d3, d3)


def test_missing_value(self):
self.getRootFolder()['test'] = DatetimeTest()
get_transaction().commit()

# submit missing values for d2 and d3
response = self.publish('/test/edit.html', form={
'UPDATE_SUBMIT' : '',
'field.d2' : '',
'field.d3-empty-marker' : '' })
self.assertEqual(response.getStatus(), 200)
self.assert_(updatedMsgExists(response.getBody()))

# check new values in object
object = traverse(self.getRootFolder(), 'test')
self.assert_(object.d2 is None) # default missing_value for dates
# 2000-1-1 is missing_value for d3
self.assertEqual(object.d3, datetime(2000, 1, 1, tzinfo=tzinfo(0)))


def test_required_validation(self):
self.getRootFolder()['test'] = DatetimeTest()
get_transaction().commit()

# submit missing values for required field d1
response = self.publish('/test/edit.html', form={
'UPDATE_SUBMIT' : '',
'field.d1' : '',
'field.d2' : '',
'field.d3' : '' })
self.assertEqual(response.getStatus(), 200)

# confirm error msgs
self.assert_(missingInputErrorExists('d1', response.getBody()))
self.assert_(not missingInputErrorExists('d2', response.getBody()))
self.assert_(not missingInputErrorExists('d3', response.getBody()))


def test_invalid_value(self):
self.getRootFolder()['test'] = DatetimeTest()
get_transaction().commit()

# submit a value for d3 that isn't allowed
response = self.publish('/test/edit.html', form={
'UPDATE_SUBMIT' : '',
'field.d3' : str(datetime(2003, 2, 1, tzinfo=tzinfo(0))) })
self.assertEqual(response.getStatus(), 200)
self.assert_(invalidValueErrorExists('d3', response.getBody()))


def test_min_max_validation(self):
self.getRootFolder()['test'] = DatetimeTest()
get_transaction().commit()

# submit value for d1 that is too low
response = self.publish('/test/edit.html', form={
'UPDATE_SUBMIT' : '',
'field.d1' : str(datetime(2002, 12, 31, tzinfo=tzinfo(0))) })
self.assertEqual(response.getStatus(), 200)
self.assert_(validationErrorExists('d1', 'Value is too small',
response.getBody()))

# submit value for i1 that is too high
response = self.publish('/test/edit.html', form={
'UPDATE_SUBMIT' : '',
'field.d1' : str(datetime(2021, 1, 1, tzinfo=tzinfo(0))) })
self.assertEqual(response.getStatus(), 200)
self.assert_(validationErrorExists('d1', 'Value is too big',
response.getBody()))


def test_omitted_value(self):
self.getRootFolder()['test'] = DatetimeTest()
get_transaction().commit()

# remember default values
object = traverse(self.getRootFolder(), 'test')
d1 = object.d1
d2 = object.d2
self.assert_(d2 is not None)
d3 = object.d3

# submit change with only d2 present -- note that required
# field d1 is omitted, which should not cause a validation error
response = self.publish('/test/edit.html', form={
'UPDATE_SUBMIT' : '',
'field.d2' : '' })
self.assertEqual(response.getStatus(), 200)
self.assert_(updatedMsgExists(response.getBody()))

# check new value in object
object = traverse(self.getRootFolder(), 'test')
self.assertEqual(object.d1, d1)
self.assert_(object.d2 is None)
self.assertEqual(object.d3, d3)


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

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


0 comments on commit dca2a8c

Please sign in to comment.