Skip to content

Commit

Permalink
#205: Allow empty friction specification in all crossdef types (#206)
Browse files Browse the repository at this point in the history
fix(parser): allow empty friction specification in all crossdef types.

Fixes issue #205.
  • Loading branch information
arthurvd authored Mar 11, 2022
1 parent 56cc4b2 commit 2ef2672
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 35 deletions.
7 changes: 1 addition & 6 deletions hydrolib/core/io/crosssection/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -137,12 +137,7 @@ def validate_friction_specification(cls, values):
frictiontype = values.get(frictiontype_attr) or ""
frictionvalue = values.get(frictionvalue_attr) or ""

if frictionid == "":
if frictiontype == "" or frictionvalue == "":
raise ValueError(
f"Cross section is missing any friction specification."
)
else:
if frictionid != "":
if frictiontype != "" or frictionvalue != "":
raise ValueError(
f"Cross section has duplicate friction specification (both {frictionid_attr} and {frictiontype_attr}/{frictionvalue_attr})."
Expand Down
65 changes: 36 additions & 29 deletions tests/io/test_crosssection.py
Original file line number Diff line number Diff line change
Expand Up @@ -128,15 +128,14 @@ def test_create_a_circlecrsdef_with_duplicate_frictionspec(self):

def test_create_a_rectanglecrsdef_without_frictionspec(self):
csdefid = "Prof1"
with pytest.raises(ValidationError) as error:
_ = RectangleCrsDef(
id=csdefid,
width=3.14,
height=2.718,
)
expected_message = f"Cross section is missing any friction specification."

assert expected_message in str(error.value)
crsdef = RectangleCrsDef(
id=csdefid,
width=3.14,
height=2.718,
)
assert crsdef.id == csdefid
assert crsdef.width == 3.14
assert crsdef.height == 2.718

def test_create_a_zwrivercrsdef_with_wrong_list_lengths(self):
csdefid = "Prof1"
Expand All @@ -157,16 +156,19 @@ def test_create_a_zwrivercrsdef_with_wrong_list_lengths(self):

def test_create_a_zwrivercrsdef_without_frictionspec(self):
csdefid = "Prof1"
with pytest.raises(ValidationError) as error:
_ = ZWRiverCrsDef(
id=csdefid,
numlevels=2,
levels=[-2, 3],
flowwidths=[11, 44],
)
expected_message = f"Cross section is missing any friction specification."

assert expected_message in str(error.value)
crsdef = ZWRiverCrsDef(
id=csdefid,
numlevels=2,
levels=[-2, 3],
flowwidths=[11, 44],
)
assert crsdef.id == csdefid
assert crsdef.numlevels == 2
assert crsdef.levels == [-2, 3]
assert crsdef.flowwidths == [11, 44]
assert crsdef.frictionids == None
assert crsdef.frictiontypes == None
assert crsdef.frictionvalues == None

def test_create_a_yzcrsdef_with_wrong_list_length_yz(self):
csdefid = "Prof1"
Expand Down Expand Up @@ -206,16 +208,21 @@ def test_create_a_yzcrsdef_with_wrong_list_length_frict(self):

def test_create_a_yzcrsdef_without_frictionspec(self):
csdefid = "Prof1"
with pytest.raises(ValidationError) as error:
_ = YZCrsDef(
id=csdefid,
yzcount=4,
ycoordinates=[-10, -2, 3, 12],
zcoordinates=[1, -4, -4.1, 2],
)
expected_message = f"Cross section is missing any friction specification."

assert expected_message in str(error.value)
crsdef = YZCrsDef(
id=csdefid,
yzcount=4,
ycoordinates=[-10, -2, 3, 12],
zcoordinates=[1, -4, -4.1, 2],
)
assert crsdef.id == csdefid
assert crsdef.yzcount == 4
assert crsdef.ycoordinates == [-10, -2, 3, 12]
assert crsdef.zcoordinates == [1, -4, -4.1, 2]
assert crsdef.sectioncount == 1
assert crsdef.frictionpositions == None
assert crsdef.frictionids == None
assert crsdef.frictiontypes == None
assert crsdef.frictionvalues == None

def test_create_a_xyzcrsdef_with_wrong_list_length_yz(self):
csdefid = "Prof1"
Expand Down

0 comments on commit 2ef2672

Please sign in to comment.