git.iko.soy/typeable/http-api-data
on master help sign in
Fix test for `decodeForm . encodeForm`

`decodeForm (encodeForm x)` does not equal `x` when we have a form like `Form [("", "")]`. The result `Form` after encoding and decoding is just `Form []`. This commit adds in a newtype wrapper `NoEmptyKeyForm` with an `Arbitrary` instance that removes all empty-string keys.

commit0e7f261272277420d7d5312c62bdd565c7be0fe1 author(cdep)illabout <cdep.illabout@gmail.com> dateWed 24 Aug 2016, 22:56 (10 years ago) parent1b468b0
2 files changed+11−1
test/Web/HttpApiData/Internal/FormUrlEncodedSpec.hs+1−1 test/Web/HttpApiData/Internal/TestInstances.hs+10
test/Web/HttpApiData/Internal/FormUrlEncodedSpec.hs+1−1
@@ -66,5 +66,5 @@ genericSpec = describe "Default (generic) instances" $ do
6666urlEncoding :: Spec
6767urlEncoding = describe "urlEncoding" $ do
6868
69− it "decodeForm (encodeForm x) == Right x" $ property $ \x -> do
69+ it "decodeForm (encodeForm x) == Right x" $ property $ \(NoEmptyKeyForm x) -> do
7070 decodeForm (encodeForm x) `shouldBe` Right x
test/Web/HttpApiData/Internal/TestInstances.hs+10
@@ -1,16 +1,19 @@
11{-# LANGUAGE DeriveAnyClass #-}
22{-# LANGUAGE DeriveGeneric #-}
3+{-# LANGUAGE OverloadedStrings #-}
34{-# LANGUAGE ScopedTypeVariables #-}
45{-# OPTIONS_GHC -fno-warn-orphans #-}
56module Web.HttpApiData.Internal.TestInstances
67 ( RandomCase(..)
78 , SimpleRec(..)
89 , SimpleSumRec(..)
10+ , NoEmptyKeyForm(..)
911 ) where
1012
1113import Control.Applicative
1214import qualified Data.ByteString.Lazy.Char8 as BSL
1315import Data.Char
16+import qualified Data.Map as M
1417import qualified Data.Text as T
1518import qualified Data.Text.Lazy as L
1619import Data.Time
@@ -104,3 +107,10 @@ instance Arbitrary SimpleSumRec where
104107 [ SSRLeft <$> arbitrary <*> arbitrary
105108 , SSRRight <$> arbitrary <*> arbitrary
106109 ]
110+
111+newtype NoEmptyKeyForm =
112+ NoEmptyKeyForm { unNoEmptyKeyForm :: Form }
113+ deriving Show
114+
115+instance Arbitrary NoEmptyKeyForm where
116+ arbitrary = NoEmptyKeyForm . Form . M.delete "" <$> arbitrary