1
# -*- coding: utf-8 -*-
5
from rfc822 import formatdate
6
from webob import datetime_utils
7
from nose.tools import ok_, eq_, assert_raises
10
"""Test missing function in _UTC"""
11
x = datetime_utils.UTC
12
ok_(x.tzname(datetime.datetime.now())=='UTC')
13
eq_(x.dst(datetime.datetime.now()), datetime.timedelta(0))
14
eq_(x.utcoffset(datetime.datetime.now()), datetime.timedelta(0))
17
def test_parse_date():
18
"""Testing datetime_utils.parse_date.
19
We need to verify the following scenarios:
20
* a nil submitted value
21
* a submitted value that cannot be parse into a date
22
* a valid RFC2822 date with and without timezone
24
ret = datetime_utils.parse_date(None)
25
ok_(ret is None, "We passed a None value "
26
"to parse_date. We should get None but instead we got %s" %\
28
ret = datetime_utils.parse_date(u'Hi There')
29
ok_(ret is None, "We passed an invalid value "
30
"to parse_date. We should get None but instead we got %s" %\
32
ret = datetime_utils.parse_date(1)
33
ok_(ret is None, "We passed an invalid value "
34
"to parse_date. We should get None but instead we got %s" %\
36
ret = datetime_utils.parse_date(u'á')
37
ok_(ret is None, "We passed an invalid value "
38
"to parse_date. We should get None but instead we got %s" %\
40
ret = datetime_utils.parse_date('Mon, 20 Nov 1995 19:12:08 -0500')
41
eq_(ret, datetime.datetime(
42
1995, 11, 21, 0, 12, 8, tzinfo=datetime_utils.UTC))
43
ret = datetime_utils.parse_date('Mon, 20 Nov 1995 19:12:08')
45
datetime.datetime(1995, 11, 20, 19, 12, 8, tzinfo=datetime_utils.UTC))
47
def test_serialize_date():
48
"""Testing datetime_utils.serialize_date
49
We need to verify the following scenarios:
50
* passing an unicode date, return the same date but str
51
* passing a timedelta, return now plus the delta
52
* passing an invalid object, should raise ValueError
54
ret = datetime_utils.serialize_date(u'Mon, 20 Nov 1995 19:12:08 GMT')
55
assert type(ret) is (str)
56
eq_(ret, 'Mon, 20 Nov 1995 19:12:08 GMT')
59
(datetime.datetime.now()+datetime.timedelta(1)).timetuple()))
60
eq_(dt, datetime_utils.serialize_date(datetime.timedelta(1)))
61
assert_raises(ValueError, datetime_utils.serialize_date, None)
63
def test_parse_date_delta():
64
"""Testing datetime_utils.parse_date_delta
65
We need to verify the following scenarios:
66
* passing a nil value, should return nil
67
* passing a value that fails the conversion to int, should call
70
ok_(datetime_utils.parse_date_delta(None) is None, 'Passing none value, '
72
ret = datetime_utils.parse_date_delta('Mon, 20 Nov 1995 19:12:08 -0500')
73
eq_(ret, datetime.datetime(
74
1995, 11, 21, 0, 12, 8, tzinfo=datetime_utils.UTC))
75
WHEN = datetime.datetime(2011, 3, 16, 10, 10, 37, tzinfo=datetime_utils.UTC)
76
#with _NowRestorer(WHEN): Dammit, only Python 2.5 w/ __future__
77
nr = _NowRestorer(WHEN)
80
ret = datetime_utils.parse_date_delta(1)
81
eq_(ret, WHEN + datetime.timedelta(0, 1))
83
nr.__exit__(None, None, None)
86
def test_serialize_date_delta():
87
"""Testing datetime_utils.serialize_date_delta
88
We need to verify the following scenarios:
89
* if we pass something that's not an int or float, it should delegate
90
the task to serialize_date
92
eq_(datetime_utils.serialize_date_delta(1), '1')
93
eq_(datetime_utils.serialize_date_delta(1.5), '1')
94
ret = datetime_utils.serialize_date_delta(u'Mon, 20 Nov 1995 19:12:08 GMT')
95
assert type(ret) is (str)
96
eq_(ret, 'Mon, 20 Nov 1995 19:12:08 GMT')
98
def test_timedelta_to_seconds():
99
val = datetime.timedelta(86400)
100
result = datetime_utils.timedelta_to_seconds(val)
101
eq_(result, 7464960000)
104
class _NowRestorer(object):
105
def __init__(self, new_now):
106
self._new_now = new_now
110
import webob.datetime_utils
111
self._old_now = webob.datetime_utils._now
112
webob.datetime_utils._now = lambda: self._new_now
114
def __exit__(self, exc_type, exc_value, traceback):
115
import webob.datetime_utils
116
webob.datetime_utils._now = self._old_now