|
3 | 3 | import datetime
|
4 | 4 |
|
5 | 5 | import pytest
|
| 6 | +from django.core.exceptions import ValidationError |
6 | 7 | from django.db.models import signals
|
7 | 8 |
|
8 | 9 | from apps.consent import AWAITING, REVOKED, VALIDATED
|
@@ -100,27 +101,50 @@ def test_create_consent_with_custom_period_date():
|
100 | 101 |
|
101 | 102 | @pytest.mark.django_db
|
102 | 103 | def test_update_consent_status():
|
103 |
| - """Tests updating a consent status.""" |
| 104 | + """Tests updating a consent status. |
| 105 | +
|
| 106 | + Test that consents can no longer be modified once their status is passed to |
| 107 | + `VALIDATED` (raise ValidationError). |
| 108 | + """ |
104 | 109 | from apps.consent.models import Consent
|
105 | 110 |
|
106 | 111 | # create one `delivery_point` and consequently one `consent`
|
| 112 | + assert Consent.objects.count() == 0 |
107 | 113 | delivery_point = DeliveryPointFactory()
|
| 114 | + assert Consent.objects.count() == 1 |
108 | 115 |
|
109 | 116 | # get the created consent
|
110 | 117 | consent = Consent.objects.get(delivery_point=delivery_point)
|
111 | 118 | consent_updated_at = consent.updated_at
|
| 119 | + assert consent.status == AWAITING |
| 120 | + assert consent.revoked_at is None |
112 | 121 |
|
113 |
| - # update status to VALIDATED |
114 |
| - consent.status = VALIDATED |
| 122 | + # update status to REVOKED |
| 123 | + consent.status = REVOKED |
115 | 124 | consent.save()
|
116 |
| - assert consent.status == VALIDATED |
| 125 | + assert consent.status == REVOKED |
117 | 126 | assert consent.updated_at > consent_updated_at
|
| 127 | + assert consent.revoked_at is not None |
| 128 | + new_updated_at = consent.updated_at |
| 129 | + |
| 130 | + # Update the consent to AWAITING |
| 131 | + consent.status = AWAITING |
| 132 | + consent.revoked_at = None |
| 133 | + consent.save() |
| 134 | + assert consent.status == AWAITING |
| 135 | + assert consent.updated_at > new_updated_at |
118 | 136 | assert consent.revoked_at is None
|
119 | 137 | new_updated_at = consent.updated_at
|
120 | 138 |
|
121 |
| - # update status to REVOKED |
122 |
| - consent.status = REVOKED |
| 139 | + # update status to VALIDATED |
| 140 | + consent.status = VALIDATED |
| 141 | + consent.revoked_at = None |
123 | 142 | consent.save()
|
124 |
| - assert consent.status == REVOKED |
| 143 | + assert consent.status == VALIDATED |
125 | 144 | assert consent.updated_at > new_updated_at
|
126 |
| - assert consent.revoked_at is not None |
| 145 | + assert consent.revoked_at is None |
| 146 | + |
| 147 | + # The consent status is `VALIDATED`, so it cannot be changed anymore. |
| 148 | + with pytest.raises(ValidationError): |
| 149 | + consent.status = AWAITING |
| 150 | + consent.save() |
0 commit comments