From b82bb6eecb77df44676d758f5ceb4727e771b9c3 Mon Sep 17 00:00:00 2001 From: Bertrand Chenal Date: Fri, 6 Nov 2009 18:40:07 +0100 Subject: [PATCH] Added unit tests for date field --- trytond/backend/fields.py | 14 +- trytond/tests/test_tryton.py | 255 +++++++++++++++++++++++++++++++++++ trytond/tests/tests.py | 34 +++++ 3 files changed, 302 insertions(+), 1 deletion(-) diff --git a/trytond/backend/fields.py b/trytond/backend/fields.py index 513fe6ce4d..c2efd8bc8e 100644 --- a/trytond/backend/fields.py +++ b/trytond/backend/fields.py @@ -1,5 +1,7 @@ #This file is part of Tryton. The COPYRIGHT file at the top level of #this repository contains the full copyright notices and license terms. +import datetime + try: import hashlib except ImportError: @@ -79,7 +81,17 @@ class Date(Field): @staticmethod def sql_format(value): - return value or None + if not value: + return None + if isinstance(value, basestring): + year, month, day = map(int, value.split("-", 2)) + return datetime.date(year, month, day) + + assert(isinstance(value, datetime.date)) + # datetime must be tested separately because datetime is a + # subclass of date: + assert(not isinstance(value, datetime.datetime)) + return value class DateTime(Field): diff --git a/trytond/tests/test_tryton.py b/trytond/tests/test_tryton.py index c5f54c4adb..e4b3abbc60 100644 --- a/trytond/tests/test_tryton.py +++ b/trytond/tests/test_tryton.py @@ -15,6 +15,7 @@ from decimal import Decimal from trytond import pysocket from trytond.tools import reduce_ids, safe_eval from lxml import etree +import datetime ADMIN_PASSWORD = 'admin' HOST = '127.0.0.1' @@ -166,6 +167,10 @@ class FieldsTestCase(unittest.TestCase): self.sha_default = RPCProxy('tests.sha_default') self.sha_required = RPCProxy('tests.sha_required') + self.date = RPCProxy('tests.date') + self.date_default = RPCProxy('tests.date_default') + self.date_required = RPCProxy('tests.date_required') + def test0010boolean(self): ''' Test Boolean. @@ -1555,6 +1560,256 @@ class FieldsTestCase(unittest.TestCase): ], 0, None, None, CONTEXT) self.assert_(sha_ids == [sha6_id]) + def test0080date(self): + ''' + Test Date. + ''' + today = datetime.date(2009, 1, 1) + tomorrow = today + datetime.timedelta(1) + yesterday = today - datetime.timedelta(1) + default_date = datetime.date(2000, 1, 1) + + date1_id = self.date.create({ + 'date': today, + }, CONTEXT) + self.assert_(date1_id) + + date1 = self.date.read(date1_id, ['date'], CONTEXT) + self.assert_(date1['date'] == today) + + date_ids = self.date.search([ + ('date', '=', today), + ], 0, None, None, CONTEXT) + self.assert_(date_ids == [date1_id]) + + date_ids = self.date.search([ + ('date', '=', tomorrow), + ], 0, None, None, CONTEXT) + self.assert_(date_ids == []) + + date_ids = self.date.search([ + ('date', '=', False), + ], 0, None, None, CONTEXT) + self.assert_(date_ids == []) + + date_ids = self.date.search([ + ('date', '!=', today), + ], 0, None, None, CONTEXT) + self.assert_(date_ids == []) + + date_ids = self.date.search([ + ('date', '!=', tomorrow), + ], 0, None, None, CONTEXT) + self.assert_(date_ids == [date1_id]) + + date_ids = self.date.search([ + ('date', '!=', False), + ], 0, None, None, CONTEXT) + self.assert_(date_ids == [date1_id]) + + date_ids = self.date.search([ + ('date', 'in', [today]), + ], 0, None, None, CONTEXT) + self.assert_(date_ids == [date1_id]) + + date_ids = self.date.search([ + ('date', 'in', [tomorrow]), + ], 0, None, None, CONTEXT) + self.assert_(date_ids == []) + + date_ids = self.date.search([ + ('date', 'in', [False]), + ], 0, None, None, CONTEXT) + self.assert_(date_ids == []) + + date_ids = self.date.search([ + ('date', 'in', []), + ], 0, None, None, CONTEXT) + self.assert_(date_ids == []) + + date_ids = self.date.search([ + ('date', 'not in', [today]), + ], 0, None, None, CONTEXT) + self.assert_(date_ids == []) + + date_ids = self.date.search([ + ('date', 'not in', [tomorrow]), + ], 0, None, None, CONTEXT) + self.assert_(date_ids == [date1_id]) + + date_ids = self.date.search([ + ('date', 'not in', [False]), + ], 0, None, None, CONTEXT) + self.assert_(date_ids == [date1_id]) + + date_ids = self.date.search([ + ('date', 'not in', []), + ], 0, None, None, CONTEXT) + self.assert_(date_ids == [date1_id]) + + date_ids = self.date.search([ + ('date', '<', tomorrow), + ], 0, None, None, CONTEXT) + self.assert_(date_ids == [date1_id]) + + date_ids = self.date.search([ + ('date', '<', yesterday), + ], 0, None, None, CONTEXT) + self.assert_(date_ids == []) + + date_ids = self.date.search([ + ('date', '<', today), + ], 0, None, None, CONTEXT) + self.assert_(date_ids == []) + + date_ids = self.date.search([ + ('date', '<=', today), + ], 0, None, None, CONTEXT) + self.assert_(date_ids == [date1_id]) + + date_ids = self.date.search([ + ('date', '<=', yesterday), + ], 0, None, None, CONTEXT) + self.assert_(date_ids == []) + + date_ids = self.date.search([ + ('date', '<=', tomorrow), + ], 0, None, None, CONTEXT) + self.assert_(date_ids == [date1_id]) + + date_ids = self.date.search([ + ('date', '>', tomorrow), + ], 0, None, None, CONTEXT) + self.assert_(date_ids == []) + + date_ids = self.date.search([ + ('date', '>', yesterday), + ], 0, None, None, CONTEXT) + self.assert_(date_ids == [date1_id]) + + date_ids = self.date.search([ + ('date', '>', today), + ], 0, None, None, CONTEXT) + self.assert_(date_ids == []) + + date_ids = self.date.search([ + ('date', '>=', tomorrow), + ], 0, None, None, CONTEXT) + self.assert_(date_ids == []) + + date_ids = self.date.search([ + ('date', '>=', yesterday), + ], 0, None, None, CONTEXT) + self.assert_(date_ids == [date1_id]) + + date_ids = self.date.search([ + ('date', '>=', today), + ], 0, None, None, CONTEXT) + self.assert_(date_ids == [date1_id]) + + date2_id = self.date.create({ + 'date': yesterday, + }, CONTEXT) + self.assert_(date2_id) + + date2 = self.date.read(date2_id, ['date'], CONTEXT) + self.assert_(date2['date'] == yesterday) + + date_ids = self.date.search([ + ('date', '=', yesterday), + ], 0, None, None, CONTEXT) + self.assert_(date_ids == [date2_id]) + + date_ids = self.date.search([ + ('date', 'in', [yesterday, today]), + ], 0, None, None, CONTEXT) + self.assert_(date_ids == [date1_id, date2_id]) + + date_ids = self.date.search([ + ('date', 'not in', [yesterday, today]), + ], 0, None, None, CONTEXT) + self.assert_(date_ids == []) + + date3_id = self.date.create({}, CONTEXT) + self.assert_(date3_id) + + date3 = self.date.read(date3_id, ['date'], CONTEXT) + self.assert_(date3['date'] == None) + + date4_id = self.date_default.create({}, CONTEXT) + self.assert_(date4_id) + + date4 = self.date_default.read(date4_id, ['date'], CONTEXT) + self.assert_(date4['date'] == default_date) + + self.date.write(date1_id, { + 'date': yesterday, + }, CONTEXT) + date1 = self.date.read(date1_id, ['date'], CONTEXT) + self.assert_(date1['date'] == yesterday) + + self.date.write(date2_id, { + 'date': today, + }, CONTEXT) + date2 = self.date.read(date2_id, ['date'], CONTEXT) + self.assert_(date2['date'] == today) + + self.failUnlessRaises(Exception, self.date.create, { + 'date': 'test', + }, CONTEXT) + + self.failUnlessRaises(Exception, self.date.write, date1_id, { + 'date': 'test', + }, CONTEXT) + + self.failUnlessRaises(Exception, self.date.create, { + 'date': 1, + }, CONTEXT) + + self.failUnlessRaises(Exception, self.date.write, date1_id, { + 'date': 1, + }, CONTEXT) + + self.failUnlessRaises(Exception, self.date.create, { + 'date': datetime.datetime.now(), + }, CONTEXT) + + self.failUnlessRaises(Exception, self.date.write, date1_id, { + 'date': datetime.datetime.now(), + }, CONTEXT) + + self.failUnlessRaises(Exception, self.date.create, { + 'date': '2009-13-01', + }, CONTEXT) + + self.failUnlessRaises(Exception, self.date.write, date1_id, { + 'date': '2009-02-29', + }, CONTEXT) + + date5_id = self.date.create({ + 'date': '2009-01-01', + }, CONTEXT) + self.assert_(date5_id) + date5 = self.date.read(date5_id, ['date'], CONTEXT) + self.assert_(date5['date'] == datetime.date(2009, 1, 1)) + + self.failUnlessRaises(Exception,self.date_required.create, {}, CONTEXT) + + date6_id = self.date_required.create({ + 'date': today, + }, CONTEXT) + self.assert_(date6_id) + + date7_id = self.date.create({ + 'date': None, + }, CONTEXT) + self.assert_(date7_id) + + date8_id = self.date.create({ + 'date': False, + }, CONTEXT) + self.assert_(date8_id) + class ModelViewTestCase(unittest.TestCase): ''' diff --git a/trytond/tests/tests.py b/trytond/tests/tests.py index 89e1bfdb1a..9ad5c97b50 100644 --- a/trytond/tests/tests.py +++ b/trytond/tests/tests.py @@ -2,6 +2,7 @@ #this repository contains the full copyright notices and license terms. from trytond.model import ModelSQL, fields +import datetime class Boolean(ModelSQL): @@ -243,3 +244,36 @@ class ShaRequired(ModelSQL): required=True) ShaRequired() + + +class Date(ModelSQL): + 'Date' + _name = 'tests.date' + _description = __doc__ + date = fields.Date(string='Date', help='Test date', + required=False) + +Date() + + +class DateDefault(ModelSQL): + 'Date Default' + _name = 'tests.date_default' + _description = __doc__ + date = fields.Date(string='Date', help='Test date', + required=False) + + def default_date(self, cursor, user, context=None): + return datetime.date(2000, 1, 1) + +DateDefault() + + +class DateRequired(ModelSQL): + 'Date Required' + _name = 'tests.date_required' + _description = __doc__ + date = fields.Date(string='Date', help='Test date', + required=True) + +DateRequired()