packages feed

haskell-admin-health-1.0.0.0: test/Spec/Admin/Component/Health.hs

{-# LANGUAGE DataKinds #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TypeApplications #-}

module Spec.Admin.Component.Health
  ( spec
  ) where

import Admin.Component.Health
import Control.Concurrent
import Servant
import Test.Hspec
import Test.Hspec.Wai

myProgram :: IO Int
myProgram = threadDelay 10000 >> return 5

app :: IO Application
app = do
  as <- async myProgram
  return $ serve (Proxy @HealthAPI) $ serveHealth as

spec :: Spec
spec =
  with app $ do
    describe "GET /status" $ do
      it "yields the correct status" $ do
        get "/status" `shouldRespondWith`
          200 {matchBody = "{\"tag\":\"Running\"}"}
        liftIO $ threadDelay 20000 -- Wait until myProgram stops
        get "/status" `shouldRespondWith`
          200 {matchBody = "{\"contents\":\"5\",\"tag\":\"Finished\"}"}