Skip to content

Commit e290ca7

Browse files
authored
✔ Add test case for EndeInWrongColumnError (FV2310: E_0404) (#108)
1 parent d7b8add commit e290ca7

4 files changed

Lines changed: 128 additions & 2 deletions

File tree

src/ebdtable2graph/graph_conversion.py

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,11 @@
2020
ToNoEdge,
2121
ToYesEdge,
2222
)
23-
from ebdtable2graph.models.errors import EbdCrossReferenceNotSupportedError, OutcomeNodeCreationError
23+
from ebdtable2graph.models.errors import (
24+
EbdCrossReferenceNotSupportedError,
25+
EndeInWrongColumnError,
26+
OutcomeNodeCreationError,
27+
)
2428

2529

2630
def _convert_sub_row_to_outcome_node(sub_row: EbdTableSubRow) -> Optional[OutcomeNode]:
@@ -92,8 +96,14 @@ def get_all_edges(table: EbdTable) -> List[EbdGraphEdge]:
9296
else:
9397
outcome_node: Optional[OutcomeNode] = _convert_sub_row_to_outcome_node(sub_row)
9498
if outcome_node is None:
95-
if all(sr.result_code is None for sr in row.sub_rows):
99+
if all(sr.result_code is None for sr in row.sub_rows) and any(
100+
sr.note is not None and sr.note.startswith("EBD ") for sr in row.sub_rows
101+
):
96102
raise EbdCrossReferenceNotSupportedError(row=row, decision_node=decision_node)
103+
if all(sr.result_code is None for sr in row.sub_rows) and any(
104+
sr.note is not None and sr.note.lower().startswith("ende") for sr in row.sub_rows
105+
):
106+
raise EndeInWrongColumnError(row=row)
97107
raise OutcomeNodeCreationError(decision_node=decision_node, sub_row=sub_row)
98108
edge = _yes_no_edge(
99109
sub_row.check_result.result,

src/ebdtable2graph/models/errors/__init__.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,18 @@ def __init__(self, decision_node: DecisionNode, row: EbdTableRow):
8888
self.decision_node = decision_node
8989

9090

91+
class EndeInWrongColumnError(ValueError):
92+
"""
93+
Raised when the subsequent step should be "Ende" but is not referenced in the respective column but as a note.
94+
This could be easily fixed but still, it needs to be done.
95+
I think this is more of a value error (because the raw source data are a mess) than a NotImplementedError.
96+
"""
97+
98+
def __init__(self, row: EbdTableRow):
99+
super().__init__(f"'Ende' in wrong column for row {row}")
100+
self.row = row
101+
102+
91103
class OutcomeNodeCreationError(ValueError):
92104
"""
93105
raised when the outcome node cannot be created from a sub row

unittests/e0404.py

Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
"""
2+
Contains the raw data for E_0404 in the form of an EbdTable.
3+
"""
4+
from ebdtable2graph.models import EbdCheckResult, EbdTable, EbdTableMetaData, EbdTableRow, EbdTableSubRow
5+
6+
e_0404 = EbdTable(
7+
metadata=EbdTableMetaData(ebd_code="E_0404", chapter="GPKE", sub_chapter="6.4.4: AD: Lieferbeginn", role="NB"),
8+
rows=[
9+
EbdTableRow(
10+
step_number="1",
11+
description="Wurde eine Abmeldeanfrage gestellt?",
12+
sub_rows=[
13+
EbdTableSubRow(
14+
check_result=EbdCheckResult(result=False, subsequent_step_number="6"), result_code=None, note=None
15+
),
16+
EbdTableSubRow(
17+
check_result=EbdCheckResult(result=True, subsequent_step_number="2"), result_code=None, note=None
18+
),
19+
],
20+
use_cases=None,
21+
),
22+
EbdTableRow(
23+
step_number="2",
24+
description="Hat der LFA fristgerecht geantwortet?",
25+
sub_rows=[
26+
EbdTableSubRow(
27+
check_result=EbdCheckResult(result=True, subsequent_step_number="3"), result_code=None, note=None
28+
),
29+
EbdTableSubRow(
30+
check_result=EbdCheckResult(result=False, subsequent_step_number="6"), result_code=None, note=None
31+
),
32+
],
33+
use_cases=None,
34+
),
35+
EbdTableRow(
36+
step_number="3",
37+
description="Hat der LFA der Abmeldeanfrage widersprochen?",
38+
sub_rows=[
39+
EbdTableSubRow(
40+
check_result=EbdCheckResult(result=True, subsequent_step_number="4"), result_code=None, note=None
41+
),
42+
EbdTableSubRow(
43+
check_result=EbdCheckResult(result=False, subsequent_step_number="6"), result_code=None, note=None
44+
),
45+
],
46+
use_cases=None,
47+
),
48+
EbdTableRow(
49+
step_number="4",
50+
description="Wurde in der Beantwortung der Abmeldeanfrage der Code A30 „Ablehnung: Die Belieferung wurde zu dem angefragten Termin aus der Abmeldeanfrage bereits beendet und eine Abmeldung von dem LFA bereits versendet, die durch den NB bereits bestätigt wurde.“ verwendet?",
51+
sub_rows=[
52+
EbdTableSubRow(
53+
check_result=EbdCheckResult(result=False, subsequent_step_number=None),
54+
result_code="A50",
55+
note="Cluster: Ablehnung\nDer LFA hat der Abmeldeanfrage widersprochen.",
56+
),
57+
EbdTableSubRow(
58+
check_result=EbdCheckResult(result=True, subsequent_step_number="5"), result_code=None, note=None
59+
),
60+
],
61+
use_cases=None,
62+
),
63+
EbdTableRow(
64+
step_number="5",
65+
description="Wurde die NN-Anmeldung des LFN bereits durch den NB beantwortet?",
66+
sub_rows=[
67+
EbdTableSubRow(
68+
check_result=EbdCheckResult(result=True, subsequent_step_number=None),
69+
result_code=None,
70+
note="Ende\nHinweis: Der vom LFN gestartete Lieferbeginn-prozess (Anmeldung), der beim NB zur Versen-dung der Abmeldeanfrage an den LFA führte, wurde bereits durch einen vom LFA gestarteten Lieferendeprozess, der vor dem Eingang der Antwort der Abmeldeanfrage abgeschlossen wurde, beendet. Das führte dazu, dass der NB die Anmeldung des LFN vor dem Eingang der Antwort der Abmeldeanfrage bestätigt hatte. Somit ist an den LFN keine weitere Antwort auf seine Anmeldung mehr zu senden.",
71+
),
72+
EbdTableSubRow(
73+
check_result=EbdCheckResult(result=False, subsequent_step_number="6"), result_code=None, note=None
74+
),
75+
],
76+
use_cases=None,
77+
),
78+
EbdTableRow(
79+
step_number="6",
80+
description="Liegt die notwendige Zuordnungsermächtigung (Bilanzkreis/Bilanzierungsverfahren) vor?",
81+
sub_rows=[
82+
EbdTableSubRow(
83+
check_result=EbdCheckResult(result=False, subsequent_step_number=None),
84+
result_code="A52",
85+
note="Cluster: Ablehnung\nZuordnungsermächtigung fehlt.",
86+
),
87+
EbdTableSubRow(
88+
check_result=EbdCheckResult(result=True, subsequent_step_number=None),
89+
result_code="A51",
90+
note="Cluster: Zustimmung\nBestätigung der Anmeldung",
91+
),
92+
],
93+
use_cases=None,
94+
),
95+
],
96+
multi_step_instructions=None,
97+
)

unittests/test_errors.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,15 @@
44
from ebdtable2graph.models import EbdTable
55
from ebdtable2graph.models.errors import (
66
EbdCrossReferenceNotSupportedError,
7+
EndeInWrongColumnError,
78
GraphTooComplexForPlantumlError,
89
NotExactlyTwoOutgoingEdgesError,
910
PathsNotGreaterThanOneError,
1011
)
1112

1213
from .e0266 import table_e0266
1314
from .e0401 import e_0401
15+
from .e0404 import e_0404
1416
from .e0454 import table_e0454
1517
from .e0459 import table_e0459
1618
from .e0462 import table_e0462
@@ -43,6 +45,11 @@ def test_too_complex_for_plantuml(self, table: EbdTable):
4345
def test_key_error_because_first_node_has_key_other_than_1(self, table: EbdTable):
4446
_ = convert_table_to_graph(table) # must _not_ raise a key error anymore
4547

48+
@pytest.mark.parametrize("table", [pytest.param(e_0404)])
49+
def test_ende_in_wrong_column_error(self, table: EbdTable):
50+
with pytest.raises(EndeInWrongColumnError):
51+
_ = convert_table_to_graph(table)
52+
4653
@pytest.mark.parametrize("table", [pytest.param(table_e0462)])
4754
def test_cross_reference_not_supported_error(self, table: EbdTable):
4855
with pytest.raises(EbdCrossReferenceNotSupportedError) as exc_info:

0 commit comments

Comments
 (0)