Skip to content

Commit f5f2c27

Browse files
committed
signficant test restructure - support runs of valid tests without optional dependencies
1 parent d3b9485 commit f5f2c27

33 files changed

+2524
-1828
lines changed

.github/workflows/test.yml

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,15 +30,27 @@ jobs:
3030
with:
3131
virtualenvs-create: true
3232
virtualenvs-in-project: true
33-
- name: Install Release Dependencies
33+
- name: Install Basic Dependencies
3434
run: |
3535
poetry config virtualenvs.in-project true
3636
poetry run pip install --upgrade pip
37-
poetry install -E all
37+
poetry install
3838
poetry run pip install -U "${{ matrix.django-version }}"
3939
- name: Run Unit Tests
4040
run: |
4141
poetry run pytest
42+
- name: Install Enum Properties
43+
run: |
44+
poetry install -E properties
45+
- name: Re-Run Unit Tests
46+
run: |
47+
poetry run pytest
48+
- name: Install Django Filters
49+
run: |
50+
poetry install -E filters
51+
- name: Re-Run Unit Tests
52+
run: |
53+
poetry run pytest
4254
- name: Run Static Analysis
4355
run: |
4456
poetry run pylint django_enum

.gitignore

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -128,10 +128,7 @@ dmypy.json
128128
# Pyre type checker
129129
.pyre/
130130

131+
.idea
131132
/poetry.lock
132133
test.db
133-
django_enum/tests/edit_tests/migrations/0001_initial.py
134-
django_enum/tests/edit_tests/migrations/0002_alter_values.py
135-
django_enum/tests/edit_tests/migrations/0003_remove_black.py
136-
django_enum/tests/edit_tests/migrations/0004_remove_int_enum.py
137-
django_enum/tests/edit_tests/migrations/0005_add_int_enum.py
134+
django_enum/tests/edit_tests/migrations/000*.py

django_enum/choices.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ def __init__(self, *args, **kwargs):
7676
DjangoSymmetricMixin = MissingEnumProperties
7777

7878

