Skip to content

Commit 3da6aec

Browse files
committed
Refactor tests
- Test Python tutorial models (still unencrypted in this commit) - Test all supported encrypted fields. - Test equality and range query type queries - Test management command - Test schema - Removed test router - Removed test_base
1 parent 94c1dc2 commit 3da6aec

File tree

7 files changed

+384
-335
lines changed

7 files changed

+384
-335
lines changed

tests/encryption_/models.py

Lines changed: 90 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from django.db import models
22

33
from django_mongodb_backend.fields import (
4+
EmbeddedModelField,
45
EncryptedBigIntegerField,
56
EncryptedBinaryField,
67
EncryptedBooleanField,
@@ -21,60 +22,112 @@
2122
EncryptedTimeField,
2223
EncryptedURLField,
2324
)
25+
from django_mongodb_backend.models import EmbeddedModel
2426

25-
EQUALITY_QUERY = {"queryType": "equality"}
26-
RANGE_QUERY = {"queryType": "range"}
2727

28+
class Billing(EmbeddedModel):
29+
cc_type = models.CharField(max_length=50)
30+
cc_number = models.CharField(max_length=20)
31+
32+
33+
class PatientRecord(EmbeddedModel):
34+
ssn = models.CharField(max_length=11)
35+
billing = EmbeddedModelField(Billing)
36+
37+
38+
class Patient(models.Model):
39+
patient_name = models.CharField(max_length=255)
40+
patient_id = models.BigIntegerField()
41+
patient_record = EmbeddedModelField(PatientRecord)
42+
43+
def __str__(self):
44+
return f"{self.patient_name} ({self.patient_id})"
45+
46+
47+
class EncryptedModel(models.Model):
48+
"""
49+
Abstract base model for all Encrypted models
50+
that require the 'supports_queryable_encryption' DB feature.
51+
"""
2852

29-
class QueryableEncryptionModelBase(models.Model):
3053
class Meta:
3154
abstract = True
3255
required_db_features = {"supports_queryable_encryption"}
3356

3457

35-
class Appointment(QueryableEncryptionModelBase):
36-
start_time = EncryptedTimeField(queries=EQUALITY_QUERY)
58+
# Equality-queryable fields
59+
class EncryptedBinaryTest(EncryptedModel):
60+
value = EncryptedBinaryField(queries={"queryType": "equality"})
61+
62+
63+
class EncryptedBooleanTest(EncryptedModel):
64+
value = EncryptedBooleanField(queries={"queryType": "equality"})
65+
66+
67+
class EncryptedCharTest(EncryptedModel):
68+
value = EncryptedCharField(max_length=255, queries={"queryType": "equality"})
69+
70+
71+
class EncryptedEmailTest(EncryptedModel):
72+
value = EncryptedEmailField(max_length=255, queries={"queryType": "equality"})
73+
74+
75+
class EncryptedGenericIPAddressTest(EncryptedModel):
76+
value = EncryptedGenericIPAddressField(queries={"queryType": "equality"})
77+
78+
79+
class EncryptedTextTest(EncryptedModel):
80+
value = EncryptedTextField(queries={"queryType": "equality"})
81+
82+
83+
class EncryptedURLTest(EncryptedModel):
84+
value = EncryptedURLField(max_length=500, queries={"queryType": "equality"})
85+
86+
87+
# Range-queryable fields (also support equality)
88+
class EncryptedBigIntegerTest(EncryptedModel):
89+
value = EncryptedBigIntegerField(queries={"queryType": "range"})
90+
91+
92+
class EncryptedDateTest(EncryptedModel):
93+
value = EncryptedDateField(queries={"queryType": "range"})
94+
95+
96+
class EncryptedDateTimeTest(EncryptedModel):
97+
value = EncryptedDateTimeField(queries={"queryType": "range"})
98+
99+
100+
class EncryptedDecimalTest(EncryptedModel):
101+
value = EncryptedDecimalField(max_digits=10, decimal_places=2, queries={"queryType": "range"})
102+
103+
104+
class EncryptedDurationTest(EncryptedModel):
105+
value = EncryptedDurationField(queries={"queryType": "range"})
106+
107+
108+
class EncryptedFloatTest(EncryptedModel):
109+
value = EncryptedFloatField(queries={"queryType": "range"})
37110

