From c992ddccd6434581d4ffe0170ef56afb84965e05 Mon Sep 17 00:00:00 2001 From: swayfarer <@dkamensky@licei10.ru> Date: Mon, 26 May 2025 21:56:16 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9F=D0=BE=D1=81=D0=BB=D0=B5=D0=B4=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20=D1=82=D0=B5=D1=81=D1=82=D1=8B(=D0=BD=D0=B0?= =?UTF-8?q?=D0=B4=D0=B5=D1=8E=D1=81=D1=8C)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/WeatherProviderRegistryTest.java | 39 +++++++++++++++ .../OpenWeatherMapWeatherProviderTest.java | 38 +++++++++++++++ .../city/WeatherProviderCLISelectorTest.java | 48 ++++++++++++++++--- 3 files changed, 118 insertions(+), 7 deletions(-) create mode 100644 src/test/java/WeatherProviderRegistryTest.java create mode 100644 src/test/java/ru/dima/weather/city/OpenWeatherMapWeatherProviderTest.java diff --git a/src/test/java/WeatherProviderRegistryTest.java b/src/test/java/WeatherProviderRegistryTest.java new file mode 100644 index 0000000..9eeb9d0 --- /dev/null +++ b/src/test/java/WeatherProviderRegistryTest.java @@ -0,0 +1,39 @@ +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import ru.dima.weather.provider.WeatherProvider; +import ru.dima.weather.provider.WeatherProviderRegistry; + +import java.util.List; + +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.mock; + +public class WeatherProviderRegistryTest { + private WeatherProviderRegistry registry; + + @BeforeEach + public void setUp() { + registry = new WeatherProviderRegistry(); + } + + @Test + public void testRegisterAndGetWeatherProvider() { + WeatherProvider provider = mock(WeatherProvider.class); + registry.registerWeatherProvider(provider); + + List providers = registry.getAllWeatherProviders(); + assertEquals(1, providers.size()); + assertSame(provider, providers.get(0)); + } + + @Test + public void testGetAllWeatherProviders_Empty() { + assertTrue(registry.getAllWeatherProviders().isEmpty()); + } + + @Test + public void testGetAllWeatherProviders_Unmodifiable() { + List providers = registry.getAllWeatherProviders(); + assertThrows(UnsupportedOperationException.class, () -> providers.add(mock(WeatherProvider.class))); + } +} diff --git a/src/test/java/ru/dima/weather/city/OpenWeatherMapWeatherProviderTest.java b/src/test/java/ru/dima/weather/city/OpenWeatherMapWeatherProviderTest.java new file mode 100644 index 0000000..6ac4e74 --- /dev/null +++ b/src/test/java/ru/dima/weather/city/OpenWeatherMapWeatherProviderTest.java @@ -0,0 +1,38 @@ +package ru.dima.weather.city; + +import org.junit.jupiter.api.Test; +import ru.dima.weather.http.HttpRequester; +import ru.dima.weather.provider.MultiDaysWeatherInfo; +import ru.dima.weather.provider.OpenWeatherMapWeatherProvider; +import ru.dima.weather.provider.WeatherInfo; + +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +public class OpenWeatherMapWeatherProviderTest { + + + @Test + void TestGetName() { + HttpRequester HttpRequester = mock(HttpRequester.class); + OpenWeatherMapWeatherProvider OpenWeatherMapWeatherProvider = new OpenWeatherMapWeatherProvider(HttpRequester, "29ed5ca47c3d0c32385b18f1e82e522f"); + + OpenWeatherMapWeatherProvider.getName(); + assertEquals("open-weather-map", OpenWeatherMapWeatherProvider.getName(), "open-weather-map"); + } + @Test + void TestMultiDaysWeatherInfo() { + HttpRequester httpRequester = mock(HttpRequester.class); + String ft = "{\"list\": [{\"main\": {\"temp\": 22.5}}, {\"main\": {\"temp\": 19.85}}, {\"main\": {\"temp\": 20.97}}, {\"main\": {\"temp\": 22.19}}, {\"main\": {\"temp\": 25.41}}, {\"main\": {\"temp\": 26.21}}, {\"main\": {\"temp\": 22.53}}]}"; + + + when(httpRequester.getString(anyString())).thenReturn(ft); + + OpenWeatherMapWeatherProvider OpenWeatherMapWeatherProvider = new OpenWeatherMapWeatherProvider(httpRequester , "29ed5ca47c3d0c32385b18f1e82e522f" ); + var weatherInfo = OpenWeatherMapWeatherProvider.getWeeklyWeatherInCity("Москва"); + assertEquals("MultiDaysWeatherInfo{perDayWeather=[WeatherInfo{temperature=22.5}, WeatherInfo{temperature=19.85}, WeatherInfo{temperature=20.97}, WeatherInfo{temperature=22.19}, WeatherInfo{temperature=25.41}, WeatherInfo{temperature=26.21}, WeatherInfo{temperature=22.53}]}",weatherInfo,"s"); + + } +} \ No newline at end of file diff --git a/src/test/java/ru/dima/weather/city/WeatherProviderCLISelectorTest.java b/src/test/java/ru/dima/weather/city/WeatherProviderCLISelectorTest.java index 4e5b8ad..e7f99c5 100644 --- a/src/test/java/ru/dima/weather/city/WeatherProviderCLISelectorTest.java +++ b/src/test/java/ru/dima/weather/city/WeatherProviderCLISelectorTest.java @@ -1,17 +1,51 @@ package ru.dima.weather.city; - +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import org.mockito.Mockito; import ru.dima.weather.cli.CLIInputReader; import ru.dima.weather.cli.WeatherProviderCLISelector; import ru.dima.weather.provider.WeatherProvider; import ru.dima.weather.provider.WeatherProviderRegistry; -import java.io.ByteArrayInputStream; -import java.io.InputStream; -import java.util.Scanner; - -import static org.junit.jupiter.api.Assertions.assertEquals; +import java.util.Arrays; +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.*; public class WeatherProviderCLISelectorTest { + private CLIInputReader cliInputReader; + private WeatherProviderRegistry weatherProviderRegistry; + private WeatherProviderCLISelector selector; -} \ No newline at end of file + @BeforeEach + public void setUp() { + cliInputReader = mock(CLIInputReader.class); + weatherProviderRegistry = mock(WeatherProviderRegistry.class); + selector = new WeatherProviderCLISelector(cliInputReader, weatherProviderRegistry); + } + + @Test + public void testSelectWeatherProvider_ValidInput() { + WeatherProvider provider = mock(WeatherProvider.class); + when(provider.getName()).thenReturn("Provider 1"); + when(weatherProviderRegistry.getAllWeatherProviders()).thenReturn(Arrays.asList(provider)); + when(cliInputReader.readInteger()).thenReturn(1); + + assertEquals(provider, selector.selectWeatherProviderFromCLI()); + } + + @Test + public void testSelectWeatherProvider_InvalidInput() { + WeatherProvider provider = mock(WeatherProvider.class); + when(provider.getName()).thenReturn("Provider 1"); + when(weatherProviderRegistry.getAllWeatherProviders()).thenReturn(Arrays.asList(provider)); + when(cliInputReader.readInteger()).thenReturn(2).thenReturn(1); + + assertEquals(provider, selector.selectWeatherProviderFromCLI()); + } + + @Test + public void testSelectWeatherProvider_EmptyProviderList() { + when(weatherProviderRegistry.getAllWeatherProviders()).thenReturn(Arrays.asList()); + assertThrows(IndexOutOfBoundsException.class, () -> selector.selectWeatherProviderFromCLI()); + } +}