490 lines
15 KiB
Python
Executable File
490 lines
15 KiB
Python
Executable File
# 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
|
|
import unittest
|
|
|
|
from sql.functions import CurrentTimestamp
|
|
|
|
from trytond.model.exceptions import (
|
|
RequiredValidationError, TimeFormatValidationError)
|
|
from trytond.pool import Pool
|
|
from trytond.tests.test_tryton import activate_module, with_transaction
|
|
|
|
today = datetime.datetime(2009, 1, 1, 12, 0, 0)
|
|
tomorrow = today + datetime.timedelta(1)
|
|
yesterday = today - datetime.timedelta(1)
|
|
default_datetime = datetime.datetime(2000, 1, 1, 12, 0, 0)
|
|
|
|
|
|
class FieldDateTimeTestCase(unittest.TestCase):
|
|
"Test Field DateTime"
|
|
|
|
@classmethod
|
|
def setUpClass(cls):
|
|
activate_module('tests')
|
|
|
|
@with_transaction()
|
|
def test_create(self):
|
|
"Test create datetime"
|
|
DateTime = Pool().get('test.datetime')
|
|
|
|
datetime, datetime_none = DateTime.create([{
|
|
'datetime': today,
|
|
}, {
|
|
'datetime': None
|
|
}])
|
|
|
|
self.assertEqual(datetime.datetime, today)
|
|
self.assertEqual(datetime_none.datetime, None)
|
|
|
|
@with_transaction()
|
|
def test_create_datetime_string(self):
|
|
"Test create datetime with datetime string"
|
|
DateTime = Pool().get('test.datetime')
|
|
|
|
datetime, = DateTime.create([{
|
|
'datetime': str(today),
|
|
}])
|
|
|
|
self.assertEqual(datetime.datetime, today)
|
|
|
|
@with_transaction()
|
|
def test_create_invalid_datetime_string(self):
|
|
"Test create datetime with invalid datetime string"
|
|
DateTime = Pool().get('test.datetime')
|
|
|
|
with self.assertRaises(ValueError):
|
|
DateTime.create([{
|
|
'datetime': '2009-02-29',
|
|
}])
|
|
|
|
@with_transaction()
|
|
def test_create_without_default(self):
|
|
"Test create datetime without default"
|
|
DateTime = Pool().get('test.datetime')
|
|
|
|
datetime, = DateTime.create([{}])
|
|
|
|
self.assertEqual(datetime.datetime, None)
|
|
|
|
@with_transaction()
|
|
def test_create_with_default(self):
|
|
"Test create datetime with default"
|
|
DateTime = Pool().get('test.datetime_default')
|
|
|
|
datetime, = DateTime.create([{}])
|
|
|
|
self.assertEqual(datetime.datetime, default_datetime)
|
|
|
|
@with_transaction()
|
|
def test_create_with_sql_value(self):
|
|
"Test create datetime with SQL value"
|
|
DateTime = Pool().get('test.datetime')
|
|
|
|
datetime, = DateTime.create([{
|
|
'datetime': DateTime.datetime.sql_cast(CurrentTimestamp()),
|
|
}])
|
|
|
|
self.assertTrue(datetime.datetime)
|
|
|
|
@with_transaction()
|
|
def test_set_sql_value(self):
|
|
"Test cannot set SQL value"
|
|
DateTime = Pool().get('test.datetime')
|
|
|
|
datetime = DateTime()
|
|
|
|
with self.assertRaises(ValueError):
|
|
datetime.datetime = CurrentTimestamp()
|
|
|
|
@with_transaction()
|
|
def test_create_non_datetime(self):
|
|
"Test create datetime with non datetime"
|
|
DateTime = Pool().get('test.datetime')
|
|
|
|
with self.assertRaises(ValueError):
|
|
DateTime.create([{
|
|
'datetime': 'non datetime',
|
|
}])
|
|
|
|
@with_transaction()
|
|
def test_create_integer(self):
|
|
"Test create datetime with integer"
|
|
DateTime = Pool().get('test.datetime')
|
|
|
|
with self.assertRaises(TypeError):
|
|
DateTime.create([{
|
|
'datetime': 42,
|
|
}])
|
|
|
|
@with_transaction()
|
|
def test_create_date(self):
|
|
"Test create datetime with date"
|
|
DateTime = Pool().get('test.datetime')
|
|
|
|
with self.assertRaises(TypeError):
|
|
DateTime.create([{
|
|
'datetime': datetime.date(2009, 1, 1),
|
|
}])
|
|
|
|
@with_transaction()
|
|
def test_create_microsecond(self):
|
|
"Test create datetime with microsecond"
|
|
DateTime = Pool().get('test.datetime_required')
|
|
|
|
datetime, = DateTime.create([{
|
|
'datetime': today.replace(microsecond=1),
|
|
}])
|
|
|
|
self.assertEqual(datetime.datetime, today)
|
|
|
|
@with_transaction()
|
|
def test_create_required_with_value(self):
|
|
"Test create datetime required with value"
|
|
DateTime = Pool().get('test.datetime_required')
|
|
|
|
datetime, = DateTime.create([{
|
|
'datetime': today,
|
|
}])
|
|
|
|
self.assertEqual(datetime.datetime, today)
|
|
|
|
@with_transaction()
|
|
def test_create_required_without_value(self):
|
|
"Test create datetime required without value"
|
|
DateTime = Pool().get('test.datetime_required')
|
|
|
|
with self.assertRaises(RequiredValidationError):
|
|
DateTime.create([{}])
|
|
|
|
@with_transaction()
|
|
def test_create_format_valid(self):
|
|
"Test create datetime with valid format"
|
|
DateTime = Pool().get('test.datetime_format')
|
|
|
|
datetime_, = DateTime.create([{
|
|
'datetime': datetime.datetime(2009, 1, 1, 12, 30),
|
|
}])
|
|
|
|
self.assertEqual(
|
|
datetime_.datetime, datetime.datetime(2009, 1, 1, 12, 30))
|
|
|
|
@with_transaction()
|
|
def test_create_format_invalid(self):
|
|
"Test create datetime with invalid format"
|
|
DateTime = Pool().get('test.datetime_format')
|
|
|
|
with self.assertRaises(TimeFormatValidationError):
|
|
DateTime.create([{
|
|
'datetime': datetime.datetime(2009, 1, 1, 12, 30, 25),
|
|
}])
|
|
|
|
@with_transaction()
|
|
def test_search_equals(self):
|
|
"Test search datetime equals"
|
|
DateTime = Pool().get('test.datetime')
|
|
datetime, = DateTime.create([{
|
|
'datetime': today,
|
|
}])
|
|
|
|
datetimes_today = DateTime.search([
|
|
('datetime', '=', today),
|
|
])
|
|
datetimes_tomorrow = DateTime.search([
|
|
('datetime', '=', tomorrow),
|
|
])
|
|
|
|
self.assertListEqual(datetimes_today, [datetime])
|
|
self.assertListEqual(datetimes_tomorrow, [])
|
|
|
|
@with_transaction()
|
|
def test_search_equals_none(self):
|
|
"Test search datetime equals None"
|
|
DateTime = Pool().get('test.datetime')
|
|
datetime, = DateTime.create([{
|
|
'datetime': None,
|
|
}])
|
|
|
|
datetimes = DateTime.search([
|
|
('datetime', '=', None),
|
|
])
|
|
|
|
self.assertListEqual(datetimes, [datetime])
|
|
|
|
@with_transaction()
|
|
def test_search_non_equals(self):
|
|
"Test search datetime non equals"
|
|
DateTime = Pool().get('test.datetime')
|
|
datetime, = DateTime.create([{
|
|
'datetime': today,
|
|
}])
|
|
|
|
datetimes_today = DateTime.search([
|
|
('datetime', '!=', today),
|
|
])
|
|
datetimes_tomorrow = DateTime.search([
|
|
('datetime', '!=', tomorrow),
|
|
])
|
|
|
|
self.assertListEqual(datetimes_today, [])
|
|
self.assertListEqual(datetimes_tomorrow, [datetime])
|
|
|
|
@with_transaction()
|
|
def test_search_non_equals_none(self):
|
|
"Test search datetime non equals None"
|
|
DateTime = Pool().get('test.datetime')
|
|
datetime, = DateTime.create([{
|
|
'datetime': None,
|
|
}])
|
|
|
|
datetimes = DateTime.search([
|
|
('datetime', '!=', None),
|
|
])
|
|
|
|
self.assertListEqual(datetimes, [])
|
|
|
|
@with_transaction()
|
|
def test_search_in(self):
|
|
"Test search datetime in"
|
|
DateTime = Pool().get('test.datetime')
|
|
datetime, = DateTime.create([{
|
|
'datetime': today,
|
|
}])
|
|
|
|
datetimes_today = DateTime.search([
|
|
('datetime', 'in', [today]),
|
|
])
|
|
datetimes_tomorrow = DateTime.search([
|
|
('datetime', 'in', [tomorrow]),
|
|
])
|
|
datetimes_empty = DateTime.search([
|
|
('datetime', 'in', []),
|
|
])
|
|
|
|
self.assertListEqual(datetimes_today, [datetime])
|
|
self.assertListEqual(datetimes_tomorrow, [])
|
|
self.assertListEqual(datetimes_empty, [])
|
|
|
|
@with_transaction()
|
|
def test_search_in_none(self):
|
|
"Test search datetime in [None]"
|
|
DateTime = Pool().get('test.datetime')
|
|
datetime, = DateTime.create([{
|
|
'datetime': None,
|
|
}])
|
|
|
|
datetimes = DateTime.search([
|
|
('datetime', 'in', [None]),
|
|
])
|
|
|
|
self.assertListEqual(datetimes, [datetime])
|
|
|
|
@with_transaction()
|
|
def test_search_not_in(self):
|
|
"Test search datetime not in"
|
|
DateTime = Pool().get('test.datetime')
|
|
datetime, = DateTime.create([{
|
|
'datetime': today,
|
|
}])
|
|
|
|
datetimes_today = DateTime.search([
|
|
('datetime', 'not in', [today]),
|
|
])
|
|
datetimes_tomorrow = DateTime.search([
|
|
('datetime', 'not in', [tomorrow]),
|
|
])
|
|
datetimes_empty = DateTime.search([
|
|
('datetime', 'not in', []),
|
|
])
|
|
|
|
self.assertListEqual(datetimes_today, [])
|
|
self.assertListEqual(datetimes_tomorrow, [datetime])
|
|
self.assertListEqual(datetimes_empty, [datetime])
|
|
|
|
@with_transaction()
|
|
def test_search_not_in_none(self):
|
|
"Test search datetime not in [None]"
|
|
DateTime = Pool().get('test.datetime')
|
|
datetime, = DateTime.create([{
|
|
'datetime': None,
|
|
}])
|
|
|
|
datetimes = DateTime.search([
|
|
('datetime', 'not in', [None]),
|
|
])
|
|
|
|
self.assertListEqual(datetimes, [])
|
|
|
|
@with_transaction()
|
|
def test_search_in_multi(self):
|
|
"Test search datetime in multiple"
|
|
DateTime = Pool().get('test.datetime')
|
|
datetimes = DateTime.create([{
|
|
'datetime': today,
|
|
}, {
|
|
'datetime': tomorrow,
|
|
}])
|
|
|
|
datetimes_in = DateTime.search([
|
|
('datetime', 'in', [today, tomorrow]),
|
|
])
|
|
|
|
self.assertListEqual(datetimes_in, datetimes)
|
|
|
|
@with_transaction()
|
|
def test_search_not_in_multi(self):
|
|
"Test search datetime not in multiple"
|
|
DateTime = Pool().get('test.datetime')
|
|
DateTime.create([{
|
|
'datetime': today,
|
|
}, {
|
|
'datetime': tomorrow,
|
|
}])
|
|
|
|
datetimes = DateTime.search([
|
|
('datetime', 'not in', [today, tomorrow]),
|
|
])
|
|
|
|
self.assertListEqual(datetimes, [])
|
|
|
|
@with_transaction()
|
|
def test_search_less(self):
|
|
"Test search datetime less than"
|
|
DateTime = Pool().get('test.datetime')
|
|
datetime, = DateTime.create([{
|
|
'datetime': today,
|
|
}])
|
|
|
|
datetimes_tomorrow = DateTime.search([
|
|
('datetime', '<', tomorrow),
|
|
])
|
|
datetimes_yesterday = DateTime.search([
|
|
('datetime', '<', yesterday),
|
|
])
|
|
datetimes_today = DateTime.search([
|
|
('datetime', '<', today),
|
|
])
|
|
|
|
self.assertListEqual(datetimes_tomorrow, [datetime])
|
|
self.assertListEqual(datetimes_yesterday, [])
|
|
self.assertListEqual(datetimes_today, [])
|
|
|
|
@with_transaction()
|
|
def test_search_less_equals(self):
|
|
"Test search datetime less than or equals"
|
|
DateTime = Pool().get('test.datetime')
|
|
datetime, = DateTime.create([{
|
|
'datetime': today,
|
|
}])
|
|
|
|
datetimes_tomorrow = DateTime.search([
|
|
('datetime', '<=', tomorrow),
|
|
])
|
|
datetimes_yesterday = DateTime.search([
|
|
('datetime', '<=', yesterday),
|
|
])
|
|
datetimes_today = DateTime.search([
|
|
('datetime', '<=', today),
|
|
])
|
|
|
|
self.assertListEqual(datetimes_tomorrow, [datetime])
|
|
self.assertListEqual(datetimes_yesterday, [])
|
|
self.assertListEqual(datetimes_today, [datetime])
|
|
|
|
@with_transaction()
|
|
def test_search_greater(self):
|
|
"Test search datetime greater than"
|
|
DateTime = Pool().get('test.datetime')
|
|
datetime, = DateTime.create([{
|
|
'datetime': today,
|
|
}])
|
|
|
|
datetimes_tomorrow = DateTime.search([
|
|
('datetime', '>', tomorrow),
|
|
])
|
|
datetimes_yesterday = DateTime.search([
|
|
('datetime', '>', yesterday),
|
|
])
|
|
datetimes_today = DateTime.search([
|
|
('datetime', '>', today),
|
|
])
|
|
|
|
self.assertListEqual(datetimes_tomorrow, [])
|
|
self.assertListEqual(datetimes_yesterday, [datetime])
|
|
self.assertListEqual(datetimes_today, [])
|
|
|
|
@with_transaction()
|
|
def test_search_greater_equals(self):
|
|
"Test search datetime greater than or equals"
|
|
DateTime = Pool().get('test.datetime')
|
|
datetime, = DateTime.create([{
|
|
'datetime': today,
|
|
}])
|
|
|
|
datetimes_tomorrow = DateTime.search([
|
|
('datetime', '>=', tomorrow),
|
|
])
|
|
datetimes_yesterday = DateTime.search([
|
|
('datetime', '>=', yesterday),
|
|
])
|
|
datetimes_today = DateTime.search([
|
|
('datetime', '>=', today),
|
|
])
|
|
|
|
self.assertListEqual(datetimes_tomorrow, [])
|
|
self.assertListEqual(datetimes_yesterday, [datetime])
|
|
self.assertListEqual(datetimes_today, [datetime])
|
|
|
|
@with_transaction()
|
|
def test_write(self):
|
|
"Test write datetime"
|
|
DateTime = Pool().get('test.datetime')
|
|
datetime, = DateTime.create([{
|
|
'datetime': today,
|
|
}])
|
|
|
|
DateTime.write([datetime], {
|
|
'datetime': yesterday,
|
|
})
|
|
|
|
self.assertEqual(datetime.datetime, yesterday)
|
|
|
|
@with_transaction()
|
|
def test_write_non_datetime(self):
|
|
"Test write datetime with non datetime"
|
|
DateTime = Pool().get('test.datetime')
|
|
datetime, = DateTime.create([{
|
|
'datetime': today,
|
|
}])
|
|
|
|
with self.assertRaises(ValueError):
|
|
DateTime.write([datetime], {
|
|
'datetime': 'non datetime',
|
|
})
|
|
|
|
@with_transaction()
|
|
def test_write_integer(self):
|
|
"Test write datetime with integer"
|
|
DateTime = Pool().get('test.datetime')
|
|
datetime, = DateTime.create([{
|
|
'datetime': today,
|
|
}])
|
|
|
|
with self.assertRaises(TypeError):
|
|
DateTime.write([datetime], {
|
|
'datetime': 42,
|
|
})
|
|
|
|
@with_transaction()
|
|
def test_write_date(self):
|
|
"Test write datetime with date"
|
|
DateTime = Pool().get('test.datetime')
|
|
datetime_, = DateTime.create([{
|
|
'datetime': today,
|
|
}])
|
|
|
|
with self.assertRaises(TypeError):
|
|
DateTime.write([datetime_], {
|
|
'datetime': datetime.date(2009, 1, 1),
|
|
})
|