tests: refactor tests to use pytest

This commit is contained in:
Mike 2021-06-17 16:38:46 -07:00
parent 597a5374dc
commit 3ebbf8d8e7
12 changed files with 105 additions and 227 deletions

View file

View file

@ -1,18 +0,0 @@
from django.db import models
from eav.models import EAVModelMeta
class ExampleMetaclassModel(models.Model):
__metaclass__ = EAVModelMeta
name = models.CharField(max_length=12)
def __unicode__(self):
return self.name
class RegisterTestModel(models.Model):
__metaclass__ = EAVModelMeta
name = models.CharField(max_length=12)
def __unicode__(self):
return self.name

View file

@ -1,16 +0,0 @@
from django.db import models
from eav.models import EAVModelMeta
class ExampleMetaclassModel(models.Model, metaclass=EAVModelMeta):
name = models.CharField(max_length=12)
def __str__(self):
return self.name
class RegisterTestModel(models.Model, metaclass=EAVModelMeta):
name = models.CharField(max_length=12)
def __str__(self):
return self.name

View file

@ -1,42 +0,0 @@
from django.db import models
from eav.decorators import register_eav
class Patient(models.Model):
name = models.CharField(max_length=12)
example = models.ForeignKey(
'ExampleModel', null=True, blank=True, on_delete=models.PROTECT)
def __str__(self):
return self.name
def __repr__(self):
return self.name
class Encounter(models.Model):
num = models.PositiveSmallIntegerField()
patient = models.ForeignKey(Patient, on_delete=models.PROTECT)
def __str__(self):
return '%s: encounter num %d' % (self.patient, self.num)
def __repr__(self):
return self.name
@register_eav()
class ExampleModel(models.Model):
name = models.CharField(max_length=12)
def __unicode__(self):
return self.name
@register_eav()
class M2MModel(models.Model):
name = models.CharField(max_length=12)
models = models.ManyToManyField(ExampleModel)
def __unicode__(self):
return self.name

View file

@ -1,18 +1,11 @@
from django.core.exceptions import ValidationError
from django.test import TestCase
import sys
import eav
from eav.exceptions import IllegalAssignmentException
from eav.models import Attribute, Value
from eav.registry import EavConfig
from .models import Encounter, Patient
if sys.version_info[0] > 2:
from .metaclass_models3 import RegisterTestModel
else:
from .metaclass_models2 import RegisterTestModel
from main_app.models import Encounter, Patient, RegisterTestModel
class Attributes(TestCase):

View file

@ -1,17 +1,14 @@
from django.contrib.auth.models import User
from django.core.exceptions import ValidationError
from django.test import TestCase
from django.utils import timezone
from django.test import TestCase
from django.core.exceptions import ValidationError
from django.contrib.auth.models import User
import eav
from eav.models import Attribute, Value, EnumValue, EnumGroup
from .models import Patient
from eav.models import Attribute, EnumGroup, EnumValue, Value
from main_app.models import Patient
class DataValidation(TestCase):
def setUp(self):
eav.register(Patient)
@ -32,7 +29,9 @@ class DataValidation(TestCase):
p.eav.age = 5
p.save()
Attribute.objects.create(name='Weight', datatype=Attribute.TYPE_INT, required=True)
Attribute.objects.create(
name='Weight', datatype=Attribute.TYPE_INT, required=True
)
p.eav.age = 6
self.assertRaises(ValidationError, p.save)
p = Patient.objects.get(name='Bob')
@ -43,10 +42,12 @@ class DataValidation(TestCase):
self.assertEqual(p.eav.weight, 23)
def test_create_required_field(self):
Attribute.objects.create(name='Weight', datatype=Attribute.TYPE_INT, required=True)
self.assertRaises(ValidationError,
Patient.objects.create,
name='Joe', eav__age=5)
Attribute.objects.create(
name='Weight', datatype=Attribute.TYPE_INT, required=True
)
self.assertRaises(
ValidationError, Patient.objects.create, name='Joe', eav__age=5
)
self.assertEqual(Patient.objects.count(), 0)
self.assertEqual(Value.objects.count(), 0)
@ -55,9 +56,9 @@ class DataValidation(TestCase):
self.assertEqual(Value.objects.count(), 2)
def test_validation_error_create(self):
self.assertRaises(ValidationError,
Patient.objects.create,
name='Joe', eav__age='df')
self.assertRaises(
ValidationError, Patient.objects.create, name='Joe', eav__age='df'
)
self.assertEqual(Patient.objects.count(), 0)
self.assertEqual(Value.objects.count(), 0)
@ -108,7 +109,7 @@ class DataValidation(TestCase):
p.eav.height = 15
p.save()
self.assertEqual(Patient.objects.get(pk=p.pk).eav.height, 15)
p.eav.height='2.3'
p.eav.height = '2.3'
p.save()
self.assertEqual(Patient.objects.get(pk=p.pk).eav.height, 2.3)
@ -150,7 +151,9 @@ class DataValidation(TestCase):
ynu.values.add(yes)
ynu.values.add(no)
ynu.values.add(unkown)
Attribute.objects.create(name='Fever?', datatype=Attribute.TYPE_ENUM, enum_group=ynu)
Attribute.objects.create(
name='Fever?', datatype=Attribute.TYPE_ENUM, enum_group=ynu
)
p = Patient.objects.create(name='Joe')
p.eav.fever = 5
@ -204,4 +207,6 @@ class DataValidation(TestCase):
self.assertRaises(ValidationError, p.save)
p.eav.multi = "one;two;three"
p.save()
self.assertEqual(Patient.objects.get(pk=p.pk).eav.multi, ["one","two","three"])
self.assertEqual(
Patient.objects.get(pk=p.pk).eav.multi, ["one", "two", "three"]
)

