@@ -1,14 +1,13 @@
11{-# LANGUAGE DataKinds #-}
22{-# LANGUAGE FlexibleContexts #-}
33{-# LANGUAGE FlexibleInstances #-}
4+{-# LANGUAGE LambdaCase #-}
45{-# LANGUAGE OverloadedStrings #-}
56{-# LANGUAGE TypeOperators #-}
67module Rollbar.Item.MissingHeaders.Test where
78
8−import Control.Lens ((&), (^@..))
9−
10−import Data.Aeson (encode, toJSON)
11−import Data.Aeson.Lens (members)
9+import Data.Aeson (Value(Object), decode', encode, toJSON)
10+import Data.Text (Text)
1211
1312import Prelude hiding (error)
1413
@@ -19,6 +18,8 @@ import Test.QuickCheck (conjoin, quickCheck)
1918
2019import Data.Set as S
2120
21+import qualified Data.HashMap.Strict
22+
2223props :: IO ()
2324props = do
2425 quickCheck $ conjoin
@@ -40,25 +41,25 @@ prop_valueAuthorizationIsRemoved :: MissingHeaders '["Authorization"] -> Bool
4041prop_valueAuthorizationIsRemoved hs =
4142 "Authorization" `S.notMember` actual
4243 where
43− actual = toJSON hs ^@.. members & fmap fst & S.fromList
44+ actual = S.fromList (keys $ toJSON hs)
4445
4546prop_encodingAuthorizationIsRemoved :: MissingHeaders '["Authorization"] -> Bool
4647prop_encodingAuthorizationIsRemoved hs =
4748 "Authorization" `S.notMember` actual
4849 where
49− actual = encode hs ^@.. members & fmap fst & S.fromList
50+ actual = S.fromList (foldMap keys $ decode' $ encode hs)
5051
5152prop_valueX_AccessTokenIsRemoved :: MissingHeaders '["X-AccessToken"] -> Bool
5253prop_valueX_AccessTokenIsRemoved hs =
5354 "X-AccessToken" `S.notMember` actual
5455 where
55− actual = toJSON hs ^@.. members & fmap fst & S.fromList
56+ actual = S.fromList (keys $ toJSON hs)
5657
5758prop_encodingX_AccessTokenIsRemoved :: MissingHeaders '["X-AccessToken"] -> Bool
5859prop_encodingX_AccessTokenIsRemoved hs =
5960 "X-AccessToken" `S.notMember` actual
6061 where
61− actual = encode hs ^@.. members & fmap fst & S.fromList
62+ actual = S.fromList (foldMap keys $ decode' $ encode hs)
6263
6364prop_valueAllHeadersAreRemoved
6465 :: MissingHeaders
@@ -70,7 +71,7 @@ prop_valueAllHeadersAreRemoved hs =
7071 && "Server" `S.notMember` actual
7172 && "X-AccessToken" `S.notMember` actual
7273 where
73− actual = toJSON hs ^@.. members & fmap fst & S.fromList
74+ actual = S.fromList (keys $ toJSON hs)
7475
7576prop_encodingAllHeadersAreRemoved
7677 :: MissingHeaders
@@ -82,4 +83,9 @@ prop_encodingAllHeadersAreRemoved hs =
8283 && "Server" `S.notMember` actual
8384 && "X-AccessToken" `S.notMember` actual
8485 where
85− actual = encode hs ^@.. members & fmap fst & S.fromList
86+ actual = S.fromList (foldMap keys $ decode' $ encode hs)
87+
88+keys :: Value -> [Text]
89+keys = \case
90+ Object o -> Data.HashMap.Strict.keys o
91+ _ -> mempty