Skip to content

Commit

Permalink
Rework Enum tests
Browse files Browse the repository at this point in the history
  • Loading branch information
lafrech committed Aug 25, 2022
1 parent b826c5b commit 96c06eb
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 22 deletions.
6 changes: 6 additions & 0 deletions tests/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,12 @@ class HairColorEnum(Enum):
red = "red hair"


class DateEnum(Enum):
date_1 = dt.date(2004, 2, 29)
date_2 = dt.date(2008, 2, 29)
date_3 = dt.date(2012, 2, 29)


ALL_FIELDS = [
fields.String,
fields.Integer,
Expand Down
39 changes: 22 additions & 17 deletions tests/test_deserialization.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
ALL_FIELDS,
GenderEnum,
HairColorEnum,
DateEnum,
)


Expand Down Expand Up @@ -1096,52 +1097,56 @@ def test_invalid_ipv6interface_deserialization(self, in_value):

assert excinfo.value.args[0] == "Not a valid IPv6 interface."

def test_enum_field_deserialization(self):
def test_enumsymbol_field_deserialization(self):
field = fields.EnumSymbol(GenderEnum)
assert field.deserialize("male") == GenderEnum.male

def test_enum_field_invalid_value(self):
def test_enumsymbol_field_invalid_value(self):
field = fields.EnumSymbol(GenderEnum)
with pytest.raises(
ValidationError, match="Must be one of: male, female, non_binary."
):
field.deserialize("dummy")

def test_enum_field_not_string(self):
def test_enumsymbol_field_not_string(self):
field = fields.EnumSymbol(GenderEnum)
with pytest.raises(ValidationError, match="Not a valid string."):
field.deserialize(12)

def test_stringenum_field_deserialization(self):
def test_enumvalue_field_deserialization(self):
field = fields.EnumValue(fields.String, HairColorEnum)
assert field.deserialize("black hair") == HairColorEnum.black
field = fields.EnumValue(fields.Integer, GenderEnum)
assert field.deserialize(1) == GenderEnum.male
field = fields.EnumValue(fields.Date, DateEnum)
assert field.deserialize("2004-02-29") == DateEnum.date_1

def test_stringenum_field_invalid_value(self):
def test_enumvalue_field_invalid_value(self):
field = fields.EnumValue(fields.String, HairColorEnum)
with pytest.raises(
ValidationError,
match="Must be one of: black hair, brown hair, blond hair, red hair.",
):
field.deserialize("dummy")

def test_stringenum_field_not_string(self):
field = fields.EnumValue(fields.String, HairColorEnum)
with pytest.raises(ValidationError, match="Not a valid string."):
field.deserialize(12)

def test_integerenum_field_deserialization(self):
field = fields.EnumValue(fields.Integer, GenderEnum)
assert field.deserialize(1) == GenderEnum.male

def test_integerenum_field_invalid_value(self):
field = fields.EnumValue(fields.Integer, GenderEnum)
with pytest.raises(ValidationError, match="Must be one of: 1, 2, 3."):
field.deserialize(12)
field = fields.EnumValue(fields.Date, DateEnum)
with pytest.raises(
ValidationError, match="Must be one of: 2004-02-29, 2008-02-29, 2012-02-29."
):
field.deserialize("2004-02-28")

def test_integerenum_field_not_integer(self):
def test_enumvalue_field_wrong_type(self):
field = fields.EnumValue(fields.String, HairColorEnum)
with pytest.raises(ValidationError, match="Not a valid string."):
field.deserialize(12)
field = fields.EnumValue(fields.Integer, GenderEnum)
with pytest.raises(ValidationError, match="Not a valid integer."):
field.deserialize("dummy")
field = fields.EnumValue(fields.Date, DateEnum)
with pytest.raises(ValidationError, match="Not a valid date."):
field.deserialize("2004-02-30")

def test_deserialization_function_must_be_callable(self):
with pytest.raises(TypeError):
Expand Down
11 changes: 6 additions & 5 deletions tests/test_serialization.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@

from marshmallow import Schema, fields, missing as missing_

from tests.base import User, ALL_FIELDS, central, GenderEnum, HairColorEnum
from tests.base import User, ALL_FIELDS, central, GenderEnum, HairColorEnum, DateEnum


class DateTimeList:
Expand Down Expand Up @@ -255,20 +255,21 @@ def test_ipv6_interface_field(self, user):
== ipv6interface_exploded_string
)

def test_enum_field_serialization(self, user):
def test_enumsymbol_field_serialization(self, user):
user.sex = GenderEnum.male
field = fields.EnumSymbol(GenderEnum)
assert field.serialize("sex", user) == "male"

def test_stringenum_field_serialization(self, user):
def test_enumvalue_field_serialization(self, user):
user.hair_color = HairColorEnum.black
field = fields.EnumValue(fields.String, HairColorEnum)
assert field.serialize("hair_color", user) == "black hair"

def test_integerenum_field_serialization(self, user):
user.sex = GenderEnum.male
field = fields.EnumValue(fields.Integer, GenderEnum)
assert field.serialize("sex", user) == 1
user.some_date = DateEnum.date_1
field = fields.EnumValue(fields.Date, DateEnum)
assert field.serialize("some_date", user) == "2004-02-29"

def test_decimal_field(self, user):
user.m1 = 12
Expand Down

0 comments on commit 96c06eb

Please sign in to comment.