{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE ScopedTypeVariables #-}
module VertigoIO.IntegrationTest where
import Control.Lens ((&), (.~), (^.))
import Control.Monad (forM_, void)
import Control.Monad.Free (MonadFree, iterM)
import Control.Monad.Identity (runIdentity)
import Control.Monad.IO.Class (MonadIO, liftIO)
import Control.Monad.State (MonadState, State, StateT(StateT), get, put, runState,
runStateT)
import Control.Monad.Trans.Identity (runIdentityT)
import Control.Monad.Trans.Reader (runReaderT)
import Data.Maybe (fromJust)
import Data.Monoid ((<>))
import Data.Text
import Data.UUID (fromText)
import Vertigo.AppM
import Vertigo.Dsl.Notify
import Vertigo.Dsl.RunProd
import Vertigo.Dsl.RunTest
import Vertigo.Ext (buildEnvironmentExt)
import Vertigo.Token (createToken)
import Vertigo.Types.Config (Config(Config), EnvEnum(..), enumToConfig, port)
import Vertigo.Types.DeviceInfo
import Vertigo.Types.User
import qualified Data.Map as M
import qualified Vertigo.Types.Notification as N
import qualified Vertigo.Types.Notification.Ids as N
-- test against real service
run0 :: IO ()
run0 = do
let uid1 = UserId $ fromJust $ fromText "3054130c-1925-48e5-9f1f-50bd1134e859"
ext <- buildEnvironmentExt
dis <- liftAppToIO ext $ do
-- userServiceGetUser :: JWT.JSON -> UserId -> Free NotifyDsl (Maybe User)
-- userServiceGetDevices :: JWT.JSON -> UserId -> Free NotifyDsl (Maybe [DeviceInfo])
_userMb <- runProd $ userServiceGetUser uid1
devicesMb <- runProd $ userServiceGetDevices uid1
liftIO $ putStrLn "--------------------------------------------------"
-- update diManufacturer
forM_ (fromJust devicesMb) $ \d ->
runProd $ userServiceUpdateDevice uid1 (d & diManufacturer .~ "temp")
_devicesMb1 <- runProd $ userServiceGetDevices uid1
liftIO $ putStrLn "--------------------------------------------------"
-- revert
forM_ (fromJust devicesMb) $ \d ->
runProd $ userServiceUpdateDevice uid1 d
_devicesMb2 <- runProd $ userServiceGetDevices uid1
liftIO $ putStrLn "--------------------------------------------------"
-- check
return ()
liftIO $ putStrLn ""
liftIO $ print dis
run1 :: IO ()
run1 = do
let conf = enumToConfig LOCAL
ext <- buildEnvironmentExt conf
token <- runReaderT (createToken (user0 ^. userId)) ext
m <- runStateT (runProd $ postNotification conf (Just token) ntf0) database
print m
-- test data --
database :: FakeDb
database = FakeDb (M.fromList [fdbEntry user0 Nothing]) (M.fromList []) (M.fromList [])
ntf0 = Notification {
nReceiverUid = user0 ^. userId
, nNotificationType = Broadcast
, nTitle = "title"
, nPayload = "payload"
}
user0 = User (UserId $ fromJust $ fromText "06a8b2d0-b1a9-441b-9a12-e420002ab0de") (UserName "User0")
Comments