{-# 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