source: main/waeup.sirp/branches/ulif-fasttables/src/waeup/sirp/widgets/tests/test_objectwidget.py @ 5310

Last change on this file since 5310 was 5309, checked in by uli, 15 years ago

Add some first WAeUPObjectDisplayWidget tests.

File size: 5.2 KB
Line 
1"""Tests for objectwidget.
2"""
3import unittest
4import sys
5from zope.component import testing
6from zope.interface import Interface, implements
7from zope.publisher.browser import TestRequest
8from zope.schema import Object, TextLine
9from zope.schema.interfaces import ITextLine
10import doctest
11from zope.publisher.interfaces.browser import IDefaultBrowserLayer
12from zope.component import provideAdapter
13
14from zope.formlib.interfaces import (
15    IInputWidget, IDisplayWidget,MissingInputError)
16from zope.formlib.widgets import TextWidget
17from zope.formlib.tests.test_browserwidget import BrowserWidgetTest
18from zope.formlib.interfaces import IWidgetInputErrorView
19
20from waeup.sirp.widgets.objectwidget import WAeUPObjectWidget as ObjectWidget
21from waeup.sirp.widgets.objectwidget import (
22    WAeUPObjectDisplayWidget as ObjectDisplayWidget)
23
24class ITestContact(Interface):
25    name = TextLine()
26    email = TextLine()
27   
28class TestContact(object):
29    implements(ITestContact)
30
31class ITestContent(Interface):
32    foo = Object(
33        ITestContact,
34        title = u'Foo Title',
35        description = u'',
36        )
37   
38class ObjectWidgetInputErrorView(object):
39    implements(IWidgetInputErrorView)
40
41    def __init__(self, error, request):
42        self.error = error
43        self.request = request
44
45    def snippet(self):
46        return repr(self.error)
47
48class ObjectWidgetTest(BrowserWidgetTest):
49    """Documents and tests the object widget.
50
51        >>> from zope.interface.verify import verifyClass
52        >>> verifyClass(IInputWidget, ObjectWidget)
53        True
54    """
55
56    _FieldFactory = Object
57    def _WidgetFactory(self, context, request, **kw):
58        kw.update({'factory': TestContact})
59        return ObjectWidget(context, request, **kw)
60
61    def setUpContent(self, desc=u'', title=u'Foo Title'):
62        provideAdapter(TextWidget, (ITextLine, IDefaultBrowserLayer),
63                       IInputWidget)
64       
65        class TestObject(object):
66            implements(ITestContent)
67
68        self.content = TestObject()
69        self.field = ITestContent['foo']
70        self.request = TestRequest(HTTP_ACCEPT_LANGUAGE='pl')
71        self.request.form['field.foo'] = u'Foo Value'
72        self._widget = self._WidgetFactory(self.field, self.request)
73
74    def setUp(self):
75        super(ObjectWidgetTest, self).setUp()
76        self.field = Object(ITestContact, __name__=u'foo')
77        provideAdapter(TextWidget,
78                       (ITextLine, IDefaultBrowserLayer),
79                       IInputWidget)
80
81    def test_applyChanges(self):
82        self.request.form['field.foo.name'] = u'Foo Name'
83        self.request.form['field.foo.email'] = u'foo@foo.test'
84        widget = self._WidgetFactory(self.field, self.request)
85
86        self.assertEqual(widget.applyChanges(self.content), True)
87        self.assertEqual(hasattr(self.content, 'foo'), True)
88        self.assertEqual(isinstance(self.content.foo, TestContact), True)
89        self.assertEqual(self.content.foo.name, u'Foo Name')
90        self.assertEqual(self.content.foo.email, u'foo@foo.test')
91
92    def test_error(self):
93        provideAdapter(
94            ObjectWidgetInputErrorView,
95            (MissingInputError, TestRequest),
96            IWidgetInputErrorView)
97
98        widget = self._WidgetFactory(self.field, self.request)
99        self.assertRaises(MissingInputError, widget.getInputValue)
100        error_html = widget.error()
101        if sys.version_info < (2, 5):
102            self.failUnless("email: <zope.formlib.interfaces.Mis"
103                             in error_html)
104            self.failUnless("name: <zope.formlib.interfaces.Miss"
105                             in error_html)
106        else:
107            self.failUnless(
108                "email: MissingInputError(u'field.foo.email', u'', None)"
109                in error_html)
110            self.failUnless(
111                "name: MissingInputError(u'field.foo.name', u'', None)"
112                in error_html)
113
114    def test_applyChangesNoChange(self):
115        self.content.foo = TestContact()
116        self.content.foo.name = u'Foo Name'
117        self.content.foo.email = u'foo@foo.test'
118
119        self.request.form['field.foo.name'] = u'Foo Name'
120        self.request.form['field.foo.email'] = u'foo@foo.test'
121        widget = self._WidgetFactory(self.field, self.request)
122        widget.setRenderedValue(self.content.foo)
123
124        self.assertEqual(widget.applyChanges(self.content), False)
125        self.assertEqual(hasattr(self.content, 'foo'), True)
126        self.assertEqual(isinstance(self.content.foo, TestContact), True)
127        self.assertEqual(self.content.foo.name, u'Foo Name')
128        self.assertEqual(self.content.foo.email, u'foo@foo.test')
129
130class ObjectDisplayWidgetTest(BrowserWidgetTest):
131    """Documents and tests the display variant of object widget.
132
133        >>> from zope.interface.verify import verifyClass
134        >>> verifyClass(IDisplayWidget, ObjectDisplayWidget)
135        True
136    """
137
138
139def test_suite():
140    return unittest.TestSuite((
141        unittest.makeSuite(ObjectWidgetTest),
142        unittest.makeSuite(ObjectDisplayWidgetTest),
143        #doctest.DocFileSuite('../objectwidget.txt',
144        #                     setUp=testing.setUp,
145        #                     tearDown=testing.tearDown),
146        doctest.DocTestSuite(),
147        ))
148
149if __name__=='__main__':
150    unittest.main(defaultTest='test_suite')
Note: See TracBrowser for help on using the repository browser.