2018-06-04 15:19:05 +00:00
|
|
|
from django.core.exceptions import ValidationError
|
2010-09-27 13:28:52 +00:00
|
|
|
from django.test import TestCase
|
|
|
|
|
|
|
|
|
|
import eav
|
2018-07-13 11:50:50 +00:00
|
|
|
from eav.exceptions import IllegalAssignmentException
|
2017-09-05 10:01:20 +00:00
|
|
|
from eav.models import Attribute, Value
|
2018-06-04 15:19:05 +00:00
|
|
|
from eav.registry import EavConfig
|
2021-07-04 15:59:24 +00:00
|
|
|
from test_project.models import Encounter, Patient, RegisterTestModel
|
2010-09-27 13:28:52 +00:00
|
|
|
|
2018-08-10 08:19:37 +00:00
|
|
|
|
2018-06-04 15:19:05 +00:00
|
|
|
class Attributes(TestCase):
|
2010-09-27 13:28:52 +00:00
|
|
|
def setUp(self):
|
|
|
|
|
class EncounterEavConfig(EavConfig):
|
|
|
|
|
manager_attr = 'eav_objects'
|
|
|
|
|
eav_attr = 'eav_field'
|
|
|
|
|
generic_relation_attr = 'encounter_eav_values'
|
|
|
|
|
generic_relation_related_name = 'encounters'
|
|
|
|
|
|
|
|
|
|
@classmethod
|
2020-10-22 20:53:34 +00:00
|
|
|
def get_attributes(cls, instance=None):
|
2010-09-27 13:28:52 +00:00
|
|
|
return Attribute.objects.filter(slug__contains='a')
|
|
|
|
|
|
|
|
|
|
eav.register(Encounter, EncounterEavConfig)
|
|
|
|
|
eav.register(Patient)
|
|
|
|
|
|
|
|
|
|
Attribute.objects.create(name='age', datatype=Attribute.TYPE_INT)
|
|
|
|
|
Attribute.objects.create(name='height', datatype=Attribute.TYPE_FLOAT)
|
|
|
|
|
Attribute.objects.create(name='weight', datatype=Attribute.TYPE_FLOAT)
|
2018-06-04 15:19:05 +00:00
|
|
|
Attribute.objects.create(name='color', datatype=Attribute.TYPE_TEXT)
|
2010-09-27 13:28:52 +00:00
|
|
|
|
|
|
|
|
def tearDown(self):
|
|
|
|
|
eav.unregister(Encounter)
|
|
|
|
|
eav.unregister(Patient)
|
|
|
|
|
|
|
|
|
|
def test_get_attribute_querysets(self):
|
2018-06-04 15:19:05 +00:00
|
|
|
self.assertEqual(Patient._eav_config_cls.get_attributes().count(), 4)
|
|
|
|
|
self.assertEqual(Encounter._eav_config_cls.get_attributes().count(), 1)
|
|
|
|
|
|
|
|
|
|
def test_duplicate_attributs(self):
|
|
|
|
|
'''
|
|
|
|
|
Ensure that no two Attributes with the same slug can exist.
|
|
|
|
|
'''
|
|
|
|
|
with self.assertRaises(ValidationError):
|
|
|
|
|
Attribute.objects.create(name='height', datatype=Attribute.TYPE_FLOAT)
|
2010-09-27 13:28:52 +00:00
|
|
|
|
|
|
|
|
def test_setting_attributes(self):
|
|
|
|
|
p = Patient.objects.create(name='Jon')
|
|
|
|
|
e = Encounter.objects.create(patient=p, num=1)
|
2018-07-27 14:00:28 +00:00
|
|
|
|
2010-09-27 13:28:52 +00:00
|
|
|
p.eav.age = 3
|
|
|
|
|
p.eav.height = 2.3
|
|
|
|
|
p.save()
|
|
|
|
|
e.eav_field.age = 4
|
|
|
|
|
e.save()
|
|
|
|
|
self.assertEqual(Value.objects.count(), 3)
|
2018-07-27 14:00:28 +00:00
|
|
|
t = RegisterTestModel.objects.create(name="test")
|
|
|
|
|
t.eav.age = 6
|
|
|
|
|
t.eav.height = 10
|
|
|
|
|
t.save()
|
2010-09-27 13:28:52 +00:00
|
|
|
p = Patient.objects.get(name='Jon')
|
|
|
|
|
self.assertEqual(p.eav.age, 3)
|
|
|
|
|
self.assertEqual(p.eav.height, 2.3)
|
|
|
|
|
e = Encounter.objects.get(num=1)
|
|
|
|
|
self.assertEqual(e.eav_field.age, 4)
|
2018-07-27 14:00:28 +00:00
|
|
|
t = RegisterTestModel.objects.get(name="test")
|
|
|
|
|
self.assertEqual(t.eav.age, 6)
|
|
|
|
|
self.assertEqual(t.eav.height, 10)
|
2018-06-21 11:38:48 +00:00
|
|
|
|
|
|
|
|
def test_illegal_assignemnt(self):
|
|
|
|
|
class EncounterEavConfig(EavConfig):
|
|
|
|
|
@classmethod
|
2020-10-22 20:53:34 +00:00
|
|
|
def get_attributes(cls, instance=None):
|
2018-06-21 11:38:48 +00:00
|
|
|
return Attribute.objects.filter(datatype=Attribute.TYPE_INT)
|
|
|
|
|
|
|
|
|
|
eav.unregister(Encounter)
|
|
|
|
|
eav.register(Encounter, EncounterEavConfig)
|
|
|
|
|
|
|
|
|
|
p = Patient.objects.create(name='Jon')
|
|
|
|
|
e = Encounter.objects.create(patient=p, num=1)
|
|
|
|
|
|
|
|
|
|
with self.assertRaises(IllegalAssignmentException):
|
|
|
|
|
e.eav.color = 'red'
|
|
|
|
|
e.save()
|