Use JSON schema check on POST request with WireMock

793 Views Asked by At

I'm using WireMock (Docker) docker.io/rodolpheche/wiremock:2.27.2-alpine. I set it up via Docker Compose and everything works flawlessly.

I'm trying to set up a stub/mapping to check the JSON input against the corresponding JSON schema. Basically, this is the stub/mapping:

{
  "name": "Create Character Stub",
  "request": {
    "headers": {
      "accept": {
        "caseInsensitive": true,
        "equalTo": "application/json"
      },
      "content-type": {
        "caseInsensitive": true,
        "equalTo": "application/json"
      }
    },
    "method": "POST",
    "url": "/api/characters",
    "body": {
      // [start] I made this up, but that's what I'm trying to achieve
      "type": "JSON_SCHEMA",
      "location": ""schemas/create-character.json""
      // [end]
    }
  },
  "response": {
    "headers": {
      "location": "{{ request.path }}/{{ randomValue type='UUID' }}"
    },
    "status": 201,
    "transformers": ["response-template"]
  }
}

...and this is (an excerpt of) the JSON schema:

{
  "$schema": "http://json-schema.org/draft/2019-09/schema#",
  "type": "object",
  "description": "Character entity",
  "properties": {
    "first_name": {
      "type": "string",
      "description": ""
    },
    "last_name": {
      "type": "string",
      "description": ""
    },
    "age": {
      "type": "number",
      "description": ""
    }
  },
  "additionalProperties": false,
  "required": ["first_name", "last_name", "age"]
}

Is there a way to accomplish this with WireMock? I've been searching for something like that for a while. The closer I've found is to use JSON path, but that's not quite the same as checking for a proper schema — and could be tedious task with long JSON requests.

I searched through the issues in the WireMock's GitHub repository, but I can only see this one (closed by the way). Still, I don't see a way to do exactly what I'm looking for. I just have as input a JSON schema.

0

There are 0 best solutions below