mirror of https://github.com/django/django.git
97 lines
3.2 KiB
Python
97 lines
3.2 KiB
Python
from django.test import SimpleTestCase
|
|
from django.utils.deconstruct import deconstructible
|
|
from django.utils.version import get_docs_version
|
|
|
|
|
|
@deconstructible()
|
|
class DeconstructibleClass:
|
|
pass
|
|
|
|
|
|
class DeconstructibleChildClass(DeconstructibleClass):
|
|
pass
|
|
|
|
|
|
@deconstructible(
|
|
path="utils_tests.deconstructible_classes.DeconstructibleWithPathClass"
|
|
)
|
|
class DeconstructibleWithPathClass:
|
|
pass
|
|
|
|
|
|
class DeconstructibleWithPathChildClass(DeconstructibleWithPathClass):
|
|
pass
|
|
|
|
|
|
@deconstructible(
|
|
path="utils_tests.deconstructible_classes.DeconstructibleInvalidPathClass",
|
|
)
|
|
class DeconstructibleInvalidPathClass:
|
|
pass
|
|
|
|
|
|
class DeconstructibleInvalidPathChildClass(DeconstructibleInvalidPathClass):
|
|
pass
|
|
|
|
|
|
class DeconstructibleTests(SimpleTestCase):
|
|
def test_deconstruct(self):
|
|
obj = DeconstructibleClass("arg", key="value")
|
|
path, args, kwargs = obj.deconstruct()
|
|
self.assertEqual(path, "utils_tests.test_deconstruct.DeconstructibleClass")
|
|
self.assertEqual(args, ("arg",))
|
|
self.assertEqual(kwargs, {"key": "value"})
|
|
|
|
def test_deconstruct_with_path(self):
|
|
obj = DeconstructibleWithPathClass("arg", key="value")
|
|
path, args, kwargs = obj.deconstruct()
|
|
self.assertEqual(
|
|
path,
|
|
"utils_tests.deconstructible_classes.DeconstructibleWithPathClass",
|
|
)
|
|
self.assertEqual(args, ("arg",))
|
|
self.assertEqual(kwargs, {"key": "value"})
|
|
|
|
def test_deconstruct_child(self):
|
|
obj = DeconstructibleChildClass("arg", key="value")
|
|
path, args, kwargs = obj.deconstruct()
|
|
self.assertEqual(path, "utils_tests.test_deconstruct.DeconstructibleChildClass")
|
|
self.assertEqual(args, ("arg",))
|
|
self.assertEqual(kwargs, {"key": "value"})
|
|
|
|
def test_deconstruct_child_with_path(self):
|
|
obj = DeconstructibleWithPathChildClass("arg", key="value")
|
|
path, args, kwargs = obj.deconstruct()
|
|
self.assertEqual(
|
|
path,
|
|
"utils_tests.test_deconstruct.DeconstructibleWithPathChildClass",
|
|
)
|
|
self.assertEqual(args, ("arg",))
|
|
self.assertEqual(kwargs, {"key": "value"})
|
|
|
|
def test_invalid_path(self):
|
|
obj = DeconstructibleInvalidPathClass()
|
|
docs_version = get_docs_version()
|
|
msg = (
|
|
f"Could not find object DeconstructibleInvalidPathClass in "
|
|
f"utils_tests.deconstructible_classes.\n"
|
|
f"Please note that you cannot serialize things like inner "
|
|
f"classes. Please move the object into the main module body to "
|
|
f"use migrations.\n"
|
|
f"For more information, see "
|
|
f"https://docs.djangoproject.com/en/{docs_version}/topics/"
|
|
f"migrations/#serializing-values"
|
|
)
|
|
with self.assertRaisesMessage(ValueError, msg):
|
|
obj.deconstruct()
|
|
|
|
def test_parent_invalid_path(self):
|
|
obj = DeconstructibleInvalidPathChildClass("arg", key="value")
|
|
path, args, kwargs = obj.deconstruct()
|
|
self.assertEqual(
|
|
path,
|
|
"utils_tests.test_deconstruct.DeconstructibleInvalidPathChildClass",
|
|
)
|
|
self.assertEqual(args, ("arg",))
|
|
self.assertEqual(kwargs, {"key": "value"})
|