~ubuntu-branches/ubuntu/quantal/python-django/quantal

« back to all changes in this revision

Viewing changes to tests/regressiontests/datatypes/models.py

  • Committer: Bazaar Package Importer
  • Author(s): Scott James Remnant
  • Date: 2008-11-15 19:15:33 UTC
  • mfrom: (1.1.6 upstream)
  • Revision ID: james.westby@ubuntu.com-20081115191533-xbt1ut2xf4fvwtvc
Tags: 1.0.1-0ubuntu1
* New upstream release:
  - Bug fixes.

* The tests/ sub-directory appaers to have been dropped upstream, so pull
  our patch to workaround the tests and modify the rules.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
"""
2
 
This is a basic model to test saving and loading boolean and date-related
3
 
types, which in the past were problematic for some database backends.
4
 
"""
5
 
 
6
 
from django.db import models
7
 
from django.conf import settings
8
 
 
9
 
class Donut(models.Model):
10
 
    name = models.CharField(max_length=100)
11
 
    is_frosted = models.BooleanField(default=False)
12
 
    has_sprinkles = models.NullBooleanField()
13
 
    baked_date = models.DateField(null=True)
14
 
    baked_time = models.TimeField(null=True)
15
 
    consumed_at = models.DateTimeField(null=True)
16
 
 
17
 
    class Meta:
18
 
        ordering = ('consumed_at',)
19
 
 
20
 
    def __str__(self):
21
 
        return self.name
22
 
 
23
 
__test__ = {'API_TESTS': """
24
 
# No donuts are in the system yet.
25
 
>>> Donut.objects.all()
26
 
[]
27
 
 
28
 
>>> d = Donut(name='Apple Fritter')
29
 
 
30
 
# Ensure we're getting True and False, not 0 and 1
31
 
>>> d.is_frosted
32
 
False
33
 
>>> d.has_sprinkles
34
 
>>> d.has_sprinkles = True
35
 
>>> d.has_sprinkles == True
36
 
True
37
 
>>> d.save()
38
 
>>> d2 = Donut.objects.all()[0]
39
 
>>> d2
40
 
<Donut: Apple Fritter>
41
 
>>> d2.is_frosted == False
42
 
True
43
 
>>> d2.has_sprinkles == True
44
 
True
45
 
 
46
 
>>> import datetime
47
 
>>> d2.baked_date = datetime.date(year=1938, month=6, day=4)
48
 
>>> d2.baked_time = datetime.time(hour=5, minute=30)
49
 
>>> d2.consumed_at = datetime.datetime(year=2007, month=4, day=20, hour=16, minute=19, second=59)
50
 
>>> d2.save()
51
 
 
52
 
>>> d3 = Donut.objects.all()[0]
53
 
>>> d3.baked_date
54
 
datetime.date(1938, 6, 4)
55
 
>>> d3.baked_time
56
 
datetime.time(5, 30)
57
 
>>> d3.consumed_at
58
 
datetime.datetime(2007, 4, 20, 16, 19, 59)
59
 
 
60
 
# Year boundary tests (ticket #3689)
61
 
 
62
 
>>> d = Donut(name='Date Test 2007', baked_date=datetime.datetime(year=2007, month=12, day=31), consumed_at=datetime.datetime(year=2007, month=12, day=31, hour=23, minute=59, second=59))
63
 
>>> d.save()
64
 
>>> d1 = Donut(name='Date Test 2006', baked_date=datetime.datetime(year=2006, month=1, day=1), consumed_at=datetime.datetime(year=2006, month=1, day=1))
65
 
>>> d1.save()
66
 
 
67
 
>>> Donut.objects.filter(baked_date__year=2007)
68
 
[<Donut: Date Test 2007>]
69
 
 
70
 
>>> Donut.objects.filter(baked_date__year=2006)
71
 
[<Donut: Date Test 2006>]
72
 
 
73
 
>>> Donut.objects.filter(consumed_at__year=2007).order_by('name')
74
 
[<Donut: Apple Fritter>, <Donut: Date Test 2007>]
75
 
 
76
 
>>> Donut.objects.filter(consumed_at__year=2006)
77
 
[<Donut: Date Test 2006>]
78
 
 
79
 
>>> Donut.objects.filter(consumed_at__year=2005)
80
 
[]
81
 
 
82
 
>>> Donut.objects.filter(consumed_at__year=2008)
83
 
[]
84
 
 
85
 
"""}
86
 
 
87
 
# Regression test for #8354: the MySQL backend should raise an error if given
88
 
# a timezone-aware datetime object.
89
 
if settings.DATABASE_ENGINE == 'mysql':
90
 
    __test__['API_TESTS'] += """
91
 
>>> from django.utils import tzinfo 
92
 
>>> dt = datetime.datetime(2008, 8, 31, 16, 20, tzinfo=tzinfo.FixedOffset(0)) 
93
 
>>> d = Donut(name='Bear claw', consumed_at=dt) 
94
 
>>> d.save()
95
 
Traceback (most recent call last):
96
 
    ....
97
 
ValueError: MySQL backend does not support timezone-aware datetimes.
98
 
"""