Evgenii Akentev
·
2021-09-08
TestWeatherProvider.hs
1{-# LANGUAGE OverloadedLabels #-}
2module TestWeatherProvider where
3
4import Data.Row
5import WeatherProvider
6import qualified TemperatureProvider as T
7import qualified WindProvider as W
8import QueryTypes
9
10-- | This is a configuration that allows to setup the provider for tests.
11data Config = Config
12 { initTemperature :: T.Temperature
13 , initWindSpeed :: W.WindSpeed
14 }
15
16new :: Config -> Handle
17new config = #getWeatherData .== (getTestWeatherData (initTemperature config) (initWindSpeed config))
18 .+ #getWindData .== (getTestWindData (initWindSpeed config))
19 .+ #getTemperatureData .== (getTestTemperatureData (initTemperature config))
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