View file

@ -1,16 +1,16 @@
from django.test import TestCase
import sys
from django.contrib.admin.sites import AdminSite
from django.core.handlers.base import BaseHandler
from django.forms import ModelForm
from django.test import TestCase
from django.test.client import RequestFactory
import eav
import sys
from eav.admin import *
from .models import Patient, M2MModel, ExampleModel
from eav.models import Attribute
from eav.forms import BaseDynamicEntityForm
from django.contrib import admin
from django.core.handlers.base import BaseHandler
from django.test.client import RequestFactory
from django.forms import ModelForm
from eav.models import Attribute
from main_app.models import ExampleModel, M2MModel, Patient
class MockRequest(RequestFactory):
@ -24,8 +24,10 @@ class MockRequest(RequestFactory):
if sys.version_info[0] < 2:
for middleware_method in handler._request_middleware:
if middleware_method(request):
raise Exception("Couldn't create request mock object - "
"request middleware returned a response")
raise Exception(
"Couldn't create request mock object - "
"request middleware returned a response"
)
return request
@ -66,9 +68,7 @@ class Forms(TestCase):
gender_group.values.add(self.female, self.male)
Attribute.objects.create(
name='gender',
datatype=Attribute.TYPE_ENUM,
enum_group=gender_group
name='gender', datatype=Attribute.TYPE_ENUM, enum_group=gender_group
)
self.instance = Patient.objects.create(name='Jim Morrison')

View file

@ -1,9 +1,8 @@
from django.test import TestCase
from eav.models import EnumGroup, Attribute, Value, EnumValue
import eav
from .models import Patient
from eav.models import Attribute, EnumGroup, EnumValue, Value
from main_app.models import Patient
class MiscModels(TestCase):
@ -14,7 +13,9 @@ class MiscModels(TestCase):
def test_attribute_help_text(self):
desc = 'Patient Age'
a = Attribute.objects.create(name='age', description=desc, datatype=Attribute.TYPE_INT)
a = Attribute.objects.create(
name='age', description=desc, datatype=Attribute.TYPE_INT
)
self.assertEqual(a.help_text, desc)
def test_setting_to_none_deletes_value(self):
@ -32,7 +33,9 @@ class MiscModels(TestCase):
ynu = EnumGroup.objects.create(name='Yes / No / Unknown')
ynu.values.add(yes)
ynu.values.add(no)
Attribute.objects.create(name='is_patient', datatype=Attribute.TYPE_ENUM, enum_group=ynu)
Attribute.objects.create(
name='is_patient', datatype=Attribute.TYPE_ENUM, enum_group=ynu
)
eav.register(Patient)
p = Patient.objects.create(name='Joe')
p.eav.is_patient = 'yes'

View file

