~ubuntu-branches/ubuntu/oneiric/python-webob/oneiric

« back to all changes in this revision

Viewing changes to tests/test_datetime_utils.py

  • Committer: Bazaar Package Importer
  • Author(s): Piotr Ożarowski
  • Date: 2011-04-28 21:22:32 UTC
  • mfrom: (7.1.7 sid)
  • Revision ID: james.westby@ubuntu.com-20110428212232-a1iohrzu0eijleya
Tags: 1.0.7-1
New upstream release

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# -*- coding: utf-8 -*-
 
2
 
 
3
import datetime
 
4
import calendar
 
5
from rfc822 import formatdate
 
6
from webob import datetime_utils
 
7
from nose.tools import ok_, eq_, assert_raises
 
8
 
 
9
def test_UTC():
 
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))
 
15
    eq_(repr(x), 'UTC')
 
16
 
 
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
 
23
    """
 
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" %\
 
27
        ret)
 
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" %\
 
31
        ret)
 
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" %\
 
35
        ret)
 
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" %\
 
39
        ret)
 
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')
 
44
    eq_(ret,
 
45
        datetime.datetime(1995, 11, 20, 19, 12, 8, tzinfo=datetime_utils.UTC))
 
46
 
 
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
 
53
    """
 
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')
 
57
    dt = formatdate(
 
58
        calendar.timegm(
 
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)
 
62
 
 
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
 
68
          parse_date
 
69
    """
 
70
    ok_(datetime_utils.parse_date_delta(None) is None, 'Passing none value, '
 
71
        'should return None')
 
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)
 
78
    nr.__enter__()
 
79
    try:
 
80
        ret = datetime_utils.parse_date_delta(1)
 
81
        eq_(ret, WHEN + datetime.timedelta(0, 1))
 
82
    finally:
 
83
        nr.__exit__(None, None, None)
 
84
 
 
85
 
 
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
 
91
    """
 
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')
 
97
 
 
98
def test_timedelta_to_seconds():
 
99
    val = datetime.timedelta(86400)
 
100
    result = datetime_utils.timedelta_to_seconds(val)
 
101
    eq_(result, 7464960000)
 
102
 
 
103
 
 
104
class _NowRestorer(object):
 
105
    def __init__(self, new_now):
 
106
        self._new_now = new_now
 
107
        self._old_now = None
 
108
 
 
109
    def __enter__(self):
 
110
        import webob.datetime_utils
 
111
        self._old_now = webob.datetime_utils._now
 
112
        webob.datetime_utils._now = lambda: self._new_now
 
113
 
 
114
    def __exit__(self, exc_type, exc_value, traceback):
 
115
        import webob.datetime_utils
 
116
        webob.datetime_utils._now = self._old_now