git.iko.soy/typeable/rollbar-hs
on master help sign in
Merge pull request #12 from joneshf/drop-dependencies

Drop dependencies

commit2ff6701ddf22f4a71be3e190176ce5c946bd153a authorHardy Jones <jones3.hardy@gmail.com> dateSun 29 Jul 2018, 19:53 (8 years ago) parenta78cb838e74691
4 files changed+87−61
package.yaml+1−3 test/Rollbar/Item/Data/Test.hs+18−10 test/Rollbar/Item/MissingHeaders/Test.hs+39−30 test/Rollbar/Item/Request/Test.hs+29−18
package.yaml+1−3
@@ -36,13 +36,11 @@ 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
42− - lens >= 4.15
43− - lens-aeson >= 1.0
4441 - rollbar-hs
4542 - text >= 1.2
43+ - unordered-containers >= 0.2
4644 main: Main.hs
4745 source-dirs: test
4846version: '0.3.0.1'
test/Rollbar/Item/Data/Test.hs+18−10
@@ -1,17 +1,18 @@
1−{-# LANGUAGE DataKinds #-}
1+{-# LANGUAGE DataKinds #-}
2+{-# LANGUAGE LambdaCase #-}
23{-# LANGUAGE OverloadedStrings #-}
34module Rollbar.Item.Data.Test where
45
5−import Control.Lens ((^@..))
6+import Data.Aeson (Value (Null, Object), decode', encode,
7+ toJSON)
8+import Data.Text (Text)
69
7−import Data.Aeson (encode, toJSON)
8−import Data.Aeson.Lens (key, members)
9−import Data.Text (Text)
10+import Rollbar.Item
11+import Rollbar.QuickCheck ()
1012
11−import Rollbar.Item
12−import Rollbar.QuickCheck ()
13+import Test.QuickCheck (conjoin, quickCheck)
1314
14−import Test.QuickCheck (conjoin, quickCheck)
15+import qualified Data.HashMap.Strict
1516
1617props :: IO ()
1718props =
@@ -24,13 +25,20 @@ prop_valueDataBodyHasRequiredKey :: Data () '["Authorization"] -> Bool
2425prop_valueDataBodyHasRequiredKey x =
2526 length ms == 1 && fst (head ms) `elem` requiredBodyKeys
2627 where
27− ms = toJSON x ^@.. key "body" . members
28+ ms = key "body" (toJSON x)
2829
2930prop_encodingDataBodyHasRequiredKey :: Data () '["Authorization"] -> Bool
3031prop_encodingDataBodyHasRequiredKey x =
3132 length ms == 1 && fst (head ms) `elem` requiredBodyKeys
3233 where
33− ms = encode x ^@.. key "body" . members
34+ ms = foldMap (key "body") (decode' $ encode x)
3435
3536requiredBodyKeys :: [Text]
3637requiredBodyKeys = ["trace", "trace_chain", "message", "crash_report"]
38+
39+key :: Text -> Value -> [(Text, Value)]
40+key k = \case
41+ Object o -> case Data.HashMap.Strict.lookupDefault Null k o of
42+ Object o -> Data.HashMap.Strict.toList o
43+ _ -> mempty
44+ _ -> mempty
test/Rollbar/Item/MissingHeaders/Test.hs+39−30
@@ -1,23 +1,25 @@
1−{-# LANGUAGE DataKinds #-}
2−{-# LANGUAGE FlexibleContexts #-}
1+{-# LANGUAGE DataKinds #-}
2+{-# LANGUAGE FlexibleContexts #-}
33{-# LANGUAGE FlexibleInstances #-}
4+{-# LANGUAGE LambdaCase #-}
45{-# LANGUAGE OverloadedStrings #-}
5−{-# LANGUAGE TypeOperators #-}
6+{-# LANGUAGE TypeOperators #-}
67module Rollbar.Item.MissingHeaders.Test where
78
8−import Control.Lens ((&), (^@..))
9+import Data.Aeson (Value (Object), decode', encode,
10+ toJSON)
11+import Data.Functor (void)
12+import Data.HashSet (HashSet)
13+import Data.Text (Text)
914
10−import Data.Aeson (encode, toJSON)
11−import Data.Aeson.Lens (members)
15+import Prelude hiding (error)
1216
13−import Prelude hiding (error)
17+import Rollbar.Item.MissingHeaders (MissingHeaders (..))
18+import Rollbar.QuickCheck ()
1419
15−import Rollbar.Item.MissingHeaders (MissingHeaders(..))
16−import Rollbar.QuickCheck ()
20+import Test.QuickCheck (conjoin, quickCheck)
1721
18−import Test.QuickCheck (conjoin, quickCheck)
19−
20−import Data.Set as S
22+import qualified Data.HashSet
2123
2224props :: IO ()
2325props = do
@@ -38,48 +40,55 @@ props = do
3840
3941prop_valueAuthorizationIsRemoved :: MissingHeaders '["Authorization"] -> Bool
4042prop_valueAuthorizationIsRemoved hs =
41− "Authorization" `S.notMember` actual
43+ "Authorization" `notMember` actual
4244 where
43− actual = toJSON hs ^@.. members & fmap fst & S.fromList
45+ actual = keys (toJSON hs)
4446
4547prop_encodingAuthorizationIsRemoved :: MissingHeaders '["Authorization"] -> Bool
4648prop_encodingAuthorizationIsRemoved hs =
47− "Authorization" `S.notMember` actual
49+ "Authorization" `notMember` actual
4850 where
49− actual = encode hs ^@.. members & fmap fst & S.fromList
51+ actual = foldMap keys (decode' $ encode hs)
5052
5153prop_valueX_AccessTokenIsRemoved :: MissingHeaders '["X-AccessToken"] -> Bool
5254prop_valueX_AccessTokenIsRemoved hs =
53− "X-AccessToken" `S.notMember` actual
55+ "X-AccessToken" `notMember` actual
5456 where
55− actual = toJSON hs ^@.. members & fmap fst & S.fromList
57+ actual = keys (toJSON hs)
5658
5759prop_encodingX_AccessTokenIsRemoved :: MissingHeaders '["X-AccessToken"] -> Bool
5860prop_encodingX_AccessTokenIsRemoved hs =
59− "X-AccessToken" `S.notMember` actual
61+ "X-AccessToken" `notMember` actual
6062 where
61− actual = encode hs ^@.. members & fmap fst & S.fromList
63+ actual = foldMap keys (decode' $ encode hs)
6264
6365prop_valueAllHeadersAreRemoved
6466 :: MissingHeaders
6567 '["Authorization", "this is made up", "Server", "X-AccessToken"]
6668 -> Bool
6769prop_valueAllHeadersAreRemoved hs =
68− "Authorization" `S.notMember` actual
69− && "this is made up" `S.notMember` actual
70− && "Server" `S.notMember` actual
71− && "X-AccessToken" `S.notMember` actual
70+ "Authorization" `notMember` actual
71+ && "this is made up" `notMember` actual
72+ && "Server" `notMember` actual
73+ && "X-AccessToken" `notMember` actual
7274 where
73− actual = toJSON hs ^@.. members & fmap fst & S.fromList
75+ actual = keys (toJSON hs)
7476
7577prop_encodingAllHeadersAreRemoved
7678 :: MissingHeaders
7779 '["Authorization", "this is made up", "Server", "X-AccessToken"]
7880 -> Bool
7981prop_encodingAllHeadersAreRemoved hs =
80− "Authorization" `S.notMember` actual
81− && "this is made up" `S.notMember` actual
82− && "Server" `S.notMember` actual
83− && "X-AccessToken" `S.notMember` actual
82+ "Authorization" `notMember` actual
83+ && "this is made up" `notMember` actual
84+ && "Server" `notMember` actual
85+ && "X-AccessToken" `notMember` actual
8486 where
85− actual = encode hs ^@.. members & fmap fst & S.fromList
87+ actual = foldMap keys (decode' $ encode hs)
88+
89+keys :: Value -> HashSet Text
90+keys = \case
91+ Object o -> Data.HashSet.fromMap (void o)
92+ _ -> mempty
93+
94+notMember x = not . Data.HashSet.member x
test/Rollbar/Item/Request/Test.hs+29−18
@@ -1,24 +1,27 @@
1−{-# LANGUAGE DataKinds #-}
1+{-# LANGUAGE DataKinds #-}
22{-# LANGUAGE FlexibleInstances #-}
3+{-# LANGUAGE LambdaCase #-}
34{-# LANGUAGE OverloadedStrings #-}
4−{-# LANGUAGE TypeOperators #-}
5+{-# LANGUAGE TypeOperators #-}
56module Rollbar.Item.Request.Test where
67
7−import Control.Lens ((&), (^@..))
8+import Data.Aeson (Value (Object), decode', encode, toJSON)
9+import Data.CaseInsensitive (original)
10+import Data.Foldable (fold)
11+import Data.Functor (void)
12+import Data.HashSet (HashSet)
13+import Data.Text (Text)
814
9−import Data.Aeson (encode, toJSON)
10−import Data.Aeson.Lens (members)
11−import Data.CaseInsensitive (original)
15+import Prelude hiding (error)
1216
13−import Prelude hiding (error)
17+import Rollbar.Item.Request (MissingHeaders (..))
18+import Rollbar.QuickCheck ()
1419
15−import Rollbar.Item.Request (MissingHeaders(..))
16−import Rollbar.QuickCheck ()
20+import Test.QuickCheck (conjoin, quickCheck)
1721
18−import Test.QuickCheck (conjoin, quickCheck)
22+import qualified Data.Text.Encoding as TE
1923
20−import Data.Set as S
21−import Data.Text.Encoding as TE
24+import qualified Data.HashSet
2225
2326props :: IO ()
2427props =
@@ -29,14 +32,22 @@ props =
2932
3033prop_valueHeadersArentWrapped :: MissingHeaders '["Authorization"] -> Bool
3134prop_valueHeadersArentWrapped hs@(MissingHeaders rhs) =
32− actual `S.isSubsetOf` expected
35+ actual `isSubsetOf` expected
3336 where
34− actual = toJSON hs ^@.. members & fmap fst & S.fromList
35− 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
3640
3741prop_encodingHeadersArentWrapped :: MissingHeaders '["Authorization"] -> Bool
3842prop_encodingHeadersArentWrapped hs@(MissingHeaders rhs) =
39− actual `S.isSubsetOf` expected
43+ actual `isSubsetOf` expected
4044 where
41− actual = encode hs ^@.. members & fmap fst & S.fromList
42− 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
48+
49+keys :: Value -> HashSet Text
50+keys = \case
51+ Object o -> Data.HashSet.fromMap (void o)
52+ _ -> mempty
53+