mirror of
https://github.com/django/django.git
synced 2025-10-24 06:06:09 +00:00
Fixed #16905 -- Added extensible checks (nee validation) framework
This is the result of Christopher Medrela's 2013 Summer of Code project. Thanks also to Preston Holmes, Tim Graham, Anssi Kääriäinen, Florian Apolloner, and Alex Gaynor for review notes along the way. Also: Fixes #8579, fixes #3055, fixes #19844.
This commit is contained in:
68
tests/invalid_models_tests/test_backend_specific.py
Normal file
68
tests/invalid_models_tests/test_backend_specific.py
Normal file
@@ -0,0 +1,68 @@
|
||||
# -*- encoding: utf-8 -*-
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from types import MethodType
|
||||
|
||||
from django.core.checks import Error
|
||||
from django.db import connection, models
|
||||
|
||||
from .base import IsolatedModelsTestCase
|
||||
|
||||
|
||||
class BackendSpecificChecksTests(IsolatedModelsTestCase):
|
||||
|
||||
def test_check_field(self):
|
||||
""" Test if backend specific checks are performed. """
|
||||
|
||||
error = Error('an error', hint=None)
|
||||
|
||||
def mock(self, field, **kwargs):
|
||||
return [error]
|
||||
|
||||
class Model(models.Model):
|
||||
field = models.IntegerField()
|
||||
|
||||
field = Model._meta.get_field('field')
|
||||
|
||||
# Mock connection.validation.check_field method.
|
||||
v = connection.validation
|
||||
old_check_field = v.check_field
|
||||
v.check_field = MethodType(mock, v)
|
||||
try:
|
||||
errors = field.check()
|
||||
finally:
|
||||
# Unmock connection.validation.check_field method.
|
||||
v.check_field = old_check_field
|
||||
|
||||
self.assertEqual(errors, [error])
|
||||
|
||||
def test_validate_field(self):
|
||||
""" Errors raised by deprecated `validate_field` method should be
|
||||
collected. """
|
||||
|
||||
def mock(self, errors, opts, field):
|
||||
errors.add(opts, "An error!")
|
||||
|
||||
class Model(models.Model):
|
||||
field = models.IntegerField()
|
||||
|
||||
field = Model._meta.get_field('field')
|
||||
expected = [
|
||||
Error(
|
||||
"An error!",
|
||||
hint=None,
|
||||
obj=field,
|
||||
)
|
||||
]
|
||||
|
||||
# Mock connection.validation.validate_field method.
|
||||
v = connection.validation
|
||||
old_validate_field = v.validate_field
|
||||
v.validate_field = MethodType(mock, v)
|
||||
try:
|
||||
errors = field.check()
|
||||
finally:
|
||||
# Unmock connection.validation.validate_field method.
|
||||
v.validate_field = old_validate_field
|
||||
|
||||
self.assertEqual(errors, expected)
|
||||
Reference in New Issue
Block a user