packages feed

hjsonschema-1.0.0.0: test/Local/Failure.hs

module Local.Failure where

import           Prelude

import           Data.Aeson
import qualified Data.Aeson.Pointer          as P
import           Data.Monoid
import           Test.Tasty                  (TestTree)
import qualified Test.Tasty.HUnit            as HU

import           Data.JsonSchema.Draft4
import           Data.JsonSchema.Draft4.Spec (validate)
import qualified Data.Validator.Draft4.Array as AR

correctPaths :: [TestTree]
correctPaths =
    [ HU.testCase "Items object" itemsObject
    , HU.testCase "Items array" itemsArray
    ]

itemsObject :: IO ()
itemsObject =
    HU.assertEqual
        "Path to invalid data"
        [Failure (Items UniqueItems) (Bool True) (P.Pointer [P.Token "0"])
                 (toJSON [True, True])
        ]
        failures
  where
    failures = validate (ReferencedSchemas schema mempty)
                        sw (toJSON [[True, True]])

    schema :: Schema
    schema = emptySchema
        { _schemaItems = Just $ AR.ItemsObject
            (emptySchema { _schemaUniqueItems = Just True })
        }

    sw :: SchemaWithURI Schema
    sw = SchemaWithURI
        { _swSchema = schema
        , _swURI    = Nothing
        }

itemsArray :: IO ()
itemsArray =
    HU.assertEqual
        "Path to invalid data"
        [Failure (Items UniqueItems) (Bool True) (P.Pointer [P.Token "0"])
                 (toJSON [True, True])
        ]
        failures
  where
    failures = validate (ReferencedSchemas schema mempty)
                        sw (toJSON [[True, True]])

    schema :: Schema
    schema = emptySchema
        { _schemaItems = Just $ AR.ItemsArray
            [emptySchema { _schemaUniqueItems = Just True }]
        }

    sw :: SchemaWithURI Schema
    sw = SchemaWithURI
        { _swSchema = schema
        , _swURI    = Nothing
        }