patrol-0.1.0.1: source/test-suite/Patrol/Extra/AesonSpec.hs
{-# LANGUAGE QuasiQuotes #-}
module Patrol.Extra.AesonSpec where
import qualified Data.Aeson as Aeson
import qualified Data.Aeson.Key as Key
import qualified Data.Aeson.QQ.Simple as Aeson
import qualified Data.Map as Map
import qualified Patrol.Extra.Aeson as Extra
import qualified Test.Hspec as Hspec
spec :: Hspec.Spec
spec = Hspec.describe "Patrol.Extra.Aeson" $ do
Hspec.describe "intoObject" $ do
Hspec.it "works with an empty object" $ do
Extra.intoObject [] `Hspec.shouldBe` [Aeson.aesonQQ| {} |]
Hspec.it "strips null" $ do
Extra.intoObject [Extra.pair "k" Aeson.Null] `Hspec.shouldBe` [Aeson.aesonQQ| {} |]
Hspec.it "does not strip false" $ do
Extra.intoObject [Extra.pair "k" False] `Hspec.shouldBe` [Aeson.aesonQQ| { "k": false } |]
Hspec.it "does not strip zero" $ do
Extra.intoObject [Extra.pair "k" (0 :: Int)] `Hspec.shouldBe` [Aeson.aesonQQ| { "k": 0 } |]
Hspec.it "strips empty string" $ do
Extra.intoObject [Extra.pair "k" ""] `Hspec.shouldBe` [Aeson.aesonQQ| {} |]
Hspec.it "strips empty array" $ do
Extra.intoObject [Extra.pair "k" (mempty :: [Int])] `Hspec.shouldBe` [Aeson.aesonQQ| {} |]
Hspec.it "strips empty object" $ do
Extra.intoObject [Extra.pair "k" (mempty :: Map.Map String Int)] `Hspec.shouldBe` [Aeson.aesonQQ| {} |]
Hspec.describe "isEmpty" $ do
Hspec.it "is true for null" $ do
Aeson.Null `Hspec.shouldSatisfy` Extra.isEmpty
Hspec.it "is false for false" $ do
Aeson.Bool False `Hspec.shouldNotSatisfy` Extra.isEmpty
Hspec.it "is false for zero" $ do
Aeson.Number 0 `Hspec.shouldNotSatisfy` Extra.isEmpty
Hspec.it "is true for an empty string" $ do
Aeson.String mempty `Hspec.shouldSatisfy` Extra.isEmpty
Hspec.it "is true for an empty array" $ do
Aeson.Array mempty `Hspec.shouldSatisfy` Extra.isEmpty
Hspec.it "is true for an empty object" $ do
Aeson.Object mempty `Hspec.shouldSatisfy` Extra.isEmpty
Hspec.describe "pair" $ do
Hspec.it "works" $ do
Extra.pair "key" False `Hspec.shouldBe` (Key.fromString "key", Aeson.Bool False)