@ -6,8 +6,7 @@ from django.test import TestCase
import eav
from eav.models import Attribute, EnumGroup, EnumValue, Value
from eav.registry import EavConfig
from .models import Encounter, Patient
from main_app.models import Encounter, Patient
class Queries(TestCase):
@ -32,7 +31,9 @@ class Queries(TestCase):
ynu.values.add(self.no)
ynu.values.add(self.unknown)
Attribute.objects.create(name='fever', datatype=Attribute.TYPE_ENUM, enum_group=ynu)
Attribute.objects.create(
name='fever', datatype=Attribute.TYPE_ENUM, enum_group=ynu
)
def tearDown(self):
eav.unregister(Encounter)
@ -46,26 +47,27 @@ class Queries(TestCase):
# Name, age, fever,
# city, country, extras
# possible illness
['Anne', 3, no,
'New York', 'USA', {"chills": "yes"},
"cold"
],
['Bob', 15, no,
'Bamako', 'Mali', {},
""
],
['Cyrill', 15, yes,
'Kisumu', 'Kenya', {"chills": "yes", "headache": "no"},
"flu"
],
['Daniel', 3, no,
'Nice', 'France', {"headache": "yes"},
"cold"
],
['Eugene', 2, yes,
'France', 'Nice', {"chills": "no", "headache": "yes"},
"flu;cold"
]
['Anne', 3, no, 'New York', 'USA', {"chills": "yes"}, "cold"],
['Bob', 15, no, 'Bamako', 'Mali', {}, ""],
[
'Cyrill',
15,
yes,
'Kisumu',
'Kenya',
{"chills": "yes", "headache": "no"},
"flu",
],
['Daniel', 3, no, 'Nice', 'France', {"headache": "yes"}, "cold"],
[
'Eugene',
2,
yes,
'France',
'Nice',
{"chills": "no", "headache": "yes"},
"flu;cold",
],
]
for row in data:
@ -76,7 +78,7 @@ class Queries(TestCase):
eav__city=row[3],
eav__country=row[4],
eav__extras=row[5],
eav__illness=row[6]
eav__illness=row[6],
)
def test_get_or_create_with_eav(self):
@ -95,7 +97,9 @@ class Queries(TestCase):
self.assertEqual(Patient.objects.get(eav__age=6), p1)
Patient.objects.create(name='Fred', eav__age=6)
self.assertRaises(MultipleObjectsReturned, lambda: Patient.objects.get(eav__age=6))
self.assertRaises(
MultipleObjectsReturned, lambda: Patient.objects.get(eav__age=6)
)
def test_filtering_on_normal_and_eav_fields(self):
self.init_data()
@ -110,8 +114,8 @@ class Queries(TestCase):
self.assertEqual(p.count(), 0)
# Anne, Daniel
q1 = Q(eav__age__gte=3) # Everyone except Eugene
q2 = Q(eav__age__lt=15) # Anne, Daniel, Eugene
q1 = Q(eav__age__gte=3) # Everyone except Eugene
q2 = Q(eav__age__lt=15) # Anne, Daniel, Eugene
p = Patient.objects.filter(q2 & q1)
self.assertEqual(p.count(), 2)
@ -140,11 +144,11 @@ class Queries(TestCase):
self.assertEqual(p.count(), 5)
# Anne, Bob, Daniel
q1 = Q(eav__fever=self.no) # Anne, Bob, Daniel
q2 = Q(eav__fever=self.yes) # Cyrill, Eugene
q3 = Q(eav__country__contains='e') # Cyrill, Daniel, Eugene
q4 = q2 & q3 # Cyrill, Daniel, Eugene
q5 = (q1 | q4) & q1 # Anne, Bob, Daniel
q1 = Q(eav__fever=self.no) # Anne, Bob, Daniel
q2 = Q(eav__fever=self.yes) # Cyrill, Eugene
q3 = Q(eav__country__contains='e') # Cyrill, Daniel, Eugene
q4 = q2 & q3 # Cyrill, Daniel, Eugene
q5 = (q1 | q4) & q1 # Anne, Bob, Daniel
p = Patient.objects.filter(q5)
self.assertEqual(p.count(), 3)
@ -218,7 +222,6 @@ class Queries(TestCase):
p = Patient.objects.filter(~q1)
self.assertEqual(p.count(), 1)
def _order(self, ordering):
query = Patient.objects.all().order_by(*ordering)
return list(query.values_list('name', flat=True))
@ -226,32 +229,32 @@ class Queries(TestCase):
def assert_order_by_results(self, eav_attr='eav'):
self.assertEqual(
['Bob', 'Eugene', 'Cyrill', 'Anne', 'Daniel'],
self._order(['%s__city' % eav_attr])
self._order(['%s__city' % eav_attr]),
)
self.assertEqual(
['Eugene', 'Anne', 'Daniel', 'Bob', 'Cyrill'],
self._order(['%s__age' % eav_attr, '%s__city' % eav_attr])
self._order(['%s__age' % eav_attr, '%s__city' % eav_attr]),
)
self.assertEqual(
['Eugene', 'Cyrill', 'Anne', 'Daniel', 'Bob'],
self._order(['%s__fever' % eav_attr, '%s__age' % eav_attr])
self._order(['%s__fever' % eav_attr, '%s__age' % eav_attr]),
)
self.assertEqual(
['Eugene', 'Cyrill', 'Daniel', 'Bob', 'Anne'],
self._order(['%s__fever' % eav_attr, '-name'])
self._order(['%s__fever' % eav_attr, '-name']),
)
self.assertEqual(
['Eugene', 'Daniel', 'Cyrill', 'Bob', 'Anne'],
self._order(['-name', '%s__age' % eav_attr])
self._order(['-name', '%s__age' % eav_attr]),
)
self.assertEqual(
['Anne', 'Bob', 'Cyrill', 'Daniel', 'Eugene'],
self._order(['example__name'])
self._order(['example__name']),
)
with self.assertRaises(NotSupportedError):
@ -265,7 +268,6 @@ class Queries(TestCase):
self.assert_order_by_results()
def test_order_by_with_custom_config(self):
class CustomConfig(EavConfig):
eav_attr = "data"
generic_relation_attr = "data_values"

