mirror of
https://github.com/jazzband/django-eav2.git
synced 2026-03-16 22:40:26 +00:00
tests + migration file updated
This commit is contained in:
parent
1d6f15decc
commit
2ff929281a
7 changed files with 148 additions and 52 deletions
|
|
@ -1,10 +1,8 @@
|
|||
# Generated by Django 4.2.6 on 2023-12-04 08:31
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
"""Migration to set CharField as default primary key for all models."""
|
||||
"""Migration to use BigAutoField as default for all models."""
|
||||
|
||||
dependencies = [
|
||||
('eav', '0009_enchance_naming'),
|
||||
|
|
@ -14,29 +12,37 @@ class Migration(migrations.Migration):
|
|||
migrations.AlterField(
|
||||
model_name='attribute',
|
||||
name='id',
|
||||
field=models.CharField(
|
||||
editable=False, max_length=255, primary_key=True, serialize=False
|
||||
field=models.BigAutoField(
|
||||
editable=False,
|
||||
primary_key=True,
|
||||
serialize=False,
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='enumgroup',
|
||||
name='id',
|
||||
field=models.CharField(
|
||||
editable=False, max_length=255, primary_key=True, serialize=False
|
||||
field=models.BigAutoField(
|
||||
editable=False,
|
||||
primary_key=True,
|
||||
serialize=False,
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='enumvalue',
|
||||
name='id',
|
||||
field=models.CharField(
|
||||
editable=False, max_length=255, primary_key=True, serialize=False
|
||||
field=models.BigAutoField(
|
||||
editable=False,
|
||||
primary_key=True,
|
||||
serialize=False,
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='value',
|
||||
name='id',
|
||||
field=models.CharField(
|
||||
editable=False, max_length=255, primary_key=True, serialize=False
|
||||
field=models.BigAutoField(
|
||||
editable=False,
|
||||
primary_key=True,
|
||||
serialize=False,
|
||||
),
|
||||
),
|
||||
]
|
||||
]
|
||||
|
|
@ -1,9 +1,9 @@
|
|||
# Generated by Django 4.2.6 on 2023-12-20 15:33
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
"""Migration to set CharField as default primary key for all models."""
|
||||
|
||||
dependencies = [
|
||||
('eav', '0010_dynamic_pk_type_for_models'),
|
||||
]
|
||||
|
|
@ -13,28 +13,28 @@ class Migration(migrations.Migration):
|
|||
model_name='attribute',
|
||||
name='id',
|
||||
field=models.CharField(
|
||||
editable=False, max_length=40, primary_key=True, serialize=False
|
||||
editable=False, max_length=255, primary_key=True, serialize=False
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='enumgroup',
|
||||
name='id',
|
||||
field=models.CharField(
|
||||
editable=False, max_length=40, primary_key=True, serialize=False
|
||||
editable=False, max_length=255, primary_key=True, serialize=False
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='enumvalue',
|
||||
name='id',
|
||||
field=models.CharField(
|
||||
editable=False, max_length=40, primary_key=True, serialize=False
|
||||
editable=False, max_length=255, primary_key=True, serialize=False
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='value',
|
||||
name='id',
|
||||
field=models.CharField(
|
||||
editable=False, max_length=40, primary_key=True, serialize=False
|
||||
editable=False, max_length=255, primary_key=True, serialize=False
|
||||
),
|
||||
),
|
||||
]
|
||||
|
|
|
|||
|
|
@ -1,18 +1,35 @@
|
|||
import uuid
|
||||
# Generated by Django 4.2.11 on 2024-03-22 12:04
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
from test_project.models import MAX_CHARFIELD_LEN
|
||||
import django.db.models.deletion
|
||||
import uuid
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
"""Initial migration for test_project."""
|
||||
|
||||
initial = True
|
||||
|
||||
dependencies = []
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='Doctor',
|
||||
fields=[
|
||||
(
|
||||
'id',
|
||||
models.UUIDField(
|
||||
default=uuid.uuid4,
|
||||
editable=False,
|
||||
primary_key=True,
|
||||
serialize=False,
|
||||
),
|
||||
),
|
||||
('name', models.CharField(max_length=254)),
|
||||
],
|
||||
options={
|
||||
'abstract': False,
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='ExampleMetaclassModel',
|
||||
fields=[
|
||||
|
|
@ -25,7 +42,7 @@ class Migration(migrations.Migration):
|
|||
verbose_name='ID',
|
||||
),
|
||||
),
|
||||
('name', models.CharField(max_length=MAX_CHARFIELD_LEN)),
|
||||
('name', models.CharField(max_length=254)),
|
||||
],
|
||||
options={
|
||||
'abstract': False,
|
||||
|
|
@ -43,7 +60,7 @@ class Migration(migrations.Migration):
|
|||
verbose_name='ID',
|
||||
),
|
||||
),
|
||||
('name', models.CharField(max_length=MAX_CHARFIELD_LEN)),
|
||||
('name', models.CharField(max_length=254)),
|
||||
],
|
||||
options={
|
||||
'abstract': False,
|
||||
|
|
@ -61,7 +78,7 @@ class Migration(migrations.Migration):
|
|||
verbose_name='ID',
|
||||
),
|
||||
),
|
||||
('name', models.CharField(max_length=MAX_CHARFIELD_LEN)),
|
||||
('name', models.CharField(max_length=254)),
|
||||
],
|
||||
options={
|
||||
'abstract': False,
|
||||
|
|
@ -79,14 +96,14 @@ class Migration(migrations.Migration):
|
|||
verbose_name='ID',
|
||||
),
|
||||
),
|
||||
('name', models.CharField(max_length=MAX_CHARFIELD_LEN)),
|
||||
('email', models.EmailField(blank=True, max_length=MAX_CHARFIELD_LEN)),
|
||||
('name', models.CharField(max_length=254)),
|
||||
('email', models.EmailField(blank=True, max_length=254)),
|
||||
(
|
||||
'example',
|
||||
models.ForeignKey(
|
||||
blank=True,
|
||||
null=True,
|
||||
on_delete=models.deletion.PROTECT,
|
||||
on_delete=django.db.models.deletion.PROTECT,
|
||||
to='test_project.examplemodel',
|
||||
),
|
||||
),
|
||||
|
|
@ -107,8 +124,8 @@ class Migration(migrations.Migration):
|
|||
verbose_name='ID',
|
||||
),
|
||||
),
|
||||
('name', models.CharField(max_length=MAX_CHARFIELD_LEN)),
|
||||
('models', models.ManyToManyField(to='test_project.ExampleModel')),
|
||||
('name', models.CharField(max_length=254)),
|
||||
('models', models.ManyToManyField(to='test_project.examplemodel')),
|
||||
],
|
||||
options={
|
||||
'abstract': False,
|
||||
|
|
@ -130,7 +147,7 @@ class Migration(migrations.Migration):
|
|||
(
|
||||
'patient',
|
||||
models.ForeignKey(
|
||||
on_delete=models.deletion.PROTECT,
|
||||
on_delete=django.db.models.deletion.PROTECT,
|
||||
to='test_project.patient',
|
||||
),
|
||||
),
|
||||
|
|
@ -139,22 +156,4 @@ class Migration(migrations.Migration):
|
|||
'abstract': False,
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Doctor',
|
||||
fields=[
|
||||
(
|
||||
'id',
|
||||
models.UUIDField(
|
||||
default=uuid.uuid4,
|
||||
editable=False,
|
||||
primary_key=True,
|
||||
serialize=False,
|
||||
),
|
||||
),
|
||||
('name', models.CharField(max_length=MAX_CHARFIELD_LEN)),
|
||||
],
|
||||
options={
|
||||
'abstract': False,
|
||||
},
|
||||
),
|
||||
]
|
||||
|
|
|
|||
|
|
@ -67,12 +67,13 @@ DATABASES = {
|
|||
'default': {
|
||||
'ENGINE': 'django.db.backends.sqlite3',
|
||||
'NAME': ':memory:',
|
||||
# 'NAME': BASE_DIR / 'db.sqlite3'
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
DEFAULT_AUTO_FIELD = 'django.db.models.AutoField'
|
||||
EAV2_PRIMARY_KEY_FIELD = 'django.db.models.CharField'
|
||||
EAV2_PRIMARY_KEY_FIELD = 'django.db.models.BigAutoField'
|
||||
|
||||
|
||||
# Password validation
|
||||
|
|
|
|||
51
tests/test_models.py
Normal file
51
tests/test_models.py
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
import eav
|
||||
import datetime
|
||||
from django.test import TestCase
|
||||
from eav.models import EnumValue, EnumGroup, Attribute, Value
|
||||
from django.contrib.auth.models import User
|
||||
from django.contrib.contenttypes.models import ContentType
|
||||
|
||||
|
||||
class EnumValueTestCase(TestCase):
|
||||
def setUp(self):
|
||||
self.enum_value = EnumValue.objects.create(value='Test Value')
|
||||
|
||||
def test_enum_value_str(self):
|
||||
self.assertEqual(str(self.enum_value), 'Test Value')
|
||||
|
||||
|
||||
class EnumGroupTestCase(TestCase):
|
||||
def setUp(self):
|
||||
self.enum_group = EnumGroup.objects.create(name='Test Group')
|
||||
|
||||
def test_enum_group_str(self):
|
||||
self.assertEqual(str(self.enum_group), 'Test Group')
|
||||
|
||||
|
||||
class AttributeTestCase(TestCase):
|
||||
def setUp(self):
|
||||
self.attribute = Attribute.objects.create(
|
||||
name='Test Attribute', datatype='text'
|
||||
)
|
||||
|
||||
def test_attribute_str(self):
|
||||
self.assertEqual(str(self.attribute), 'Test Attribute (Text)')
|
||||
|
||||
|
||||
class ValueModelTestCase(TestCase):
|
||||
def setUp(self):
|
||||
eav.register(User)
|
||||
self.attribute = Attribute.objects.create(name='Test Attribute', datatype=Attribute.TYPE_TEXT, slug="test_attribute")
|
||||
self.user = User.objects.create(username='crazy_dev_user')
|
||||
user_content_type = ContentType.objects.get_for_model(User)
|
||||
self.value = Value.objects.create(
|
||||
entity_id=self.user.id,
|
||||
entity_ct=user_content_type,
|
||||
value_text='Test Value',
|
||||
attribute=self.attribute
|
||||
)
|
||||
|
||||
def test_value_str(self):
|
||||
expected_str = f'{self.attribute.name}: "{self.value.value_text}" ({self.value.entity_pk_int})'
|
||||
self.assertEqual(str(self.value), expected_str)
|
||||
|
||||
|
|
@ -105,10 +105,10 @@ class RegistryTests(TestCase):
|
|||
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
|
||||
assert bool(User._meta.local_managers)
|
||||
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
|
||||
assert not bool(User._meta.local_managers)
|
||||
|
|
|
|||
39
tests/test_widgets.py
Normal file
39
tests/test_widgets.py
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
from django.core.exceptions import ValidationError
|
||||
from django.forms import Textarea
|
||||
from django.test import TestCase
|
||||
from eav.widgets import CSVWidget
|
||||
|
||||
class TestCSVWidget(TestCase):
|
||||
def test_prep_value_string(self):
|
||||
self._extracted_from_test_prep_value_empty_2("Test Value")
|
||||
|
||||
def test_prep_value_list(self):
|
||||
widget = CSVWidget()
|
||||
value = ["Value 1", "Value 2", "Value 3"]
|
||||
self.assertEqual(widget.prep_value(value), "Value 1;Value 2;Value 3")
|
||||
|
||||
def test_prep_value_empty(self):
|
||||
self._extracted_from_test_prep_value_empty_2("")
|
||||
|
||||
# TODO Rename this here and in `test_prep_value_string` and `test_prep_value_empty`
|
||||
def _extracted_from_test_prep_value_empty_2(self, arg0):
|
||||
widget = CSVWidget()
|
||||
value = arg0
|
||||
self.assertEqual(widget.prep_value(value), arg0)
|
||||
|
||||
def test_prep_value_invalid(self):
|
||||
widget = CSVWidget()
|
||||
value = 123 # An invalid value
|
||||
with self.assertRaises(ValidationError):
|
||||
widget.prep_value(value)
|
||||
|
||||
def test_render(self):
|
||||
widget = CSVWidget()
|
||||
name = "test_field"
|
||||
value = ["Value 1", "Value 2", "Value 3"]
|
||||
rendered_widget = widget.render(name, value)
|
||||
# You can add more specific assertions based on the expected output
|
||||
self.assertIsInstance(rendered_widget, str)
|
||||
self.assertIn("Value 1", rendered_widget)
|
||||
self.assertIn("Value 2", rendered_widget)
|
||||
self.assertIn("Value 3", rendered_widget)
|
||||
Loading…
Reference in a new issue