packages feed

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)