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
36 changes: 36 additions & 0 deletions src/bo4e/com/regionalepreisgarantie.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
"""
Contains RegionalePreisgarantie class
and corresponding marshmallow schema for de-/serialization
"""

import attr
from marshmallow import fields, post_load

from bo4e.com.preisgarantie import Preisgarantie, PreisgarantieSchema
from bo4e.com.regionalegueltigkeit import RegionaleGueltigkeit, RegionaleGueltigkeitSchema

# pylint: disable=too-few-public-methods
@attr.s(auto_attribs=True, kw_only=True)
class RegionalePreisgarantie(Preisgarantie):
"""
Abbildung einer Preisgarantie mit regionaler Abgrenzung
"""

# required attributes
#: Regionale Eingrenzung der Preisgarantie.
regionale_gueltigkeit: RegionaleGueltigkeit = attr.ib(validator=attr.validators.instance_of(RegionaleGueltigkeit))


class RegionalePreisgarantieSchema(PreisgarantieSchema):
"""
Schema for de-/serialization of RegionalePreisgarantie.
"""

# required attributes
regionale_gueltigkeit = fields.Nested(RegionaleGueltigkeitSchema)

# pylint: disable=no-self-use, unused-argument
@post_load
def deserialize(self, data, **kwargs) -> RegionalePreisgarantie:
"""Deserialize JSON to Energiemix object"""
return RegionalePreisgarantie(**data)
60 changes: 60 additions & 0 deletions tests/test_regionalepreisgarantie.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
from datetime import datetime, timezone
import pytest # type:ignore[import]

from bo4e.com.kriteriumwert import KriteriumWert
from bo4e.com.regionalepreisgarantie import RegionalePreisgarantie, RegionalePreisgarantieSchema
from bo4e.com.regionalegueltigkeit import RegionaleGueltigkeit
from bo4e.enum.preisgarantietyp import Preisgarantietyp
from bo4e.enum.gueltigkeitstyp import Gueltigkeitstyp
from bo4e.enum.tarifregionskriterium import Tarifregionskriterium
from tests.serialization_helper import assert_serialization_roundtrip # type:ignore[import]
from bo4e.com.zeitraum import Zeitraum


class TestRegionalePreisgarantie:
@pytest.mark.parametrize(
"regionale_preisgarantie, expected_json_dict",
[
pytest.param(
RegionalePreisgarantie(
preisgarantietyp=Preisgarantietyp.NUR_ENERGIEPREIS,
zeitliche_gueltigkeit=Zeitraum(
startzeitpunkt=datetime(2011, 2, 5, 16, 43, tzinfo=timezone.utc),
endzeitpunkt=datetime(2021, 7, 30, tzinfo=timezone.utc),
),
regionale_gueltigkeit=RegionaleGueltigkeit(
gueltigkeitstyp=Gueltigkeitstyp.NUR_IN,
kriteriums_werte=[KriteriumWert(kriterium=Tarifregionskriterium.POSTLEITZAHL, wert="01069")],
),
),
{
"beschreibung": None,
"preisgarantietyp": "NUR_ENERGIEPREIS",
"regionaleGueltigkeit": {
"gueltigkeitstyp": "NUR_IN",
"kriteriumsWerte": [{"kriterium": "POSTLEITZAHL", "wert": "01069"}],
},
"zeitlicheGueltigkeit": {
"startdatum": None,
"einheit": None,
"enddatum": None,
"dauer": None,
"endzeitpunkt": "2021-07-30T00:00:00+00:00",
"startzeitpunkt": "2011-02-05T16:43:00+00:00",
},
},
id="only required attributes",
),
],
)
def test_regionale_preisgarantie_serialization_roundtrip(self, regionale_preisgarantie, expected_json_dict):
"""
Test de-/serialisation of RegionalePreisgarantie with minimal attributes.
"""
assert_serialization_roundtrip(regionale_preisgarantie, RegionalePreisgarantieSchema(), expected_json_dict)

def test_regionalepreisgarantie_missing_required_attribute(self):
with pytest.raises(TypeError) as excinfo:
_ = RegionalePreisgarantie()

assert "missing 3 required" in str(excinfo.value)