diff --git a/src/bo4e/bo/preisblattkonzessionsabgabe.py b/src/bo4e/bo/preisblattkonzessionsabgabe.py new file mode 100644 index 000000000..951a396aa --- /dev/null +++ b/src/bo4e/bo/preisblattkonzessionsabgabe.py @@ -0,0 +1,35 @@ +""" +Contains PreisblattKonzessionsabgabe class and corresponding marshmallow schema for de-/serialization +""" + +import attr +from marshmallow_enum import EnumField # type:ignore[import] + +from bo4e.bo.preisblatt import Preisblatt, PreisblattSchema +from bo4e.enum.botyp import BoTyp +from bo4e.enum.kundengruppeka import KundengruppeKA + + +# pylint: disable=too-few-public-methods +@attr.s(auto_attribs=True, kw_only=True) +class PreisblattKonzessionsabgabe(Preisblatt): + """ + Die Variante des Preisblattmodells zur Abbildung von allgemeinen Abgaben + """ + + bo_typ: BoTyp = attr.ib(default=BoTyp.PREISBLATTKONZESSIONSABGABE) + # required attributes (additional to those of Preisblatt) + #: Kundegruppe anhand derer die Höhe der Konzessionabgabe festgelegt ist + kundengruppe_k_a: KundengruppeKA = attr.ib(validator=attr.validators.instance_of(KundengruppeKA)) + + # there are no optional attributes (additionally to those of Preisblatt) + + +class PreisblattKonzessionsabgabeSchema(PreisblattSchema): + """ + Schema for de-/serialization of PreisblattKonzessionsabgabe + """ + + class_name = PreisblattKonzessionsabgabe # type:ignore[assignment] + # required attributes + kundengruppe_k_a = EnumField(KundengruppeKA, data_key="kundengruppeKA") diff --git a/tests/test_preisblatt_konzessionsabgabe.py b/tests/test_preisblatt_konzessionsabgabe.py new file mode 100644 index 000000000..1fc8d5d72 --- /dev/null +++ b/tests/test_preisblatt_konzessionsabgabe.py @@ -0,0 +1,39 @@ +import pytest # type:ignore[import] + +from bo4e.bo.preisblattkonzessionsabgabe import PreisblattKonzessionsabgabe, PreisblattKonzessionsabgabeSchema +from bo4e.enum.kundengruppeka import KundengruppeKA +from bo4e.enum.preisstatus import Preisstatus +from bo4e.enum.sparte import Sparte +from tests.serialization_helper import assert_serialization_roundtrip # type:ignore[import] +from tests.test_marktteilnehmer import example_marktteilnehmer # type:ignore[import] +from tests.test_preisposition import example_preisposition # type:ignore[import] +from tests.test_zeitraum import example_zeitraum # type:ignore[import] + + +class TestPreisblatt: + @pytest.mark.parametrize( + "preisblatt_ka", + [ + pytest.param( + PreisblattKonzessionsabgabe( + bezeichnung="foo", + sparte=Sparte.STROM, + preisstatus=Preisstatus.ENDGUELTIG, + preispositionen=[example_preisposition], + gueltigkeit=example_zeitraum, + herausgeber=example_marktteilnehmer, + kundengruppe_k_a=KundengruppeKA.G_SONDERKUNDE, + ) + ), + ], + ) + def test_serialization_roundtrip(self, preisblatt_ka: PreisblattKonzessionsabgabe): + """ + Test de-/serialisation + """ + assert_serialization_roundtrip(preisblatt_ka, PreisblattKonzessionsabgabeSchema()) + + def test_missing_required_attribute(self): + with pytest.raises(TypeError) as excinfo: + _ = PreisblattKonzessionsabgabe() + assert "missing 6 required" in str(excinfo.value) # 5 from preisblatt + 1 from preisblatt konzessionsabgabe