@@ -2,6 +2,7 @@
2{-# LANGUAGE ScopedTypeVariables #-}
2{-# LANGUAGE ScopedTypeVariables #-}
3module Web.Internal.HttpApiDataSpec (spec) where
3module Web.Internal.HttpApiDataSpec (spec) where
5+import Control.Applicative
5import Data.Int
6import Data.Int
6import Data.Word
7import Data.Word
7import Data.Time
8import Data.Time
@@ -9,6 +10,7 @@ import qualified Data.Text as T
9import qualified Data.Text.Lazy as L
10import qualified Data.Text.Lazy as L
10import qualified Data.ByteString as BS
11import qualified Data.ByteString as BS
11import Data.Version
12import Data.Version
13+import qualified Data.UUID as UUID
13import Data.Proxy
15import Data.Proxy
@@ -30,6 +32,10 @@ import Web.Internal.TestInstances
30checkUrlPiece :: forall a. (Eq a, ToHttpApiData a, FromHttpApiData a, Show a, Arbitrary a) => Proxy a -> String -> Spec
32checkUrlPiece :: forall a. (Eq a, ToHttpApiData a, FromHttpApiData a, Show a, Arbitrary a) => Proxy a -> String -> Spec
31checkUrlPiece _ name = prop name (toUrlPiece <=> parseUrlPiece :: a -> Bool)
33checkUrlPiece _ name = prop name (toUrlPiece <=> parseUrlPiece :: a -> Bool)
35+-- | Check with given generator
36+checkUrlPiece' :: forall a. (Eq a, ToHttpApiData a, FromHttpApiData a, Show a) => Gen a -> String -> Spec
37+checkUrlPiece' gen name = prop name $ forAll gen (toUrlPiece <=> parseUrlPiece)
33-- | Check case insensitivity for @parseUrlPiece@.
39-- | Check case insensitivity for @parseUrlPiece@.
34checkUrlPieceI :: forall a. (Eq a, ToHttpApiData a, FromHttpApiData a, Arbitrary a) => Proxy a -> String -> Spec
40checkUrlPieceI :: forall a. (Eq a, ToHttpApiData a, FromHttpApiData a, Arbitrary a) => Proxy a -> String -> Spec
35checkUrlPieceI _ = checkUrlPiece (Proxy :: Proxy (RandomCase a))
41checkUrlPieceI _ = checkUrlPiece (Proxy :: Proxy (RandomCase a))
@@ -61,6 +67,7 @@ spec = do
61 checkUrlPiece (Proxy :: Proxy UTCTime) "UTCTime"
67 checkUrlPiece (Proxy :: Proxy UTCTime) "UTCTime"
62 checkUrlPiece (Proxy :: Proxy NominalDiffTime) "NominalDiffTime"
68 checkUrlPiece (Proxy :: Proxy NominalDiffTime) "NominalDiffTime"
63 checkUrlPiece (Proxy :: Proxy Version) "Version"
69 checkUrlPiece (Proxy :: Proxy Version) "Version"
70+ checkUrlPiece' uuidGen "UUID"
65 checkUrlPiece (Proxy :: Proxy (Maybe String)) "Maybe String"
72 checkUrlPiece (Proxy :: Proxy (Maybe String)) "Maybe String"
66 checkUrlPieceI (Proxy :: Proxy (Maybe Integer)) "Maybe Integer"
73 checkUrlPieceI (Proxy :: Proxy (Maybe Integer)) "Maybe Integer"
@@ -80,3 +87,6 @@ spec = do
81 it "invalid utf8 is handled" $ do
88 it "invalid utf8 is handled" $ do
82 parseHeaderMaybe (BS.pack [128]) `shouldBe` (Nothing :: Maybe T.Text)
89 parseHeaderMaybe (BS.pack [128]) `shouldBe` (Nothing :: Maybe T.Text)
91+uuidGen :: Gen UUID.UUID
92+uuidGen = UUID.fromWords <$> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary