0

I want to stub and check the message body in POST request in mountebank,

{
  "port": "22001",
  "protocol": "http",
  "name": "login_user",
  "stubs": [
    {
      "responses": [
        {
          "is": {
            "statusCode": 201,
            "headers": {
              "Content-Type": "application/json"
            },
            "body": {}
          },
          "_behaviors": {
            "wait": 100
          }
        }
      ],
      "predicates": [
        {
          "equals": {
            "path": "/login_user",
            "method": "POST",
            "headers": {
              "Content-Type": "application/json"
            },
            "body": {
              "name": "Tony",
              "age": "20"
            }
          }
        }
      ]
    }
  ]
}

if a message body in JSON format. expected response status Code 200.

for Example

{ 
  "body": {
    "name": "Tony",
    "age": "20"
  }
}

if a message body in JSON format but JSON string. expected response status Code 400.

for Example

{ 
  "body": "{\"name\": \"Tony\", \"age\": \"20\"}"
}

1 Answers1

0

You could achieve this with a 'matches' predicate containing a (pretty crude in this example) regex to capture any string input and return a 400:

  "stubs": [
    {
      "responses": [
        {
          "is": {
            "statusCode": 400,
            "headers": {
              "Content-Type": "application/json"
            },
            "body": {}
          },
          "_behaviors": {
            "wait": 100
          }
        }
      ],
      "predicates": [
        {
          "matches": {
            "path": "/login_user",
            "method": "POST",
            "body": ".*\\\\\\\"name.*"
          }
        }
      ]
    },
    {
      "responses": [
        {
          "is": {
            "statusCode": 201,
            "headers": {
              "Content-Type": "application/json"
            },
            "body": {}
          },
          "_behaviors": {
            "wait": 100
          }
        }
      ],
      "predicates": [
        {
          "equals": {
            "path": "/login_user",
            "method": "POST",
            "headers": {
              "Content-Type": "application/json"
            },
            "body": {
              "name": "Tony",
              "age": "20"
            }
          }
        }
      ]
    }
  ]

Alternatively, you can also specify a default response code of 400 in the imposter declaration, so that anything that doesn't match a specific predicate will return a 400 response by default:

{
  "port": "22001",
  "protocol": "http",
  "name": "login_user",
  "defaultResponse": {
      "statusCode": 400
  },
  "stubs": [
    {
.... snip ....
Emdee82
  • 86
  • 4