jsonlogic-0.1.0.0: test/Operation/Array/TestIn.hs
{-# LANGUAGE OverloadedLists #-}
module Operation.Array.TestIn where
import qualified Data.List as L
import Generator.Generic
import Hedgehog (forAll, property, (===))
import JsonLogic.Json (Json (..))
import JsonLogic.Pure.Evaluator
import Test.Tasty
import Test.Tasty.HUnit as U
import Utils
inUnitTests :: TestTree
inUnitTests =
testGroup
"In unit tests"
[ testCase "logic{\"in\":\"[\"\", \"test\"]\"} data{}" $
U.assertEqual
"Empty string case"
(Right $ JsonBool True)
(apply [] (JsonObject [("in", JsonArray [JsonString "", JsonString "test"])]) JsonNull),
testCase "logic{\"in\":\"[\"Spring\", \"Springfield\"]\"} data{}" $
U.assertEqual
"True case"
(Right $ JsonBool True)
(apply [] (JsonObject [("in", JsonArray [JsonString "Spring", JsonString "Springfield"])]) JsonNull),
testCase "logic{\"in\":\"[\"Test\", {\"var\":\"x\"}]\"} data{\"x\":\"testcase\"}" $
U.assertEqual
"False case"
(Right $ JsonBool False)
(apply [] (JsonObject [("in", JsonArray [JsonString "Test", JsonObject [("var", JsonString "x")]])]) (JsonObject [("x", JsonString "testcase")])),
testCase "logic{\"in\":\"[\"\", []]\"} data{}" $
U.assertEqual
"Empty string case"
(Right $ JsonBool False)
(apply [] (JsonObject [("in", JsonArray [JsonString "", JsonArray []])]) JsonNull),
testCase "logic{\"in\":\"[\"Ringo\", [\"John\", \"Paul\", \"George\", \"Ringo\"]]\"} data{}" $
U.assertEqual
"True case"
(Right $ JsonBool True)
(apply [] (JsonObject [("in", JsonArray [JsonString "Ringo", JsonArray [JsonString "John", JsonString "Paul", JsonString "George", JsonString "Ringo"]])]) JsonNull),
testCase "logic{\"in\":\"[\"Ringo\", {\"var\":\"x\"}]\"} data{\"x\":[\"John\", \"Paul\", \"George\"]}" $
U.assertEqual
"False case"
(Right $ JsonBool False)
(apply [] (JsonObject [("in", JsonArray [JsonString "Ringo", JsonObject [("var", JsonString "x")]])]) (JsonObject [("x", JsonArray [JsonString "John", JsonString "Paul", JsonString "George"])]))
]
inGeneratorTests :: TestTree
inGeneratorTests =
testGroup
"In generator tests"
[ hTestProperty "in strings" $
property $ do
(jsonString1, string1) <- forAll genGenericJsonString
(jsonString2, string2) <- forAll genGenericJsonString
let rule = JsonObject [("in", JsonArray [jsonString1, jsonString2])]
expected = JsonBool (string1 `L.isInfixOf` string2)
Right expected === apply [] rule JsonNull
]