Evgenii Akentev
·
2021-01-09
TestWeatherProvider.hs
1module TestWeatherProvider where
2
3import Data.Vinyl
4import WeatherProvider
5import qualified TemperatureProvider as T
6import qualified WindProvider as W
7import QueryTypes
8
9-- | This is a configuration that allows to setup the provider for tests.
10data Config = Config
11 { initTemperature :: T.Temperature
12 , initWindSpeed :: W.WindSpeed
13 }
14
15new :: Config -> Handle
16new config = Field (getTestWeatherData (initTemperature config) (initWindSpeed config))
17 :& Field (getTestWindData (initWindSpeed config))
18 :& Field (getTestTemperatureData (initTemperature config))
19 :& RNil
20
21-- | This is an implementation `WeatherProvider` interface for tests
22-- We can configure it independently from other providers or reuse them.
23getTestWeatherData :: T.Temperature -> W.WindSpeed -> Location -> Day -> IO WeatherData
24getTestWeatherData temp wind _ _ = return $ WeatherData temp wind
25
26getTestTemperatureData :: T.Temperature -> Location -> Day -> IO T.Temperature
27getTestTemperatureData t _ _ = return t
28
29getTestWindData :: W.WindSpeed -> Location -> Day -> IO W.WindSpeed
30getTestWindData w _ _ = return w