dormouse-uri-0.1.0.0: test/Dormouse/Uri/QuerySpec.hs
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DisambiguateRecordFields #-}
{-# LANGUAGE QuasiQuotes #-}
{-# LANGUAGE GADTs #-}
module Dormouse.Uri.QuerySpec
( spec
) where
import qualified Data.Text as T
import Test.Hspec
import Dormouse.Uri
import Dormouse.Url
import Dormouse.Url.Builder
import Dormouse.Url.QQ
uriWithDestructSequence :: Url "http"
uriWithDestructSequence = HttpUrl $ UrlComponents
{ urlAuthority = Authority {authorityUserInfo = Nothing, authorityHost = Host "enterprise.starfleet.com", authorityPort = Nothing}
, urlPath = Path ["destruct"]
, urlQuery = Just $ "code1=11a&code2=11a2b&code3=1b2b3&code4=000destruct-0"
, urlFragment = Nothing
}
uriLookingUpTheEnterprise :: Url "http"
uriLookingUpTheEnterprise = HttpUrl $ UrlComponents
{ urlAuthority = Authority {authorityUserInfo = Nothing, authorityHost = Host "starfleet.com", authorityPort = Nothing}
, urlPath = Path ["ship"]
, urlQuery = Just $ "registry=1701"
, urlFragment = Nothing
}
spec :: Spec
spec = do
describe "build query" $ do
it "generates correct uri using the URI builder syntax with text components" $ do
let actualUri = [http|http://enterprise.starfleet.com|] </> "destruct" ? ("code1" =: ("11a" :: T.Text)) & ("code2" =: ("11a2b" :: T.Text)) & ("code3" =: ("1b2b3":: T.Text)) & ("code4" =: ("000destruct-0" :: T.Text))
actualUri `shouldBe` uriWithDestructSequence
it "generates correct uri using the URI builder syntax with int components" $ do
let actualUri = [http|http://starfleet.com|] </> "ship" ? ("registry" =: (1701 :: Int))
actualUri `shouldBe` uriLookingUpTheEnterprise