django/tests/utils_tests/test_deconstruct.py

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

97 lines
3.2 KiB
Python
Raw Permalink Normal View History

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"})