packages feed

json-schema-0.7.4.2: tests/Test/Validate.hs

{-# OPTIONS -fno-warn-missing-signatures #-}
{-# LANGUAGE
    OverloadedStrings
  , TemplateHaskell
  #-}
module Test.Validate (tests) where

import Prelude.Compat

import Data.ByteString.Lazy
import Data.Vector as V
import Test.Tasty
import Test.Tasty.HUnit
import Test.Tasty.TH

import Data.JSON.Schema
import Data.JSON.Schema.Combinators
import Data.JSON.Schema.Validate
import Test.Util

tests :: TestTree
tests = $testGroupGenerator

case_valid = do
  check [] number "1"
  check [] value "\"x\""
  check [] (field "p" True number) "{\"p\" : 1}"
  check [] (nullable value) "\"x\""
  check [] (nullable value) "null"

case_lengthBound = do
  check [err (v []) (LengthBoundError (LengthBound (Just 0) (Just 1)) 3)]
        (Value (LengthBound (Just 0) (Just 1)))
        "\"xyz\""

case_requiredProp = do
  check [err (v []) (MissingRequiredField "a")]
        (field "a" True number)
        "{}"
  check [err (v []) (MissingRequiredField "a")]
        (field "a" True (field "b" True number))
        "{}"
  check [err (v ["a"]) (MissingRequiredField "b")]
        (field "a" True (field "b" True number))
        "{\"a\":{}}"
  check [err (v ["a","b"]) (MissingRequiredField "c")]
        (field "a" True (field "b" True (field "c" True number)))
        "{\"a\":{\"b\":{}}}"

check :: [ValidationError] -> Schema -> ByteString -> Assertion
check errs s val = v errs @=? validate s (unsafeParse val)

err = ValidationError

v :: [a] -> Vector a
v = V.fromList