mirror of
https://github.com/jazzband/django-fernet-encrypted-fields.git
synced 2026-03-16 22:40:27 +00:00
141 lines
4.1 KiB
Python
141 lines
4.1 KiB
Python
import re
|
|
|
|
from django.db import connection
|
|
from django.test import TestCase
|
|
from django.utils import timezone
|
|
|
|
from .models import TestModel
|
|
|
|
|
|
class FieldTest(TestCase):
|
|
def get_db_value(self, field, model_id):
|
|
cursor = connection.cursor()
|
|
cursor.execute(
|
|
'select {0} '
|
|
'from package_test_testmodel '
|
|
'where id = {1};'.format(field, model_id)
|
|
)
|
|
return cursor.fetchone()[0]
|
|
|
|
def test_char_field_encrypted(self):
|
|
plaintext = 'Oh hi, test reader!'
|
|
|
|
model = TestModel()
|
|
model.char = plaintext
|
|
model.save()
|
|
|
|
ciphertext = self.get_db_value('char', model.id)
|
|
|
|
self.assertNotEqual(plaintext, ciphertext)
|
|
self.assertTrue('test' not in ciphertext)
|
|
|
|
fresh_model = TestModel.objects.get(id=model.id)
|
|
self.assertEqual(fresh_model.char, plaintext)
|
|
|
|
def test_text_field_encrypted(self):
|
|
plaintext = 'Oh hi, test reader!' * 10
|
|
|
|
model = TestModel()
|
|
model.text = plaintext
|
|
model.save()
|
|
|
|
ciphertext = self.get_db_value('text', model.id)
|
|
|
|
self.assertNotEqual(plaintext, ciphertext)
|
|
self.assertTrue('test' not in ciphertext)
|
|
|
|
fresh_model = TestModel.objects.get(id=model.id)
|
|
self.assertEqual(fresh_model.text, plaintext)
|
|
|
|
def test_datetime_field_encrypted(self):
|
|
plaintext = timezone.now()
|
|
|
|
model = TestModel()
|
|
model.datetime = plaintext
|
|
model.save()
|
|
|
|
ciphertext = self.get_db_value('datetime', model.id)
|
|
|
|
# Django's normal date serialization format
|
|
self.assertTrue(re.search('^\d\d\d\d-\d\d-\d\d', ciphertext) is None)
|
|
|
|
fresh_model = TestModel.objects.get(id=model.id)
|
|
self.assertEqual(fresh_model.datetime, plaintext)
|
|
|
|
def test_integer_field_encrypted(self):
|
|
plaintext = 42
|
|
|
|
model = TestModel()
|
|
model.integer = plaintext
|
|
model.save()
|
|
|
|
ciphertext = self.get_db_value('integer', model.id)
|
|
|
|
self.assertNotEqual(plaintext, ciphertext)
|
|
self.assertNotEqual(plaintext, str(ciphertext))
|
|
|
|
fresh_model = TestModel.objects.get(id=model.id)
|
|
self.assertEqual(fresh_model.integer, plaintext)
|
|
|
|
def test_date_field_encrypted(self):
|
|
plaintext = timezone.now().date()
|
|
|
|
model = TestModel()
|
|
model.date = plaintext
|
|
model.save()
|
|
|
|
ciphertext = self.get_db_value('date', model.id)
|
|
fresh_model = TestModel.objects.get(id=model.id)
|
|
|
|
self.assertNotEqual(ciphertext, plaintext.isoformat())
|
|
self.assertEqual(fresh_model.date, plaintext)
|
|
|
|
def test_float_field_encrypted(self):
|
|
plaintext = 42.44
|
|
|
|
model = TestModel()
|
|
model.floating = plaintext
|
|
model.save()
|
|
|
|
ciphertext = self.get_db_value('floating', model.id)
|
|
|
|
self.assertNotEqual(plaintext, ciphertext)
|
|
self.assertNotEqual(plaintext, str(ciphertext))
|
|
|
|
fresh_model = TestModel.objects.get(id=model.id)
|
|
self.assertEqual(fresh_model.floating, plaintext)
|
|
|
|
def test_email_field_encrypted(self):
|
|
plaintext = 'test@gmail.com'
|
|
|
|
model = TestModel()
|
|
model.email = plaintext
|
|
model.save()
|
|
|
|
ciphertext = self.get_db_value('email', model.id)
|
|
|
|
self.assertNotEqual(plaintext, ciphertext)
|
|
self.assertTrue('aron' not in ciphertext)
|
|
|
|
fresh_model = TestModel.objects.get(id=model.id)
|
|
self.assertEqual(fresh_model.email, plaintext)
|
|
|
|
def test_boolean_field_encrypted(self):
|
|
plaintext = True
|
|
|
|
model = TestModel()
|
|
model.boolean = plaintext
|
|
model.save()
|
|
|
|
ciphertext = self.get_db_value('boolean', model.id)
|
|
|
|
self.assertNotEqual(plaintext, ciphertext)
|
|
self.assertNotEqual(True, ciphertext)
|
|
self.assertNotEqual('True', ciphertext)
|
|
self.assertNotEqual('true', ciphertext)
|
|
self.assertNotEqual('1', ciphertext)
|
|
self.assertNotEqual(1, ciphertext)
|
|
self.assertTrue(not isinstance(ciphertext, bool))
|
|
|
|
fresh_model = TestModel.objects.get(id=model.id)
|
|
self.assertEqual(fresh_model.boolean, plaintext)
|