View file

@ -1,15 +1,13 @@
from django.test import TestCase
import sys
import eav
from eav.registry import EavConfig
from .models import Encounter, ExampleModel, Patient
if sys.version_info[0] > 2:
from .metaclass_models3 import ExampleMetaclassModel
else:
from .metaclass_models2 import ExampleMetaclassModel
from main_app.models import (
Encounter,
ExampleMetaclassModel,
ExampleModel,
Patient,
)
class RegistryTests(TestCase):
@ -81,9 +79,13 @@ class RegistryTests(TestCase):
self.assertFalse(ExampleModel.objects.__class__.__name__ == 'EntityManager')
def test_unregistering_via_metaclass(self):
self.assertTrue(ExampleMetaclassModel.objects.__class__.__name__ == 'EntityManager')
self.assertTrue(
ExampleMetaclassModel.objects.__class__.__name__ == 'EntityManager'
)
eav.unregister(ExampleMetaclassModel)
self.assertFalse(ExampleMetaclassModel.objects.__class__.__name__ == 'EntityManager')
self.assertFalse(
ExampleMetaclassModel.objects.__class__.__name__ == 'EntityManager'
)
def test_unregistering_unregistered_model_proceeds_silently(self):
eav.unregister(Patient)
@ -94,6 +96,7 @@ class RegistryTests(TestCase):
def test_doesnt_register_nonmodel(self):
with self.assertRaises(ValueError):
@eav.decorators.register_eav()
class Foo(object):
pass

View file

@ -2,8 +2,7 @@ from django.test import TestCase
import eav
from eav.registry import EavConfig
from .models import Patient, Encounter
from main_app.models import Encounter, Patient
class RegistryTests(TestCase):
@ -19,8 +18,8 @@ class RegistryTests(TestCase):
eav_attr = 'eav_field'
generic_relation_attr = 'encounter_eav_values'
generic_relation_related_name = 'encounters'
eav.register(Encounter, EncounterEav)
eav.register(Encounter, EncounterEav)
def test_registering_with_defaults(self):
eav.register(Patient)
@ -28,10 +27,8 @@ class RegistryTests(TestCase):
self.assertEqual(Patient._eav_config_cls.manager_attr, 'objects')
self.assertFalse(Patient._eav_config_cls.manager_only)
self.assertEqual(Patient._eav_config_cls.eav_attr, 'eav')
self.assertEqual(Patient._eav_config_cls.generic_relation_attr,
'eav_values')
self.assertEqual(Patient._eav_config_cls.generic_relation_related_name,
None)
self.assertEqual(Patient._eav_config_cls.generic_relation_attr, 'eav_values')
self.assertEqual(Patient._eav_config_cls.generic_relation_related_name, None)
eav.unregister(Patient)
def test_registering_overriding_defaults(self):

View file

@ -1,49 +0,0 @@
import os
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
SECRET_KEY = 'fake-key'
SITE_ID = 1
INSTALLED_APPS = [
'django.contrib.auth',
'django.contrib.sites',
'django.contrib.admin',
'django.contrib.messages', # Required for admin app.
'django.contrib.contenttypes',
'tests',
'eav'
]
MIDDLEWARE = [
# Following 3 middleware required for admin app.
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware'
]
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
'TEST_NAME': os.path.join(BASE_DIR, 'test_db.sqlite3'),
}
}