"""Tests for waeup.kofa.schema fields.
"""
import unittest
from zope.interface.verify import verifyClass, verifyObject
from zope.schema.interfaces import IDate, IDatetime
from waeup.kofa.schema import FormattedDate, FormattedDatetime
from waeup.kofa.schema.interfaces import IFormattedDate, IFormattedDatetime

class FormattedDateTests(unittest.TestCase):
    # Tests for FormattedDate field.

    def test_iface(self):
        # make sure we fullfill interface contracts
        obj = FormattedDate()
        verifyClass(IDate, FormattedDate)
        verifyClass(IFormattedDate, FormattedDate)
        verifyObject(IDate, obj)
        verifyObject(IFormattedDate, obj)
        return

    def test_defaults(self):
        # we get expected default values for dates.
        obj = FormattedDate()
        self.assertEqual(obj.show_year, False)
        self.assertEqual(obj.date_format, None)
        return

    def test_attribs(self):
        # we can set the promised attributes.
        obj = FormattedDate(show_year=True, date_format='%d.%m.%Y')
        self.assertEqual(obj.show_year, True)
        self.assertEqual(obj.date_format, '%d.%m.%Y')
        return

class FormattedDatetimeTests(unittest.TestCase):
    # Tests for FormattedDatetime field.

    def test_iface(self):
        # make sure we fullfill interface contracts
        obj = FormattedDatetime()
        verifyClass(IDatetime, FormattedDatetime)
        verifyClass(IFormattedDatetime, FormattedDatetime)
        verifyObject(IDatetime, obj)
        verifyObject(IFormattedDatetime, obj)
        return

    def test_defaults(self):
        # we get expected default values for datetimes.
        obj = FormattedDatetime()
        self.assertEqual(obj.show_time, True)
        self.assertEqual(obj.date_format, None)
        return

    def test_attribs(self):
        # we can set the promised attributes.
        obj = FormattedDatetime(show_time=False,
                                date_format='%d.%m.%Y %H:%M:%S Uhr')
        self.assertEqual(obj.show_time, False)
        self.assertEqual(obj.date_format, '%d.%m.%Y %H:%M:%S Uhr')
        return
