packages feed

patrol-0.1.0.1: source/test-suite/Patrol/Type/RequestSpec.hs

{-# LANGUAGE QuasiQuotes #-}

module Patrol.Type.RequestSpec where

import qualified Data.Aeson as Aeson
import qualified Data.Aeson.QQ.Simple as Aeson
import qualified Data.Map as Map
import qualified Data.Text as Text
import qualified Patrol.Type.Request as Request
import qualified Test.Hspec as Hspec

spec :: Hspec.Spec
spec = Hspec.describe "Patrol.Type.Request" $ do
  Hspec.describe "ToJSON" $ do
    Hspec.it "works" $ do
      let request = Request.empty
          json = [Aeson.aesonQQ| {} |]
      Aeson.toJSON request `Hspec.shouldBe` json

    Hspec.it "works with a cookie" $ do
      let request = Request.empty {Request.cookies = Map.singleton (Text.pack "example-key") $ Text.pack "example-value"}
          json = [Aeson.aesonQQ| { "cookies": { "example-key": "example-value" } } |]
      Aeson.toJSON request `Hspec.shouldBe` json

    Hspec.it "works with some data" $ do
      let request = Request.empty {Request.data_ = Aeson.Bool True}
          json = [Aeson.aesonQQ| { "data": true } |]
      Aeson.toJSON request `Hspec.shouldBe` json

    Hspec.it "works with an env" $ do
      let request = Request.empty {Request.env = Map.singleton (Text.pack "example-key") $ Aeson.Bool True}
          json = [Aeson.aesonQQ| { "env": { "example-key": true } } |]
      Aeson.toJSON request `Hspec.shouldBe` json

    Hspec.it "works with a fragment" $ do
      let request = Request.empty {Request.fragment = Text.pack "example-fragment"}
          json = [Aeson.aesonQQ| { "fragment": "example-fragment" } |]
      Aeson.toJSON request `Hspec.shouldBe` json

    Hspec.it "works with a header" $ do
      let request = Request.empty {Request.headers = Map.singleton (Text.pack "example-key") $ Text.pack "example-value"}
          json = [Aeson.aesonQQ| { "headers": { "example-key": "example-value" } } |]
      Aeson.toJSON request `Hspec.shouldBe` json

    Hspec.it "works with an inferred content type" $ do
      let request = Request.empty {Request.inferredContentType = Text.pack "example-inferred-content-type"}
          json = [Aeson.aesonQQ| { "inferred_content_type": "example-inferred-content-type" } |]
      Aeson.toJSON request `Hspec.shouldBe` json

    Hspec.it "works with a method" $ do
      let request = Request.empty {Request.method = Text.pack "example-method"}
          json = [Aeson.aesonQQ| { "method": "example-method" } |]
      Aeson.toJSON request `Hspec.shouldBe` json

    Hspec.it "works with a query string" $ do
      let request = Request.empty {Request.queryString = Map.singleton (Text.pack "example-key") $ Text.pack "example-value"}
          json = [Aeson.aesonQQ| { "query_string": { "example-key": "example-value" } } |]
      Aeson.toJSON request `Hspec.shouldBe` json

    Hspec.it "works with a URL" $ do
      let request = Request.empty {Request.url = Text.pack "example-url"}
          json = [Aeson.aesonQQ| { "url": "example-url" } |]
      Aeson.toJSON request `Hspec.shouldBe` json