{
  "info": {
    "name": "Fun API — six API testing exercises",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json",
    "description": "Read-only training requests. Run in order; expected errors are passing test cases."
  },
  "variable": [
    {
      "key": "baseUrl",
      "value": "https://funapi.dev/api"
    }
  ],
  "event": [
    {
      "listen": "prerequest",
      "script": {
        "type": "text/javascript",
        "exec": [
          "if (!pm.variables.get('sandboxId')) pm.variables.set('sandboxId', pm.variables.replaceIn('{{$guid}}')); "
        ]
      }
    }
  ],
  "item": [
    {
      "name": "Existing character",
      "request": {
        "method": "GET",
        "header": [
          {
            "key": "X-Sandbox-ID",
            "value": "{{sandboxId}}"
          }
        ],
        "url": "{{baseUrl}}/friends/v1/characters/1"
      },
      "event": [
        {
          "listen": "test",
          "script": {
            "type": "text/javascript",
            "exec": [
              "pm.test('Existing character', () => { pm.response.to.have.status(200); pm.expect(pm.response.json().id).to.eql(1); });"
            ]
          }
        }
      ]
    },
    {
      "name": "Missing character",
      "request": {
        "method": "GET",
        "header": [
          {
            "key": "X-Sandbox-ID",
            "value": "{{sandboxId}}"
          }
        ],
        "url": "{{baseUrl}}/friends/v1/characters/999999"
      },
      "event": [
        {
          "listen": "test",
          "script": {
            "type": "text/javascript",
            "exec": [
              "pm.test('Missing character', () => { pm.response.to.have.status(404); pm.expect(pm.response.json().error).to.eql('Not Found'); });"
            ]
          }
        }
      ]
    },
    {
      "name": "Vegetarian pizzas",
      "request": {
        "method": "GET",
        "header": [
          {
            "key": "X-Sandbox-ID",
            "value": "{{sandboxId}}"
          }
        ],
        "url": "{{baseUrl}}/pizza/v1/menu?vegetarian=true"
      },
      "event": [
        {
          "listen": "test",
          "script": {
            "type": "text/javascript",
            "exec": [
              "pm.test('Vegetarian pizzas', () => { pm.response.to.have.status(200); const b = pm.response.json(); pm.expect(b.data.length).to.be.above(0); b.data.forEach(p => pm.expect(p.vegetarian).to.eql(true)); });"
            ]
          }
        }
      ]
    },
    {
      "name": "Invalid filter",
      "request": {
        "method": "GET",
        "header": [
          {
            "key": "X-Sandbox-ID",
            "value": "{{sandboxId}}"
          }
        ],
        "url": "{{baseUrl}}/pizza/v1/menu?vegetarian=sometimes"
      },
      "event": [
        {
          "listen": "test",
          "script": {
            "type": "text/javascript",
            "exec": [
              "pm.test('Invalid filter', () => { pm.response.to.have.status(400); pm.expect(pm.response.json().error).to.eql('Bad Request'); });"
            ]
          }
        }
      ]
    },
    {
      "name": "Intentional teapot",
      "request": {
        "method": "GET",
        "header": [
          {
            "key": "X-Sandbox-ID",
            "value": "{{sandboxId}}"
          }
        ],
        "url": "{{baseUrl}}/coffee/v1/teapot"
      },
      "event": [
        {
          "listen": "test",
          "script": {
            "type": "text/javascript",
            "exec": [
              "pm.test('Intentional teapot', () => { pm.response.to.have.status(418); pm.expect(pm.response.json()).to.have.property('error'); });"
            ]
          }
        }
      ]
    },
    {
      "name": "Intentional server error",
      "request": {
        "method": "GET",
        "header": [
          {
            "key": "X-Sandbox-ID",
            "value": "{{sandboxId}}"
          }
        ],
        "url": "{{baseUrl}}/pizza/v1/oven/status"
      },
      "event": [
        {
          "listen": "test",
          "script": {
            "type": "text/javascript",
            "exec": [
              "pm.test('Intentional server error', () => { pm.response.to.have.status(500); pm.expect(pm.response.json()).to.have.property('error'); });"
            ]
          }
        }
      ]
    }
  ]
}
