{
  "info": {
    "description": "Alleen fictieve scenarioverzoeken. Bewaar de testsleutel lokaal en deel of exporteer geen ingevulde secrets. Geen productieacties.",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json",
    "name": "Rapportly — fictieve oefenomgeving"
  },
  "auth": {
    "bearer": [
      {
        "value": "{{rapportly_test_key}}",
        "type": "string",
        "key": "token"
      }
    ],
    "type": "bearer"
  },
  "variable": [
    {
      "value": "https://api.rapportly.io/api/rapportly/v1",
      "type": "string",
      "key": "base_url"
    },
    {
      "value": "",
      "type": "string",
      "key": "rapportly_test_key"
    },
    {
      "value": "",
      "type": "string",
      "key": "actie"
    }
  ],
  "event": [
    {
      "script": {
        "exec": [
          "function stop(reason) { console.warn(reason); pm.execution.skipRequest(); }",
          "const token = pm.variables.get('rapportly_test_key');",
          "if (typeof token !== 'string' || !token.startsWith('rply_test_')) {",
          "  stop('Vul eerst een Rapportly-testsleutel in; productiesleutels zijn hier niet toegestaan.');",
          "}",
          "const expectedBase = 'https://api.rapportly.io/api/rapportly/v1';",
          "if (pm.variables.get('base_url') !== expectedBase) stop('Dit oefenvoorbeeld verzendt uitsluitend naar api.rapportly.io.');",
          "const url = pm.variables.replaceIn(pm.request.url.toString());",
          "if (!url.startsWith(expectedBase + '/test/')) stop('Dit voorbeeld accepteert uitsluitend /test/-routes.');"
        ],
        "type": "text/javascript"
      },
      "listen": "prerequest"
    }
  ],
  "item": [
    {
      "name": "01 — Beschikbare oefenacties",
      "request": {
        "method": "GET",
        "url": "{{base_url}}/test/scenarios",
        "description": "Begin hier. Alleen acties binnen de rechten van deze testsleutel verschijnen."
      },
      "event": [
        {
          "script": {
            "exec": [
              "const body = pm.response.json();",
              "pm.test('Fictieve omgeving', () => { pm.expect(pm.response.code).to.equal(200); pm.expect(body.fictief).to.equal(true); pm.expect(body.credits).to.equal(0); });",
              "if (pm.response.code === 200 && Array.isArray(body.acties) && body.acties.length) {",
              "  const selected = pm.collectionVariables.get('actie');",
              "  if (!selected) pm.collectionVariables.set('actie', body.acties[0].id);",
              "  else if (!body.acties.some(a => a.id === selected)) throw new Error('De gekozen actie valt buiten deze testsleutel. Kies een id uit dit antwoord.');",
              "}"
            ],
            "type": "text/javascript"
          },
          "listen": "test"
        }
      ]
    },
    {
      "name": "02 — succes",
      "request": {
        "method": "POST",
        "url": "{{base_url}}/test/opdrachten",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          },
          {
            "key": "Idempotency-Key",
            "value": "{{idem_succes}}"
          }
        ],
        "body": {
          "options": {
            "raw": {
              "language": "json"
            }
          },
          "mode": "raw",
          "raw": "{\"actie\":\"{{actie}}\",\"scenario\":\"succes\"}"
        },
        "description": "Verzend opnieuw voor een exacte herhaling. Wis alleen voor een nieuwe oefenopdracht de eigen idem_-variabele."
      },
      "event": [
        {
          "script": {
            "exec": [
              "const selected = pm.collectionVariables.get('actie');",
              "if (!selected) { console.warn('Vraag eerst de beschikbare oefenacties op.'); pm.execution.skipRequest(); }",
              "const variable = 'idem_succes';",
              "if (!pm.collectionVariables.get(variable)) pm.collectionVariables.set(variable, pm.variables.replaceIn('{{$guid}}'));",
              "pm.collectionVariables.unset('opdracht_id_succes');"
            ],
            "type": "text/javascript"
          },
          "listen": "prerequest"
        },
        {
          "script": {
            "exec": [
              "const body = pm.response.json();",
              "pm.test('Geen echte verwerking of credits', () => { pm.expect(body.fictief).to.equal(true); pm.expect(body.omgeving).to.equal('test'); pm.expect(body.credits).to.equal(0); });",
              "if (body.fictief === true && typeof body.opdracht_id === 'string') pm.collectionVariables.set('opdracht_id_succes', body.opdracht_id);"
            ],
            "type": "text/javascript"
          },
          "listen": "test"
        }
      ]
    },
    {
      "name": "03 — verwerking_mislukt",
      "request": {
        "method": "POST",
        "url": "{{base_url}}/test/opdrachten",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          },
          {
            "key": "Idempotency-Key",
            "value": "{{idem_verwerking_mislukt}}"
          }
        ],
        "body": {
          "options": {
            "raw": {
              "language": "json"
            }
          },
          "mode": "raw",
          "raw": "{\"actie\":\"{{actie}}\",\"scenario\":\"verwerking_mislukt\"}"
        },
        "description": "Verzend opnieuw voor een exacte herhaling. Wis alleen voor een nieuwe oefenopdracht de eigen idem_-variabele."
      },
      "event": [
        {
          "script": {
            "exec": [
              "const selected = pm.collectionVariables.get('actie');",
              "if (!selected) { console.warn('Vraag eerst de beschikbare oefenacties op.'); pm.execution.skipRequest(); }",
              "const variable = 'idem_verwerking_mislukt';",
              "if (!pm.collectionVariables.get(variable)) pm.collectionVariables.set(variable, pm.variables.replaceIn('{{$guid}}'));",
              "pm.collectionVariables.unset('opdracht_id_verwerking_mislukt');"
            ],
            "type": "text/javascript"
          },
          "listen": "prerequest"
        },
        {
          "script": {
            "exec": [
              "const body = pm.response.json();",
              "pm.test('Geen echte verwerking of credits', () => { pm.expect(body.fictief).to.equal(true); pm.expect(body.omgeving).to.equal('test'); pm.expect(body.credits).to.equal(0); });",
              "if (body.fictief === true && typeof body.opdracht_id === 'string') pm.collectionVariables.set('opdracht_id_verwerking_mislukt', body.opdracht_id);"
            ],
            "type": "text/javascript"
          },
          "listen": "test"
        }
      ]
    },
    {
      "name": "04 — creditbudget_bereikt",
      "request": {
        "method": "POST",
        "url": "{{base_url}}/test/opdrachten",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          },
          {
            "key": "Idempotency-Key",
            "value": "{{idem_creditbudget_bereikt}}"
          }
        ],
        "body": {
          "options": {
            "raw": {
              "language": "json"
            }
          },
          "mode": "raw",
          "raw": "{\"actie\":\"{{actie}}\",\"scenario\":\"creditbudget_bereikt\"}"
        },
        "description": "Verzend opnieuw voor een exacte herhaling. Wis alleen voor een nieuwe oefenopdracht de eigen idem_-variabele."
      },
      "event": [
        {
          "script": {
            "exec": [
              "const selected = pm.collectionVariables.get('actie');",
              "if (!selected) { console.warn('Vraag eerst de beschikbare oefenacties op.'); pm.execution.skipRequest(); }",
              "const variable = 'idem_creditbudget_bereikt';",
              "if (!pm.collectionVariables.get(variable)) pm.collectionVariables.set(variable, pm.variables.replaceIn('{{$guid}}'));",
              "pm.collectionVariables.unset('opdracht_id_creditbudget_bereikt');"
            ],
            "type": "text/javascript"
          },
          "listen": "prerequest"
        },
        {
          "script": {
            "exec": [
              "const body = pm.response.json();",
              "pm.test('Geen echte verwerking of credits', () => { pm.expect(body.fictief).to.equal(true); pm.expect(body.omgeving).to.equal('test'); pm.expect(body.credits).to.equal(0); });",
              "if (body.fictief === true && typeof body.opdracht_id === 'string') pm.collectionVariables.set('opdracht_id_creditbudget_bereikt', body.opdracht_id);"
            ],
            "type": "text/javascript"
          },
          "listen": "test"
        }
      ]
    },
    {
      "name": "05 — toegang_geweigerd",
      "request": {
        "method": "POST",
        "url": "{{base_url}}/test/opdrachten",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          },
          {
            "key": "Idempotency-Key",
            "value": "{{idem_toegang_geweigerd}}"
          }
        ],
        "body": {
          "options": {
            "raw": {
              "language": "json"
            }
          },
          "mode": "raw",
          "raw": "{\"actie\":\"{{actie}}\",\"scenario\":\"toegang_geweigerd\"}"
        },
        "description": "Verzend opnieuw voor een exacte herhaling. Wis alleen voor een nieuwe oefenopdracht de eigen idem_-variabele."
      },
      "event": [
        {
          "script": {
            "exec": [
              "const selected = pm.collectionVariables.get('actie');",
              "if (!selected) { console.warn('Vraag eerst de beschikbare oefenacties op.'); pm.execution.skipRequest(); }",
              "const variable = 'idem_toegang_geweigerd';",
              "if (!pm.collectionVariables.get(variable)) pm.collectionVariables.set(variable, pm.variables.replaceIn('{{$guid}}'));",
              "pm.collectionVariables.unset('opdracht_id_toegang_geweigerd');"
            ],
            "type": "text/javascript"
          },
          "listen": "prerequest"
        },
        {
          "script": {
            "exec": [
              "const body = pm.response.json();",
              "pm.test('Geen echte verwerking of credits', () => { pm.expect(body.fictief).to.equal(true); pm.expect(body.omgeving).to.equal('test'); pm.expect(body.credits).to.equal(0); });",
              "if (body.fictief === true && typeof body.opdracht_id === 'string') pm.collectionVariables.set('opdracht_id_toegang_geweigerd', body.opdracht_id);"
            ],
            "type": "text/javascript"
          },
          "listen": "test"
        }
      ]
    },
    {
      "name": "06 — Status van de succesopdracht",
      "request": {
        "description": "Herhaal na ongeveer vijf seconden. HTTP200 kan bij andere scenarios ook status mislukt bevatten.",
        "url": "{{base_url}}/test/opdrachten/{{opdracht_id_succes}}",
        "method": "GET"
      },
      "event": [
        {
          "script": {
            "exec": [
              "if (!pm.collectionVariables.get('opdracht_id_succes')) { console.warn('Start eerst de succesopdracht.'); pm.execution.skipRequest(); }"
            ],
            "type": "text/javascript"
          },
          "listen": "prerequest"
        },
        {
          "script": {
            "exec": [
              "const body = pm.response.json();",
              "pm.test('Status van eigen fictieve opdracht', () => { pm.expect([200,202]).to.include(pm.response.code); pm.expect(body.fictief).to.equal(true); pm.expect(body.credits).to.equal(0); });"
            ],
            "type": "text/javascript"
          },
          "listen": "test"
        }
      ]
    }
  ]
}
