Skip to content

Commit f0905a7

Browse files
authored
✔ Add test case for NotExactlyTwoOutgoingEdgesError (FV2310 E_0459) (#101)
1 parent b9f8e9f commit f0905a7

3 files changed

Lines changed: 161 additions & 2 deletions

File tree

src/ebdtable2graph/models/errors/__init__.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,11 @@
44
"""
55

66

7-
class NotExactlyTwoOutgoingEdgesError(ValueError):
7+
class NotExactlyTwoOutgoingEdgesError(NotImplementedError):
88
"""
9-
Raised if a decision node has more or less than 2 outgoing edges
9+
Raised if a decision node has more or less than 2 outgoing edges. This is not implemented in our logic yet.
10+
(Because it would be a multi-di-graph, not a di-graph.)
11+
See issue https://github.com/Hochfrequenz/ebdtable2graph/issues/99 for a discussion on this topic.
1012
"""
1113

1214
def __init__(self, msg: str, decision_node_key, outgoing_edges: list[str]):

unittests/e0459.py

Lines changed: 135 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,135 @@
1+
"""
2+
Contains the raw data for E_0459 in the form of an EbdTable.
3+
"""
4+
from ebdtable2graph.models import EbdCheckResult, EbdTable, EbdTableMetaData, EbdTableRow, EbdTableSubRow
5+
6+
table_e0459 = EbdTable(
7+
metadata=EbdTableMetaData(
8+
ebd_code="E_0459", chapter="GPKE", sub_chapter="6.7.4: AD: Netznutzungsabrechnung", role="LF"
9+
),
10+
rows=[
11+
EbdTableRow(
12+
step_number="1",
13+
description="Ist die zu stornierende Rechnung beim Empfänger bekannt?",
14+
sub_rows=[
15+
EbdTableSubRow(
16+
check_result=EbdCheckResult(result=False, subsequent_step_number=None),
17+
result_code="A01",
18+
note="Die zu stornierende Rechnung ist nicht vorhanden.",
19+
),
20+
EbdTableSubRow(
21+
check_result=EbdCheckResult(result=True, subsequent_step_number="2"), result_code=None, note=None
22+
),
23+
],
24+
use_cases=None,
25+
),
26+
EbdTableRow(
27+
step_number="2",
28+
description="Wurde die zu stornierende Rechnung bereits storniert?",
29+
sub_rows=[
30+
EbdTableSubRow(
31+
check_result=EbdCheckResult(result=True, subsequent_step_number=None),
32+
result_code="A02",
33+
note="Die zu stornierende Rechnung wurde bereits storniert.",
34+
),
35+
EbdTableSubRow(
36+
check_result=EbdCheckResult(result=False, subsequent_step_number="3"), result_code=None, note=None
37+
),
38+
],
39+
use_cases=None,
40+
),
41+
EbdTableRow(
42+
step_number="3",
43+
description="Ist der Rechnungstyp der Stornorechnung identisch mit dem Rechnungstyp der ursprünglichen Rechnung?",
44+
sub_rows=[
45+
EbdTableSubRow(
46+
check_result=EbdCheckResult(result=False, subsequent_step_number=None),
47+
result_code="A03",
48+
note="Der Rechnungstyp der Stornorechnung ist nicht identisch mit dem Rechnungstyp der ursprünglichen Rechnung.",
49+
),
50+
EbdTableSubRow(
51+
check_result=EbdCheckResult(result=True, subsequent_step_number="4"), result_code=None, note=None
52+
),
53+
],
54+
use_cases=None,
55+
),
56+
EbdTableRow(
57+
step_number="4",
58+
description="Ist der Abrechnungszeitraum bzw. das Ausführungsdatum der Stornorechnung identisch mit dem Abrechnungszeitraum bzw. dem Ausführungsdatum der ursprünglichen Rechnung?",
59+
sub_rows=[
60+
EbdTableSubRow(
61+
check_result=EbdCheckResult(result=False, subsequent_step_number=None),
62+
result_code="A04",
63+
note="Der Abrechnungszeitraum bzw. des Ausführungsdatum der Stornorechnung ist nicht identisch mit dem Abrechnungszeitraum bzw. dem Ausführungsdatum der ursprünglichen Rechnung.",
64+
),
65+
EbdTableSubRow(
66+
check_result=EbdCheckResult(result=True, subsequent_step_number="5"), result_code=None, note=None
67+
),
68+
],
69+
use_cases=None,
70+
),
71+
EbdTableRow(
72+
step_number="5",
73+
description="Entsprechen die Beträge der Stornorechnung den Beträgen der ursprünglichen Rechnung?\n\nHinweis: Alle MOA-Segmente im Summenteil müssen unter Nutzung der Absolutbetragfunktion übereinstimmen.",
74+
sub_rows=[
75+
EbdTableSubRow(
76+
check_result=EbdCheckResult(result=False, subsequent_step_number=None),
77+
result_code="A05",
78+
note="Mindestens ein Betrag der Stornorechnung ist nicht identisch mit dem Betrag der ursprünglichen Rechnung.",
79+
),
80+
EbdTableSubRow(
81+
check_result=EbdCheckResult(result=True, subsequent_step_number="6"), result_code=None, note=None
82+
),
83+
],
84+
use_cases=None,
85+
),
86+
EbdTableRow(
87+
step_number="6",
88+
description="Ist ein zuvor nicht spezifizierter Fehler aufgetreten?",
89+
sub_rows=[
90+
EbdTableSubRow(
91+
check_result=EbdCheckResult(result=True, subsequent_step_number=None),
92+
result_code="A99",
93+
note="Ablehnung Sonstiges\nHinweis: Das identifizierte Problem ist in der Antwort zu beschreiben/benennen. \nNutzungsmöglichkeit Ende: 01.10.2024 00:00 Uhr",
94+
),
95+
EbdTableSubRow(
96+
check_result=EbdCheckResult(result=False, subsequent_step_number="7"), result_code=None, note=None
97+
),
98+
],
99+
use_cases=None,
100+
),
101+
EbdTableRow(
102+
step_number="7",
103+
description="Wurde der ursprünglichen Rechnung zugestimmt?",
104+
sub_rows=[
105+
EbdTableSubRow(
106+
check_result=EbdCheckResult(result=True, subsequent_step_number="Ende"),
107+
result_code=None,
108+
note="Stornorechnung zustimmen und im Zahlungslauf berücksichtigen",
109+
),
110+
EbdTableSubRow(
111+
check_result=EbdCheckResult(result=False, subsequent_step_number="8"), result_code=None, note=None
112+
),
113+
],
114+
use_cases=None,
115+
),
116+
EbdTableRow(
117+
step_number="8",
118+
description="Wurde die ursprüngliche Rechnung abgelehnt?",
119+
sub_rows=[
120+
EbdTableSubRow(
121+
check_result=EbdCheckResult(result=True, subsequent_step_number="Ende"),
122+
result_code=None,
123+
note="Hinweis: \nWurde die ursprüngliche Rechnung mit einem Nichtzahlungsavis abgelehnt, dann ist auf die Stornorechnung keine Antwort zu senden",
124+
),
125+
EbdTableSubRow(
126+
check_result=EbdCheckResult(result=False, subsequent_step_number="Ende"),
127+
result_code=None,
128+
note="Hinweis: \nWurde die ursprüngliche Rechnung noch nicht beantwortet, weder mit einem Zahlungsavis noch mit einem Nichtzahlungsavis, dann ist weder auf die Rechnung noch auf die Stornorechnung eine Antwort zu senden.",
129+
),
130+
],
131+
use_cases=None,
132+
),
133+
],
134+
multi_step_instructions=None,
135+
)

unittests/test_errors.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import pytest # type:ignore[import]
2+
3+
from ebdtable2graph import convert_graph_to_plantuml, convert_table_to_graph
4+
from ebdtable2graph.models import EbdTable
5+
from ebdtable2graph.models.errors import NotExactlyTwoOutgoingEdgesError
6+
7+
from .e0459 import table_e0459
8+
9+
10+
class TestErrors:
11+
"""
12+
Test cases for various exceptions being raised. This can be the basis for future fixes/workarounds
13+
"""
14+
15+
@pytest.mark.parametrize("table", [pytest.param(table_e0459)])
16+
def test_not_exactly_two_outgoing_edges_error(self, table: EbdTable):
17+
"""
18+
Test the NotExactlyTwoOutgoingEdgesError
19+
"""
20+
ebd_graph = convert_table_to_graph(table)
21+
with pytest.raises(NotExactlyTwoOutgoingEdgesError):
22+
_ = convert_graph_to_plantuml(ebd_graph)

0 commit comments

Comments
 (0)