{
  "info": {
    "name": "Todo REST · run in order",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
  },
  "item": [
    {
      "name": "01 List",
      "event": [
        {
          "listen": "test",
          "script": {
            "type": "text/javascript",
            "exec": [
              "pm.test('HTTP 200', () => pm.response.to.have.status(200));",
              "pm.test('Array', () => pm.expect(pm.response.json()).to.be.an('array'));"
            ]
          }
        }
      ],
      "request": {
        "method": "GET",
        "header": [],
        "url": "{{baseUrl}}/api/todos"
      }
    },
    {
      "name": "02 Create",
      "event": [
        {
          "listen": "test",
          "script": {
            "type": "text/javascript",
            "exec": [
              "pm.test('HTTP 201', () => pm.response.to.have.status(201));",
              "if(pm.response.code === 201) pm.environment.set('todoId',pm.response.json().id);",
              "pm.test('Location', () => pm.expect(pm.response.headers.get('Location')).to.include('/api/todos/'));"
            ]
          }
        }
      ],
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": "{{baseUrl}}/api/todos",
        "body": {
          "mode": "raw",
          "raw": "{\n  \"title\": \"Learn Spring REST\",\n  \"completed\": false\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    },
    {
      "name": "03 Read",
      "event": [
        {
          "listen": "test",
          "script": {
            "type": "text/javascript",
            "exec": [
              "pm.test('HTTP 200', () => pm.response.to.have.status(200));",
              "pm.test('Saved id', () => pm.expect(pm.response.json().id).to.eql(pm.environment.get('todoId')));"
            ]
          }
        }
      ],
      "request": {
        "method": "GET",
        "header": [],
        "url": "{{baseUrl}}/api/todos/{{todoId}}"
      }
    },
    {
      "name": "04 Update",
      "event": [
        {
          "listen": "test",
          "script": {
            "type": "text/javascript",
            "exec": [
              "pm.test('HTTP 200', () => pm.response.to.have.status(200));",
              "pm.test('Updated', () => pm.expect(pm.response.json().completed).to.eql(true));"
            ]
          }
        }
      ],
      "request": {
        "method": "PUT",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": "{{baseUrl}}/api/todos/{{todoId}}",
        "body": {
          "mode": "raw",
          "raw": "{\n  \"title\": \"Teach Spring REST\",\n  \"completed\": true\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    },
    {
      "name": "05 Blank rejected",
      "event": [
        {
          "listen": "test",
          "script": {
            "type": "text/javascript",
            "exec": [
              "pm.test('HTTP 400', () => pm.response.to.have.status(400));"
            ]
          }
        }
      ],
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": "{{baseUrl}}/api/todos",
        "body": {
          "mode": "raw",
          "raw": "{\n  \"title\": \"   \",\n  \"completed\": false\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    },
    {
      "name": "06 Missing completed rejected",
      "event": [
        {
          "listen": "test",
          "script": {
            "type": "text/javascript",
            "exec": [
              "pm.test('HTTP 400', () => pm.response.to.have.status(400));"
            ]
          }
        }
      ],
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": "{{baseUrl}}/api/todos",
        "body": {
          "mode": "raw",
          "raw": "{\n  \"title\": \"Invalid\"\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    },
    {
      "name": "07 Delete",
      "event": [
        {
          "listen": "test",
          "script": {
            "type": "text/javascript",
            "exec": [
              "pm.test('HTTP 204', () => pm.response.to.have.status(204));",
              "pm.test('Empty body', () => pm.expect(pm.response.text()).to.eql(''));"
            ]
          }
        }
      ],
      "request": {
        "method": "DELETE",
        "header": [],
        "url": "{{baseUrl}}/api/todos/{{todoId}}"
      }
    },
    {
      "name": "08 Gone",
      "event": [
        {
          "listen": "test",
          "script": {
            "type": "text/javascript",
            "exec": [
              "pm.test('HTTP 404', () => pm.response.to.have.status(404));"
            ]
          }
        }
      ],
      "request": {
        "method": "GET",
        "header": [],
        "url": "{{baseUrl}}/api/todos/{{todoId}}"
      }
    }
  ]
}