[
  {
    "description": "additionalProperties validates properties not matched by properties",
    "database": {
      "schemas": [
        {
          "$id": "schema1",
          "properties": {
            "foo": {
              "type": "string"
            },
            "bar": {
              "type": "number"
            }
          },
          "additionalProperties": {
            "type": "boolean"
          }
        }
      ]
    },
    "tests": [
      {
        "description": "defined properties are valid",
        "data": {
          "foo": "value",
          "bar": 123
        },
        "schema_id": "schema1",
        "action": "validate",
        "expect": {
          "success": true
        }
      },
      {
        "description": "additional property matching schema is valid",
        "data": {
          "foo": "value",
          "is_active": true,
          "hidden": false
        },
        "schema_id": "schema1",
        "action": "validate",
        "expect": {
          "success": true
        }
      },
      {
        "description": "additional property not matching schema is invalid",
        "data": {
          "foo": "value",
          "is_active": 1
        },
        "schema_id": "schema1",
        "action": "validate",
        "expect": {
          "success": false
        }
      }
    ]
  },
  {
    "description": "extensible: true with additionalProperties still validates structure",
    "database": {
      "schemas": [
        {
          "properties": {
            "foo": {
              "type": "string"
            }
          },
          "extensible": true,
          "additionalProperties": {
            "type": "integer"
          },
          "$id": "additionalProperties_1_0"
        }
      ]
    },
    "tests": [
      {
        "description": "additional property matching schema is valid",
        "data": {
          "foo": "hello",
          "count": 5,
          "age": 42
        },
        "schema_id": "additionalProperties_1_0",
        "action": "validate",
        "expect": {
          "success": true
        }
      },
      {
        "description": "additional property not matching schema is invalid despite extensible: true",
        "data": {
          "foo": "hello",
          "count": "five"
        },
        "schema_id": "additionalProperties_1_0",
        "action": "validate",
        "expect": {
          "success": false
        }
      }
    ]
  },
  {
    "description": "complex additionalProperties with object and array items",
    "database": {
      "schemas": [
        {
          "$id": "schema3",
          "properties": {
            "type": {
              "type": "string"
            }
          },
          "additionalProperties": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      ]
    },
    "tests": [
      {
        "description": "valid array of strings",
        "data": {
          "type": "my_type",
          "group_a": [
            "field1",
            "field2"
          ],
          "group_b": [
            "field3"
          ]
        },
        "schema_id": "schema3",
        "action": "validate",
        "expect": {
          "success": true
        }
      },
      {
        "description": "invalid array of integers",
        "data": {
          "type": "my_type",
          "group_a": [
            1,
            2
          ]
        },
        "schema_id": "schema3",
        "action": "validate",
        "expect": {
          "success": false
        }
      },
      {
        "description": "invalid non-array type",
        "data": {
          "type": "my_type",
          "group_a": "field1"
        },
        "schema_id": "schema3",
        "action": "validate",
        "expect": {
          "success": false
        }
      }
    ]
  }
]