git.iko.soy/typeable/rollbar-hs
on master help sign in
Simplify tests

We can eschew the conversions if we stay with `unordered-containers`. It's semantically the same. Also, we can drop `containers` as a dependency!

commitf240812a64b5342bb0ed8c0fdfba36a6a09dfa87 authorjoneshf <jones3.hardy@gmail.com> dateSun 29 Jul 2018, 19:25 (8 years ago) parenta797a33
3 files changed+43−37
package.yaml−1 test/Rollbar/Item/MissingHeaders/Test.hs+27−25 test/Rollbar/Item/Request/Test.hs+16−11
package.yaml−1
@@ -36,7 +36,6 @@ tests:
3636 - base >= 4.9
3737 - bytestring >= 0.10
3838 - case-insensitive >= 1.2
39− - containers >= 0.5
4039 - hspec >= 2.4
4140 - hspec-golden-aeson >= 0.2
4241 - rollbar-hs
test/Rollbar/Item/MissingHeaders/Test.hs+27−25
@@ -6,8 +6,10 @@
66{-# LANGUAGE TypeOperators #-}
77module Rollbar.Item.MissingHeaders.Test where
88
9−import Data.Aeson (Value(Object), decode', encode, toJSON)
10−import Data.Text (Text)
9+import Data.Aeson (Value(Object), decode', encode, toJSON)
10+import Data.Functor (void)
11+import Data.HashSet (HashSet)
12+import Data.Text (Text)
1113
1214import Prelude hiding (error)
1315
@@ -16,9 +18,7 @@ import Rollbar.QuickCheck ()
1618
1719import Test.QuickCheck (conjoin, quickCheck)
1820
19−import Data.Set as S
20−
21−import qualified Data.HashMap.Strict
21+import qualified Data.HashSet
2222
2323props :: IO ()
2424props = do
@@ -39,53 +39,55 @@ props = do
3939
4040prop_valueAuthorizationIsRemoved :: MissingHeaders '["Authorization"] -> Bool
4141prop_valueAuthorizationIsRemoved hs =
42− "Authorization" `S.notMember` actual
42+ "Authorization" `notMember` actual
4343 where
44− actual = S.fromList (keys $ toJSON hs)
44+ actual = keys (toJSON hs)
4545
4646prop_encodingAuthorizationIsRemoved :: MissingHeaders '["Authorization"] -> Bool
4747prop_encodingAuthorizationIsRemoved hs =
48− "Authorization" `S.notMember` actual
48+ "Authorization" `notMember` actual
4949 where
50− actual = S.fromList (foldMap keys $ decode' $ encode hs)
50+ actual = foldMap keys (decode' $ encode hs)
5151
5252prop_valueX_AccessTokenIsRemoved :: MissingHeaders '["X-AccessToken"] -> Bool
5353prop_valueX_AccessTokenIsRemoved hs =
54− "X-AccessToken" `S.notMember` actual
54+ "X-AccessToken" `notMember` actual
5555 where
56− actual = S.fromList (keys $ toJSON hs)
56+ actual = keys (toJSON hs)
5757
5858prop_encodingX_AccessTokenIsRemoved :: MissingHeaders '["X-AccessToken"] -> Bool
5959prop_encodingX_AccessTokenIsRemoved hs =
60− "X-AccessToken" `S.notMember` actual
60+ "X-AccessToken" `notMember` actual
6161 where
62− actual = S.fromList (foldMap keys $ decode' $ encode hs)
62+ actual = foldMap keys (decode' $ encode hs)
6363
6464prop_valueAllHeadersAreRemoved
6565 :: MissingHeaders
6666 '["Authorization", "this is made up", "Server", "X-AccessToken"]
6767 -> Bool
6868prop_valueAllHeadersAreRemoved hs =
69− "Authorization" `S.notMember` actual
70− && "this is made up" `S.notMember` actual
71− && "Server" `S.notMember` actual
72− && "X-AccessToken" `S.notMember` actual
69+ "Authorization" `notMember` actual
70+ && "this is made up" `notMember` actual
71+ && "Server" `notMember` actual
72+ && "X-AccessToken" `notMember` actual
7373 where
74− actual = S.fromList (keys $ toJSON hs)
74+ actual = keys (toJSON hs)
7575
7676prop_encodingAllHeadersAreRemoved
7777 :: MissingHeaders
7878 '["Authorization", "this is made up", "Server", "X-AccessToken"]
7979 -> Bool
8080prop_encodingAllHeadersAreRemoved hs =
81− "Authorization" `S.notMember` actual
82− && "this is made up" `S.notMember` actual
83− && "Server" `S.notMember` actual
84− && "X-AccessToken" `S.notMember` actual
81+ "Authorization" `notMember` actual
82+ && "this is made up" `notMember` actual
83+ && "Server" `notMember` actual
84+ && "X-AccessToken" `notMember` actual
8585 where
86− actual = S.fromList (foldMap keys $ decode' $ encode hs)
86+ actual = foldMap keys (decode' $ encode hs)
8787
88−keys :: Value -> [Text]
88+keys :: Value -> HashSet Text
8989keys = \case
90− Object o -> Data.HashMap.Strict.keys o
90+ Object o -> Data.HashSet.fromMap (void o)
9191 _ -> mempty
92+
93+notMember x = not . Data.HashSet.member x
test/Rollbar/Item/Request/Test.hs+16−11
@@ -7,6 +7,9 @@ module Rollbar.Item.Request.Test where
77
88import Data.Aeson (Value(Object), decode', encode, toJSON)
99import Data.CaseInsensitive (original)
10+import Data.Foldable (fold)
11+import Data.Functor (void)
12+import Data.HashSet (HashSet)
1013import Data.Text (Text)
1114
1215import Prelude hiding (error)
@@ -16,10 +19,9 @@ import Rollbar.QuickCheck ()
1619
1720import Test.QuickCheck (conjoin, quickCheck)
1821
19−import Data.Set as S
20−import Data.Text.Encoding as TE
22+import qualified Data.Text.Encoding as TE
2123
22−import qualified Data.HashMap.Strict
24+import qualified Data.HashSet
2325
2426props :: IO ()
2527props =
@@ -30,19 +32,22 @@ props =
3032
3133prop_valueHeadersArentWrapped :: MissingHeaders '["Authorization"] -> Bool
3234prop_valueHeadersArentWrapped hs@(MissingHeaders rhs) =
33− actual `S.isSubsetOf` expected
35+ actual `isSubsetOf` expected
3436 where
35− actual = S.fromList (keys $ toJSON hs)
36− expected = S.fromList $ either (const "") id . TE.decodeUtf8' . original . fst <$> rhs
37+ actual = keys (toJSON hs)
38+ expected = Data.HashSet.fromList $ fold . TE.decodeUtf8' . original . fst <$> rhs
39+ isSubsetOf x y = Data.HashSet.difference x y == mempty
3740
3841prop_encodingHeadersArentWrapped :: MissingHeaders '["Authorization"] -> Bool
3942prop_encodingHeadersArentWrapped hs@(MissingHeaders rhs) =
40− actual `S.isSubsetOf` expected
43+ actual `isSubsetOf` expected
4144 where
42− actual = S.fromList (foldMap keys $ decode' $ encode hs)
43− expected = S.fromList $ either (const "") id . TE.decodeUtf8' . original . fst <$> rhs
45+ actual = foldMap keys (decode' $ encode hs)
46+ expected = Data.HashSet.fromList $ fold . TE.decodeUtf8' . original . fst <$> rhs
47+ isSubsetOf x y = Data.HashSet.difference x y == mempty
4448
45−keys :: Value -> [Text]
49+keys :: Value -> HashSet Text
4650keys = \case
47− Object o -> Data.HashMap.Strict.keys o
51+ Object o -> Data.HashSet.fromMap (void o)
4852 _ -> mempty
53+