diff options
| author | Tim Graham <timograham@gmail.com> | 2018-11-17 18:50:26 -0500 |
|---|---|---|
| committer | Tim Graham <timograham@gmail.com> | 2018-11-17 19:27:53 -0500 |
| commit | 9cac10eee49eae3bbf7bd133ba0ae931b275324c (patch) | |
| tree | ff643109e069cae9e4583b334fe6c29191150ef2 | |
| parent | e62f6e0968eb19a44198211b5398c5738db454c5 (diff) | |
Added BaseDatabaseSchemaEditor._effective_default() to allow testing without a connection.
| -rw-r--r-- | django/db/backends/base/schema.py | 12 | ||||
| -rw-r--r-- | tests/backends/base/test_schema.py | 13 |
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) |
