git.iko.soy/typeable/schematic
on union help sign in
typeable/schematic/test/JsonSchemaSpec.hs
44 lines 1.1 kB history raw
1module JsonSchemaSpec (spec, main) where
3import Data.Aeson as J
4import Data.Maybe
5import Data.Proxy
6import Data.Schematic
7import Data.Vinyl
8import JSONSchema.Draft4 as D4
9import Test.Hspec
12type ArraySchema = 'SchemaArray '[ 'AEq 1] ('SchemaNumber '[ 'NGt 10])
14type ArrayField = '("foo", ArraySchema)
16type FieldsSchema =
17 '[ ArrayField, '("bar", 'SchemaOptional ('SchemaText '[ 'TEnum '["foo", "bar"]]))]
19type SchemaExample = 'SchemaObject FieldsSchema
21arrayData :: JsonRepr ArraySchema
22arrayData = ReprArray [ReprNumber 13]
24arrayField :: FieldRepr ArrayField
25arrayField = FieldRepr arrayData
27objectData :: Rec FieldRepr FieldsSchema
28objectData = FieldRepr arrayData
29 :& FieldRepr (ReprOptional (Just (ReprText "foo")))
30 :& RNil
32exampleData :: JsonRepr SchemaExample
33exampleData = ReprObject objectData
35spec :: Spec
36spec = do
37 it "validates simple schema" $ do
38 let schema = D4.SchemaWithURI (fromJust $ toJsonSchema (Proxy @SchemaExample)) Nothing
39 fetchHTTPAndValidate schema (toJSON exampleData) >>= \case
40 Left _ -> fail "failed to validate test example"
41 Right _ -> pure ()
43main :: IO ()
44main = hspec spec