From ec4f6af6b69627cef1f42bad24181537921a9067 Mon Sep 17 00:00:00 2001 From: pmartinot-tech Date: Mon, 9 Feb 2026 10:50:47 +0100 Subject: [PATCH] fix humidity to handle unexpected data (#62) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: «pmartinot» <«pmartinot@provatis.com»> --- .../openweathermap/api/model/Humidity.java | 15 +++++--------- .../api/model/HumidityUnitTest.java | 20 +++++++++++-------- 2 files changed, 17 insertions(+), 18 deletions(-) diff --git a/src/main/java/com/github/prominence/openweathermap/api/model/Humidity.java b/src/main/java/com/github/prominence/openweathermap/api/model/Humidity.java index ebd9d3a..5391197 100644 --- a/src/main/java/com/github/prominence/openweathermap/api/model/Humidity.java +++ b/src/main/java/com/github/prominence/openweathermap/api/model/Humidity.java @@ -44,15 +44,13 @@ public class Humidity { } /** - * Creates {@link Humidity} object with correctness check. + * Creates {@link Humidity} object with safeguard to have min 0 and max 100 as value * @param value humidity * @return created {@link Humidity} object */ public static Humidity withValue(byte value) { - if (value < 0 || value > 100) { - throw new IllegalArgumentException("Humidity value must be in [0, 100] range."); - } - return new Humidity(value); + int v = Math.max(0, Math.min(100, value)); + return new Humidity((byte) v); } /** @@ -68,13 +66,10 @@ public class Humidity { * Sets humidity percentage value. * * @param value new humidity value. - * @throws IllegalArgumentException in case if provided value isn't in allowed range. + * Rounds to 0 or 100 if provided value isn't in allowed range. */ public void setValue(int value) { - if (value < 0 || value > 100) { - throw new IllegalArgumentException("Humidity value must be in [0, 100] range."); - } - this.value = value; + this.value = Math.max(0, Math.min(100, value)); } /** diff --git a/src/test/java/com/github/prominence/openweathermap/api/model/HumidityUnitTest.java b/src/test/java/com/github/prominence/openweathermap/api/model/HumidityUnitTest.java index ab0d11d..ce831ce 100644 --- a/src/test/java/com/github/prominence/openweathermap/api/model/HumidityUnitTest.java +++ b/src/test/java/com/github/prominence/openweathermap/api/model/HumidityUnitTest.java @@ -37,13 +37,15 @@ public class HumidityUnitTest { } @Test - public void whenCreateHumidityByConstructorWithInvalidDataAboveHundred_thenThrowAnException() { - assertThrows(IllegalArgumentException.class, () -> Humidity.withValue((byte) 112)); + public void whenCreateHumidityByConstructorWithInvalidDataAboveHundred_thenValueIsMaxHundred() { + Humidity h = Humidity.withValue((byte) 112); + assertEquals(100, h.getValue()); } @Test - public void whenCreateHumidityByConstructorWithInvalidDataNegative_thenThrowAnException() { - assertThrows(IllegalArgumentException.class, () -> Humidity.withValue((byte) -33)); + public void whenCreateHumidityByConstructorWithInvalidDataNegative_thenValueIsMinZero() { + Humidity h = Humidity.withValue((byte) -33); + assertEquals(0, h.getValue()); } @Test @@ -59,15 +61,17 @@ public class HumidityUnitTest { } @Test - public void whenCreateHumidityAndSetInvalidDataAboveHundred_thenThrowAnException() { + public void whenCreateHumidityAndSetInvalidDataAboveHundred_thenValueIsMaxHundred() { Humidity humidity = Humidity.withValue((byte) 12); - assertThrows(IllegalArgumentException.class, () -> humidity.setValue((byte) 112)); + humidity.setValue(112); + assertEquals(100, humidity.getValue()); } @Test - public void whenCreateHumidityAndSetInvalidDataNegative_thenThrowAnException() { + public void whenCreateHumidityAndSetInvalidDataNegative_thenValueIsMinZero() { Humidity humidity = Humidity.withValue((byte) 88); - assertThrows(IllegalArgumentException.class, () -> humidity.setValue((byte) -89)); + humidity.setValue(-89); + assertEquals(0, humidity.getValue()); } @Test