79-
class DjangoEnumPropertiesMeta(EnumPropertiesMeta, ChoicesMeta):
79+
class DjangoEnumPropertiesMeta(ChoicesMeta):
8080
"""
8181
Throw error if metaclass is used without enum-properties
8282

django_enum/forms.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
"""Enumeration support for django model forms"""
22
from django.core.exceptions import ValidationError
33
from django.forms.fields import ChoiceField
4+
# pylint: disable=R0801
45

56

67
class EnumChoiceField(ChoiceField):

django_enum/tests/djenum/__init__.py

Whitespace-only changes.

django_enum/tests/djenum/apps.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
from django.apps import AppConfig
2+
3+
4+
class DJEnumConfig(AppConfig):
5+
name = 'django_enum.tests.djenum'
6+
label = name.replace('.', '_')

django_enum/tests/djenum/enums.py

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
from django.db.models import IntegerChoices, TextChoices
2+
from django.db.models.enums import Choices
3+
4+
5+
class FloatChoices(float, Choices):
6+
pass
7+
8+
9+
class DJIntEnum(IntegerChoices):
10+
11+
ONE = 1, 'One'
12+
TWO = 2, 'Two'
13+
THREE = 3, 'Three'
14+
15+
16+
class DJTextEnum(TextChoices):
17+
18+
A = 'A', 'Label A'
19+
B = 'B', 'Label B'
20+
C = 'C', 'Label C'
21+
22+
23+
class TextEnum(TextChoices):
24+
25+
VALUE1 = 'V1', 'Value1'
26+
VALUE2 = 'V22', 'Value2'
27+
VALUE3 = 'V333', 'Value3'
28+
DEFAULT = 'D', 'Default'
29+
30+
31+
class Constants(FloatChoices):
32+
33+
PI = 3.14159265358979323846264338327950288, 'Pi'
34+
e = 2.71828, "Euler's Number"
35+
GOLDEN_RATIO = 1.61803398874989484820458683436563811, 'Golden Ratio'
36+
37+
38+
class SmallPosIntEnum(IntegerChoices):
39+
40+
VAL1 = 0, 'Value 1'
41+
VAL2 = 2, 'Value 2'
42+
VAL3 = 32767, 'Value 32767'
43+
44+
45+
class SmallIntEnum(IntegerChoices):
46+
47+
VALn1 = -32768, 'Value -32768'
48+
VAL0 = 0, 'Value 0'
49+
VAL1 = 1, 'Value 1'
50+
VAL2 = 2, 'Value 2'
51+
VAL3 = 32767, 'Value 32767'
52+
53+
54+
class IntEnum(IntegerChoices):
55+
56+
VALn1 = -2147483648, 'Value -2147483648'
57+
VAL0 = 0, 'Value 0'
58+
VAL1 = 1, 'Value 1'
59+
VAL2 = 2, 'Value 2'
60+
VAL3 = 2147483647, 'Value 2147483647'
61+
62+
63+
class PosIntEnum(IntegerChoices):
64+
65+
VAL0 = 0, 'Value 0'
66+
VAL1 = 1, 'Value 1'
67+
VAL2 = 2, 'Value 2'
68+
VAL3 = 2147483647, 'Value 2147483647'
69+
70+
71+
class BigPosIntEnum(IntegerChoices):
72+
73+
VAL0 = 0, 'Value 0'
74+
VAL1 = 1, 'Value 1'
75+
VAL2 = 2, 'Value 2'
76+
VAL3 = 2147483648, 'Value 2147483647'
77+
78+
79+
class BigIntEnum(IntegerChoices):
80+
81+
VAL0 = -2147483649, 'Value -2147483649'
82+
VAL1 = 1, 'Value 1'
83+
VAL2 = 2, 'Value 2'
84+
VAL3 = 2147483648, 'Value 2147483647'

django_enum/tests/djenum/forms.py

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
from django.forms import ModelForm
2+
from django_enum import EnumChoiceField
3+
from django_enum.tests.djenum.enums import (
4+
BigIntEnum,
5+
BigPosIntEnum,
6+
Constants,
7+
DJIntEnum,
8+
DJTextEnum,
9+
IntEnum,
10+
PosIntEnum,
11+
SmallIntEnum,
12+
SmallPosIntEnum,
13+
TextEnum,
14+
)
15+
from django_enum.tests.djenum.models import EnumTester
16+
17+
18+
class EnumTesterForm(ModelForm):
19+
small_pos_int = EnumChoiceField(SmallPosIntEnum)
20+
small_int = EnumChoiceField(SmallIntEnum)
21+
pos_int = EnumChoiceField(PosIntEnum)
22+
int = EnumChoiceField(IntEnum)
23+
big_pos_int = EnumChoiceField(BigPosIntEnum)
24+
big_int = EnumChoiceField(BigIntEnum)
25+
constant = EnumChoiceField(Constants)
26+
text = EnumChoiceField(TextEnum)
27+
dj_int_enum = EnumChoiceField(DJIntEnum)
28+
dj_text_enum = EnumChoiceField(DJTextEnum)
29+
non_strict_int = EnumChoiceField(SmallPosIntEnum)
30+
31+
class Meta:
32+
model = EnumTester
33+
fields = '__all__'
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
# Generated by Django 3.2.14 on 2022-07-25 18:39
2+
3+
import django_enum.fields
4+
from django.db import migrations, models
5+
6+
7+
class Migration(migrations.Migration):
8+
9+
initial = True
10+
11+
dependencies = [
12+
]
13+
14+
operations = [
15+
migrations.CreateModel(
16+
name='EnumTester',
17+
fields=[
18+
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
19+
('small_pos_int', django_enum.fields.EnumPositiveSmallIntegerField(blank=True, choices=[(0, 'Value 1'), (2, 'Value 2'), (32767, 'Value 32767')], db_index=True, default=None, null=True)),
20+
('small_int', django_enum.fields.EnumSmallIntegerField(blank=True, choices=[(-32768, 'Value -32768'), (0, 'Value 0'), (1, 'Value 1'), (2, 'Value 2'), (32767, 'Value 32767')], db_index=True, default=32767)),
21+
('pos_int', django_enum.fields.EnumPositiveIntegerField(blank=True, choices=[(0, 'Value 0'), (1, 'Value 1'), (2, 'Value 2'), (2147483647, 'Value 2147483647')], db_index=True, default=2147483647)),
22+
('int', django_enum.fields.EnumIntegerField(blank=True, choices=[(-2147483648, 'Value -2147483648'), (0, 'Value 0'), (1, 'Value 1'), (2, 'Value 2'), (2147483647, 'Value 2147483647')], db_index=True, null=True)),
23+
('big_pos_int', django_enum.fields.EnumPositiveBigIntegerField(blank=True, choices=[(0, 'Value 0'), (1, 'Value 1'), (2, 'Value 2'), (2147483648, 'Value 2147483647')], db_index=True, default=None, null=True)),
24+
('big_int', django_enum.fields.EnumBigIntegerField(blank=True, choices=[(-2147483649, 'Value -2147483649'), (1, 'Value 1'), (2, 'Value 2'), (2147483648, 'Value 2147483647')], db_index=True, default=-2147483649)),
25+
('constant', django_enum.fields.EnumFloatField(blank=True, choices=[(3.141592653589793, 'Pi'), (2.71828, "Euler's Number"), (1.618033988749895, 'Golden Ratio')], db_index=True, default=None, null=True)),
26+
('text', django_enum.fields.EnumCharField(blank=True, choices=[('V1', 'Value1'), ('V22', 'Value2'), ('V333', 'Value3'), ('D', 'Default')], db_index=True, default=None, max_length=4, null=True)),
27+
('int_choice', models.IntegerField(blank=True, choices=[(1, 'One'), (2, 'Two'), (3, 'Three')], default=1)),
28+
('char_choice', models.CharField(blank=True, choices=[('A', 'First'), ('B', 'Second'), ('C', 'Third')], default='A', max_length=1)),
29+
('int_field', models.IntegerField(blank=True, default=1)),
30+
('float_field', models.FloatField(blank=True, default=1.5)),
31+
('char_field', models.CharField(blank=True, default='A', max_length=1)),
32+
('dj_int_enum', django_enum.fields.EnumPositiveSmallIntegerField(choices=[(1, 'One'), (2, 'Two'), (3, 'Three')], default=1)),
33+
('dj_text_enum', django_enum.fields.EnumCharField(choices=[('A', 'Label A'), ('B', 'Label B'), ('C', 'Label C')], default='A', max_length=1)),
34+
('non_strict_int', django_enum.fields.EnumPositiveSmallIntegerField(blank=True, choices=[(0, 'Value 1'), (2, 'Value 2'), (32767, 'Value 32767')], default=None, null=True)),
35+
],
36+
options={
37+
'ordering': ('id',),
38+
},
39+
),
40+
]

django_enum/tests/djenum/migrations/__init__.py

Whitespace-only changes.

0 commit comments

Comments
 (0)