From 69d08ed1b941b32ea9b0a28287e445706ad22e82 Mon Sep 17 00:00:00 2001 From: Matthew Oslan Date: Thu, 6 Jun 2019 12:25:49 -0400 Subject: [PATCH] Add mock WeatherProvider --- routes/weatherProviders/mock.ts | 38 +++++++++++++++++++++++++++++++++ types.ts | 2 +- 2 files changed, 39 insertions(+), 1 deletion(-) create mode 100644 routes/weatherProviders/mock.ts diff --git a/routes/weatherProviders/mock.ts b/routes/weatherProviders/mock.ts new file mode 100644 index 0000000..6fda63a --- /dev/null +++ b/routes/weatherProviders/mock.ts @@ -0,0 +1,38 @@ +import { GeoCoordinates, WateringData, WeatherData, WeatherProvider } from "../../types"; + +/** + * A WeatherProvider for testing purposes that returns weather data that is provided in the constructor. + * This is a special WeatherProvider designed for testing purposes and should not be activated using the + * WEATHER_PROVIDER environment variable. + */ +export default class MockWeatherProvider implements WeatherProvider{ + + private readonly mockData: MockWeatherData; + + public constructor(mockData: MockWeatherData) { + this.mockData = mockData; + } + + public async getWateringData( coordinates: GeoCoordinates ): Promise< WateringData > { + const data = this.mockData.wateringData; + if ( !data.weatherProvider ) { + data.weatherProvider = "mock"; + } + + return data; + } + + public async getWeatherData( coordinates: GeoCoordinates ): Promise< WeatherData > { + const data = this.mockData.weatherData; + if ( !data.weatherProvider ) { + data.weatherProvider = "mock"; + } + + return data; + } +} + +interface MockWeatherData { + wateringData?: WateringData, + weatherData?: WeatherData +} diff --git a/types.ts b/types.ts index 6727935..8c111d4 100644 --- a/types.ts +++ b/types.ts @@ -103,4 +103,4 @@ export interface WeatherProvider { getWeatherData?( coordinates : GeoCoordinates ): Promise< WeatherData >; } -export type WeatherProviderId = "OWM" | "DarkSky" | "local"; +export type WeatherProviderId = "OWM" | "DarkSky" | "local" | "mock";