|
1 | 1 | import datetime
|
2 | 2 | from decimal import Decimal
|
3 | 3 |
|
| 4 | +from django_mongodb_backend.fields import EncryptedCharField |
| 5 | + |
4 | 6 | from .models import (
|
5 | 7 | Billing,
|
6 | 8 | EncryptedBigIntegerTest,
|
@@ -44,8 +46,6 @@ def test_patient(self):
|
44 | 46 |
|
45 | 47 |
|
46 | 48 | class EncryptedFieldTests(EncryptionTestCase):
|
47 |
| - databases = {"default", "encrypted"} |
48 |
| - |
49 | 49 | def assertEquality(self, model_cls, val):
|
50 | 50 | model_cls.objects.create(value=val)
|
51 | 51 | fetched = model_cls.objects.get(value=val)
|
@@ -147,3 +147,37 @@ def test_time(self):
|
147 | 147 | high=datetime.time(15, 0),
|
148 | 148 | threshold=datetime.time(12, 0),
|
149 | 149 | )
|
| 150 | + |
| 151 | + |
| 152 | +class EncryptedFieldMixinTests(EncryptionTestCase): |
| 153 | + def test_null_true_raises_error(self): |
| 154 | + with self.assertRaisesMessage( |
| 155 | + ValueError, "'null=True' is not supported for encrypted fields." |
| 156 | + ): |
| 157 | + EncryptedCharField(max_length=50, null=True) |
| 158 | + |
| 159 | + def test_deconstruct_preserves_queries_and_rewrites_path(self): |
| 160 | + field = EncryptedCharField(max_length=50, queries={"field": "value"}) |
| 161 | + field.name = "ssn" |
| 162 | + name, path, args, kwargs = field.deconstruct() |
| 163 | + |
| 164 | + # Name is preserved |
| 165 | + self.assertEqual(name, "ssn") |
| 166 | + |
| 167 | + # Path is rewritten from 'encrypted_model' to regular fields path |
| 168 | + self.assertEqual(path, "django_mongodb_backend.fields.EncryptedCharField") |
| 169 | + |
| 170 | + # No positional args for CharField |
| 171 | + self.assertEqual(args, []) |
| 172 | + |
| 173 | + # Queries value is preserved in kwargs |
| 174 | + self.assertIn("queries", kwargs) |
| 175 | + self.assertEqual(kwargs["queries"], {"field": "value"}) |
| 176 | + |
| 177 | + # Reconstruct from deconstruct output |
| 178 | + new_field = EncryptedCharField(*args, **kwargs) |
| 179 | + |
| 180 | + # Reconstructed field is equivalent |
| 181 | + self.assertEqual(new_field.queries, field.queries) |
| 182 | + self.assertIsNot(new_field, field) |
| 183 | + self.assertEqual(new_field.max_length, field.max_length) |
0 commit comments