2021-10-26 13:10:36 +00:00
|
|
|
from django.contrib.auth.models import User
|
2010-09-27 13:28:52 +00:00
|
|
|
from django.test import TestCase
|
|
|
|
|
|
|
|
|
|
import eav
|
2024-06-23 15:52:45 +00:00
|
|
|
from eav.managers import EntityManager
|
2018-06-04 21:59:05 +00:00
|
|
|
from eav.registry import EavConfig
|
2021-07-04 15:59:24 +00:00
|
|
|
from test_project.models import (
|
2024-06-23 15:52:45 +00:00
|
|
|
Doctor,
|
2021-06-17 23:38:46 +00:00
|
|
|
Encounter,
|
|
|
|
|
ExampleMetaclassModel,
|
|
|
|
|
ExampleModel,
|
|
|
|
|
Patient,
|
|
|
|
|
)
|
2018-07-27 14:00:28 +00:00
|
|
|
|
2010-09-27 13:28:52 +00:00
|
|
|
|
|
|
|
|
class RegistryTests(TestCase):
|
|
|
|
|
def setUp(self):
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
def tearDown(self):
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
def register_encounter(self):
|
|
|
|
|
class EncounterEav(EavConfig):
|
2024-09-01 15:21:47 +00:00
|
|
|
manager_attr = "eav_objects"
|
|
|
|
|
eav_attr = "eav_field"
|
|
|
|
|
generic_relation_attr = "encounter_eav_values"
|
|
|
|
|
generic_relation_related_name = "encounters"
|
2010-09-27 13:28:52 +00:00
|
|
|
|
|
|
|
|
@classmethod
|
|
|
|
|
def get_attributes(cls):
|
2024-09-01 15:21:47 +00:00
|
|
|
return "testing"
|
2010-09-27 13:28:52 +00:00
|
|
|
|
|
|
|
|
eav.register(Encounter, EncounterEav)
|
2018-06-04 21:59:05 +00:00
|
|
|
|
2010-09-27 13:28:52 +00:00
|
|
|
def test_registering_with_defaults(self):
|
|
|
|
|
eav.register(Patient)
|
2024-09-01 15:21:47 +00:00
|
|
|
self.assertTrue(hasattr(Patient, "_eav_config_cls"))
|
|
|
|
|
self.assertEqual(Patient._eav_config_cls.manager_attr, "objects")
|
2010-09-27 13:28:52 +00:00
|
|
|
self.assertFalse(Patient._eav_config_cls.manager_only)
|
2024-09-01 15:21:47 +00:00
|
|
|
self.assertEqual(Patient._eav_config_cls.eav_attr, "eav")
|
|
|
|
|
self.assertEqual(Patient._eav_config_cls.generic_relation_attr, "eav_values")
|
2018-06-06 22:28:11 +00:00
|
|
|
self.assertEqual(Patient._eav_config_cls.generic_relation_related_name, None)
|
2010-09-27 13:28:52 +00:00
|
|
|
eav.unregister(Patient)
|
|
|
|
|
|
|
|
|
|
def test_registering_overriding_defaults(self):
|
|
|
|
|
eav.register(Patient)
|
|
|
|
|
self.register_encounter()
|
2024-09-01 15:21:47 +00:00
|
|
|
self.assertTrue(hasattr(Patient, "_eav_config_cls"))
|
|
|
|
|
self.assertEqual(Patient._eav_config_cls.manager_attr, "objects")
|
|
|
|
|
self.assertEqual(Patient._eav_config_cls.eav_attr, "eav")
|
|
|
|
|
|
|
|
|
|
self.assertTrue(hasattr(Encounter, "_eav_config_cls"))
|
|
|
|
|
self.assertEqual(Encounter._eav_config_cls.get_attributes(), "testing")
|
|
|
|
|
self.assertEqual(Encounter._eav_config_cls.manager_attr, "eav_objects")
|
|
|
|
|
self.assertEqual(Encounter._eav_config_cls.eav_attr, "eav_field")
|
2010-09-27 13:28:52 +00:00
|
|
|
eav.unregister(Patient)
|
|
|
|
|
eav.unregister(Encounter)
|
|
|
|
|
|
2015-08-16 03:34:11 +00:00
|
|
|
def test_registering_via_decorator_with_defaults(self):
|
2024-09-01 15:21:47 +00:00
|
|
|
self.assertTrue(hasattr(ExampleModel, "_eav_config_cls"))
|
|
|
|
|
self.assertEqual(ExampleModel._eav_config_cls.manager_attr, "objects")
|
|
|
|
|
self.assertEqual(ExampleModel._eav_config_cls.eav_attr, "eav")
|
2015-08-16 03:34:11 +00:00
|
|
|
|
2018-07-27 14:00:28 +00:00
|
|
|
def test_register_via_metaclass_with_defaults(self):
|
2024-09-01 15:21:47 +00:00
|
|
|
self.assertTrue(hasattr(ExampleMetaclassModel, "_eav_config_cls"))
|
|
|
|
|
self.assertEqual(ExampleMetaclassModel._eav_config_cls.manager_attr, "objects")
|
|
|
|
|
self.assertEqual(ExampleMetaclassModel._eav_config_cls.eav_attr, "eav")
|
2018-07-27 14:00:28 +00:00
|
|
|
|
2010-09-27 13:28:52 +00:00
|
|
|
def test_unregistering(self):
|
|
|
|
|
old_mgr = Patient.objects
|
|
|
|
|
eav.register(Patient)
|
2024-09-01 15:21:47 +00:00
|
|
|
self.assertTrue(Patient.objects.__class__.__name__ == "EntityManager")
|
2010-09-27 13:28:52 +00:00
|
|
|
eav.unregister(Patient)
|
2024-09-01 15:21:47 +00:00
|
|
|
self.assertFalse(Patient.objects.__class__.__name__ == "EntityManager")
|
2010-09-27 13:28:52 +00:00
|
|
|
self.assertEqual(Patient.objects, old_mgr)
|
2024-09-01 15:21:47 +00:00
|
|
|
self.assertFalse(hasattr(Patient, "_eav_config_cls"))
|
2010-09-27 13:28:52 +00:00
|
|
|
|
2015-08-16 04:30:42 +00:00
|
|
|
def test_unregistering_via_decorator(self):
|
2024-09-01 15:21:47 +00:00
|
|
|
self.assertTrue(ExampleModel.objects.__class__.__name__ == "EntityManager")
|
2015-08-16 04:30:42 +00:00
|
|
|
eav.unregister(ExampleModel)
|
2024-09-01 15:21:47 +00:00
|
|
|
self.assertFalse(ExampleModel.objects.__class__.__name__ == "EntityManager")
|
2015-08-16 04:30:42 +00:00
|
|
|
|
2018-07-27 14:00:28 +00:00
|
|
|
def test_unregistering_via_metaclass(self):
|
2021-06-17 23:38:46 +00:00
|
|
|
self.assertTrue(
|
2024-09-01 15:21:47 +00:00
|
|
|
ExampleMetaclassModel.objects.__class__.__name__ == "EntityManager",
|
2021-06-17 23:38:46 +00:00
|
|
|
)
|
2018-07-27 14:00:28 +00:00
|
|
|
eav.unregister(ExampleMetaclassModel)
|
2021-06-17 23:38:46 +00:00
|
|
|
self.assertFalse(
|
2024-09-01 15:21:47 +00:00
|
|
|
ExampleMetaclassModel.objects.__class__.__name__ == "EntityManager",
|
2021-06-17 23:38:46 +00:00
|
|
|
)
|
2018-07-27 14:00:28 +00:00
|
|
|
|
2010-09-27 13:28:52 +00:00
|
|
|
def test_unregistering_unregistered_model_proceeds_silently(self):
|
|
|
|
|
eav.unregister(Patient)
|
|
|
|
|
|
|
|
|
|
def test_double_registering_model_is_harmless(self):
|
|
|
|
|
eav.register(Patient)
|
|
|
|
|
eav.register(Patient)
|
2018-07-13 11:59:45 +00:00
|
|
|
|
|
|
|
|
def test_doesnt_register_nonmodel(self):
|
2024-09-01 15:21:47 +00:00
|
|
|
with self.assertRaises(TypeError):
|
2021-06-17 23:38:46 +00:00
|
|
|
|
2018-07-13 11:59:45 +00:00
|
|
|
@eav.decorators.register_eav()
|
2024-09-01 15:21:47 +00:00
|
|
|
class Foo:
|
2018-07-27 14:00:28 +00:00
|
|
|
pass
|
2021-10-26 13:10:36 +00:00
|
|
|
|
|
|
|
|
def test_model_without_local_managers(self):
|
|
|
|
|
"""Test when a model doesn't have local_managers."""
|
|
|
|
|
# Check just in case test model changes in the future
|
|
|
|
|
assert bool(User._meta.local_managers) is False
|
|
|
|
|
eav.register(User)
|
|
|
|
|
assert isinstance(User.objects, eav.managers.EntityManager)
|
|
|
|
|
|
|
|
|
|
# Reverse check: managers should be empty again
|
|
|
|
|
eav.unregister(User)
|
|
|
|
|
assert bool(User._meta.local_managers) is False
|
2024-06-23 15:52:45 +00:00
|
|
|
|
2024-06-23 15:57:30 +00:00
|
|
|
|
2024-06-23 15:52:45 +00:00
|
|
|
def test_default_manager_stays() -> None:
|
|
|
|
|
"""
|
|
|
|
|
Test to ensure default manager remains after registration.
|
|
|
|
|
|
|
|
|
|
This test verifies that the default manager of the Doctor model is correctly
|
|
|
|
|
replaced or maintained after registering a new EntityManager. Specifically,
|
|
|
|
|
if the model's Meta default_manager_name isn't set, the test ensures that
|
|
|
|
|
the default manager remains as 'objects' or the first manager declared in
|
|
|
|
|
the class.
|
|
|
|
|
"""
|
|
|
|
|
instance_meta = Doctor._meta
|
|
|
|
|
assert instance_meta.default_manager_name is None
|
|
|
|
|
assert isinstance(instance_meta.default_manager, EntityManager)
|
|
|
|
|
|
|
|
|
|
# Explicity test this as for our test setup, we want to have a state where
|
|
|
|
|
# the default manager is 'objects'
|
2024-09-01 15:21:47 +00:00
|
|
|
assert instance_meta.default_manager.name == "objects"
|
2024-06-23 15:52:45 +00:00
|
|
|
assert len(instance_meta.managers) == 2
|