55 lines
1.8 KiB
Python
55 lines
1.8 KiB
Python
|
|
from django.apps import apps
|
||
|
|
from django.core import checks
|
||
|
|
from django.db import models
|
||
|
|
from django.test import TestCase
|
||
|
|
|
||
|
|
from wagtail.models import LockableMixin, RevisionMixin
|
||
|
|
|
||
|
|
|
||
|
|
class TestLockableMixin(TestCase):
|
||
|
|
def tearDown(self):
|
||
|
|
# Unregister the models from the overall model registry
|
||
|
|
# so that it doesn't break tests elsewhere.
|
||
|
|
# We can probably replace this with Django's @isolate_apps decorator.
|
||
|
|
for package in ("wagtailcore", "wagtail.tests"):
|
||
|
|
try:
|
||
|
|
for model in (
|
||
|
|
"lockablewithoutrevisionmodel",
|
||
|
|
"lockableincorrectrevisionmodel",
|
||
|
|
"lockablewithrevisionmodel",
|
||
|
|
):
|
||
|
|
del apps.all_models[package][model]
|
||
|
|
except KeyError:
|
||
|
|
pass
|
||
|
|
apps.clear_cache()
|
||
|
|
|
||
|
|
def test_lockable_mixin_only(self):
|
||
|
|
class LockableWithoutRevisionModel(LockableMixin, models.Model):
|
||
|
|
pass
|
||
|
|
|
||
|
|
self.assertEqual(LockableWithoutRevisionModel.check(), [])
|
||
|
|
|
||
|
|
def test_incorrect_revision_mixin_order(self):
|
||
|
|
class LockableIncorrectRevisionModel(
|
||
|
|
RevisionMixin, LockableMixin, models.Model
|
||
|
|
):
|
||
|
|
pass
|
||
|
|
|
||
|
|
self.assertEqual(
|
||
|
|
LockableIncorrectRevisionModel.check(),
|
||
|
|
[
|
||
|
|
checks.Error(
|
||
|
|
"LockableMixin must be applied before RevisionMixin.",
|
||
|
|
hint="Move LockableMixin in the model's base classes before RevisionMixin.",
|
||
|
|
obj=LockableIncorrectRevisionModel,
|
||
|
|
id="wagtailcore.E005",
|
||
|
|
)
|
||
|
|
],
|
||
|
|
)
|
||
|
|
|
||
|
|
def test_correct_revision_mixin_order(self):
|
||
|
|
class LockableWithRevisionModel(LockableMixin, RevisionMixin, models.Model):
|
||
|
|
pass
|
||
|
|
|
||
|
|
self.assertEqual(LockableWithRevisionModel.check(), [])
|