{-# LANGUAGE DataKinds #-}
{-# LANGUAGE OverloadedStrings #-}
module Spec.Admin.Server
( spec
) where
import Admin.Component.EmptyComponent
import Admin.Server
import Data.ByteString
import Network.HTTP.Types.Header
import Network.HTTP.Types.Method
import Network.Wai.Test (SResponse)
import Servant (Application)
import Test.Hspec
import Test.Hspec.Wai
app :: IO Application
app = return $ adminApp emptyComponent ["testApiKey"]
authHeader :: Header
authHeader = ("Authorization", "Bearer testApiKey")
getS :: ByteString -> WaiSession st SResponse
getS path = request methodGet path [authHeader] ""
spec :: Spec
spec =
with app $ do
describe "GET /" $ do
it "responds to the root path" $ do getS "/" `shouldRespondWith` 200
describe "GET /api_version" $ do
it "responds with the API version" $ do
getS "/api_version" `shouldRespondWith` 200 {matchBody = "\"1\""}
describe "GET /components" $ do
it "lists components" $ do
getS "/components" `shouldRespondWith`
200
{ matchBody =
"[{\"componentName\":\"empty\",\"componentVersion\":\"1\"}]"
}
describe "authorization" $ do
it "refuses unauthorized requests" $ do
get "/" `shouldRespondWith` 401
request methodGet "/" [("Authorization", "Bearer badKey")] "" `shouldRespondWith`
401