summaryrefslogtreecommitdiff
path: root/tests/schema
diff options
context:
space:
mode:
authormdalp <mdalp@users.noreply.github.com>2021-12-12 02:31:04 +0100
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2021-12-14 09:08:25 +0100
commit3b73f77ad40a06230a47771df02429f1ba45a2f4 (patch)
tree12442a9a664360b7665b91d9381672d4aef896e3 /tests/schema
parent2f33217ea2cad688040dd6044cdda946c62e5b65 (diff)
downloaddjango-3b73f77ad40a06230a47771df02429f1ba45a2f4.tar.gz
Fixed #33358 -- Fixed handling timedelta < 1 day in schema operations on Oracle.
Diffstat (limited to 'tests/schema')
-rw-r--r--tests/schema/tests.py48
1 files changed, 44 insertions, 4 deletions
diff --git a/tests/schema/tests.py b/tests/schema/tests.py
index 72a73745ed..cd6a52f6af 100644
--- a/tests/schema/tests.py
+++ b/tests/schema/tests.py
@@ -12,10 +12,11 @@ from django.db import (
from django.db.models import (
CASCADE, PROTECT, AutoField, BigAutoField, BigIntegerField, BinaryField,
BooleanField, CharField, CheckConstraint, DateField, DateTimeField,
- DecimalField, F, FloatField, ForeignKey, ForeignObject, Index,
- IntegerField, JSONField, ManyToManyField, Model, OneToOneField, OrderBy,
- PositiveIntegerField, Q, SlugField, SmallAutoField, SmallIntegerField,
- TextField, TimeField, UniqueConstraint, UUIDField, Value,
+ DecimalField, DurationField, F, FloatField, ForeignKey, ForeignObject,
+ Index, IntegerField, JSONField, ManyToManyField, Model, OneToOneField,
+ OrderBy, PositiveIntegerField, Q, SlugField, SmallAutoField,
+ SmallIntegerField, TextField, TimeField, UniqueConstraint, UUIDField,
+ Value,
)
from django.db.models.fields.json import KeyTextTransform
from django.db.models.functions import Abs, Cast, Collate, Lower, Random, Upper
@@ -640,6 +641,19 @@ class SchemaTests(TransactionTestCase):
# these two types.
self.assertIn(columns['bits'][0], ("BinaryField", "TextField"))
+ def test_add_field_durationfield_with_default(self):
+ with connection.schema_editor() as editor:
+ editor.create_model(Author)
+ new_field = DurationField(default=datetime.timedelta(minutes=10))
+ new_field.set_attributes_from_name('duration')
+ with connection.schema_editor() as editor:
+ editor.add_field(Author, new_field)
+ columns = self.column_classes(Author)
+ self.assertEqual(
+ columns['duration'][0],
+ connection.features.introspected_field_types['DurationField'],
+ )
+
@unittest.skipUnless(connection.vendor == 'mysql', "MySQL specific")
def test_add_binaryfield_mediumblob(self):
"""
@@ -1886,6 +1900,32 @@ class SchemaTests(TransactionTestCase):
self.fail("No check constraint for height found")
@skipUnlessDBFeature('supports_column_check_constraints', 'can_introspect_check_constraints')
+ @isolate_apps('schema')
+ def test_check_constraint_timedelta_param(self):
+ class DurationModel(Model):
+ duration = DurationField()
+
+ class Meta:
+ app_label = 'schema'
+
+ with connection.schema_editor() as editor:
+ editor.create_model(DurationModel)
+ self.isolated_local_models = [DurationModel]
+ constraint_name = 'duration_gte_5_minutes'
+ constraint = CheckConstraint(
+ check=Q(duration__gt=datetime.timedelta(minutes=5)),
+ name=constraint_name,
+ )
+ DurationModel._meta.constraints = [constraint]
+ with connection.schema_editor() as editor:
+ editor.add_constraint(DurationModel, constraint)
+ constraints = self.get_constraints(DurationModel._meta.db_table)
+ self.assertIn(constraint_name, constraints)
+ with self.assertRaises(IntegrityError), atomic():
+ DurationModel.objects.create(duration=datetime.timedelta(minutes=4))
+ DurationModel.objects.create(duration=datetime.timedelta(minutes=10))
+
+ @skipUnlessDBFeature('supports_column_check_constraints', 'can_introspect_check_constraints')
def test_remove_field_check_does_not_remove_meta_constraints(self):
with connection.schema_editor() as editor:
editor.create_model(Author)