summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim Graham <timograham@gmail.com>2018-11-17 18:50:26 -0500
committerTim Graham <timograham@gmail.com>2018-11-17 19:27:53 -0500
commit9cac10eee49eae3bbf7bd133ba0ae931b275324c (patch)
treeff643109e069cae9e4583b334fe6c29191150ef2
parente62f6e0968eb19a44198211b5398c5738db454c5 (diff)
Added BaseDatabaseSchemaEditor._effective_default() to allow testing without a connection.
-rw-r--r--django/db/backends/base/schema.py12
-rw-r--r--tests/backends/base/test_schema.py13
2 files changed, 13 insertions, 12 deletions
diff --git a/django/db/backends/base/schema.py b/django/db/backends/base/schema.py
index 813c5bbd75..68250c895e 100644
--- a/django/db/backends/base/schema.py
+++ b/django/db/backends/base/schema.py
@@ -199,8 +199,9 @@ class BaseDatabaseSchemaEditor:
'requires_literal_defaults must provide a prepare_default() method'
)
- def effective_default(self, field):
- """Return a field's effective database default value."""
+ @classmethod
+ def _effective_default(self, field):
+ # This method allows testing its logic without a connection.
if field.has_default():
default = field.get_default()
elif not field.null and field.blank and field.empty_strings_allowed:
@@ -219,8 +220,11 @@ class BaseDatabaseSchemaEditor:
default = timezone.now()
else:
default = None
- # Convert the value so it can be sent to the database.
- return field.get_db_prep_save(default, self.connection)
+ return default
+
+ def effective_default(self, field):
+ """Return a field's effective database default value."""
+ return field.get_db_prep_save(self._effective_default(field), self.connection)
def quote_value(self, value):
"""
diff --git a/tests/backends/base/test_schema.py b/tests/backends/base/test_schema.py
index 9f740d9326..2ecad098a6 100644
--- a/tests/backends/base/test_schema.py
+++ b/tests/backends/base/test_schema.py
@@ -1,8 +1,9 @@
-from django.db import connection, models
-from django.test import TestCase
+from django.db import models
+from django.db.backends.base.schema import BaseDatabaseSchemaEditor
+from django.test import SimpleTestCase
-class SchemaEditorTests(TestCase):
+class SchemaEditorTests(SimpleTestCase):
def test_effective_default_callable(self):
"""SchemaEditor.effective_default() shouldn't call callable defaults."""
@@ -14,9 +15,5 @@ class SchemaEditorTests(TestCase):
def _get_default(self):
return self.default
- def get_db_prep_save(self, default, connection):
- return default
-
field = MyCharField(max_length=1, default=MyStr)
- with connection.schema_editor() as editor:
- self.assertEqual(editor.effective_default(field), MyStr)
+ self.assertEqual(BaseDatabaseSchemaEditor._effective_default(field), MyStr)