mirror of https://github.com/django/django.git
Fixed #25388 -- Added an option to allow disabling of migrations during test database creation
This commit is contained in:
parent
1243fdf5cb
commit
157d7f1f1d
|
@ -48,8 +48,10 @@ class MigrationLoader(object):
|
|||
if load:
|
||||
self.build_graph()
|
||||
|
||||
@classmethod
|
||||
def migrations_module(cls, app_label):
|
||||
def migrations_module(self, app_label):
|
||||
if (self.connection is not None and
|
||||
not self.connection.settings_dict.get('TEST', {}).get('MIGRATE', True)):
|
||||
return None
|
||||
if app_label in settings.MIGRATION_MODULES:
|
||||
return settings.MIGRATION_MODULES[app_label]
|
||||
else:
|
||||
|
|
|
@ -37,7 +37,7 @@ class MigrationQuestioner(object):
|
|||
app_config = apps.get_app_config(app_label)
|
||||
except LookupError: # It's a fake app.
|
||||
return self.defaults.get("ask_initial", False)
|
||||
migrations_import_path = MigrationLoader.migrations_module(app_config.label)
|
||||
migrations_import_path = MigrationLoader(None, load=False).migrations_module(app_config.label)
|
||||
if migrations_import_path is None:
|
||||
# It's an application with migrations disabled.
|
||||
return self.defaults.get("ask_initial", False)
|
||||
|
|
|
@ -221,7 +221,7 @@ class MigrationWriter(object):
|
|||
|
||||
@property
|
||||
def basedir(self):
|
||||
migrations_package_name = MigrationLoader.migrations_module(self.migration.app_label)
|
||||
migrations_package_name = MigrationLoader(None, load=False).migrations_module(self.migration.app_label)
|
||||
|
||||
if migrations_package_name is None:
|
||||
raise ValueError(
|
||||
|
|
|
@ -710,6 +710,17 @@ The creation-order dependencies of the database. See the documentation
|
|||
on :ref:`controlling the creation order of test databases
|
||||
<topics-testing-creation-dependencies>` for details.
|
||||
|
||||
.. setting:: TEST_MIGRATE
|
||||
|
||||
``MIGRATE``
|
||||
^^^^^^^^^^^
|
||||
|
||||
.. versionadded:: 1.10
|
||||
|
||||
Default: ``True``
|
||||
|
||||
If set to ``False``, Django won't use migrations to create the test database.
|
||||
|
||||
.. setting:: TEST_MIRROR
|
||||
|
||||
``MIRROR``
|
||||
|
|
|
@ -394,6 +394,9 @@ Tests
|
|||
and run selectively with the new :option:`test --tag` and :option:`test
|
||||
--exclude-tag` options.
|
||||
|
||||
* Added the :setting:`DATABASES['TEST']['MIGRATE'] <TEST_MIGRATE>` option to
|
||||
allow disabling of migrations during test database creation.
|
||||
|
||||
URLs
|
||||
~~~~
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@ from __future__ import unicode_literals
|
|||
|
||||
from unittest import skipIf
|
||||
|
||||
from django.db import connection, connections
|
||||
from django.db import ConnectionHandler, connection, connections
|
||||
from django.db.migrations.exceptions import AmbiguityError, NodeNotFoundError
|
||||
from django.db.migrations.loader import MigrationLoader
|
||||
from django.db.migrations.recorder import MigrationRecorder
|
||||
|
@ -202,6 +202,23 @@ class LoaderTests(TestCase):
|
|||
self.assertEqual(migration_loader.migrated_apps, set())
|
||||
self.assertEqual(migration_loader.unmigrated_apps, {'migrated_app'})
|
||||
|
||||
@override_settings(
|
||||
INSTALLED_APPS=['migrations.migrations_test_apps.migrated_app'],
|
||||
)
|
||||
def test_disable_migrations(self):
|
||||
connections = ConnectionHandler({
|
||||
'default': {
|
||||
'NAME': 'dummy',
|
||||
'ENGINE': 'django.db.backends.sqlite3',
|
||||
'TEST': {
|
||||
'MIGRATE': False,
|
||||
},
|
||||
},
|
||||
})
|
||||
migration_loader = MigrationLoader(connections['default'])
|
||||
self.assertEqual(migration_loader.migrated_apps, set())
|
||||
self.assertEqual(migration_loader.unmigrated_apps, {'migrated_app'})
|
||||
|
||||
@override_settings(MIGRATION_MODULES={"migrations": "migrations.test_migrations_squashed"})
|
||||
def test_loading_squashed(self):
|
||||
"Tests loading a squashed migration"
|
||||
|
|
Loading…
Reference in New Issue