hspec-expectations-json-1.0.0.0: tests/Test/Hspec/Expectations/Json/InternalSpec.hs
{-# LANGUAGE QuasiQuotes #-}
module Test.Hspec.Expectations.Json.InternalSpec
( spec
)
where
import Prelude
import Data.Aeson.QQ
import Test.Hspec
import Test.Hspec.Expectations.Json (shouldBeJson)
import Test.Hspec.Expectations.Json.Internal
spec :: Spec
spec = do
describe "pruneJson" $ do
it "prunes object keys from Superset not present in Subset" $ do
let
sup = Superset [aesonQQ|{ "foo": "foo", "baz": "baz" }|]
sub = Subset [aesonQQ|{ "foo": "bar" } |]
pruneJson sup sub `shouldBeJson` [aesonQQ|{ "foo": "foo" }|]
it "prunes object keys recursively Superset not present in Subset" $ do
let
sup = Superset [aesonQQ|
{ "foo": { "bar": "bar" , "baz": "baz" }
, "bat": "bat"
}
|]
sub = Subset [aesonQQ|
{ "foo": { "bar": "baz" }
}
|]
pruneJson sup sub `shouldBeJson` [aesonQQ|{ "foo": { "bar": "bar" } }|]
it "prunes objects within Arrays" $ do
let
sup = Superset [aesonQQ|
[ { "foo": "bar", "quix": "cats" }
, { "foo": "bats", "quix": "baz" }
]
|]
sub = Subset [aesonQQ|
[ { "foo": "zap" }
, { "foo": "zop" }
]
|]
pruneJson sup sub `shouldBeJson` [aesonQQ|
[ { "foo": "bar" }
, { "foo": "bats" }
]
|]
it "handles mismatching types" $ do
let
sup = Superset [aesonQQ|
{ "foo": { "bar": 1, "baz": "baz" }
, "bat": { "bat": 1 }
}
|]
sub = Subset [aesonQQ|
{ "foo": { "bar": "baz" }
, "bat": "bat"
}
|]
pruneJson sup sub `shouldBeJson` [aesonQQ|
{ "foo": { "bar": 1 }
, "bat": { "bat": 1 }
}
|]
describe "sortJsonArrays" $ do
it "sorts arrays" $ do
let
unsorted = [aesonQQ|["number_facts", "number_basics"]|]
sorted = [aesonQQ|["number_basics", "number_facts"]|]
sortJsonArrays unsorted `shouldBeJson` sorted
it "sorts arrays in object keys" $ do
let
unsorted = [aesonQQ|{ "x": ["number_facts", "number_basics"] }|]
sorted = [aesonQQ|{ "x": ["number_basics", "number_facts"] }|]
sortJsonArrays unsorted `shouldBeJson` sorted
it "works on arrays of nested arrays" $ do
let
unsorted = [aesonQQ|[{ "x": ["number_facts", "number_basics"] }]|]
sorted = [aesonQQ|[{ "x": ["number_basics", "number_facts"] }]|]
sortJsonArrays unsorted `shouldBeJson` sorted