@@ -0,0 +1,43 @@
1+module JsonSchemaSpec (spec, main) where
2+
3+import Data.Aeson as J
4+import Data.Proxy
5+import Data.Schematic
6+import Data.Vinyl
7+import JSONSchema.Draft4 as D4
8+import Test.Hspec
9+
10+
11+type ArraySchema = 'SchemaArray '[ 'AEq 1] ('SchemaNumber '[ 'NGt 10])
12+
13+type ArrayField = '("foo", ArraySchema)
14+
15+type FieldsSchema =
16+ '[ ArrayField, '("bar", 'SchemaOptional ('SchemaText '[ 'TEnum '["foo", "bar"]]))]
17+
18+type SchemaExample = 'SchemaObject FieldsSchema
19+
20+arrayData :: JsonRepr ArraySchema
21+arrayData = ReprArray [ReprNumber 13]
22+
23+arrayField :: FieldRepr ArrayField
24+arrayField = FieldRepr arrayData
25+
26+objectData :: Rec FieldRepr FieldsSchema
27+objectData = FieldRepr arrayData
28+ :& FieldRepr (ReprOptional (Just (ReprText "foo")))
29+ :& RNil
30+
31+exampleData :: JsonRepr SchemaExample
32+exampleData = ReprObject objectData
33+
34+spec :: Spec
35+spec = do
36+ it "validates simple schema" $ do
37+ let schema = D4.SchemaWithURI (toJsonSchema (Proxy @SchemaExample)) Nothing
38+ fetchHTTPAndValidate schema (toJSON exampleData) >>= \case
39+ Left _ -> fail "failed to validate test example"
40+ Right _ -> pure ()
41+
42+main :: IO ()
43+main = hspec spec