@@ -1,24 +1,26 @@
1−{-# LANGUAGE DataKinds #-}
2−{-# LANGUAGE FlexibleContexts #-}
1+{-# LANGUAGE DataKinds #-}
2+{-# LANGUAGE FlexibleContexts #-}
33{-# LANGUAGE FlexibleInstances #-}
4−{-# LANGUAGE LambdaCase #-}
4+{-# LANGUAGE LambdaCase #-}
55{-# LANGUAGE OverloadedStrings #-}
6−{-# LANGUAGE TypeOperators #-}
6+{-# 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,
10+ toJSON)
11+import Data.Functor (void)
12+import Data.Hashable
13+import Data.HashSet (HashSet)
14+import Data.Text (Text)
1115
12−import Prelude hiding (error)
16+import Prelude hiding (error)
1317
14−import Rollbar.Item.MissingHeaders (MissingHeaders(..))
15−import Rollbar.QuickCheck ()
18+import Rollbar.Item.MissingHeaders (MissingHeaders (..))
19+import Rollbar.QuickCheck ()
1620
17−import Test.QuickCheck (conjoin, quickCheck)
21+import Test.QuickCheck (conjoin, quickCheck)
1822
19−import Data.Set as S
20−
21−import qualified Data.HashMap.Strict
23+import qualified Data.HashSet
2224
2325props :: IO ()
2426props = do
@@ -39,53 +41,56 @@ props = do
3941
4042prop_valueAuthorizationIsRemoved :: MissingHeaders '["Authorization"] -> Bool
4143prop_valueAuthorizationIsRemoved hs =
42− "Authorization" `S.notMember` actual
44+ "Authorization" `notMember` actual
4345 where
44− actual = S.fromList (keys $ toJSON hs)
46+ actual = keys (toJSON hs)
4547
4648prop_encodingAuthorizationIsRemoved :: MissingHeaders '["Authorization"] -> Bool
4749prop_encodingAuthorizationIsRemoved hs =
48− "Authorization" `S.notMember` actual
50+ "Authorization" `notMember` actual
4951 where
50− actual = S.fromList (foldMap keys $ decode' $ encode hs)
52+ actual = foldMap keys (decode' $ encode hs)
5153
5254prop_valueX_AccessTokenIsRemoved :: MissingHeaders '["X-AccessToken"] -> Bool
5355prop_valueX_AccessTokenIsRemoved hs =
54− "X-AccessToken" `S.notMember` actual
56+ "X-AccessToken" `notMember` actual
5557 where
56− actual = S.fromList (keys $ toJSON hs)
58+ actual = keys (toJSON hs)
5759
5860prop_encodingX_AccessTokenIsRemoved :: MissingHeaders '["X-AccessToken"] -> Bool
5961prop_encodingX_AccessTokenIsRemoved hs =
60− "X-AccessToken" `S.notMember` actual
62+ "X-AccessToken" `notMember` actual
6163 where
62− actual = S.fromList (foldMap keys $ decode' $ encode hs)
64+ actual = foldMap keys (decode' $ encode hs)
6365
6466prop_valueAllHeadersAreRemoved
6567 :: MissingHeaders
6668 '["Authorization", "this is made up", "Server", "X-AccessToken"]
6769 -> Bool
6870prop_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
71+ "Authorization" `notMember` actual
72+ && "this is made up" `notMember` actual
73+ && "Server" `notMember` actual
74+ && "X-AccessToken" `notMember` actual
7375 where
74− actual = S.fromList (keys $ toJSON hs)
76+ actual = keys (toJSON hs)
7577
7678prop_encodingAllHeadersAreRemoved
7779 :: MissingHeaders
7880 '["Authorization", "this is made up", "Server", "X-AccessToken"]
7981 -> Bool
8082prop_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
83+ "Authorization" `notMember` actual
84+ && "this is made up" `notMember` actual
85+ && "Server" `notMember` actual
86+ && "X-AccessToken" `notMember` actual
8587 where
86− actual = S.fromList (foldMap keys $ decode' $ encode hs)
88+ actual = foldMap keys (decode' $ encode hs)
8789
88−keys :: Value -> [Text]
90+keys :: Value -> HashSet Text
8991keys = \case
90− Object o -> Data.HashMap.Strict.keys o
92+ Object o -> Data.HashSet.fromMap (void o)
9193 _ -> mempty
94+
95+notMember :: (Eq a, Hashable a) => a -> HashSet a -> Bool
96+notMember x = not . Data.HashSet.member x