django-eav2/tests/basics.py

186 lines
6.4 KiB
Python
Raw Normal View History

2010-09-06 20:46:11 +00:00
from datetime import datetime
from django.test import TestCase
2010-09-06 21:22:41 +00:00
2010-09-06 20:46:11 +00:00
from ..models import *
2010-09-06 21:22:41 +00:00
from ..utils import EavRegistry, EavConfig
2010-09-06 20:46:11 +00:00
from .models import Patient
class EavBasicTests(TestCase):
2010-09-07 10:01:53 +00:00
"""
Testing basics such as registration, printing and object creation
"""
2010-09-06 20:46:11 +00:00
def setUp(self):
EavRegistry.unregister(Patient)
EavRegistry.register(Patient)
self.attribute = EavAttribute.objects.create(datatype=EavAttribute.TYPE_TEXT,
2010-09-07 10:11:09 +00:00
name='City', help_text='The City', slug='city')
2010-09-06 20:46:11 +00:00
self.entity = Patient.objects.create(name="Doe")
2010-09-07 13:59:45 +00:00
self.value = EavValue.objects.create(entity=self.entity,
2010-09-06 20:46:11 +00:00
attribute=self.attribute,
value_text='Denver')
def tearDown(self):
EavRegistry.unregister(Patient)
def test_attribute_unicode(self):
self.assertEqual(unicode(self.attribute), "City (Text)")
2010-09-06 20:46:11 +00:00
def test_can_create_attribute(self):
EavAttribute.objects.create(datatype=EavAttribute.TYPE_TEXT,
2010-09-07 10:11:09 +00:00
name='My text test', slug='test',
2010-09-06 20:46:11 +00:00
help_text='My help text')
def test_can_eaventity_children_give_you_all_attributes_by_default(self):
qs = Patient.eav.get_eav_attributes()
self.assertEqual(list(qs), list(EavAttribute.objects.all()))
def test_value_creation(self):
2010-09-07 13:59:45 +00:00
EavValue.objects.create(entity=self.entity,
2010-09-06 20:46:11 +00:00
attribute=self.attribute,
value_float=1.2)
def test_value_unicode(self):
self.assertEqual(unicode(self.value), "Doe - City: \"Denver\"")
def test_value_types(self):
_text = EavAttribute.objects.create(datatype=EavAttribute.TYPE_TEXT,
2010-09-07 10:11:09 +00:00
name='Text', slug='text',
2010-09-06 20:46:11 +00:00
help_text='The text')
2010-09-07 13:59:45 +00:00
val = EavValue.objects.create(entity=self.entity,
2010-09-06 20:46:11 +00:00
attribute = _text)
value = "Test text"
2010-09-06 21:26:07 +00:00
val.value = value
val.save()
self.assertEqual(val.value, value)
2010-09-06 20:46:11 +00:00
_float = EavAttribute.objects.create(datatype=EavAttribute.TYPE_FLOAT,
2010-09-07 10:11:09 +00:00
name='Float', slug='float',
2010-09-06 20:46:11 +00:00
help_text='The float')
2010-09-07 13:59:45 +00:00
val = EavValue.objects.create(entity=self.entity,
2010-09-06 20:46:11 +00:00
attribute = _float)
value = 1.22
2010-09-06 21:26:07 +00:00
val.value = value
val.save()
self.assertEqual(val.value, value)
2010-09-06 20:46:11 +00:00
_int = EavAttribute.objects.create(datatype=EavAttribute.TYPE_INT,
2010-09-07 10:11:09 +00:00
name='Int', slug='int',
2010-09-06 20:46:11 +00:00
help_text='The int')
2010-09-07 13:59:45 +00:00
val = EavValue.objects.create(entity=self.entity,
2010-09-06 20:46:11 +00:00
attribute = _int)
value = 7
2010-09-06 21:26:07 +00:00
val.value = value
val.save()
self.assertEqual(val.value, value)
2010-09-06 20:46:11 +00:00
_date = EavAttribute.objects.create(datatype=EavAttribute.TYPE_DATE,
2010-09-07 10:11:09 +00:00
name='Date', slug='date',
2010-09-06 20:46:11 +00:00
help_text='The date')
2010-09-07 13:59:45 +00:00
val = EavValue.objects.create(entity=self.entity,
2010-09-06 20:46:11 +00:00
attribute = _date)
value = datetime.now()
2010-09-06 21:26:07 +00:00
val.value = value
val.save()
self.assertEqual(val.value, value)
2010-09-06 20:46:11 +00:00
_bool = EavAttribute.objects.create(datatype=EavAttribute.TYPE_BOOLEAN,
2010-09-07 10:11:09 +00:00
name='Bool', slug='bool',
2010-09-06 20:46:11 +00:00
help_text='The bool')
2010-09-07 13:59:45 +00:00
val = EavValue.objects.create(entity=self.entity,
2010-09-06 20:46:11 +00:00
attribute = _bool)
value = False
2010-09-06 21:26:07 +00:00
val.value = value
val.save()
self.assertEqual(val.value, value)
2010-09-06 20:46:11 +00:00
def test_eavregistry_ataches_and_detaches_eav_attribute(self):
EavRegistry.unregister(Patient)
p = Patient()
self.assertFalse(hasattr(p, 'eav'))
EavRegistry.register(Patient)
p2 = Patient()
self.assertTrue(p2.eav)
def test_eavregistry_ataches_and_detaches_eav_attribute(self):
self.assertTrue(self.entity.eav)
self.assertTrue(self.entity.eav_values)
self.assertTrue(self.value.entity)
# todo : should we have self.value.patient herer ?
2010-09-06 20:46:11 +00:00
EavRegistry.unregister(Patient)
p = Patient()
self.assertFalse(hasattr(p, 'eav'))
self.assertFalse(hasattr(p, 'eav'))
self.assertFalse(hasattr(p, 'eav_values'))
2010-09-06 20:46:11 +00:00
def test_eavregistry_accept_a_settings_class_with_get_queryset(self):
EavRegistry.unregister(Patient)
2010-09-06 21:22:41 +00:00
class PatientEav(EavConfig):
2010-09-06 20:46:11 +00:00
@classmethod
2010-09-06 20:46:11 +00:00
def get_eav_attributes(self):
return EavAttribute.objects.all()
EavRegistry.register(Patient, PatientEav)
p = Patient()
EavRegistry.unregister(Patient)
2010-09-07 10:01:53 +00:00
def test_eavregistry_accept_a_settings_class_with_field_names(self):
p = Patient.objects.create(name='Renaud')
registered_manager = Patient.objects
registered_eav_value = p.eav_values
2010-09-07 10:01:53 +00:00
EavRegistry.unregister(Patient)
class PatientEav(EavConfig):
2010-09-06 20:46:11 +00:00
2010-09-07 10:01:53 +00:00
proxy_field_name = 'my_eav'
manager_field_name ='my_objects'
generic_relation_field_name = 'my_eav_values'
generic_relation_field_related_name = "patient"
2010-09-07 10:01:53 +00:00
EavRegistry.register(Patient, PatientEav)
p2 = Patient.objects.create(name='Henry')
2010-09-07 10:01:53 +00:00
self.assertEqual(type(p.eav), type(p2.my_eav))
self.assertEqual(registered_eav_value.__class__.__name__,
p2.my_eav_values.__class__.__name__ )
2010-09-07 10:01:53 +00:00
self.assertEqual(type(registered_manager), type(Patient.my_objects))
p2.my_eav.city = "Mbrarare"
p2.save()
value = EavValue.objects.get(value_text='Mbrarare')
name = PatientEav.generic_relation_field_related_name
self.assertTrue(value, name)
2010-09-07 10:01:53 +00:00
bak_registered_manager = Patient.objects
EavRegistry.unregister(Patient)
self.assertEqual(type(Patient.objects), type(bak_registered_manager))