diff --git a/docs/api/bo4e.com.rst b/docs/api/bo4e.com.rst index 972d9447f..c7b6fbbe9 100644 --- a/docs/api/bo4e.com.rst +++ b/docs/api/bo4e.com.rst @@ -12,6 +12,14 @@ bo4e.com.adresse module :undoc-members: :show-inheritance: +bo4e.com.aufabschlagstaffelproort module +---------------------------------------- + +.. automodule:: bo4e.com.aufabschlagstaffelproort + :members: + :undoc-members: + :show-inheritance: + bo4e.com.betrag module ---------------------- diff --git a/src/bo4e/com/aufabschlagstaffelproort.py b/src/bo4e/com/aufabschlagstaffelproort.py new file mode 100644 index 000000000..4a88d6f14 --- /dev/null +++ b/src/bo4e/com/aufabschlagstaffelproort.py @@ -0,0 +1,44 @@ +""" +Contains AufAbschlagstaffelProOrt class +and corresponding marshmallow schema for de-/serialization +""" + +from decimal import Decimal + +import attr +from marshmallow import fields, post_load + +from bo4e.com.com import COM, COMSchema + + +# pylint: disable=too-few-public-methods +@attr.s(auto_attribs=True, kw_only=True) +class AufAbschlagstaffelProOrt(COM): + """ + Gibt den Wert eines Auf- oder Abschlags und dessen Staffelgrenzen an. + """ + + # required attributes + #: Der Wert für den Auf- oder Abschlag. + wert: Decimal = attr.ib(validator=attr.validators.instance_of(Decimal)) + #: Unterer Wert, ab dem die Staffel gilt. + staffelgrenze_von: Decimal = attr.ib(validator=attr.validators.instance_of(Decimal)) + #: Oberer Wert, bis zu dem die Staffel gilt. + staffelgrenze_bis: Decimal = attr.ib(validator=attr.validators.instance_of(Decimal)) + + +class AufAbschlagstaffelProOrtSchema(COMSchema): + """ + Schema for de-/serialization of AufAbschlagstaffelProOrt. + """ + + # required attributes + wert = fields.Decimal(as_string=True) + staffelgrenze_von = fields.Decimal(as_string=True) + staffelgrenze_bis = fields.Decimal(as_string=True) + + # pylint: disable=no-self-use, unused-argument + @post_load + def deserialize(self, data, **kwargs) -> AufAbschlagstaffelProOrt: + """Deserialize JSON to AufAbschlagstaffelProOrt object""" + return AufAbschlagstaffelProOrt(**data) diff --git a/tests/test_aufabschlagstaffelproort.py b/tests/test_aufabschlagstaffelproort.py new file mode 100644 index 000000000..3181d41f6 --- /dev/null +++ b/tests/test_aufabschlagstaffelproort.py @@ -0,0 +1,37 @@ +from decimal import Decimal + +import pytest # type:ignore[import] + +from bo4e.com.aufabschlagstaffelproort import AufAbschlagstaffelProOrt, AufAbschlagstaffelProOrtSchema +from tests.serialization_helper import assert_serialization_roundtrip # type:ignore[import] + + +class TestAufAbschlagstaffelProOrt: + @pytest.mark.parametrize( + "aufabschlagstaffelproort, expected_json_dict", + [ + pytest.param( + AufAbschlagstaffelProOrt( + wert=Decimal(2.5), + staffelgrenze_von=Decimal(1), + staffelgrenze_bis=Decimal(5), + ), + { + "wert": "2.5", + "staffelgrenzeVon": "1", + "staffelgrenzeBis": "5", + }, + ), + ], + ) + def test_aufabschlagstaffelproort_required_attributes(self, aufabschlagstaffelproort, expected_json_dict): + """ + Test de-/serialisation of AufAbschlagstaffelProOrt with minimal attributes. + """ + assert_serialization_roundtrip(aufabschlagstaffelproort, AufAbschlagstaffelProOrtSchema(), expected_json_dict) + + def test_aufabschlagstaffelproort_missing_required_attribute(self): + with pytest.raises(TypeError) as excinfo: + _ = AufAbschlagstaffelProOrt() + + assert "missing 3 required" in str(excinfo.value)