mirror of
https://github.com/django/django.git
synced 2024-12-22 17:16:24 +00:00
8ff4303946
Thanks to Carl and Shai for the discussion.
128 lines
5.0 KiB
Python
128 lines
5.0 KiB
Python
from django.core.checks.compatibility import base
|
|
from django.core.checks.compatibility import django_1_6_0
|
|
from django.core.management.commands import check
|
|
from django.core.management import call_command
|
|
from django.db.models.fields import NOT_PROVIDED
|
|
from django.test import TestCase
|
|
|
|
from .models import Book
|
|
|
|
class StubCheckModule(object):
|
|
# Has no ``run_checks`` attribute & will trigger a warning.
|
|
__name__ = 'StubCheckModule'
|
|
|
|
|
|
class FakeWarnings(object):
|
|
def __init__(self):
|
|
self._warnings = []
|
|
|
|
def warn(self, message):
|
|
self._warnings.append(message)
|
|
|
|
|
|
class CompatChecksTestCase(TestCase):
|
|
def setUp(self):
|
|
super(CompatChecksTestCase, self).setUp()
|
|
|
|
# We're going to override the list of checks to perform for test
|
|
# consistency in the future.
|
|
self.old_compat_checks = base.COMPAT_CHECKS
|
|
base.COMPAT_CHECKS = [
|
|
django_1_6_0,
|
|
]
|
|
|
|
def tearDown(self):
|
|
# Restore what's supposed to be in ``COMPAT_CHECKS``.
|
|
base.COMPAT_CHECKS = self.old_compat_checks
|
|
super(CompatChecksTestCase, self).tearDown()
|
|
|
|
def test_check_test_runner_new_default(self):
|
|
with self.settings(TEST_RUNNER='django.test.runner.DiscoverRunner'):
|
|
result = django_1_6_0.check_test_runner()
|
|
self.assertTrue("Django 1.6 introduced a new default test runner" in result)
|
|
|
|
def test_check_test_runner_overridden(self):
|
|
with self.settings(TEST_RUNNER='myapp.test.CustomRunnner'):
|
|
self.assertEqual(django_1_6_0.check_test_runner(), None)
|
|
|
|
def test_run_checks_new_default(self):
|
|
with self.settings(TEST_RUNNER='django.test.runner.DiscoverRunner'):
|
|
result = django_1_6_0.run_checks()
|
|
self.assertEqual(len(result), 1)
|
|
self.assertTrue("Django 1.6 introduced a new default test runner" in result[0])
|
|
|
|
def test_run_checks_overridden(self):
|
|
with self.settings(TEST_RUNNER='myapp.test.CustomRunnner'):
|
|
self.assertEqual(len(django_1_6_0.run_checks()), 0)
|
|
|
|
def test_boolean_field_default_value(self):
|
|
with self.settings(TEST_RUNNER='myapp.test.CustomRunnner'):
|
|
# We patch the field's default value to trigger the warning
|
|
boolean_field = Book._meta.get_field('is_published')
|
|
old_default = boolean_field.default
|
|
try:
|
|
boolean_field.default = NOT_PROVIDED
|
|
result = django_1_6_0.run_checks()
|
|
self.assertEqual(len(result), 1)
|
|
self.assertTrue("You have not set a default value for one or more BooleanFields" in result[0])
|
|
self.assertTrue('check.Book: "is_published"' in result[0])
|
|
# We did not patch the BlogPost.is_published field so
|
|
# there should not be a warning about it
|
|
self.assertFalse('check.BlogPost' in result[0])
|
|
finally:
|
|
# Restore the ``default``
|
|
boolean_field.default = old_default
|
|
|
|
def test_check_compatibility(self):
|
|
with self.settings(TEST_RUNNER='django.test.runner.DiscoverRunner'):
|
|
result = base.check_compatibility()
|
|
self.assertEqual(len(result), 1)
|
|
self.assertTrue("Django 1.6 introduced a new default test runner" in result[0])
|
|
|
|
with self.settings(TEST_RUNNER='myapp.test.CustomRunnner'):
|
|
self.assertEqual(len(base.check_compatibility()), 0)
|
|
|
|
def test_check_compatibility_warning(self):
|
|
# First, we're patching over the ``COMPAT_CHECKS`` with a stub which
|
|
# will trigger the warning.
|
|
base.COMPAT_CHECKS = [
|
|
StubCheckModule(),
|
|
]
|
|
|
|
# Next, we unfortunately have to patch out ``warnings``.
|
|
old_warnings = base.warnings
|
|
base.warnings = FakeWarnings()
|
|
|
|
self.assertEqual(len(base.warnings._warnings), 0)
|
|
|
|
with self.settings(TEST_RUNNER='myapp.test.CustomRunnner'):
|
|
self.assertEqual(len(base.check_compatibility()), 0)
|
|
|
|
self.assertEqual(len(base.warnings._warnings), 1)
|
|
self.assertTrue("The 'StubCheckModule' module lacks a 'run_checks'" in base.warnings._warnings[0])
|
|
|
|
# Restore the ``warnings``.
|
|
base.warnings = old_warnings
|
|
|
|
def test_management_command(self):
|
|
# Again, we unfortunately have to patch out ``warnings``. Different
|
|
old_warnings = check.warnings
|
|
check.warnings = FakeWarnings()
|
|
|
|
self.assertEqual(len(check.warnings._warnings), 0)
|
|
|
|
# Should not produce any warnings.
|
|
with self.settings(TEST_RUNNER='myapp.test.CustomRunnner'):
|
|
call_command('check')
|
|
|
|
self.assertEqual(len(check.warnings._warnings), 0)
|
|
|
|
with self.settings(TEST_RUNNER='django.test.runner.DiscoverRunner'):
|
|
call_command('check')
|
|
|
|
self.assertEqual(len(check.warnings._warnings), 1)
|
|
self.assertTrue("Django 1.6 introduced a new default test runner" in check.warnings._warnings[0])
|
|
|
|
# Restore the ``warnings``.
|
|
base.warnings = old_warnings
|