1[
2  {
3    "description": "Tests that validate custom message functionality where overrides can be provided at schema level for individual keywords",
4    "schema": {
5      "type": "object",
6      "properties": {
7        "foo": {
8          "type": "array",
9          "maxItems": 3,
10          "items" : {
11            "type" : "number"
12          },
13          "message" : {
14            "maxItems" : "Custom Message: Maximum 3 numbers can be given in 'foo'",
15            "type" : "Custom Message: Only numbers are supported in 'foo'"
16          }
17        },
18        "bar": {
19          "type": "string"
20        }
21      },
22      "message": {
23        "type" : "Custom Message: Invalid type provided"
24      }
25    },
26    "tests": [
27      {
28        "description": "Basic Success Test 1",
29        "data": {
30          "foo": [],
31          "bar": "Bar 1"
32        },
33        "valid": true
34      },
35      {
36        "description": "Basic Success Test 2",
37        "data": {
38          "foo": [1, 2],
39          "bar": "Bar 1"
40        },
41        "valid": true
42      },
43      {
44        "description": "Custom error message for keyword failing at top level - type keyword",
45        "data": {
46          "foo": [1, 2, 3],
47          "bar": 123
48        },
49        "valid": false,
50        "validationMessages": [
51          "Custom Message: Invalid type provided"
52        ]
53      },
54      {
55        "description": "Custom error message for keyword failing at nested property level - type keyword",
56        "data": {
57          "foo": [1, 2, "text"],
58          "bar": "Bar 1"
59        },
60        "valid": false,
61        "validationMessages": [
62          "Custom Message: Only numbers are supported in 'foo'"
63        ]
64      },
65      {
66        "description": "Custom error message for keyword failing at nested property level - maxItems keyword",
67        "data": {
68          "foo": [1, 2, 3, 4],
69          "bar": "Bar 1"
70        },
71        "valid": false,
72        "validationMessages": [
73          "Custom Message: Maximum 3 numbers can be given in 'foo'"
74        ]
75      },
76      {
77        "description": "Custom error message for keyword failing at both top level and nested property level - type keyword",
78        "data": {
79          "foo": [1, 2, "text"],
80          "bar": 123
81        },
82        "valid": false,
83        "validationMessages": [
84          "Custom Message: Invalid type provided",
85          "Custom Message: Only numbers are supported in 'foo'"
86        ]
87      },
88      {
89        "description": "Custom error message for keyword failing at both top level and nested property level - type keyword",
90        "data": {
91          "foo": [1, 2, "text", 3],
92          "bar": 123
93        },
94        "valid": false,
95        "validationMessages": [
96          "Custom Message: Invalid type provided",
97          "Custom Message: Only numbers are supported in 'foo'",
98          "Custom Message: Maximum 3 numbers can be given in 'foo'"
99        ]
100      }
101    ]
102  },
103  {
104    "description": "messages for keywords for different properties",
105    "schema": {
106      "type": "object",
107      "properties": {
108        "foo": {
109          "type": "number"
110        },
111        "bar": {
112          "type": "string"
113        }
114      },
115      "required": ["foo", "bar"],
116      "message": {
117        "type" : "should be an object",
118        "required": {
119          "foo" : "{0}: ''foo'' is required",
120          "bar" : "{0}: ''bar'' is required"
121        }
122      }
123    },
124    "tests": [
125      {
126        "description": "bar is required",
127        "data": {
128          "foo": 1
129        },
130        "valid": false,
131        "validationMessages": [
132          "$: 'bar' is required"
133        ]
134      },
135      {
136        "description": "foo is required",
137        "data": {
138          "bar": "bar"
139        },
140        "valid": false,
141        "validationMessages": [
142          "$: 'foo' is required"
143        ]
144      },
145      {
146        "description": "both foo and bar are required",
147        "data": {
148        },
149        "valid": false,
150        "validationMessages": [
151          "$: 'foo' is required",
152          "$: 'bar' is required"
153        ]
154      }
155   ]
156  },
157  {
158    "description": "messages for keywords with arguments",
159    "schema": {
160      "type": "object",
161      "properties": {
162        "requestedItems": {
163          "type": "array",
164          "minItems": 1,
165          "items": {
166            "properties": {
167              "item": {
168                "type": "string",
169                "minLength": 1,
170                "message": {
171                  "minLength": "{0}: Item should not be empty"
172                }
173              }
174            }
175          }
176        }
177      }
178    },
179    "tests": [
180      {
181        "description": "should not be empty",
182        "data": {
183          "requestedItems": [
184          {
185            "item": ""
186          }
187          ]
188        },
189        "valid": false,
190        "validationMessages": [
191          "$.requestedItems[0].item: Item should not be empty"
192        ]
193      }
194   ]
195  }
196]