Tests model DurationField

Classe DurationModel

class DurationModel(models.Model):
    field = models.DurationField()

Classe NullDurationModel

class NullDurationModel(models.Model):
    field = models.DurationField(null=True)

Classe VerboseNameField

 1 class VerboseNameField(models.Model):
 2     id = models.AutoField("verbose pk", primary_key=True)
 3     field1 = models.BigIntegerField("verbose field1")
 4     field2 = models.BooleanField("verbose field2", default=False)
 5     field3 = models.CharField("verbose field3", max_length=10)
 6     field4 = models.DateField("verbose field4")
 7     field5 = models.DateTimeField("verbose field5")
 8     field6 = models.DecimalField("verbose field6", max_digits=6, decimal_places=1)
 9     field7 = models.EmailField("verbose field7")
10     field8 = models.FileField("verbose field8", upload_to="unused")
11     field9 = models.FilePathField("verbose field9")
12     field10 = models.FloatField("verbose field10")
13     # Don't want to depend on Pillow in this test
14     # field_image = models.ImageField("verbose field")
15     field11 = models.IntegerField("verbose field11")
16     field12 = models.GenericIPAddressField("verbose field12", protocol="ipv4")
17     field13 = models.NullBooleanField("verbose field13")
18     field14 = models.PositiveIntegerField("verbose field14")
19     field15 = models.PositiveSmallIntegerField("verbose field15")
20     field16 = models.SlugField("verbose field16")
21     field17 = models.SmallIntegerField("verbose field17")
22     field18 = models.TextField("verbose field18")
23     field19 = models.TimeField("verbose field19")
24     field20 = models.URLField("verbose field20")
25     field21 = models.UUIDField("verbose field21")
26     field22 = models.DurationField("verbose field22")

class BasicFieldTests(SimpleTestCase)

 1 import pickle
 2
 3 from django import forms
 4 from django.core.exceptions import ValidationError
 5 from django.db import models
 6 from django.test import SimpleTestCase, TestCase
 7 from django.utils.functional import lazy
 8
 9 from .models import (
10     Bar, Choiceful, Foo, RenamedField, VerboseNameField, Whiz, WhizDelayed,
11     WhizIter, WhizIterEmpty,
12 )

test_model_duration_field.py

 1import datetime
 2
 3from django.core.exceptions import ValidationError
 4from django.forms import DurationField
 5from django.test import SimpleTestCase
 6from django.utils import translation
 7from django.utils.duration import duration_string
 8
 9from . import FormFieldAssertionsMixin
10
11
12class DurationFieldTest(FormFieldAssertionsMixin, SimpleTestCase):
13    def test_durationfield_clean(self):
14        f = DurationField()
15        self.assertEqual(datetime.timedelta(seconds=30), f.clean("30"))
16        self.assertEqual(datetime.timedelta(minutes=15, seconds=30), f.clean("15:30"))
17        self.assertEqual(
18            datetime.timedelta(hours=1, minutes=15, seconds=30), f.clean("1:15:30")
19        )
20        self.assertEqual(
21            datetime.timedelta(
22                days=1, hours=1, minutes=15, seconds=30, milliseconds=300
23            ),
24            f.clean("1 1:15:30.3"),
25        )
26
27    def test_overflow(self):
28        msg = "The number of days must be between {min_days} and {max_days}.".format(
29            min_days=datetime.timedelta.min.days,
30            max_days=datetime.timedelta.max.days,
31        )
32        f = DurationField()
33        with self.assertRaisesMessage(ValidationError, msg):
34            f.clean("1000000000 00:00:00")
35        with self.assertRaisesMessage(ValidationError, msg):
36            f.clean("-1000000000 00:00:00")
37
38    def test_overflow_translation(self):
39        msg = "Le nombre de jours doit être entre {min_days} et {max_days}.".format(
40            min_days=datetime.timedelta.min.days,
41            max_days=datetime.timedelta.max.days,
42        )
43        with translation.override("fr"):
44            with self.assertRaisesMessage(ValidationError, msg):
45                DurationField().clean("1000000000 00:00:00")
46
47    def test_durationfield_render(self):
48        self.assertWidgetRendersTo(
49            DurationField(initial=datetime.timedelta(hours=1)),
50            '<input id="id_f" type="text" name="f" value="01:00:00" required>',
51        )
52
53    def test_durationfield_integer_value(self):
54        f = DurationField()
55        self.assertEqual(datetime.timedelta(0, 10800), f.clean(10800))
56
57    def test_durationfield_prepare_value(self):
58        field = DurationField()
59        td = datetime.timedelta(minutes=15, seconds=30)
60        self.assertEqual(field.prepare_value(td), duration_string(td))
61        self.assertEqual(field.prepare_value("arbitrary"), "arbitrary")
62        self.assertIsNone(field.prepare_value(None))