Ignore:
Timestamp:
2 Jun 2011, 02:46:31 (14 years ago)
Author:
uli
Message:

Some converter tests for basic data types.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • main/waeup.sirp/trunk/src/waeup/sirp/utils/tests/test_converters.py

    r6262 r6264  
    2323Tests for converterts.
    2424"""
     25import datetime
    2526import os
    2627import shutil
     
    3233
    3334from waeup.sirp.app import University
    34 from waeup.sirp.interfaces import ISchemaTypeConverter
    3535from waeup.sirp.testing import FunctionalLayer, doctestsuite_for_module
    36 
     36from waeup.sirp.utils.converters import IObjectConverter
     37
     38from zope import schema
     39from zope.interface import Interface, implements, invariant, Invalid
     40from waeup.sirp.utils.helpers import attrs_to_fields
     41
     42class IContact(Interface):
     43    name = schema.TextLine(
     44        title = u'Name',
     45        default = u'Manfred'
     46        )
     47    age = schema.Int(
     48        title = u'Age',
     49        default = 23,
     50        required = True,
     51        )
     52    city = schema.TextLine(
     53        title = u'City',
     54        required = True,
     55        )
     56    vip = schema.Bool(
     57        title = u'Celebrity',
     58        default = False,
     59        required = True,
     60        )
     61    birthday = schema.Date(
     62        title = u'Birthday',
     63        default = None,
     64        )
     65    @invariant
     66    def kevinIsYoung(contact):
     67        if contact.age > 16 and contact.name == 'Kevin':
     68            raise Invalid('Kevins are age 16 or below.')
     69
     70class Contact(object):
     71    implements(IContact)
     72    name = None
     73    age = None
     74Contact = attrs_to_fields(Contact)
    3775
    3876class ConverterTests(FunctionalTestCase):
     
    62100        return
    63101
    64     def test_foo(self):
    65         from zope import schema
    66         from zope.interface import Interface, implements
    67 
    68         class IContact(Interface):
    69             name = schema.TextLine(
    70                 title = u'Name',
    71                 default = u'Manfred'
    72                 )
    73             age = schema.Int(
    74                 title = u'Age',
    75                 default = 23,
    76                 required = True,
    77                 )
    78             city = schema.TextLine(
    79                 title = u'City',
    80                 required = True,
    81                 )
    82 
    83 
    84         class Contact(object):
    85             implements(IContact)
    86             name = None
    87             age = None
    88 
    89         from waeup.sirp.utils.helpers import attrs_to_fields
    90         Contact = attrs_to_fields(Contact)
    91 
    92         context = Contact()
    93         conv = ISchemaTypeConverter(IContact)
    94         input_data = dict(name='Foo')
    95         input_data = dict(name='Foo', age='sweet sixteen')
    96         err, inv_err, data = conv.applyRowData(input_data, context)
    97         #print context.name, context.age
    98         #print err, inv_err, data
    99         #import pdb; pdb.set_trace()
    100         #val = conv._convertValueFromString('Foo', context=context)
    101         #print field, conv
     102    def test_valid_data(self):
     103        contact = Contact()
     104        contact.age = 33
     105        input_data = dict(name='Rudi', age='99')
     106        converter = IObjectConverter(IContact) # a converter to IContact
     107        err, inv_err, new_contact = converter.applyRowData(
     108            input_data, contact)
     109        assert new_contact is contact
     110        assert contact.name == 'Rudi'
     111        assert contact.age == 99
     112        return
     113
     114    def test_bool(self):
     115        contact1 = Contact()
     116        contact2 = Contact()
     117        input_data1 = dict(vip='on')
     118        input_data2 = dict(vip='')
     119        converter = IObjectConverter(IContact) # a converter to IContact
     120        err1, inv_err1, new_contact1 = converter.applyRowData(
     121            input_data1, contact1)
     122        err2, inv_err2, new_contact2 = converter.applyRowData(
     123            input_data2, contact2)
     124        assert contact1.vip is True
     125        assert contact2.vip is False
     126
     127    def test_int(self):
     128        contact = Contact()
     129        input_data = dict(age='99')
     130        converter = IObjectConverter(IContact) # a converter to IContact
     131        err, inv_err, new_contact = converter.applyRowData(
     132            input_data, contact)
     133        assert contact.age == 99
     134        return
     135
     136    def test_int_invalid(self):
     137        contact = Contact()
     138        input_data = dict(age='sweet sixteen')
     139        converter = IObjectConverter(IContact) # a converter to IContact
     140        err, inv_err, new_contact = converter.applyRowData(
     141            input_data, contact)
     142        self.assertEqual(err, [('age', u'Invalid integer data')])
     143        return
     144
     145    def test_textline(self):
     146        contact = Contact()
     147        input_data = dict(name='Rudi')
     148        converter = IObjectConverter(IContact) # a converter to IContact
     149        err, inv_err, new_contact = converter.applyRowData(
     150            input_data, contact)
     151        self.assertEqual(contact.name, u'Rudi')
     152        assert isinstance(contact.name, unicode)
     153        return
     154
     155    def test_invariant(self):
     156        contact = Contact()
     157        input_data = dict(name='Kevin', age='22')
     158        converter = IObjectConverter(IContact) # a converter to IContact
     159        err, inv_err, new_contact = converter.applyRowData(
     160            input_data, contact)
     161        self.assertEqual(inv_err, ['Kevins are age 16 or below.'])
     162        return
     163
     164    def test_date(self):
     165        contact = Contact()
     166        converter = IObjectConverter(IContact) # a converter to IContact
     167        err, inv_err, new_contact = converter.applyRowData(
     168            dict(birthday='1945/12/23'), contact)
     169        assert contact.birthday == datetime.date(1945, 12, 23)
     170        assert isinstance(contact.birthday, datetime.date)
     171
     172        err, inv_err, new_contact = converter.applyRowData(
     173            dict(birthday='1945/23/12'), contact)
     174        assert contact.birthday == datetime.date(1945, 12, 23)
     175
     176        err, inv_err, new_contact = converter.applyRowData(
     177            dict(birthday='23/12/1945'), contact)
     178        assert contact.birthday == datetime.date(1945, 12, 23)
     179
     180        err, inv_err, new_contact = converter.applyRowData(
     181            dict(birthday='23.12.1945'), contact)
     182        assert contact.birthday == datetime.date(1945, 12, 23)
     183
     184        err, inv_err, new_contact = converter.applyRowData(
     185            dict(birthday='23-12-1945'), contact)
     186        assert contact.birthday == datetime.date(1945, 12, 23)
     187        return
     188
     189    def test_date_invalid(self):
     190        contact = Contact()
     191        converter = IObjectConverter(IContact) # a converter to IContact
     192        err, inv_err, new_contact = converter.applyRowData(
     193            dict(birthday='not-a-date'), contact)
     194        self.assertEqual(err, [('birthday', u'Invalid datetime data')])
    102195
    103196def test_suite():
Note: See TracChangeset for help on using the changeset viewer.