jsonlogic-0.1.0.0: test/Operation/Array/TestFilter.hs
{-# LANGUAGE OverloadedLists #-}
module Operation.Array.TestFilter where
import JsonLogic.Json
import JsonLogic.Pure.Evaluator
import Test.Tasty
import Test.Tasty.HUnit as U
filterUnitTests :: TestTree
filterUnitTests =
testGroup
"Filter unit tests"
[ testCase "Boolean filter values" $
U.assertEqual
"Return True elements"
(Right $ JsonArray [JsonBool True, JsonBool True])
( apply
[]
( JsonObject
[ ( "filter",
JsonArray
[ JsonArray [JsonBool True, JsonBool False, JsonBool True],
JsonObject [("var", JsonString "")]
]
)
]
)
JsonNull
),
testCase "Smaller than filter values" $
U.assertEqual
"Only the first item is < 2"
(Right $ JsonArray [JsonNumber 1])
( apply
[]
( JsonObject
[ ( "filter",
JsonArray
[ JsonArray [JsonNumber 1, JsonNumber 3],
JsonObject [("<", JsonArray [JsonObject [("var", JsonString "")], JsonNumber 2])]
]
)
]
)
JsonNull
),
testCase "applyuate array values" $
U.assertEqual
"The array value gets applyuated to True and returned."
(Right $ JsonArray [JsonBool True])
( apply
[]
( JsonObject
[ ( "filter",
JsonArray
[ JsonArray
[ JsonBool False,
JsonObject [("<", JsonArray [JsonNumber 1, JsonNumber 2])]
],
JsonObject [("var", JsonString "")]
]
)
]
)
JsonNull
),
testCase "Empty array" $
U.assertEqual
"No errors occur when handed an empty array"
(Right $ JsonArray [])
( apply
[]
( JsonObject
[ ( "filter",
JsonArray
[ JsonArray [],
JsonObject [("var", JsonString "")]
]
)
]
)
JsonNull
),
testCase "Two consecutive filters" $
U.assertEqual
"Two consecutive filter more."
(Right $ JsonArray [JsonNumber 2])
( apply
[]
( JsonObject
[ ( "filter",
JsonArray
[ JsonObject
[ ( "filter",
JsonArray
[ JsonArray [JsonNumber 1, JsonNumber 2, JsonNumber 3],
JsonObject [("<=", JsonArray [JsonObject [("var", JsonString "")], JsonNumber 2])]
]
)
],
JsonObject [(">=", JsonArray [JsonObject [("var", JsonString "")], JsonNumber 2])]
]
)
]
)
JsonNull
)
]