Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions docs/api/bo4e.com.rst
Original file line number Diff line number Diff line change
Expand Up @@ -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
----------------------

Expand Down
44 changes: 44 additions & 0 deletions src/bo4e/com/aufabschlagstaffelproort.py
Original file line number Diff line number Diff line change
@@ -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)
37 changes: 37 additions & 0 deletions tests/test_aufabschlagstaffelproort.py
Original file line number Diff line number Diff line change
@@ -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)