@@ -1,14 +1,13 @@
1{-# LANGUAGE DataKinds #-}
1{-# LANGUAGE DataKinds #-}
2{-# LANGUAGE FlexibleContexts #-}
2{-# LANGUAGE FlexibleContexts #-}
3{-# LANGUAGE FlexibleInstances #-}
3{-# LANGUAGE FlexibleInstances #-}
4+{-# LANGUAGE LambdaCase #-}
4{-# LANGUAGE OverloadedStrings #-}
5{-# LANGUAGE OverloadedStrings #-}
5{-# LANGUAGE TypeOperators #-}
6{-# LANGUAGE TypeOperators #-}
6module Rollbar.Item.MissingHeaders.Test where
7module Rollbar.Item.MissingHeaders.Test where
8−import Control.Lens ((&), (^@..))
9+import Data.Aeson (Value(Object), decode', encode, toJSON)
10−import Data.Aeson (encode, toJSON)
11−import Data.Aeson.Lens (members)
10+import Data.Text (Text)
13import Prelude hiding (error)
12import Prelude hiding (error)
@@ -19,6 +18,8 @@ import Test.QuickCheck (conjoin, quickCheck)
20import Data.Set as S
19import Data.Set as S
21+import qualified Data.HashMap.Strict
22props :: IO ()
23props :: IO ()
24 quickCheck $ conjoin
25 quickCheck $ conjoin
@@ -40,25 +41,25 @@ prop_valueAuthorizationIsRemoved :: MissingHeaders '["Authorization"] -> Bool
40prop_valueAuthorizationIsRemoved hs =
41prop_valueAuthorizationIsRemoved hs =
41 "Authorization" `S.notMember` actual
42 "Authorization" `S.notMember` actual
43− actual = toJSON hs ^@.. members & fmap fst & S.fromList
44+ actual = S.fromList (keys $ toJSON hs)
45prop_encodingAuthorizationIsRemoved :: MissingHeaders '["Authorization"] -> Bool
46prop_encodingAuthorizationIsRemoved :: MissingHeaders '["Authorization"] -> Bool
46prop_encodingAuthorizationIsRemoved hs =
47prop_encodingAuthorizationIsRemoved hs =
47 "Authorization" `S.notMember` actual
48 "Authorization" `S.notMember` actual
49− actual = encode hs ^@.. members & fmap fst & S.fromList
50+ actual = S.fromList (foldMap keys $ decode' $ encode hs)
51prop_valueX_AccessTokenIsRemoved :: MissingHeaders '["X-AccessToken"] -> Bool
52prop_valueX_AccessTokenIsRemoved :: MissingHeaders '["X-AccessToken"] -> Bool
52prop_valueX_AccessTokenIsRemoved hs =
53prop_valueX_AccessTokenIsRemoved hs =
53 "X-AccessToken" `S.notMember` actual
54 "X-AccessToken" `S.notMember` actual
55− actual = toJSON hs ^@.. members & fmap fst & S.fromList
56+ actual = S.fromList (keys $ toJSON hs)
57prop_encodingX_AccessTokenIsRemoved :: MissingHeaders '["X-AccessToken"] -> Bool
58prop_encodingX_AccessTokenIsRemoved :: MissingHeaders '["X-AccessToken"] -> Bool
58prop_encodingX_AccessTokenIsRemoved hs =
59prop_encodingX_AccessTokenIsRemoved hs =
59 "X-AccessToken" `S.notMember` actual
60 "X-AccessToken" `S.notMember` actual
61− actual = encode hs ^@.. members & fmap fst & S.fromList
62+ actual = S.fromList (foldMap keys $ decode' $ encode hs)
63prop_valueAllHeadersAreRemoved
64prop_valueAllHeadersAreRemoved
64 :: MissingHeaders
65 :: MissingHeaders
@@ -70,7 +71,7 @@ prop_valueAllHeadersAreRemoved hs =
70 && "Server" `S.notMember` actual
71 && "Server" `S.notMember` actual
71 && "X-AccessToken" `S.notMember` actual
72 && "X-AccessToken" `S.notMember` actual
73− actual = toJSON hs ^@.. members & fmap fst & S.fromList
74+ actual = S.fromList (keys $ toJSON hs)
75prop_encodingAllHeadersAreRemoved
76prop_encodingAllHeadersAreRemoved
76 :: MissingHeaders
77 :: MissingHeaders
@@ -82,4 +83,9 @@ prop_encodingAllHeadersAreRemoved hs =
82 && "Server" `S.notMember` actual
83 && "Server" `S.notMember` actual
83 && "X-AccessToken" `S.notMember` actual
84 && "X-AccessToken" `S.notMember` actual
85− actual = encode hs ^@.. members & fmap fst & S.fromList
86+ actual = S.fromList (foldMap keys $ decode' $ encode hs)
88+keys :: Value -> [Text]
90+ Object o -> Data.HashMap.Strict.keys o