Skip to content

Instantly share code, notes, and snippets.

@gchp
Forked from aaugustin/gist:3012318
Created April 14, 2014 12:39
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save gchp/10644169 to your computer and use it in GitHub Desktop.
Save gchp/10644169 to your computer and use it in GitHub Desktop.
from optparse import make_option
from django.test.simple import DjangoTestSuiteRunner
def fake_create_test_db(self, verbosity=1, autoclobber=False):
"""Simplified version of BaseDatabaseCreation.create_test_db."""
test_database_name = self._get_test_db_name()
if verbosity >= 1:
test_db_repr = ''
if verbosity >= 2:
test_db_repr = " ('%s')" % test_database_name
print "Using existing test database for alias '%s'%s..." % (self.connection.alias, test_db_repr)
self.connection.close()
self.connection.settings_dict["NAME"] = test_database_name
# Confirm the feature set of the test database
self.connection.features.confirm()
# Get a cursor (even though we don't need one yet). This has
# the side effect of initializing the test database.
self.connection.cursor()
return test_database_name
def fake_destroy_test_db(self, old_database_name, verbosity=1):
"""Simplified version of BaseDatabaseCreation.destroy_test_db."""
self.connection.close()
test_database_name = self.connection.settings_dict['NAME']
if verbosity >= 1:
test_db_repr = ''
if verbosity >= 2:
test_db_repr = " ('%s')" % test_database_name
print "Preserving test database for alias '%s'%s..." % (self.connection.alias, test_db_repr)
self.connection.settings_dict['NAME'] = old_database_name
class AutoslaveTestSuiteRunner(DjangoTestSuiteRunner):
option_list = (
make_option('--createdb',
action='store_true', dest='createdb', default=False,
help='Create, or re-create, the test database before the tests. '
'Use this one the first run and when your models change.'),
make_option('--dropdb',
action='store_true', dest='dropdb', default=False,
help='Drop the test database after the tests.'),
)
def __init__(self, createdb=True, dropdb=True, **kwargs):
self.createdb = createdb
self.dropdb = dropdb
super(AutoslaveTestSuiteRunner, self).__init__(**kwargs)
def setup_databases(self, **kwargs):
"""Create the test databases only when explicitly requested.
Also create initial data for some models. We can't use 'initial_data'
fixtures for objects whose contents may be edited in production,
because they would be overwritten by updates.
"""
if not self.createdb:
from django.db.backends.creation import BaseDatabaseCreation
BaseDatabaseCreation.create_test_db = fake_create_test_db
result = super(AutoslaveTestSuiteRunner, self).setup_databases(**kwargs)
if self.createdb:
# Initialize some tables that are populated by scripts
# rather than fixtures; hardcoded for our local setup.
pass
return result
def teardown_databases(self, old_config, **kwargs):
"""Drop the test databases only when explicitly requested."""
if not self.dropdb:
from django.db.backends.creation import BaseDatabaseCreation
BaseDatabaseCreation.destroy_test_db = fake_destroy_test_db
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment