{-# LANGUAGE QuasiQuotes #-} module JSONSchema.Draft4.BasicTypeTests where import NeatInterpolation import Protolude import Test.Hspec import TestUtils testBasicTypesSingleStringInstance :: Spec testBasicTypesSingleStringInstance = it "can handle a single instance of a string" $ let j1 = [text| "string" |] expected = [text| {"type": "string"} |] in testJsonsToSchema [j1] expected testBasicTypesSingleIntegerInstance :: Spec testBasicTypesSingleIntegerInstance = it "can handle a single instance of a integer" $ let j1 = [text| 1 |] expected = [text| {"type": "integer"} |] in testJsonsToSchema [j1] expected testBasicTypesSingleNumberInstance :: Spec testBasicTypesSingleNumberInstance = it "can handle a single instance of a number" $ let j1 = [text| 2.1 |] expected = [text| {"type": "number"} |] in testJsonsToSchema [j1] expected testBasicTypesSingleBooleanInstance :: Spec testBasicTypesSingleBooleanInstance = it "can handle a single instance of a boolean" $ let j1 = [text| true |] expected = [text| {"type": "boolean"} |] in testJsonsToSchema [j1] expected testBasicTypesSingleNullInstance :: Spec testBasicTypesSingleNullInstance = it "can handle a single instance of a null" $ let j1 = [text| null |] expected = [text| {"type": "null"} |] in testJsonsToSchema [j1] expected testBasicTypesSingleType :: Spec testBasicTypesSingleType = it "can handle multiple JSON examples of a single type" $ let j1 = [text| "bacon" |] j2 = [text| "eggs" |] j3 = [text| "spam" |] expected = [text| {"type": "string"} |] in testJsonsToSchema [j1, j2, j3] expected testBasicTypesMultipleType :: Spec testBasicTypesMultipleType = it "can handle multiple JSON examples of multiple different types" $ let j1 = [text| "bacon" |] j2 = [text| 2.2 |] j3 = [text| true |] j4 = [text| null |] expected = [text| {"type": ["boolean", "null", "number", "string"]} |] in testJsonsToSchema [j1, j2, j3, j4] expected testBasicTypesIntegerType :: Spec testBasicTypesIntegerType = it "can handle the Integer type when given an integer" $ -- TODO: this should eventually unify to just number let j1 = [text| 2.14 |] j2 = [text| 32 |] expected = [text| {"type": ["number", "integer"]} |] in testJsonsToSchema [j1, j2] expected