From 5affe7940c82ea250108e28f0ad9f30a3e4918d2 Mon Sep 17 00:00:00 2001 From: Dirk Eschler Date: Sun, 18 Nov 2012 00:08:04 +0100 Subject: [PATCH] Added basic tests for DateField, DateTimeField and TimeField and added them to the list of supported fields. --- docs/modeltranslation/registration.rst | 6 +-- modeltranslation/fields.py | 3 ++ modeltranslation/tests/__init__.py | 73 ++++++++++++++++++++++++++ modeltranslation/tests/models.py | 3 ++ modeltranslation/tests/translation.py | 2 +- 5 files changed, 83 insertions(+), 4 deletions(-) diff --git a/docs/modeltranslation/registration.rst b/docs/modeltranslation/registration.rst index d7338ab..273de17 100644 --- a/docs/modeltranslation/registration.rst +++ b/docs/modeltranslation/registration.rst @@ -166,8 +166,8 @@ Model Field 0.4 0.5 ``BooleanField`` |n| |y| ``CharField`` |y| |y| ``CommaSeparatedIntegerField`` |n| |y| -``DateField`` |n| |u| -``DateTimeField`` |n| |u| +``DateField`` |n| |y| +``DateTimeField`` |n| |y| ``DecimalField`` |n| |y| ``EmailField`` |i| |i| ``FileField`` |y| |y| @@ -183,7 +183,7 @@ Model Field 0.4 0.5 ``SlugField`` |i| |i| ``SmallIntegerField`` |n| |i| ``TextField`` |y| |y| -``TimeField`` |n| |u| +``TimeField`` |n| |y| ``URLField`` |i| |i| ``ForeignKey`` |n| |n| ``OneToOneField`` |n| |n| diff --git a/modeltranslation/fields.py b/modeltranslation/fields.py index bfcc724..85f17d1 100644 --- a/modeltranslation/fields.py +++ b/modeltranslation/fields.py @@ -22,6 +22,9 @@ SUPPORTED_FIELDS = ( fields.FloatField, fields.DecimalField, fields.IPAddressField, + fields.DateField, + fields.DateTimeField, + fields.TimeField, fields.files.FileField, fields.files.ImageField, ) diff --git a/modeltranslation/tests/__init__.py b/modeltranslation/tests/__init__.py index 433143c..b996c1d 100644 --- a/modeltranslation/tests/__init__.py +++ b/modeltranslation/tests/__init__.py @@ -7,6 +7,7 @@ NOTE: Perhaps ModeltranslationTestBase in tearDownClass should reload some modul """ from __future__ import with_statement # Python 2.5 compatibility +import datetime from decimal import Decimal import os import shutil @@ -667,6 +668,78 @@ class OtherFieldsTest(ModeltranslationTestBase): self.assertEqual(Decimal('0.23'), inst.decimal_de) self.assertEqual(Decimal('0.42'), inst.decimal_en) + def test_translated_models_date_instance(self): + inst = OtherFieldsModel() + inst.date = datetime.date(2012, 12, 31) + self.assertEqual('de', get_language()) + self.assertEqual(datetime.date(2012, 12, 31), inst.date) + self.assertEqual(datetime.date(2012, 12, 31), inst.date_de) + self.assertEqual(None, inst.date_en) + + inst.date = datetime.date(1999, 1, 1) + inst.save() + self.assertEqual(datetime.date(1999, 1, 1), inst.date) + self.assertEqual(datetime.date(1999, 1, 1), inst.date_de) + self.assertEqual(None, inst.date_en) + + qs = OtherFieldsModel.objects.filter(date='1999-1-1') + self.assertEqual(len(qs), 1) + self.assertEqual(qs[0].date, datetime.date(1999, 1, 1)) + + trans_real.activate('en') + inst.date = datetime.date(2012, 12, 31) + self.assertEqual(datetime.date(2012, 12, 31), inst.date) + self.assertEqual(datetime.date(1999, 1, 1), inst.date_de) + self.assertEqual(datetime.date(2012, 12, 31), inst.date_en) + + def test_translated_models_datetime_instance(self): + inst = OtherFieldsModel() + inst.datetime = datetime.datetime(2012, 12, 31, 23, 42) + self.assertEqual('de', get_language()) + self.assertEqual(datetime.datetime(2012, 12, 31, 23, 42), inst.datetime) + self.assertEqual(datetime.datetime(2012, 12, 31, 23, 42), inst.datetime_de) + self.assertEqual(None, inst.datetime_en) + + inst.datetime = datetime.datetime(1999, 1, 1, 23, 42) + inst.save() + self.assertEqual(datetime.datetime(1999, 1, 1, 23, 42), inst.datetime) + self.assertEqual(datetime.datetime(1999, 1, 1, 23, 42), inst.datetime_de) + self.assertEqual(None, inst.datetime_en) + + qs = OtherFieldsModel.objects.filter(datetime='1999-1-1 23:42') + self.assertEqual(len(qs), 1) + self.assertEqual(qs[0].datetime, datetime.datetime(1999, 1, 1, 23, 42)) + + trans_real.activate('en') + inst.datetime = datetime.datetime(2012, 12, 31, 23, 42) + self.assertEqual(datetime.datetime(2012, 12, 31, 23, 42), inst.datetime) + self.assertEqual(datetime.datetime(1999, 1, 1, 23, 42), inst.datetime_de) + self.assertEqual(datetime.datetime(2012, 12, 31, 23, 42), inst.datetime_en) + + def test_translated_models_time_instance(self): + inst = OtherFieldsModel() + inst.time = datetime.time(23, 42, 0) + self.assertEqual('de', get_language()) + self.assertEqual(datetime.time(23, 42, 0), inst.time) + self.assertEqual(datetime.time(23, 42, 0), inst.time_de) + self.assertEqual(None, inst.time_en) + + inst.time = datetime.time(01, 02, 03) + inst.save() + self.assertEqual(datetime.time(01, 02, 03), inst.time) + self.assertEqual(datetime.time(01, 02, 03), inst.time_de) + self.assertEqual(None, inst.time_en) + + qs = OtherFieldsModel.objects.filter(time='01:02:03') + self.assertEqual(len(qs), 1) + self.assertEqual(qs[0].time, datetime.time(01, 02, 03)) + + trans_real.activate('en') + inst.time = datetime.time(23, 42, 0) + self.assertEqual(datetime.time(23, 42, 0), inst.time) + self.assertEqual(datetime.time(01, 02, 03), inst.time_de) + self.assertEqual(datetime.time(23, 42, 0), inst.time_en) + class ModeltranslationTestRule1(ModeltranslationTestBase): """ diff --git a/modeltranslation/tests/models.py b/modeltranslation/tests/models.py index 07f231f..5e20260 100644 --- a/modeltranslation/tests/models.py +++ b/modeltranslation/tests/models.py @@ -44,6 +44,9 @@ class OtherFieldsModel(models.Model): float = models.FloatField(blank=True, null=True) decimal = models.DecimalField(max_digits=5, decimal_places=2, blank=True, null=True) ip = models.IPAddressField(blank=True, null=True) + date = models.DateField(blank=True, null=True) + datetime = models.DateTimeField(blank=True, null=True) + time = models.TimeField(blank=True, null=True) # genericip = models.GenericIPAddressField(blank=True, null=True) diff --git a/modeltranslation/tests/translation.py b/modeltranslation/tests/translation.py index 460dfb8..2501a2e 100644 --- a/modeltranslation/tests/translation.py +++ b/modeltranslation/tests/translation.py @@ -36,7 +36,7 @@ class OtherFieldsModelTranslationOptions(TranslationOptions): # fields = ('int', 'boolean', 'nullboolean', 'csi', 'float', 'decimal', # 'ip', 'genericip') fields = ('int', 'boolean', 'nullboolean', 'csi', 'float', 'decimal', - 'ip',) + 'ip', 'date', 'datetime', 'time',) translator.register(OtherFieldsModel, OtherFieldsModelTranslationOptions)