repos / handle-examples.hs.git


handle-examples.hs.git / vinyl-handle / test-impl
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