From e3f0b21f7d71f29e4377cd6512ac6961e74166bf Mon Sep 17 00:00:00 2001 From: Maciej Bieniek Date: Thu, 2 May 2024 16:38:25 +0200 Subject: [PATCH] Fix flood alarm/warning values (#18) Co-authored-by: Maciej Bieniek <478555+bieniu@users.noreply.github.com> --- imgw_pib/model.py | 8 ++--- pyproject.toml | 4 ++- tests/test_init.py | 78 ++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 85 insertions(+), 5 deletions(-) diff --git a/imgw_pib/model.py b/imgw_pib/model.py index 299594a..0fc6bbf 100644 --- a/imgw_pib/model.py +++ b/imgw_pib/model.py @@ -59,13 +59,13 @@ class HydrologicalData(ImgwPibData): def __post_init__(self: Self) -> None: """Call after initialization.""" if self.water_level.value is not None: - if self.flood_warning_level.value is not None: + if self.flood_alarm_level.value is not None: self.flood_alarm = ( - self.water_level.value >= self.flood_warning_level.value + self.water_level.value >= self.flood_alarm_level.value ) - if self.flood_alarm_level.value is not None: + if self.flood_warning_level.value is not None: self.flood_warning = ( - self.water_level.value >= self.flood_alarm_level.value + self.water_level.value >= self.flood_warning_level.value ) diff --git a/pyproject.toml b/pyproject.toml index 1c979e5..ce84787 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -36,8 +36,10 @@ lint.ignore = [ "T201", # `print` found ] "tests/*" = [ + "FBT001", # Boolean-typed positional argument in function definition + "PLR0913", # Too many arguments in function definition "S101", # Use of `assert` detected - ] +] [tool.ruff.lint.mccabe] diff --git a/tests/test_init.py b/tests/test_init.py index 8ec51b1..ccb239d 100644 --- a/tests/test_init.py +++ b/tests/test_init.py @@ -261,3 +261,81 @@ async def test_invalid_date( await session.close() assert hydrological_data.water_level_measurement_date is None + + +@pytest.mark.parametrize( + ("water_level", "flood_warning_level", "expected"), + [(100.0, 200.0, False), (100.0, 100.0, True), (100.0, 50.0, True)], +) +@pytest.mark.asyncio() +async def test_flood_warning( + hydrological_stations: list[dict[str, Any]], + hydrological_station: dict[str, Any], + hydrological_details: dict[str, Any], + water_level: float, + flood_warning_level: float, + expected: bool, +) -> None: + """Test flood warning value.""" + session = aiohttp.ClientSession() + + hydrological_station[ApiNames.WATER_LEVEL] = water_level + hydrological_details["status"]["warningValue"] = flood_warning_level + + with aioresponses() as session_mock: + session_mock.get(API_HYDROLOGICAL_ENDPOINT, payload=hydrological_stations) + session_mock.get( + f"{API_HYDROLOGICAL_ENDPOINT}/id/154190050", payload=hydrological_station + ) + session_mock.get( + API_HYDROLOGICAL_DETAILS_ENDPOINT.format( + hydrological_station_id="154190050" + ), + payload=hydrological_details, + ) + + imgwpib = await ImgwPib.create(session, hydrological_station_id="154190050") + result = await imgwpib.get_hydrological_data() + + await session.close() + + assert result.flood_warning == expected + + +@pytest.mark.parametrize( + ("water_level", "flood_alarm_level", "expected"), + [(100.0, 200.0, False), (100.0, 100.0, True), (100.0, 50.0, True)], +) +@pytest.mark.asyncio() +async def test_flood_alarm( + hydrological_stations: list[dict[str, Any]], + hydrological_station: dict[str, Any], + hydrological_details: dict[str, Any], + water_level: float, + flood_alarm_level: float, + expected: bool, +) -> None: + """Test flood alarm value.""" + session = aiohttp.ClientSession() + + hydrological_station[ApiNames.WATER_LEVEL] = water_level + hydrological_details["status"]["alarmValue"] = flood_alarm_level + + with aioresponses() as session_mock: + session_mock.get(API_HYDROLOGICAL_ENDPOINT, payload=hydrological_stations) + session_mock.get( + f"{API_HYDROLOGICAL_ENDPOINT}/id/154190050", payload=hydrological_station + ) + session_mock.get( + API_HYDROLOGICAL_DETAILS_ENDPOINT.format( + hydrological_station_id="154190050" + ), + payload=hydrological_details, + ) + + imgwpib = await ImgwPib.create(session, hydrological_station_id="154190050") + result = await imgwpib.get_hydrological_data() + + await session.close() + + assert result.flood_alarm == expected