packages feed

http-link-header-1.0.3: test-suite/Network/HTTP/LinkSpec.hs

{-# LANGUAGE OverloadedStrings, UnicodeSyntax, CPP #-}
{-# OPTIONS_GHC -fno-warn-orphans #-}

module Network.HTTP.LinkSpec where

import           Test.Hspec
import           Test.QuickCheck
#if !MIN_VERSION_base(4,8,0)
import           Data.Monoid (mconcat)
#endif
import qualified Data.Text as T
import           Data.Maybe (fromJust)
import           Network.HTTP.Link

instance Arbitrary Link where
  arbitrary = do
    urlScheme ← elements ["http://", "https://", "ftp://", "git+ssh://"]
    urlDomain ← listOf1 $ elements ['a'..'z']
    urlTld ← elements ["com", "net", "org", "me", "is", "technology", "club"]
    urlPath ← listOf $ elements ['a'..'z']
    params ← listOf genParam
    return $ fromJust $ lnk (mconcat [urlScheme, urlDomain, ".", urlTld, "/", urlPath]) params
    where genParam = do
            otherParamKey ← listOf1 $ elements ['a'..'z']
            paramKey ← elements [Rel, Rev, Title, Hreflang, Anchor, Media, ContentType, Other (T.pack otherParamKey)]
            paramValue ← listOf $ elements ['a'..'z']
            return (paramKey, T.pack paramValue)

spec ∷ Spec
spec = do
  describe "writeLinkHeader → parseLinkHeader" $
    it "roundtrips successfully" $
      property $ \x → parseLinkHeader (writeLinkHeader x) == Just x