| | 1 | from django.forms.models import modelform_factory |
| | 2 | from django.test import TestCase |
| | 3 | |
| | 4 | from .models import Page, Revision |
| | 5 | |
| | 6 | |
| | 7 | class 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.") |