kawaz.core.db.tests.test_decorators のソースコード

from unittest.mock import MagicMock
from django.test import TestCase
from django.conf import settings
from django.test.utils import override_settings
from django.core.exceptions import ValidationError

from .models import EvenNumberContainer
from ..decorators import validate_on_save

[ドキュメント]class ValidationOnSaveDecoratorTestCase(TestCase):
[ドキュメント] def test_non_validate_on_save(self): """`full_clean` method should not be called without validate_on_save decorator""" # escape original full_clean method original_full_clean = EvenNumberContainer.full_clean # set mock method EvenNumberContainer.full_clean = MagicMock(wraps=original_full_clean) # object create should finish without any exception because it is even self.assertIsNotNone(EvenNumberContainer.objects.create(number=2)) # make sure that full_clean is not called self.assertFalse(EvenNumberContainer.full_clean.called) # object create should finish without any exception even the number is # odd because `full_clean` is not called self.assertIsNotNone(EvenNumberContainer.objects.create(number=1)) # make sure that full_clean is not called self.assertFalse(EvenNumberContainer.full_clean.called)
[ドキュメント] def test_validate_on_save(self): """`full_clean` method should be called with validate_on_save decorator""" # decorate the class DecoratedEvenNumberContainer = validate_on_save(EvenNumberContainer) # escape original full_clean method original_full_clean = DecoratedEvenNumberContainer.full_clean # set mock method DecoratedEvenNumberContainer.full_clean = MagicMock(wraps=original_full_clean) # object create should finish without any exception because it is even self.assertIsNotNone(DecoratedEvenNumberContainer.objects.create(number=2)) # make sure that full_clean is called self.assertTrue(DecoratedEvenNumberContainer.full_clean.called) # object create should raise ValidationError because the number is odd self.assertRaises(ValidationError, DecoratedEvenNumberContainer.objects.create, number=1) # make sure that full_clean is called twice self.assertEqual(DecoratedEvenNumberContainer.full_clean.call_count, 2)
@override_settings( VALIDATE_ON_SAVE_DISABLE=True, )
[ドキュメント] def test_validate_on_save_disabled(self): """`full_clean` method should not be called with VALIDATE_ON_SAVE_DISABLE""" # decorate the class DecoratedEvenNumberContainer = validate_on_save(EvenNumberContainer) # escape original full_clean method original_full_clean = DecoratedEvenNumberContainer.full_clean # set mock method DecoratedEvenNumberContainer.full_clean = MagicMock(wraps=original_full_clean) # object create should finish without any exception because it is even self.assertIsNotNone(DecoratedEvenNumberContainer.objects.create(number=2)) # make sure that full_clean is not called self.assertFalse(EvenNumberContainer.full_clean.called) # object create should finish without any exception even the number is # odd because VALIDATE_ON_SAVE_DISABLE=True self.assertIsNotNone(DecoratedEvenNumberContainer.objects.create(number=1)) # make sure that full_clean is not called self.assertFalse(EvenNumberContainer.full_clean.called)