Skip to content

Commit 0f24a76

Browse files
✨ Add COM RegionalePreisgarantie (#278)
* ✨ Introduce COM RegionlaePreisgarantie * ✅ Add unittest for RegionalePreisgarantie * ✅ Update unittest * Apply suggestions from code review Co-authored-by: konstantin <konstantin.klein@hochfrequenz.de> Co-authored-by: konstantin <konstantin.klein@hochfrequenz.de>
1 parent 2e3c450 commit 0f24a76

File tree

2 files changed

+96
-0
lines changed

2 files changed

+96
-0
lines changed
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
"""
2+
Contains RegionalePreisgarantie class
3+
and corresponding marshmallow schema for de-/serialization
4+
"""
5+
6+
import attr
7+
from marshmallow import fields, post_load
8+
9+
from bo4e.com.preisgarantie import Preisgarantie, PreisgarantieSchema
10+
from bo4e.com.regionalegueltigkeit import RegionaleGueltigkeit, RegionaleGueltigkeitSchema
11+
12+
# pylint: disable=too-few-public-methods
13+
@attr.s(auto_attribs=True, kw_only=True)
14+
class RegionalePreisgarantie(Preisgarantie):
15+
"""
16+
Abbildung einer Preisgarantie mit regionaler Abgrenzung
17+
"""
18+
19+
# required attributes
20+
#: Regionale Eingrenzung der Preisgarantie.
21+
regionale_gueltigkeit: RegionaleGueltigkeit = attr.ib(validator=attr.validators.instance_of(RegionaleGueltigkeit))
22+
23+
24+
class RegionalePreisgarantieSchema(PreisgarantieSchema):
25+
"""
26+
Schema for de-/serialization of RegionalePreisgarantie.
27+
"""
28+
29+
# required attributes
30+
regionale_gueltigkeit = fields.Nested(RegionaleGueltigkeitSchema)
31+
32+
# pylint: disable=no-self-use, unused-argument
33+
@post_load
34+
def deserialize(self, data, **kwargs) -> RegionalePreisgarantie:
35+
"""Deserialize JSON to Energiemix object"""
36+
return RegionalePreisgarantie(**data)
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
from datetime import datetime, timezone
2+
import pytest # type:ignore[import]
3+
4+
from bo4e.com.kriteriumwert import KriteriumWert
5+
from bo4e.com.regionalepreisgarantie import RegionalePreisgarantie, RegionalePreisgarantieSchema
6+
from bo4e.com.regionalegueltigkeit import RegionaleGueltigkeit
7+
from bo4e.enum.preisgarantietyp import Preisgarantietyp
8+
from bo4e.enum.gueltigkeitstyp import Gueltigkeitstyp
9+
from bo4e.enum.tarifregionskriterium import Tarifregionskriterium
10+
from tests.serialization_helper import assert_serialization_roundtrip # type:ignore[import]
11+
from bo4e.com.zeitraum import Zeitraum
12+
13+
14+
class TestRegionalePreisgarantie:
15+
@pytest.mark.parametrize(
16+
"regionale_preisgarantie, expected_json_dict",
17+
[
18+
pytest.param(
19+
RegionalePreisgarantie(
20+
preisgarantietyp=Preisgarantietyp.NUR_ENERGIEPREIS,
21+
zeitliche_gueltigkeit=Zeitraum(
22+
startzeitpunkt=datetime(2011, 2, 5, 16, 43, tzinfo=timezone.utc),
23+
endzeitpunkt=datetime(2021, 7, 30, tzinfo=timezone.utc),
24+
),
25+
regionale_gueltigkeit=RegionaleGueltigkeit(
26+
gueltigkeitstyp=Gueltigkeitstyp.NUR_IN,
27+
kriteriums_werte=[KriteriumWert(kriterium=Tarifregionskriterium.POSTLEITZAHL, wert="01069")],
28+
),
29+
),
30+
{
31+
"beschreibung": None,
32+
"preisgarantietyp": "NUR_ENERGIEPREIS",
33+
"regionaleGueltigkeit": {
34+
"gueltigkeitstyp": "NUR_IN",
35+
"kriteriumsWerte": [{"kriterium": "POSTLEITZAHL", "wert": "01069"}],
36+
},
37+
"zeitlicheGueltigkeit": {
38+
"startdatum": None,
39+
"einheit": None,
40+
"enddatum": None,
41+
"dauer": None,
42+
"endzeitpunkt": "2021-07-30T00:00:00+00:00",
43+
"startzeitpunkt": "2011-02-05T16:43:00+00:00",
44+
},
45+
},
46+
id="only required attributes",
47+
),
48+
],
49+
)
50+
def test_regionale_preisgarantie_serialization_roundtrip(self, regionale_preisgarantie, expected_json_dict):
51+
"""
52+
Test de-/serialisation of RegionalePreisgarantie with minimal attributes.
53+
"""
54+
assert_serialization_roundtrip(regionale_preisgarantie, RegionalePreisgarantieSchema(), expected_json_dict)
55+
56+
def test_regionalepreisgarantie_missing_required_attribute(self):
57+
with pytest.raises(TypeError) as excinfo:
58+
_ = RegionalePreisgarantie()
59+
60+
assert "missing 3 required" in str(excinfo.value)

0 commit comments

Comments
 (0)