freckle-app-1.0.0.1: tests/Freckle/App/HttpSpec.hs
module Freckle.App.HttpSpec
( spec
) where
import Prelude
import Control.Lens (_Left, _Right, to, (^?))
import Data.Aeson
import Data.Aeson.Lens
import qualified Data.List.NonEmpty as NE
import Freckle.App.Http
import Network.HTTP.Types.Status (status200)
import Test.Hspec
spec :: Spec
spec = do
describe "httpJson" $ do
it "fetches JSON via HTTP" $ do
resp <- httpJson @_ @Value
$ parseRequest_ "https://www.stackage.org/lts-17.10"
getResponseStatus resp `shouldBe` status200
getResponseBody resp
^? _Right
. key "snapshot"
. key "ghc"
. _String
`shouldBe` Just "8.10.4"
it "places JSON parse errors in a Left body" $ do
resp <- httpJson @_ @[()]
$ parseRequest_ "https://www.stackage.org/lts-17.10"
let
expectedErrorMessage
= "Error in $: parsing [] failed, expected Array, but encountered Object"
getResponseStatus resp `shouldBe` status200
getResponseBody resp
^? _Left
. to hdeErrors
. to NE.toList
`shouldBe` Just [expectedErrorMessage]