38111

39-
class Billing(QueryableEncryptionModelBase):
40-
account_balance = EncryptedDecimalField(max_digits=10, decimal_places=2, queries=RANGE_QUERY)
41-
payment_duration = EncryptedDurationField(queries=RANGE_QUERY) # Duration for billing period
112+
class EncryptedIntegerTest(EncryptedModel):
113+
value = EncryptedIntegerField(queries={"queryType": "range"})
42114

43115

44-
class CreditCard(QueryableEncryptionModelBase):
45-
card_type = EncryptedCharField(max_length=20, queries=EQUALITY_QUERY)
46-
card_number = EncryptedIntegerField(queries=EQUALITY_QUERY)
47-
transaction_reference = EncryptedBigIntegerField(
48-
queries=EQUALITY_QUERY
49-
) # Simulating a long transaction ID
116+
class EncryptedPositiveBigIntegerTest(EncryptedModel):
117+
value = EncryptedPositiveBigIntegerField(queries={"queryType": "range"})
50118

51119

52-
class PatientPortalUser(QueryableEncryptionModelBase):
53-
last_login_ip = EncryptedGenericIPAddressField(queries=EQUALITY_QUERY)
54-
profile_url = EncryptedURLField(queries=EQUALITY_QUERY)
120+
class EncryptedPositiveIntegerTest(EncryptedModel):
121+
value = EncryptedPositiveIntegerField(queries={"queryType": "range"})
55122

56123

57-
class PatientRecord(QueryableEncryptionModelBase):
58-
ssn = EncryptedCharField(max_length=11, queries=EQUALITY_QUERY)
59-
birth_date = EncryptedDateField(queries=RANGE_QUERY)
60-
profile_picture_data = EncryptedBinaryField(queries=EQUALITY_QUERY)
61-
age = EncryptedSmallIntegerField(queries={**RANGE_QUERY, "min": 0, "max": 100})
62-
weight = EncryptedFloatField(queries=RANGE_QUERY)
63-
insurance_policy_number = EncryptedPositiveBigIntegerField(queries=EQUALITY_QUERY)
64-
emergency_contacts_count = EncryptedPositiveIntegerField(queries=EQUALITY_QUERY)
65-
completed_visits = EncryptedPositiveSmallIntegerField(queries=EQUALITY_QUERY)
124+
class EncryptedPositiveSmallIntegerTest(EncryptedModel):
125+
value = EncryptedPositiveSmallIntegerField(queries={"queryType": "range"})
66126

67-
# TODO: Embed Billing model
68-
# billing = EncryptedEmbeddedField(Billing)
69127

128+
class EncryptedSmallIntegerTest(EncryptedModel):
129+
value = EncryptedSmallIntegerField(queries={"queryType": "range"})
70130

71-
class Patient(QueryableEncryptionModelBase):
72-
patient_id = EncryptedIntegerField(queries=EQUALITY_QUERY)
73-
full_name = EncryptedCharField(max_length=100)
74-
notes = EncryptedTextField(queries=EQUALITY_QUERY)
75-
registration_date = EncryptedDateTimeField(queries=EQUALITY_QUERY)
76-
is_active = EncryptedBooleanField(queries=EQUALITY_QUERY)
77-
contact_email = EncryptedEmailField(queries=EQUALITY_QUERY)
78131

79-
# TODO: Embed PatientRecord model
80-
# patient_record = EncryptedEmbeddedField(PatientRecord)
132+
class EncryptedTimeTest(EncryptedModel):
133+
value = EncryptedTimeField(queries={"queryType": "range"})

tests/encryption_/routers.py

Lines changed: 0 additions & 19 deletions
This file was deleted.

tests/encryption_/test_base.py

Lines changed: 0 additions & 10 deletions
This file was deleted.

tests/encryption_/test_connection.py

Lines changed: 0 additions & 12 deletions
This file was deleted.

0 commit comments

Comments
 (0)