@@ -1,26 +1,23 @@
1−{-# LANGUAGE DataKinds #-}
1+{-# LANGUAGE DataKinds #-}
2−{-# LANGUAGE FlexibleContexts #-}
2+{-# LANGUAGE FlexibleContexts #-}
3{-# LANGUAGE FlexibleInstances #-}
3{-# LANGUAGE FlexibleInstances #-}
4−{-# LANGUAGE LambdaCase #-}
5{-# LANGUAGE OverloadedStrings #-}
4{-# LANGUAGE OverloadedStrings #-}
6−{-# LANGUAGE TypeOperators #-}
5+{-# LANGUAGE TypeOperators #-}
7module Rollbar.Item.MissingHeaders.Test where
6module Rollbar.Item.MissingHeaders.Test where
9−import Data.Aeson (Value (Object), decode', encode,
8+import Control.Lens ((&), (^@..))
11−import Data.Functor (void)
13−import Data.HashSet (HashSet)
14−import Data.Text (Text)
16−import Prelude hiding (error)
10+import Data.Aeson (encode, toJSON)
11+import Data.Aeson.Lens (members)
18−import Rollbar.Item.MissingHeaders (MissingHeaders (..))
13+import Prelude hiding (error)
19−import Rollbar.QuickCheck ()
21−import Test.QuickCheck (conjoin, quickCheck)
15+import Rollbar.Item.MissingHeaders (MissingHeaders(..))
16+import Rollbar.QuickCheck ()
23−import qualified Data.HashSet
18+import Test.QuickCheck (conjoin, quickCheck)
25props :: IO ()
22props :: IO ()
@@ -41,56 +38,48 @@ props = do
42prop_valueAuthorizationIsRemoved :: MissingHeaders '["Authorization"] -> Bool
39prop_valueAuthorizationIsRemoved :: MissingHeaders '["Authorization"] -> Bool
43prop_valueAuthorizationIsRemoved hs =
40prop_valueAuthorizationIsRemoved hs =
44− "Authorization" `notMember` actual
41+ "Authorization" `S.notMember` actual
46− actual = keys (toJSON hs)
43+ actual = toJSON hs ^@.. members & fmap fst & S.fromList
48prop_encodingAuthorizationIsRemoved :: MissingHeaders '["Authorization"] -> Bool
45prop_encodingAuthorizationIsRemoved :: MissingHeaders '["Authorization"] -> Bool
49prop_encodingAuthorizationIsRemoved hs =
46prop_encodingAuthorizationIsRemoved hs =
50− "Authorization" `notMember` actual
47+ "Authorization" `S.notMember` actual
52− actual = foldMap keys (decode' $ encode hs)
49+ actual = encode hs ^@.. members & fmap fst & S.fromList
54prop_valueX_AccessTokenIsRemoved :: MissingHeaders '["X-AccessToken"] -> Bool
51prop_valueX_AccessTokenIsRemoved :: MissingHeaders '["X-AccessToken"] -> Bool
55prop_valueX_AccessTokenIsRemoved hs =
52prop_valueX_AccessTokenIsRemoved hs =
56− "X-AccessToken" `notMember` actual
53+ "X-AccessToken" `S.notMember` actual
58− actual = keys (toJSON hs)
55+ actual = toJSON hs ^@.. members & fmap fst & S.fromList
60prop_encodingX_AccessTokenIsRemoved :: MissingHeaders '["X-AccessToken"] -> Bool
57prop_encodingX_AccessTokenIsRemoved :: MissingHeaders '["X-AccessToken"] -> Bool
61prop_encodingX_AccessTokenIsRemoved hs =
58prop_encodingX_AccessTokenIsRemoved hs =
62− "X-AccessToken" `notMember` actual
59+ "X-AccessToken" `S.notMember` actual
64− actual = foldMap keys (decode' $ encode hs)
61+ actual = encode hs ^@.. members & fmap fst & S.fromList
66prop_valueAllHeadersAreRemoved
63prop_valueAllHeadersAreRemoved
67 :: MissingHeaders
64 :: MissingHeaders
68 '["Authorization", "this is made up", "Server", "X-AccessToken"]
65 '["Authorization", "this is made up", "Server", "X-AccessToken"]
70prop_valueAllHeadersAreRemoved hs =
67prop_valueAllHeadersAreRemoved hs =
71− "Authorization" `notMember` actual
68+ "Authorization" `S.notMember` actual
72− && "this is made up" `notMember` actual
69+ && "this is made up" `S.notMember` actual
73− && "Server" `notMember` actual
70+ && "Server" `S.notMember` actual
74− && "X-AccessToken" `notMember` actual
71+ && "X-AccessToken" `S.notMember` actual
76− actual = keys (toJSON hs)
73+ actual = toJSON hs ^@.. members & fmap fst & S.fromList
78prop_encodingAllHeadersAreRemoved
75prop_encodingAllHeadersAreRemoved
79 :: MissingHeaders
76 :: MissingHeaders
80 '["Authorization", "this is made up", "Server", "X-AccessToken"]
77 '["Authorization", "this is made up", "Server", "X-AccessToken"]
82prop_encodingAllHeadersAreRemoved hs =
79prop_encodingAllHeadersAreRemoved hs =
83− "Authorization" `notMember` actual
80+ "Authorization" `S.notMember` actual
84− && "this is made up" `notMember` actual
81+ && "this is made up" `S.notMember` actual
85− && "Server" `notMember` actual
82+ && "Server" `S.notMember` actual
86− && "X-AccessToken" `notMember` actual
83+ && "X-AccessToken" `S.notMember` actual
88− actual = foldMap keys (decode' $ encode hs)
85+ actual = encode hs ^@.. members & fmap fst & S.fromList
90−keys :: Value -> HashSet Text
92− Object o -> Data.HashSet.fromMap (void o)
95−notMember :: (Eq a, Hashable a) => a -> HashSet a -> Bool
96−notMember x = not . Data.HashSet.member x