From 0c1f6377c760d348bcb6711095dcbc262db557db Mon Sep 17 00:00:00 2001 From: ksamuel Date: Fri, 10 Sep 2010 16:02:51 +0000 Subject: [PATCH] Failing tests for filter --- models.py | 2 ++ tests/__init__.py | 1 + tests/filters.py | 91 +++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 94 insertions(+) create mode 100644 tests/filters.py diff --git a/models.py b/models.py index 253e0bf..72bf522 100644 --- a/models.py +++ b/models.py @@ -10,6 +10,7 @@ from django.contrib.contenttypes import generic from .fields import EavSlugField, EavDatatypeField + def get_unique_class_identifier(cls): """ Return a unique identifier for a class @@ -388,6 +389,7 @@ class EavEntity(object): return iter(self.get_values()) + # todo: cache all changed value in EAV and check against existing attribtue @staticmethod def save_handler(sender, *args, **kwargs): from .utils import EavRegistry diff --git a/tests/__init__.py b/tests/__init__.py index 464ce51..6961158 100644 --- a/tests/__init__.py +++ b/tests/__init__.py @@ -1,2 +1,3 @@ from basics import * from set_and_get import * +from filters import * diff --git a/tests/filters.py b/tests/filters.py new file mode 100644 index 0000000..c0dc787 --- /dev/null +++ b/tests/filters.py @@ -0,0 +1,91 @@ +from datetime import datetime + +from django.test import TestCase +from django.contrib.auth.models import User + +from ..models import * +from ..utils import EavRegistry, EavConfig +from .models import Patient + + +class EavFilterTests(TestCase): + + """ + Testing filters + """ + + + def setUp(self): + + EavRegistry.unregister(Patient) + EavRegistry.register(Patient) + + self.attribute = EavAttribute.objects\ + .create(datatype=EavAttribute.TYPE_TEXT, + name='City', slug='city') + + self.patient = Patient.objects.create(name="Doe") + + self.value = EavValue.objects.create(entity=self.patient, + attribute=self.attribute, + value_text='Denver') + + def tearDown(self): + EavRegistry.unregister(Patient) + EavRegistry.unregister(User) + + + def additional_attribute_setup(self): + + self.country_attr = EavAttribute.objects\ + .create(datatype=EavAttribute.TYPE_TEXT, + name='Country', slug='country') + + class PatientEav(EavConfig): + + @classmethod + def get_eav_attributes(cls): + return EavAttribute.objects.filter(slug='country') + + self.PatientEav = PatientEav + + class UserEav(EavConfig): + + @classmethod + def get_eav_attributes(cls): + return EavAttribute.objects.filter(slug='city') + + self.UserEav = UserEav + EavRegistry.register(User, UserEav) + self.user = User.objects.create(username='John') + + + # todo: do that + #def test_can_filter_all_entities_by_value(self): + + # self.additional_attribute_setup() + # self.user.eav.city = 'Paris' + # self.patient.eav.city = 'New York' + # self.user.save() + # self.patient.save() + + + #print EavEntity.objects.filter(eav__city='Paris') + + + def test_you_can_filter_entity_by_attribute_values(self): + + self.additional_attribute_setup() + self.user.eav.city = 'Paris' + self.user.save() + u = User.objects.create(username='Bob') + u.eav.city = "Paris" + u.save() + u = User.objects.create(username='Jack') + u.eav.city = "New York" + u.save() + + self.assertEqual(User.objects.filter(eav__city='Paris').count(), 2) + self.assertEqual(User.objects.exclude(eav__city='Paris').count(), 1) + self.assertEqual(User.objects.filter(eav__city='Paris', + username='Bob').count(), 1)