Ticket #36668: ticket-36668-tests.diff

File ticket-36668-tests.diff, 1.9 KB (added by Baptiste Mispelon, 4 weeks ago)
  • new file tests/aaaaaa/models.py

    diff --git a/tests/aaaaaa/__init__.py b/tests/aaaaaa/__init__.py
    new file mode 100644
    index 0000000000..e69de29bb2
    diff --git a/tests/aaaaaa/models.py b/tests/aaaaaa/models.py
    new file mode 100644
    index 0000000000..c28b173be9
    - +  
     1from django.db import models
     2
     3
     4class Page(models.Model):
     5    pass
     6
     7
     8class Revision(models.Model):
     9    page = models.ForeignKey(Page, on_delete=models.CASCADE)
     10    status = models.IntegerField(default=1)
     11
     12    class Meta:
     13        constraints = [
     14            models.UniqueConstraint(
     15                name="unique_page_status_1",
     16                fields=["page"],
     17                condition=models.Q(status=1),
     18            )
     19        ]
  • new file tests/aaaaaa/tests.py

    diff --git a/tests/aaaaaa/tests.py b/tests/aaaaaa/tests.py
    new file mode 100644
    index 0000000000..f1109d7363
    - +  
     1from django.forms.models import modelform_factory
     2from django.test import TestCase
     3
     4from .models import Page, Revision
     5
     6
     7class UniqueConstraintValidationTestCase(TestCase):
     8    # This test fails:
     9    def test_unique_constraint_fails_validation(self):
     10        page = Page.objects.create()
     11        page.revision_set.create()
     12
     13        form_class = modelform_factory(Revision, fields=["page"])
     14        form = form_class(data={"page": page.pk})
     15
     16        # None means non-field errors:
     17        self.assertFormError(form, None, "Constraint “unique_page_status_1” is violated.")
     18
     19    # This test passes:
     20    def test_unique_constraint_fails_validation_workaround(self):
     21        page = Page.objects.create()
     22        page.revision_set.create()
     23
     24        form_class = modelform_factory(Revision, fields=["page", "status"])  # `status` added
     25        form = form_class(data={"page": page.pk, "status": 1})  # `status` added here too
     26
     27        # None means non-field errors:
     28        self.assertFormError(form, None, "Constraint “unique_page_status_1” is violated.")
Back to Top