packages feed

mig-0.2.0.0: test/Test/Server/Common.hs

module Test.Server.Common (
  emptyReq,
  jsonResp,
  parseResp,
) where

import Data.Aeson qualified as Json
import Data.Map.Strict qualified as Map
import Mig.Core
import Network.HTTP.Types.Method (methodGet)
import Network.HTTP.Types.Status (ok200)

emptyReq :: Request
emptyReq =
  Request
    { path = []
    , query = mempty
    , capture = mempty
    , headers = Map.fromList [("Accept", "application/json")]
    , method = methodGet
    , readBody = pure (Right "")
    , isSecure = False
    }

jsonResp :: (Json.ToJSON a) => a -> Response
jsonResp a =
  Response
    { status = ok200
    , headers = [("Content-Type", "application/json")]
    , body = RawResp "application/json" (Json.encode a)
    }

parseResp :: (Json.FromJSON a) => Response -> Maybe a
parseResp resp = case resp.body of
  RawResp "application/json" bsResp -> Json.decode bsResp
  _ -> Nothing