django-eav2/tests/forms.py

114 lines
3.5 KiB
Python
Raw Permalink Normal View History

2018-07-13 11:50:50 +00:00
from django.test import TestCase
from django.contrib.admin.sites import AdminSite
import eav
2018-07-27 11:47:01 +00:00
import sys
2018-07-13 11:50:50 +00:00
from eav.admin import *
2018-07-13 14:06:21 +00:00
from .models import Patient, M2MModel, ExampleModel
2018-07-13 11:50:50 +00:00
from eav.models import Attribute
from eav.forms import BaseDynamicEntityForm
from django.contrib import admin
2018-07-27 11:47:01 +00:00
from django.core.handlers.base import BaseHandler
from django.test.client import RequestFactory
2018-07-13 11:50:50 +00:00
from django.forms import ModelForm
2018-07-27 11:47:01 +00:00
class MockRequest(RequestFactory):
def request(self, **request):
"Construct a generic request object."
request = RequestFactory.request(self, **request)
handler = BaseHandler()
handler.load_middleware()
# BaseHandler_request_middleware is not set in Django2.0
# and removed in Django2.1
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")
2018-07-13 11:50:50 +00:00
return request
class MockSuperUser:
def __init__(self):
self.is_active = True
self.is_staff = True
def has_perm(self, perm):
return True
request = MockRequest().request()
request.user = MockSuperUser()
2018-07-13 12:05:34 +00:00
class PatientForm(ModelForm):
class Meta:
model = Patient
fields = '__all__'
2018-07-13 14:06:21 +00:00
class M2MModelForm(ModelForm):
class Meta:
model = M2MModel
fields = '__all__'
2018-07-13 11:50:50 +00:00
class Forms(TestCase):
def setUp(self):
eav.register(Patient)
Attribute.objects.create(name='weight', datatype=Attribute.TYPE_FLOAT)
Attribute.objects.create(name='color', datatype=Attribute.TYPE_TEXT)
2018-08-10 08:19:37 +00:00
self.female = EnumValue.objects.create(value='Female')
self.male = EnumValue.objects.create(value='Male')
gender_group = EnumGroup.objects.create(name='Gender')
gender_group.values.add(self.female, self.male)
Attribute.objects.create(
name='gender',
datatype=Attribute.TYPE_ENUM,
enum_group=gender_group
)
2018-07-13 11:50:50 +00:00
self.instance = Patient.objects.create(name='Jim Morrison')
self.site = AdminSite()
def test_fields(self):
admin = BaseEntityAdmin(Patient, self.site)
admin.form = BaseDynamicEntityForm
view = admin.change_view(request, str(self.instance.pk))
own_fields = 2
2018-07-13 11:50:50 +00:00
adminform = view.context_data['adminform']
self.assertEqual(
len(adminform.form.fields), Attribute.objects.count() + own_fields
)
2018-07-13 12:05:34 +00:00
def test_valid_submit(self):
2018-07-13 11:50:50 +00:00
self.instance.eav.color = 'Blue'
form = PatientForm(self.instance.__dict__, instance=self.instance)
jim = form.save()
2018-07-13 12:05:34 +00:00
self.assertEqual(jim.eav.color, 'Blue')
def test_invalid_submit(self):
form = PatientForm(dict(color='Blue'), instance=self.instance)
with self.assertRaises(ValueError):
2018-07-13 14:06:21 +00:00
jim = form.save()
2018-08-10 08:19:37 +00:00
def test_valid_enums(self):
self.instance.eav.gender = self.female
form = PatientForm(self.instance.__dict__, instance=self.instance)
rose = form.save()
self.assertEqual(rose.eav.gender, self.female)
2018-07-13 14:06:21 +00:00
def test_m2m(self):
m2mmodel = M2MModel.objects.create(name='name')
model = ExampleModel.objects.create(name='name')
form = M2MModelForm(dict(name='Lorem', models=[model.pk]), instance=m2mmodel)
form.save()
2018-07-27 11:47:01 +00:00
self.assertEqual(len(m2mmodel.models.all()), 1)