From 138d65ae423fcc78aa71a45261db353e41ca035b Mon Sep 17 00:00:00 2001 From: Martin Eyben Date: Mon, 2 Dec 2024 11:27:17 +0000 Subject: [PATCH] feat: enhance tests --- .../pg203/weather/data/api/OpenMeteo.java | 3 +- .../weather/data/api/WeatherDataAPITest.java | 53 +++++++++++++++++++ .../FakeJSONFetcherOpenWeatherMap.java | 2 +- .../FakeJSONFetcherWeatherAPI.java | 2 +- 4 files changed, 57 insertions(+), 3 deletions(-) diff --git a/src/main/java/eirb/pg203/weather/data/api/OpenMeteo.java b/src/main/java/eirb/pg203/weather/data/api/OpenMeteo.java index ad31c79..3ef78fd 100644 --- a/src/main/java/eirb/pg203/weather/data/api/OpenMeteo.java +++ b/src/main/java/eirb/pg203/weather/data/api/OpenMeteo.java @@ -1,5 +1,6 @@ package eirb.pg203.weather.data.api; +import eirb.pg203.weather.exceptions.WeatherFetchingExceptionCityCoords; import eirb.pg203.weather.utils.City; import eirb.pg203.weather.exceptions.WeatherFetchingException; import eirb.pg203.weather.exceptions.WeatherFetchingExceptionApi; @@ -47,7 +48,7 @@ public class OpenMeteo implements WeatherDataAPI { ) ).toURL(); } catch (IOException e) { - throw new WeatherFetchingException("Impossible to get city coords"); + throw new WeatherFetchingExceptionCityCoords(); } try { diff --git a/src/test/java/eirb/pg203/weather/data/api/WeatherDataAPITest.java b/src/test/java/eirb/pg203/weather/data/api/WeatherDataAPITest.java index 4d40335..3c53967 100644 --- a/src/test/java/eirb/pg203/weather/data/api/WeatherDataAPITest.java +++ b/src/test/java/eirb/pg203/weather/data/api/WeatherDataAPITest.java @@ -1,5 +1,7 @@ package eirb.pg203.weather.data.api; +import eirb.pg203.weather.exceptions.WeatherFetchingExceptionApi; +import eirb.pg203.weather.exceptions.WeatherFetchingExceptionCityCoords; import eirb.pg203.weather.fakeJSONFetcher.FakeJSONFetcherOpenMeteo; import eirb.pg203.weather.fakeJSONFetcher.FakeJSONFetcherOpenWeatherMap; import eirb.pg203.weather.fakeJSONFetcher.FakeJSONFetcherWeatherAPI; @@ -19,6 +21,18 @@ import java.util.stream.Stream; public class WeatherDataAPITest { private static final float epsilon = 0.01F; private static final String APIKey = "realKey"; + private static final String wrongAPIKey = "wrongKey"; + + private static WeatherAPI wrongWeatherAPI() { + WeatherAPI weatherAPI = new WeatherAPI(wrongAPIKey); + weatherAPI.JSONFetcher = new FakeJSONFetcherWeatherAPI(); + return weatherAPI; + } + private static OpenWeatherMap wrongOpenWeatherMap() { + OpenWeatherMap weatherAPI = new OpenWeatherMap(wrongAPIKey); + weatherAPI.JSONFetcher = new FakeJSONFetcherOpenWeatherMap(); + return weatherAPI; + } public static WeatherAPI weatherAPI(){ WeatherAPI weatherAPI = new WeatherAPI(APIKey); @@ -155,6 +169,45 @@ public class WeatherDataAPITest { Assertions.assertAll( () -> weatherDataAPI.getTemperature(0,1, city) ); + } + + private static Stream testUnkowncity() { + return Stream.of( + Arguments.arguments(openWeatherMap()), + Arguments.arguments(openMeteo()) + ); + } + + @ParameterizedTest(name = "[{0}] Get temperature from missing city") + @MethodSource + public void testUnkowncity(WeatherDataAPI weatherDataAPI) { + String unknownCity = "jlkfreajflkj"; + Assertions.assertThrows(WeatherFetchingExceptionCityCoords.class, + () -> weatherDataAPI.getTemperature(3, unknownCity) + ); + Assertions.assertThrows(WeatherFetchingExceptionCityCoords.class, + () -> weatherDataAPI.getTemperatures(3, unknownCity) + ); + } + + private static Stream testWrongApiKey() { + return Stream.of( + Arguments.arguments(wrongWeatherAPI()), + Arguments.arguments(wrongOpenWeatherMap()) + ); + } + + @ParameterizedTest(name = "[{0}] Wrong API Key throws exception") + @MethodSource + public void testWrongApiKey(WeatherDataAPI weatherDataAPI) { + String city = "Bordeaux"; + Assertions.assertThrows(WeatherFetchingExceptionApi.class, + () -> weatherDataAPI.getTemperatures(3, city) + ); + + Assertions.assertThrows(WeatherFetchingExceptionApi.class, + () -> weatherDataAPI.getTemperature(3, city) + ); } } diff --git a/src/test/java/eirb/pg203/weather/fakeJSONFetcher/FakeJSONFetcherOpenWeatherMap.java b/src/test/java/eirb/pg203/weather/fakeJSONFetcher/FakeJSONFetcherOpenWeatherMap.java index c8270de..bcf5336 100644 --- a/src/test/java/eirb/pg203/weather/fakeJSONFetcher/FakeJSONFetcherOpenWeatherMap.java +++ b/src/test/java/eirb/pg203/weather/fakeJSONFetcher/FakeJSONFetcherOpenWeatherMap.java @@ -21,7 +21,7 @@ public class FakeJSONFetcherOpenWeatherMap extends JSONFetcher { public JSONObject fetch(URL url) throws IOException { Map params = SplitQueryUrl.splitQuery(url); if (!params.getOrDefault("appid", "").contentEquals(apiKey)) - return wrongKeyResponse; + throw new IOException(); return responseExample(); } } diff --git a/src/test/java/eirb/pg203/weather/fakeJSONFetcher/FakeJSONFetcherWeatherAPI.java b/src/test/java/eirb/pg203/weather/fakeJSONFetcher/FakeJSONFetcherWeatherAPI.java index 79b93e9..887452e 100644 --- a/src/test/java/eirb/pg203/weather/fakeJSONFetcher/FakeJSONFetcherWeatherAPI.java +++ b/src/test/java/eirb/pg203/weather/fakeJSONFetcher/FakeJSONFetcherWeatherAPI.java @@ -30,7 +30,7 @@ public class FakeJSONFetcherWeatherAPI extends JSONFetcher { int days = Integer.parseInt(params.get("days")); if (!params.get("key").contentEquals(apiKey)) - return wrongKeyRequest; + throw new IOException(); return bordeauxRequests().get(days - 1); }