Commit a4f23eba authored by Tim Graham's avatar Tim Graham
Browse files

Fixed #23421 -- Corrected TEST SERIALIZE setting.

Thanks gkoller for the report.
parent c692e37b
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -301,7 +301,7 @@ def setup_databases(verbosity, interactive, keepdb=False, **kwargs):
                    verbosity,
                    autoclobber=not interactive,
                    keepdb=keepdb,
                    serialize=connection.settings_dict.get("TEST_SERIALIZE", True),
                    serialize=connection.settings_dict.get("TEST", {}).get("SERIALIZE", True),
                )
                destroy = True
            else:
+13 −0
Original line number Diff line number Diff line
@@ -683,6 +683,19 @@ test database will use the name ``'test_' + DATABASE_NAME``.

See :ref:`the-test-database`.

.. setting:: TEST_SERIALIZE

SERIALIZE
^^^^^^^^^

.. versionadded:: 1.7.1

Boolean value to control whether or not the default test runnner serializes the
database into an in-memory JSON string before running tests (used to restore
the database state between tests if you don't have transactions). You can set
this to ``False`` to speed up creation time if you don't have any test classes
with :ref:`serialized_rollback=True <test-case-serialized-rollback>`.

.. setting:: TEST_CREATE

CREATE_DB
+3 −0
Original line number Diff line number Diff line
@@ -70,3 +70,6 @@ Bugfixes

* Made ``migrations.RunSQL`` no longer require percent sign escaping. This is
  now consistent with ``cursor.execute()`` (:ticket:`23426`).

* Made the :setting:`SERIALIZE <TEST_SERIALIZE>` entry in the
  :setting:`TEST <DATABASE-TEST>` dictionary usable (:ticket:`23421`).
+8 −2
Original line number Diff line number Diff line
@@ -525,8 +525,14 @@ can be useful during testing.
    ``serialize`` determines if Django serializes the database into an
    in-memory JSON string before running tests (used to restore the database
    state between tests if you don't have transactions). You can set this to
    False to significantly speed up creation time if you know you don't need
    data persistence outside of test fixtures.
    ``False`` to speed up creation time if you don't have any test classes
    with :ref:`serialized_rollback=True <test-case-serialized-rollback>`.

    .. versionadded:: 1.7.1

        If you are using the default test runner, you can control this with the
        the :setting:`SERIALIZE <TEST_SERIALIZE>` entry in the
        :setting:`TEST <DATABASE-TEST>` dictionary

    ``keepdb`` determines if the test run should use an existing
    database, or create a new one. If ``True``, the existing
+65 −30
Original line number Diff line number Diff line
@@ -5,9 +5,10 @@ from __future__ import unicode_literals

import unittest

from django import db
from django.core.exceptions import ImproperlyConfigured
from django.core.management import call_command
from django import db
from django.db.backends.dummy.base import DatabaseCreation
from django.test import runner, TestCase, TransactionTestCase, skipUnlessDBFeature
from django.test.testcases import connections_support_transactions
from django.test.utils import override_system_checks
@@ -299,18 +300,29 @@ class AliasedDefaultTestSetupTest(unittest.TestCase):
            db.connections = old_db_connections


class AliasedDatabaseTeardownTest(unittest.TestCase):
    def test_setup_aliased_databases(self):
        from django.db.backends.dummy.base import DatabaseCreation
class SetupDatabasesTests(unittest.TestCase):

        runner_instance = runner.DiscoverRunner(verbosity=0)
        old_db_connections = db.connections
        old_destroy_test_db = DatabaseCreation.destroy_test_db
        old_create_test_db = DatabaseCreation.create_test_db
        try:
    def setUp(self):
        self._old_db_connections = db.connections
        self._old_destroy_test_db = DatabaseCreation.destroy_test_db
        self._old_create_test_db = DatabaseCreation.create_test_db
        self.runner_instance = runner.DiscoverRunner(verbosity=0)

    def tearDown(self):
        DatabaseCreation.create_test_db = self._old_create_test_db
        DatabaseCreation.destroy_test_db = self._old_destroy_test_db
        db.connections = self._old_db_connections

    def test_setup_aliased_databases(self):
        destroyed_names = []
            DatabaseCreation.destroy_test_db = lambda self, old_database_name, verbosity=1, keepdb=False, serialize=True: destroyed_names.append(old_database_name)
            DatabaseCreation.create_test_db = lambda self, verbosity=1, autoclobber=False, keepdb=False, serialize=True: self._get_test_db_name()
        DatabaseCreation.destroy_test_db = (
            lambda self, old_database_name, verbosity=1, keepdb=False, serialize=True:
            destroyed_names.append(old_database_name)
        )
        DatabaseCreation.create_test_db = (
            lambda self, verbosity=1, autoclobber=False, keepdb=False, serialize=True:
            self._get_test_db_name()
        )

        db.connections = db.ConnectionHandler({
            'default': {
@@ -323,14 +335,37 @@ class AliasedDatabaseTeardownTest(unittest.TestCase):
            }
        })

            old_config = runner_instance.setup_databases()
            runner_instance.teardown_databases(old_config)
        old_config = self.runner_instance.setup_databases()
        self.runner_instance.teardown_databases(old_config)

        self.assertEqual(destroyed_names.count('dbname'), 1)
        finally:
            DatabaseCreation.create_test_db = old_create_test_db
            DatabaseCreation.destroy_test_db = old_destroy_test_db
            db.connections = old_db_connections

    def test_serialization(self):
        serialize = []
        DatabaseCreation.create_test_db = (
            lambda *args, **kwargs: serialize.append(kwargs.get('serialize'))
        )
        db.connections = db.ConnectionHandler({
            'default': {
                'ENGINE': 'django.db.backends.dummy',
            },
        })
        self.runner_instance.setup_databases()
        self.assertEqual(serialize, [True])

    def test_serialized_off(self):
        serialize = []
        DatabaseCreation.create_test_db = (
            lambda *args, **kwargs: serialize.append(kwargs.get('serialize'))
        )
        db.connections = db.ConnectionHandler({
            'default': {
                'ENGINE': 'django.db.backends.dummy',
                'TEST': {'SERIALIZE': False},
            },
        })
        self.runner_instance.setup_databases()
        self.assertEqual(serialize, [False])


class DeprecationDisplayTest(AdminScriptTestCase):