From 69d08ed1b941b32ea9b0a28287e445706ad22e82 Mon Sep 17 00:00:00 2001 From: Matthew Oslan Date: Thu, 6 Jun 2019 12:25:49 -0400 Subject: [PATCH 1/2] 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"; From 6648dbc20ef424999c779d68892174171d856d74 Mon Sep 17 00:00:00 2001 From: Matthew Oslan Date: Thu, 6 Jun 2019 17:17:34 -0400 Subject: [PATCH 2/2] Move mock WeatherProvider to weather.spec.ts --- routes/weather.spec.ts | 41 ++++++++++++++++++++++++++++++++- routes/weatherProviders/mock.ts | 38 ------------------------------ 2 files changed, 40 insertions(+), 39 deletions(-) delete mode 100644 routes/weatherProviders/mock.ts diff --git a/routes/weather.spec.ts b/routes/weather.spec.ts index 87cede5..ecd328c 100644 --- a/routes/weather.spec.ts +++ b/routes/weather.spec.ts @@ -5,6 +5,7 @@ import * as MockExpressResponse from 'mock-express-response'; import * as MockDate from 'mockdate'; import { getWateringData } from './weather'; +import { GeoCoordinates, WateringData, WeatherData, WeatherProvider } from "../types"; const expected = require( '../test/expected.json' ); const replies = require( '../test/replies.json' ); @@ -58,4 +59,42 @@ function mockOWM() { .filteringPath( function() { return "/"; } ) .get( "/" ) .reply( 200, replies[location].OWMData ); -} \ No newline at end of file +} + + +/** + * 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 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/routes/weatherProviders/mock.ts b/routes/weatherProviders/mock.ts deleted file mode 100644 index 6fda63a..0000000 --- a/routes/weatherProviders/mock.ts +++ /dev/null @@ -1,38 +0,0 @@ -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 -}