{
  "_type": "export",
  "__export_format": 4,
  "__export_date": "2026-08-05T00:00:00.000Z",
  "__export_source": "d-edge-mintlify-collection-export",
  "resources": [
    {
      "_id": "wrk_channel-manager-api-test-scenarios",
      "_type": "workspace",
      "parentId": null,
      "name": "D-EDGE Docs: Channel Manager API test scenarios",
      "description": "The test scenarios of docs.d-edge.com as ready-to-send requests: the collection plays D-EDGE and calls the four endpoints you host. Fill the variables (URLs, credentials, hotel code, room and rate codes, the two months the dates fall in), then run the folders in order. Each request gives one result per scenario: it checks the 200 OK and the envelope the scenario expects, with the XML content type and the response time. Fresh from the import the URLs point at the mock environment, which answers success to everything: the three refusal folders need your own server. Scenario identifiers: https://docs.d-edge.com/channel-manager-api/get-certified/test-scenarios. Version 1.0.",
      "scope": "collection"
    },
    {
      "_id": "env_ts_base",
      "_type": "environment",
      "parentId": "wrk_channel-manager-api-test-scenarios",
      "name": "Base Environment",
      "data": {
        "getHotelUrl": "https://api-mock.d-edge.com/channel-manager-api/getHotel",
        "planningUpdatesUrl": "https://api-mock.d-edge.com/channel-manager-api/planningUpdates",
        "getBookingsUrl": "https://api-mock.d-edge.com/channel-manager-api/getBookings",
        "confirmBookingsUrl": "https://api-mock.d-edge.com/channel-manager-api/confirmBookings",
        "login": "testhotel",
        "password": "testpassword",
        "wrongPassword": "wrongpassword",
        "hotelCode": "1234",
        "currency": "EUR",
        "room1": "CLA",
        "room1rate1": "BAR",
        "room1rate2": "NR",
        "room2": "SUP",
        "room2rate1": "BAR",
        "room3": "SUI",
        "room3rate1": "BB",
        "room3rate2": "BB",
        "month1": "2027-03",
        "month2": "2027-04",
        "farMonth": "2028-03",
        "pastDate": "2026-09-21",
        "from": "2026-09-22T00:00:00",
        "to": "2026-09-22T23:59:59",
        "bookingId": "EOCFGA",
        "mockApiKey": "@erBN6$LE$#rrotSzD@c6iPtYe!Xt!k#s&aNhL?J"
      },
      "dataPropertyOrder": {
        "&": [
          "getHotelUrl",
          "planningUpdatesUrl",
          "getBookingsUrl",
          "confirmBookingsUrl",
          "login",
          "password",
          "wrongPassword",
          "hotelCode",
          "currency",
          "room1",
          "room1rate1",
          "room1rate2",
          "room2",
          "room2rate1",
          "room3",
          "room3rate1",
          "room3rate2",
          "month1",
          "month2",
          "farMonth",
          "pastDate",
          "from",
          "to",
          "bookingId",
          "mockApiKey"
        ]
      },
      "color": null,
      "isPrivate": false,
      "metaSortKey": 1
    },
    {
      "_id": "fld_ts_get-hotel",
      "_type": "request_group",
      "parentId": "wrk_channel-manager-api-test-scenarios",
      "name": "Get hotel",
      "description": "GH-01 first: the other scenarios use the room and rate codes it returns, which you copy into the variables.",
      "metaSortKey": 0
    },
    {
      "_id": "req_ts_gh-01",
      "_type": "request",
      "parentId": "fld_ts_get-hotel",
      "name": "GH-01  Nominal read",
      "description": "What we send: A request with valid credentials and the test hotel's `hotelCode`.\n\nWhat we expect: The hotel configuration, checked against the Get hotel reference, on a test hotel that carries at least three room types and three rates in total, one room carrying at least two rates.\n\nApplies to: all integrations.\n\nTest scenarios: https://docs.d-edge.com/channel-manager-api/get-certified/test-scenarios",
      "method": "GET",
      "url": "{{ _.getHotelUrl }}",
      "parameters": [
        {
          "name": "hotelCode",
          "value": "{{ _.hotelCode }}"
        },
        {
          "name": "lang",
          "value": "EN"
        }
      ],
      "headers": [
        {
          "name": "Accept",
          "value": "application/xml, text/xml"
        },
        {
          "name": "x-mock-api-key",
          "value": "{{ _.mockApiKey }}"
        }
      ],
      "authentication": {
        "type": "basic",
        "useISO88591": false,
        "disabled": false,
        "username": "{{ _.login }}",
        "password": "{{ _.password }}"
      },
      "afterResponseScript": "insomnia.test(\"GH-01 answers 200 OK\", () => insomnia.expect(insomnia.response.code).to.equal(200));\ninsomnia.test(\"GH-01 declares an XML content type\", () => insomnia.expect(String((insomnia.response.headers.find(h => h.key.toLowerCase() === \"content-type\") || {}).value)).to.match(/xml/i));\ninsomnia.test(\"GH-01 answers within 5 s\", () => insomnia.expect(insomnia.response.responseTime).to.be.below(5000));\ninsomnia.test(\"GH-01 returns the <rooms> configuration\", () => insomnia.expect(insomnia.response.text()).to.match(/<rooms\\b/));\n",
      "metaSortKey": 0
    },
    {
      "_id": "fld_ts_get-hotel-refusals",
      "_type": "request_group",
      "parentId": "wrk_channel-manager-api-test-scenarios",
      "name": "Get hotel: refusals",
      "description": "Wrong or missing credentials and hotel code. Run against your own server: the mock environment answers the configuration to everything.",
      "metaSortKey": 1
    },
    {
      "_id": "req_ts_gh-02",
      "_type": "request",
      "parentId": "fld_ts_get-hotel-refusals",
      "name": "GH-02  No credentials",
      "description": "What we send: The same request without credentials.\n\nWhat we expect: A `<failure>` of type `3`. D-EDGE also accepts type `203`.\n\nApplies to: all integrations.\n\nTest scenarios: https://docs.d-edge.com/channel-manager-api/get-certified/test-scenarios",
      "method": "GET",
      "url": "{{ _.getHotelUrl }}",
      "parameters": [
        {
          "name": "hotelCode",
          "value": "{{ _.hotelCode }}"
        },
        {
          "name": "lang",
          "value": "EN"
        }
      ],
      "headers": [
        {
          "name": "Accept",
          "value": "application/xml, text/xml"
        },
        {
          "name": "x-mock-api-key",
          "value": "{{ _.mockApiKey }}"
        }
      ],
      "authentication": {},
      "afterResponseScript": "insomnia.test(\"GH-02 answers 200 OK\", () => insomnia.expect(insomnia.response.code).to.equal(200));\ninsomnia.test(\"GH-02 declares an XML content type\", () => insomnia.expect(String((insomnia.response.headers.find(h => h.key.toLowerCase() === \"content-type\") || {}).value)).to.match(/xml/i));\ninsomnia.test(\"GH-02 answers within 5 s\", () => insomnia.expect(insomnia.response.responseTime).to.be.below(5000));\ninsomnia.test(\"GH-02 returns <failure> of type 3 or 203\", () => insomnia.expect(insomnia.response.text()).to.match(/<failure[^>]*\\btype=\"(3|203)\"/));\n",
      "metaSortKey": 0
    },
    {
      "_id": "req_ts_gh-03",
      "_type": "request",
      "parentId": "fld_ts_get-hotel-refusals",
      "name": "GH-03  Wrong password",
      "description": "What we send: The same request with a wrong password.\n\nWhat we expect: A `<failure>` of type `3`.\n\nApplies to: all integrations.\n\nTest scenarios: https://docs.d-edge.com/channel-manager-api/get-certified/test-scenarios",
      "method": "GET",
      "url": "{{ _.getHotelUrl }}",
      "parameters": [
        {
          "name": "hotelCode",
          "value": "{{ _.hotelCode }}"
        },
        {
          "name": "lang",
          "value": "EN"
        }
      ],
      "headers": [
        {
          "name": "Accept",
          "value": "application/xml, text/xml"
        },
        {
          "name": "x-mock-api-key",
          "value": "{{ _.mockApiKey }}"
        }
      ],
      "authentication": {
        "type": "basic",
        "useISO88591": false,
        "disabled": false,
        "username": "{{ _.login }}",
        "password": "{{ _.wrongPassword }}"
      },
      "afterResponseScript": "insomnia.test(\"GH-03 answers 200 OK\", () => insomnia.expect(insomnia.response.code).to.equal(200));\ninsomnia.test(\"GH-03 declares an XML content type\", () => insomnia.expect(String((insomnia.response.headers.find(h => h.key.toLowerCase() === \"content-type\") || {}).value)).to.match(/xml/i));\ninsomnia.test(\"GH-03 answers within 5 s\", () => insomnia.expect(insomnia.response.responseTime).to.be.below(5000));\ninsomnia.test(\"GH-03 returns <failure> of type 3\", () => insomnia.expect(insomnia.response.text()).to.match(/<failure[^>]*\\btype=\"(3)\"/));\n",
      "metaSortKey": 1
    },
    {
      "_id": "req_ts_gh-04",
      "_type": "request",
      "parentId": "fld_ts_get-hotel-refusals",
      "name": "GH-04  Missing hotelCode",
      "description": "What we send: A request without `hotelCode`.\n\nWhat we expect: A `<failure>` of type `1`, `2`, or `203`.\n\nApplies to: all integrations.\n\nTest scenarios: https://docs.d-edge.com/channel-manager-api/get-certified/test-scenarios",
      "method": "GET",
      "url": "{{ _.getHotelUrl }}",
      "parameters": [],
      "headers": [
        {
          "name": "Accept",
          "value": "application/xml, text/xml"
        },
        {
          "name": "x-mock-api-key",
          "value": "{{ _.mockApiKey }}"
        }
      ],
      "authentication": {
        "type": "basic",
        "useISO88591": false,
        "disabled": false,
        "username": "{{ _.login }}",
        "password": "{{ _.password }}"
      },
      "afterResponseScript": "insomnia.test(\"GH-04 answers 200 OK\", () => insomnia.expect(insomnia.response.code).to.equal(200));\ninsomnia.test(\"GH-04 declares an XML content type\", () => insomnia.expect(String((insomnia.response.headers.find(h => h.key.toLowerCase() === \"content-type\") || {}).value)).to.match(/xml/i));\ninsomnia.test(\"GH-04 answers within 5 s\", () => insomnia.expect(insomnia.response.responseTime).to.be.below(5000));\ninsomnia.test(\"GH-04 returns <failure> of type 1 or 2 or 203\", () => insomnia.expect(insomnia.response.text()).to.match(/<failure[^>]*\\btype=\"(1|2|203)\"/));\n",
      "metaSortKey": 2
    },
    {
      "_id": "req_ts_gh-05",
      "_type": "request",
      "parentId": "fld_ts_get-hotel-refusals",
      "name": "GH-05  Unknown hotelCode",
      "description": "What we send: A request with an unknown `hotelCode`.\n\nWhat we expect: A `<failure>` of type `1` or `2`.\n\nApplies to: all integrations.\n\nTest scenarios: https://docs.d-edge.com/channel-manager-api/get-certified/test-scenarios",
      "method": "GET",
      "url": "{{ _.getHotelUrl }}",
      "parameters": [
        {
          "name": "hotelCode",
          "value": "UNKNOWN-HOTEL"
        },
        {
          "name": "lang",
          "value": "EN"
        }
      ],
      "headers": [
        {
          "name": "Accept",
          "value": "application/xml, text/xml"
        },
        {
          "name": "x-mock-api-key",
          "value": "{{ _.mockApiKey }}"
        }
      ],
      "authentication": {
        "type": "basic",
        "useISO88591": false,
        "disabled": false,
        "username": "{{ _.login }}",
        "password": "{{ _.password }}"
      },
      "afterResponseScript": "insomnia.test(\"GH-05 answers 200 OK\", () => insomnia.expect(insomnia.response.code).to.equal(200));\ninsomnia.test(\"GH-05 declares an XML content type\", () => insomnia.expect(String((insomnia.response.headers.find(h => h.key.toLowerCase() === \"content-type\") || {}).value)).to.match(/xml/i));\ninsomnia.test(\"GH-05 answers within 5 s\", () => insomnia.expect(insomnia.response.responseTime).to.be.below(5000));\ninsomnia.test(\"GH-05 returns <failure> of type 1 or 2\", () => insomnia.expect(insomnia.response.text()).to.match(/<failure[^>]*\\btype=\"(1|2)\"/));\n",
      "metaSortKey": 3
    },
    {
      "_id": "fld_ts_planning-updates",
      "_type": "request_group",
      "parentId": "wrk_channel-manager-api-test-scenarios",
      "name": "Planning updates",
      "description": "Inventory and restrictions, without prices. PU-04 applies to per-rate availability only.",
      "metaSortKey": 2
    },
    {
      "_id": "req_ts_pu-01",
      "_type": "request",
      "parentId": "fld_ts_planning-updates",
      "name": "PU-01  Room inventory only",
      "description": "What we send: Room inventory only: one room, several contiguous ranges, no `rate` element.\n\nWhat we expect: `<success>`, and the quantities applied on your platform.\n\nApplies to: all integrations.\n\nTest scenarios: https://docs.d-edge.com/channel-manager-api/get-certified/test-scenarios",
      "method": "POST",
      "url": "{{ _.planningUpdatesUrl }}",
      "parameters": [],
      "headers": [
        {
          "name": "Content-Type",
          "value": "application/xml; charset=utf-8"
        },
        {
          "name": "x-mock-api-key",
          "value": "{{ _.mockApiKey }}"
        }
      ],
      "authentication": {
        "type": "basic",
        "useISO88591": false,
        "disabled": false,
        "username": "{{ _.login }}",
        "password": "{{ _.password }}"
      },
      "afterResponseScript": "insomnia.test(\"PU-01 answers 200 OK\", () => insomnia.expect(insomnia.response.code).to.equal(200));\ninsomnia.test(\"PU-01 declares an XML content type\", () => insomnia.expect(String((insomnia.response.headers.find(h => h.key.toLowerCase() === \"content-type\") || {}).value)).to.match(/xml/i));\ninsomnia.test(\"PU-01 answers within 5 s\", () => insomnia.expect(insomnia.response.responseTime).to.be.below(5000));\ninsomnia.test(\"PU-01 returns <success />\", () => insomnia.expect(insomnia.response.text()).to.match(/<success\\s*\\/?>/));\n",
      "metaSortKey": 0,
      "body": {
        "mimeType": "application/xml",
        "text": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<message xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\n  <authentication login=\"{{ _.login }}\" password=\"{{ _.password }}\" />\n  <inventoryUpdate hotelId=\"{{ _.hotelCode }}\">\n    <room id=\"{{ _.room1 }}\">\n      <inventory>\n        <availability from=\"{{ _.month1 }}-01\" to=\"{{ _.month1 }}-07\" quantity=\"5\" />\n        <availability from=\"{{ _.month1 }}-08\" to=\"{{ _.month1 }}-16\" quantity=\"4\" />\n        <availability from=\"{{ _.month1 }}-17\" to=\"{{ _.month1 }}-19\" quantity=\"3\" />\n        <availability from=\"{{ _.month1 }}-20\" to=\"{{ _.month1 }}-28\" quantity=\"2\" />\n        <availability from=\"{{ _.month2 }}-01\" to=\"{{ _.month2 }}-03\" quantity=\"1\" />\n        <availability from=\"{{ _.month2 }}-04\" to=\"{{ _.month2 }}-09\" quantity=\"6\" />\n      </inventory>\n    </room>\n  </inventoryUpdate>\n</message>\n"
      }
    },
    {
      "_id": "req_ts_pu-02",
      "_type": "request",
      "parentId": "fld_ts_planning-updates",
      "name": "PU-02  Room inventory to the horizon",
      "description": "What we send: Room inventory up to the maximum horizon you declared.\n\nWhat we expect: `<success>`.\n\nApplies to: all integrations.\n\nTest scenarios: https://docs.d-edge.com/channel-manager-api/get-certified/test-scenarios",
      "method": "POST",
      "url": "{{ _.planningUpdatesUrl }}",
      "parameters": [],
      "headers": [
        {
          "name": "Content-Type",
          "value": "application/xml; charset=utf-8"
        },
        {
          "name": "x-mock-api-key",
          "value": "{{ _.mockApiKey }}"
        }
      ],
      "authentication": {
        "type": "basic",
        "useISO88591": false,
        "disabled": false,
        "username": "{{ _.login }}",
        "password": "{{ _.password }}"
      },
      "afterResponseScript": "insomnia.test(\"PU-02 answers 200 OK\", () => insomnia.expect(insomnia.response.code).to.equal(200));\ninsomnia.test(\"PU-02 declares an XML content type\", () => insomnia.expect(String((insomnia.response.headers.find(h => h.key.toLowerCase() === \"content-type\") || {}).value)).to.match(/xml/i));\ninsomnia.test(\"PU-02 answers within 5 s\", () => insomnia.expect(insomnia.response.responseTime).to.be.below(5000));\ninsomnia.test(\"PU-02 returns <success />\", () => insomnia.expect(insomnia.response.text()).to.match(/<success\\s*\\/?>/));\n",
      "metaSortKey": 1,
      "body": {
        "mimeType": "application/xml",
        "text": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<message xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\n  <authentication login=\"{{ _.login }}\" password=\"{{ _.password }}\" />\n  <inventoryUpdate hotelId=\"{{ _.hotelCode }}\">\n    <room id=\"{{ _.room1 }}\">\n      <inventory>\n        <availability from=\"{{ _.month1 }}-01\" to=\"{{ _.month1 }}-07\" quantity=\"5\" />\n        <availability from=\"{{ _.month1 }}-08\" to=\"{{ _.month1 }}-16\" quantity=\"4\" />\n        <availability from=\"{{ _.month1 }}-17\" to=\"{{ _.month2 }}-03\" quantity=\"3\" />\n        <availability from=\"{{ _.month2 }}-04\" to=\"{{ _.farMonth }}-28\" quantity=\"2\" />\n      </inventory>\n    </room>\n  </inventoryUpdate>\n</message>\n"
      }
    },
    {
      "_id": "req_ts_pu-03",
      "_type": "request",
      "parentId": "fld_ts_planning-updates",
      "name": "PU-03  Range starting in the past",
      "description": "What we send: A range that starts yesterday.\n\nWhat we expect: `<success>`; the past day is ignored, the rest applied. See Engineer for the traffic pattern.\n\nApplies to: all integrations.\n\nTest scenarios: https://docs.d-edge.com/channel-manager-api/get-certified/test-scenarios",
      "method": "POST",
      "url": "{{ _.planningUpdatesUrl }}",
      "parameters": [],
      "headers": [
        {
          "name": "Content-Type",
          "value": "application/xml; charset=utf-8"
        },
        {
          "name": "x-mock-api-key",
          "value": "{{ _.mockApiKey }}"
        }
      ],
      "authentication": {
        "type": "basic",
        "useISO88591": false,
        "disabled": false,
        "username": "{{ _.login }}",
        "password": "{{ _.password }}"
      },
      "afterResponseScript": "insomnia.test(\"PU-03 answers 200 OK\", () => insomnia.expect(insomnia.response.code).to.equal(200));\ninsomnia.test(\"PU-03 declares an XML content type\", () => insomnia.expect(String((insomnia.response.headers.find(h => h.key.toLowerCase() === \"content-type\") || {}).value)).to.match(/xml/i));\ninsomnia.test(\"PU-03 answers within 5 s\", () => insomnia.expect(insomnia.response.responseTime).to.be.below(5000));\ninsomnia.test(\"PU-03 returns <success />\", () => insomnia.expect(insomnia.response.text()).to.match(/<success\\s*\\/?>/));\n",
      "metaSortKey": 2,
      "body": {
        "mimeType": "application/xml",
        "text": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<message xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\n  <authentication login=\"{{ _.login }}\" password=\"{{ _.password }}\" />\n  <inventoryUpdate hotelId=\"{{ _.hotelCode }}\">\n    <room id=\"{{ _.room1 }}\">\n      <inventory>\n        <availability from=\"{{ _.pastDate }}\" to=\"{{ _.month1 }}-16\" quantity=\"7\" />\n      </inventory>\n    </room>\n  </inventoryUpdate>\n</message>\n"
      }
    },
    {
      "_id": "req_ts_pu-04",
      "_type": "request",
      "parentId": "fld_ts_planning-updates",
      "name": "PU-04  Room and rate availability",
      "description": "What we send: Room inventory plus an `availability` attribute on `planning`, for one room and rate, up to the maximum horizon you declared.\n\nWhat we expect: `<success>`, with the rate-level availability applied.\n\nCondition: Only if you support per-rate availability.\n\nTest scenarios: https://docs.d-edge.com/channel-manager-api/get-certified/test-scenarios",
      "method": "POST",
      "url": "{{ _.planningUpdatesUrl }}",
      "parameters": [],
      "headers": [
        {
          "name": "Content-Type",
          "value": "application/xml; charset=utf-8"
        },
        {
          "name": "x-mock-api-key",
          "value": "{{ _.mockApiKey }}"
        }
      ],
      "authentication": {
        "type": "basic",
        "useISO88591": false,
        "disabled": false,
        "username": "{{ _.login }}",
        "password": "{{ _.password }}"
      },
      "afterResponseScript": "insomnia.test(\"PU-04 answers 200 OK\", () => insomnia.expect(insomnia.response.code).to.equal(200));\ninsomnia.test(\"PU-04 declares an XML content type\", () => insomnia.expect(String((insomnia.response.headers.find(h => h.key.toLowerCase() === \"content-type\") || {}).value)).to.match(/xml/i));\ninsomnia.test(\"PU-04 answers within 5 s\", () => insomnia.expect(insomnia.response.responseTime).to.be.below(5000));\ninsomnia.test(\"PU-04 returns <success />\", () => insomnia.expect(insomnia.response.text()).to.match(/<success\\s*\\/?>/));\n",
      "metaSortKey": 3,
      "body": {
        "mimeType": "application/xml",
        "text": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<message xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\n  <authentication login=\"{{ _.login }}\" password=\"{{ _.password }}\" />\n  <inventoryUpdate hotelId=\"{{ _.hotelCode }}\">\n    <room id=\"{{ _.room1 }}\">\n      <inventory>\n        <availability from=\"{{ _.month1 }}-01\" to=\"{{ _.month1 }}-07\" quantity=\"5\" />\n        <availability from=\"{{ _.month1 }}-08\" to=\"{{ _.month1 }}-16\" quantity=\"4\" />\n        <availability from=\"{{ _.month1 }}-17\" to=\"{{ _.month2 }}-03\" quantity=\"3\" />\n        <availability from=\"{{ _.month2 }}-04\" to=\"{{ _.farMonth }}-28\" quantity=\"2\" />\n      </inventory>\n      <rate currency=\"{{ _.currency }}\" rateCode=\"{{ _.room1rate1 }}\" rateName=\"{{ _.room1rate1 }}\">\n        <planning from=\"{{ _.month1 }}-01\" to=\"{{ _.month1 }}-16\" availability=\"3\" />\n        <planning from=\"{{ _.month1 }}-17\" to=\"{{ _.month2 }}-03\" availability=\"0\" />\n        <planning from=\"{{ _.month2 }}-04\" to=\"{{ _.farMonth }}-28\" availability=\"1\" />\n      </rate>\n    </room>\n  </inventoryUpdate>\n</message>\n"
      }
    },
    {
      "_id": "req_ts_pu-05",
      "_type": "request",
      "parentId": "fld_ts_planning-updates",
      "name": "PU-05  Minimum stay only",
      "description": "What we send: `minimumStay` only, on two rates of the same room, each over its own ranges.\n\nWhat we expect: `<success>`.\n\nCondition: Only if you support a minimum stay.\n\nTest scenarios: https://docs.d-edge.com/channel-manager-api/get-certified/test-scenarios",
      "method": "POST",
      "url": "{{ _.planningUpdatesUrl }}",
      "parameters": [],
      "headers": [
        {
          "name": "Content-Type",
          "value": "application/xml; charset=utf-8"
        },
        {
          "name": "x-mock-api-key",
          "value": "{{ _.mockApiKey }}"
        }
      ],
      "authentication": {
        "type": "basic",
        "useISO88591": false,
        "disabled": false,
        "username": "{{ _.login }}",
        "password": "{{ _.password }}"
      },
      "afterResponseScript": "insomnia.test(\"PU-05 answers 200 OK\", () => insomnia.expect(insomnia.response.code).to.equal(200));\ninsomnia.test(\"PU-05 declares an XML content type\", () => insomnia.expect(String((insomnia.response.headers.find(h => h.key.toLowerCase() === \"content-type\") || {}).value)).to.match(/xml/i));\ninsomnia.test(\"PU-05 answers within 5 s\", () => insomnia.expect(insomnia.response.responseTime).to.be.below(5000));\ninsomnia.test(\"PU-05 returns <success />\", () => insomnia.expect(insomnia.response.text()).to.match(/<success\\s*\\/?>/));\n",
      "metaSortKey": 4,
      "body": {
        "mimeType": "application/xml",
        "text": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<message xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\n  <authentication login=\"{{ _.login }}\" password=\"{{ _.password }}\" />\n  <inventoryUpdate hotelId=\"{{ _.hotelCode }}\">\n    <room id=\"{{ _.room1 }}\">\n      <rate currency=\"{{ _.currency }}\" rateCode=\"{{ _.room1rate1 }}\" rateName=\"{{ _.room1rate1 }}\">\n        <planning from=\"{{ _.month1 }}-01\" to=\"{{ _.month1 }}-04\" minimumStay=\"4\" />\n        <planning from=\"{{ _.month1 }}-05\" to=\"{{ _.month1 }}-07\" minimumStay=\"3\" />\n      </rate>\n      <rate currency=\"{{ _.currency }}\" rateCode=\"{{ _.room1rate2 }}\" rateName=\"{{ _.room1rate2 }}\">\n        <planning from=\"{{ _.month1 }}-01\" to=\"{{ _.month1 }}-06\" minimumStay=\"3\" />\n        <planning from=\"{{ _.month1 }}-07\" to=\"{{ _.month1 }}-09\" minimumStay=\"4\" />\n      </rate>\n    </room>\n  </inventoryUpdate>\n</message>\n"
      }
    },
    {
      "_id": "req_ts_pu-06",
      "_type": "request",
      "parentId": "fld_ts_planning-updates",
      "name": "PU-06  Maximum stay only",
      "description": "What we send: `maximumStay` only, on two rates of the same room, each over its own ranges.\n\nWhat we expect: `<success>`.\n\nCondition: Only if you support a maximum stay.\n\nTest scenarios: https://docs.d-edge.com/channel-manager-api/get-certified/test-scenarios",
      "method": "POST",
      "url": "{{ _.planningUpdatesUrl }}",
      "parameters": [],
      "headers": [
        {
          "name": "Content-Type",
          "value": "application/xml; charset=utf-8"
        },
        {
          "name": "x-mock-api-key",
          "value": "{{ _.mockApiKey }}"
        }
      ],
      "authentication": {
        "type": "basic",
        "useISO88591": false,
        "disabled": false,
        "username": "{{ _.login }}",
        "password": "{{ _.password }}"
      },
      "afterResponseScript": "insomnia.test(\"PU-06 answers 200 OK\", () => insomnia.expect(insomnia.response.code).to.equal(200));\ninsomnia.test(\"PU-06 declares an XML content type\", () => insomnia.expect(String((insomnia.response.headers.find(h => h.key.toLowerCase() === \"content-type\") || {}).value)).to.match(/xml/i));\ninsomnia.test(\"PU-06 answers within 5 s\", () => insomnia.expect(insomnia.response.responseTime).to.be.below(5000));\ninsomnia.test(\"PU-06 returns <success />\", () => insomnia.expect(insomnia.response.text()).to.match(/<success\\s*\\/?>/));\n",
      "metaSortKey": 5,
      "body": {
        "mimeType": "application/xml",
        "text": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<message xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\n  <authentication login=\"{{ _.login }}\" password=\"{{ _.password }}\" />\n  <inventoryUpdate hotelId=\"{{ _.hotelCode }}\">\n    <room id=\"{{ _.room1 }}\">\n      <rate currency=\"{{ _.currency }}\" rateCode=\"{{ _.room1rate1 }}\" rateName=\"{{ _.room1rate1 }}\">\n        <planning from=\"{{ _.month1 }}-01\" to=\"{{ _.month1 }}-04\" maximumStay=\"99\" />\n        <planning from=\"{{ _.month1 }}-05\" to=\"{{ _.month1 }}-07\" maximumStay=\"4\" />\n      </rate>\n      <rate currency=\"{{ _.currency }}\" rateCode=\"{{ _.room1rate2 }}\" rateName=\"{{ _.room1rate2 }}\">\n        <planning from=\"{{ _.month1 }}-01\" to=\"{{ _.month1 }}-06\" maximumStay=\"4\" />\n        <planning from=\"{{ _.month1 }}-07\" to=\"{{ _.month1 }}-09\" maximumStay=\"99\" />\n      </rate>\n    </room>\n  </inventoryUpdate>\n</message>\n"
      }
    },
    {
      "_id": "req_ts_pu-07",
      "_type": "request",
      "parentId": "fld_ts_planning-updates",
      "name": "PU-07  Closed to arrival only",
      "description": "What we send: `noArrival` only, on two rates of the same room, each over its own ranges.\n\nWhat we expect: `<success>`.\n\nCondition: Only if you support closed to arrival.\n\nTest scenarios: https://docs.d-edge.com/channel-manager-api/get-certified/test-scenarios",
      "method": "POST",
      "url": "{{ _.planningUpdatesUrl }}",
      "parameters": [],
      "headers": [
        {
          "name": "Content-Type",
          "value": "application/xml; charset=utf-8"
        },
        {
          "name": "x-mock-api-key",
          "value": "{{ _.mockApiKey }}"
        }
      ],
      "authentication": {
        "type": "basic",
        "useISO88591": false,
        "disabled": false,
        "username": "{{ _.login }}",
        "password": "{{ _.password }}"
      },
      "afterResponseScript": "insomnia.test(\"PU-07 answers 200 OK\", () => insomnia.expect(insomnia.response.code).to.equal(200));\ninsomnia.test(\"PU-07 declares an XML content type\", () => insomnia.expect(String((insomnia.response.headers.find(h => h.key.toLowerCase() === \"content-type\") || {}).value)).to.match(/xml/i));\ninsomnia.test(\"PU-07 answers within 5 s\", () => insomnia.expect(insomnia.response.responseTime).to.be.below(5000));\ninsomnia.test(\"PU-07 returns <success />\", () => insomnia.expect(insomnia.response.text()).to.match(/<success\\s*\\/?>/));\n",
      "metaSortKey": 6,
      "body": {
        "mimeType": "application/xml",
        "text": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<message xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\n  <authentication login=\"{{ _.login }}\" password=\"{{ _.password }}\" />\n  <inventoryUpdate hotelId=\"{{ _.hotelCode }}\">\n    <room id=\"{{ _.room1 }}\">\n      <rate currency=\"{{ _.currency }}\" rateCode=\"{{ _.room1rate1 }}\" rateName=\"{{ _.room1rate1 }}\">\n        <planning from=\"{{ _.month1 }}-01\" to=\"{{ _.month1 }}-04\" noArrival=\"true\" />\n        <planning from=\"{{ _.month1 }}-05\" to=\"{{ _.month1 }}-07\" noArrival=\"false\" />\n      </rate>\n      <rate currency=\"{{ _.currency }}\" rateCode=\"{{ _.room1rate2 }}\" rateName=\"{{ _.room1rate2 }}\">\n        <planning from=\"{{ _.month1 }}-01\" to=\"{{ _.month1 }}-06\" noArrival=\"false\" />\n        <planning from=\"{{ _.month1 }}-07\" to=\"{{ _.month1 }}-09\" noArrival=\"true\" />\n      </rate>\n    </room>\n  </inventoryUpdate>\n</message>\n"
      }
    },
    {
      "_id": "req_ts_pu-08",
      "_type": "request",
      "parentId": "fld_ts_planning-updates",
      "name": "PU-08  Closed to departure only",
      "description": "What we send: `noDeparture` only, on two rates of the same room, each over its own ranges.\n\nWhat we expect: `<success>`.\n\nCondition: Only if you support closed to departure.\n\nTest scenarios: https://docs.d-edge.com/channel-manager-api/get-certified/test-scenarios",
      "method": "POST",
      "url": "{{ _.planningUpdatesUrl }}",
      "parameters": [],
      "headers": [
        {
          "name": "Content-Type",
          "value": "application/xml; charset=utf-8"
        },
        {
          "name": "x-mock-api-key",
          "value": "{{ _.mockApiKey }}"
        }
      ],
      "authentication": {
        "type": "basic",
        "useISO88591": false,
        "disabled": false,
        "username": "{{ _.login }}",
        "password": "{{ _.password }}"
      },
      "afterResponseScript": "insomnia.test(\"PU-08 answers 200 OK\", () => insomnia.expect(insomnia.response.code).to.equal(200));\ninsomnia.test(\"PU-08 declares an XML content type\", () => insomnia.expect(String((insomnia.response.headers.find(h => h.key.toLowerCase() === \"content-type\") || {}).value)).to.match(/xml/i));\ninsomnia.test(\"PU-08 answers within 5 s\", () => insomnia.expect(insomnia.response.responseTime).to.be.below(5000));\ninsomnia.test(\"PU-08 returns <success />\", () => insomnia.expect(insomnia.response.text()).to.match(/<success\\s*\\/?>/));\n",
      "metaSortKey": 7,
      "body": {
        "mimeType": "application/xml",
        "text": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<message xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\n  <authentication login=\"{{ _.login }}\" password=\"{{ _.password }}\" />\n  <inventoryUpdate hotelId=\"{{ _.hotelCode }}\">\n    <room id=\"{{ _.room1 }}\">\n      <rate currency=\"{{ _.currency }}\" rateCode=\"{{ _.room1rate1 }}\" rateName=\"{{ _.room1rate1 }}\">\n        <planning from=\"{{ _.month1 }}-01\" to=\"{{ _.month1 }}-04\" noDeparture=\"true\" />\n        <planning from=\"{{ _.month1 }}-05\" to=\"{{ _.month1 }}-07\" noDeparture=\"false\" />\n      </rate>\n      <rate currency=\"{{ _.currency }}\" rateCode=\"{{ _.room1rate2 }}\" rateName=\"{{ _.room1rate2 }}\">\n        <planning from=\"{{ _.month1 }}-01\" to=\"{{ _.month1 }}-06\" noDeparture=\"false\" />\n        <planning from=\"{{ _.month1 }}-07\" to=\"{{ _.month1 }}-09\" noDeparture=\"true\" />\n      </rate>\n    </room>\n  </inventoryUpdate>\n</message>\n"
      }
    },
    {
      "_id": "req_ts_pu-09",
      "_type": "request",
      "parentId": "fld_ts_planning-updates",
      "name": "PU-09  Closed to sale, then reopened",
      "description": "What we send: `isClosed` only, on two rates of the same room, closed then reopened on the first and the reverse on the second.\n\nWhat we expect: `<success>`, and the room and rate closed then reopened on your platform.\n\nApplies to: all integrations.\n\nTest scenarios: https://docs.d-edge.com/channel-manager-api/get-certified/test-scenarios",
      "method": "POST",
      "url": "{{ _.planningUpdatesUrl }}",
      "parameters": [],
      "headers": [
        {
          "name": "Content-Type",
          "value": "application/xml; charset=utf-8"
        },
        {
          "name": "x-mock-api-key",
          "value": "{{ _.mockApiKey }}"
        }
      ],
      "authentication": {
        "type": "basic",
        "useISO88591": false,
        "disabled": false,
        "username": "{{ _.login }}",
        "password": "{{ _.password }}"
      },
      "afterResponseScript": "insomnia.test(\"PU-09 answers 200 OK\", () => insomnia.expect(insomnia.response.code).to.equal(200));\ninsomnia.test(\"PU-09 declares an XML content type\", () => insomnia.expect(String((insomnia.response.headers.find(h => h.key.toLowerCase() === \"content-type\") || {}).value)).to.match(/xml/i));\ninsomnia.test(\"PU-09 answers within 5 s\", () => insomnia.expect(insomnia.response.responseTime).to.be.below(5000));\ninsomnia.test(\"PU-09 returns <success />\", () => insomnia.expect(insomnia.response.text()).to.match(/<success\\s*\\/?>/));\n",
      "metaSortKey": 8,
      "body": {
        "mimeType": "application/xml",
        "text": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<message xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\n  <authentication login=\"{{ _.login }}\" password=\"{{ _.password }}\" />\n  <inventoryUpdate hotelId=\"{{ _.hotelCode }}\">\n    <room id=\"{{ _.room1 }}\">\n      <rate currency=\"{{ _.currency }}\" rateCode=\"{{ _.room1rate1 }}\" rateName=\"{{ _.room1rate1 }}\">\n        <planning from=\"{{ _.month1 }}-01\" to=\"{{ _.month1 }}-04\" isClosed=\"true\" />\n        <planning from=\"{{ _.month1 }}-05\" to=\"{{ _.month1 }}-07\" isClosed=\"false\" />\n      </rate>\n      <rate currency=\"{{ _.currency }}\" rateCode=\"{{ _.room1rate2 }}\" rateName=\"{{ _.room1rate2 }}\">\n        <planning from=\"{{ _.month1 }}-01\" to=\"{{ _.month1 }}-06\" isClosed=\"false\" />\n        <planning from=\"{{ _.month1 }}-07\" to=\"{{ _.month1 }}-09\" isClosed=\"true\" />\n      </rate>\n    </room>\n  </inventoryUpdate>\n</message>\n"
      }
    },
    {
      "_id": "fld_ts_planning-updates-prices-perday-",
      "_type": "request_group",
      "parentId": "wrk_channel-manager-api-test-scenarios",
      "name": "Planning updates: prices (PerDay)",
      "description": "The price scenarios in the shape of the PerDay price model. Run the folder of the model your Get hotel response declares, and leave the two others. PU-19 applies to meal plans only.",
      "metaSortKey": 3
    },
    {
      "_id": "req_ts_pu-10_perday",
      "_type": "request",
      "parentId": "fld_ts_planning-updates-prices-perday-",
      "name": "PU-10  Prices only",
      "description": "What we send: Prices only, no inventory and no restriction.\n\nWhat we expect: `<success>`.\n\nApplies to: all integrations.\n\nPrice model: PerDay.\n\nTest scenarios: https://docs.d-edge.com/channel-manager-api/get-certified/test-scenarios",
      "method": "POST",
      "url": "{{ _.planningUpdatesUrl }}",
      "parameters": [],
      "headers": [
        {
          "name": "Content-Type",
          "value": "application/xml; charset=utf-8"
        },
        {
          "name": "x-mock-api-key",
          "value": "{{ _.mockApiKey }}"
        }
      ],
      "authentication": {
        "type": "basic",
        "useISO88591": false,
        "disabled": false,
        "username": "{{ _.login }}",
        "password": "{{ _.password }}"
      },
      "afterResponseScript": "insomnia.test(\"PU-10 answers 200 OK\", () => insomnia.expect(insomnia.response.code).to.equal(200));\ninsomnia.test(\"PU-10 declares an XML content type\", () => insomnia.expect(String((insomnia.response.headers.find(h => h.key.toLowerCase() === \"content-type\") || {}).value)).to.match(/xml/i));\ninsomnia.test(\"PU-10 answers within 5 s\", () => insomnia.expect(insomnia.response.responseTime).to.be.below(5000));\ninsomnia.test(\"PU-10 returns <success />\", () => insomnia.expect(insomnia.response.text()).to.match(/<success\\s*\\/?>/));\n",
      "metaSortKey": 0,
      "body": {
        "mimeType": "application/xml",
        "text": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<message xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\n  <authentication login=\"{{ _.login }}\" password=\"{{ _.password }}\" />\n  <inventoryUpdate hotelId=\"{{ _.hotelCode }}\">\n    <room id=\"{{ _.room1 }}\">\n      <rate currency=\"{{ _.currency }}\" rateCode=\"{{ _.room1rate1 }}\" rateName=\"{{ _.room1rate1 }}\">\n        <planning from=\"{{ _.month1 }}-01\" to=\"{{ _.month1 }}-04\" unitPrice=\"222.00\" />\n        <planning from=\"{{ _.month1 }}-05\" to=\"{{ _.month1 }}-07\" unitPrice=\"223.00\" />\n      </rate>\n    </room>\n  </inventoryUpdate>\n</message>\n"
      }
    },
    {
      "_id": "req_ts_pu-11_perday",
      "_type": "request",
      "parentId": "fld_ts_planning-updates-prices-perday-",
      "name": "PU-11  Prices and restrictions, no inventory",
      "description": "What we send: Prices and restrictions together, no inventory.\n\nWhat we expect: `<success>`.\n\nApplies to: all integrations.\n\nPrice model: PerDay.\n\nTest scenarios: https://docs.d-edge.com/channel-manager-api/get-certified/test-scenarios",
      "method": "POST",
      "url": "{{ _.planningUpdatesUrl }}",
      "parameters": [],
      "headers": [
        {
          "name": "Content-Type",
          "value": "application/xml; charset=utf-8"
        },
        {
          "name": "x-mock-api-key",
          "value": "{{ _.mockApiKey }}"
        }
      ],
      "authentication": {
        "type": "basic",
        "useISO88591": false,
        "disabled": false,
        "username": "{{ _.login }}",
        "password": "{{ _.password }}"
      },
      "afterResponseScript": "insomnia.test(\"PU-11 answers 200 OK\", () => insomnia.expect(insomnia.response.code).to.equal(200));\ninsomnia.test(\"PU-11 declares an XML content type\", () => insomnia.expect(String((insomnia.response.headers.find(h => h.key.toLowerCase() === \"content-type\") || {}).value)).to.match(/xml/i));\ninsomnia.test(\"PU-11 answers within 5 s\", () => insomnia.expect(insomnia.response.responseTime).to.be.below(5000));\ninsomnia.test(\"PU-11 returns <success />\", () => insomnia.expect(insomnia.response.text()).to.match(/<success\\s*\\/?>/));\n",
      "metaSortKey": 1,
      "body": {
        "mimeType": "application/xml",
        "text": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<message xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\n  <authentication login=\"{{ _.login }}\" password=\"{{ _.password }}\" />\n  <inventoryUpdate hotelId=\"{{ _.hotelCode }}\">\n    <room id=\"{{ _.room1 }}\">\n      <rate currency=\"{{ _.currency }}\" rateCode=\"{{ _.room1rate1 }}\" rateName=\"{{ _.room1rate1 }}\">\n        <planning from=\"{{ _.month1 }}-01\" to=\"{{ _.month1 }}-11\" minimumStay=\"2\" maximumStay=\"6\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"false\" unitPrice=\"340.00\" />\n        <planning from=\"{{ _.month1 }}-12\" to=\"{{ _.month1 }}-20\" minimumStay=\"1\" noDeparture=\"true\" unitPrice=\"273.00\" />\n      </rate>\n      <rate currency=\"{{ _.currency }}\" rateCode=\"{{ _.room1rate2 }}\" rateName=\"{{ _.room1rate2 }}\">\n        <planning from=\"{{ _.month1 }}-01\" to=\"{{ _.month1 }}-07\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"true\" unitPrice=\"111.00\" />\n      </rate>\n    </room>\n  </inventoryUpdate>\n</message>\n"
      }
    },
    {
      "_id": "req_ts_pu-12_perday",
      "_type": "request",
      "parentId": "fld_ts_planning-updates-prices-perday-",
      "name": "PU-12  Full update, one room, one rate",
      "description": "What we send: A full update of one room and one rate: inventory, prices, and restrictions over several ranges, including a single-day range.\n\nWhat we expect: `<success>`, and every value applied.\n\nApplies to: all integrations.\n\nPrice model: PerDay.\n\nTest scenarios: https://docs.d-edge.com/channel-manager-api/get-certified/test-scenarios",
      "method": "POST",
      "url": "{{ _.planningUpdatesUrl }}",
      "parameters": [],
      "headers": [
        {
          "name": "Content-Type",
          "value": "application/xml; charset=utf-8"
        },
        {
          "name": "x-mock-api-key",
          "value": "{{ _.mockApiKey }}"
        }
      ],
      "authentication": {
        "type": "basic",
        "useISO88591": false,
        "disabled": false,
        "username": "{{ _.login }}",
        "password": "{{ _.password }}"
      },
      "afterResponseScript": "insomnia.test(\"PU-12 answers 200 OK\", () => insomnia.expect(insomnia.response.code).to.equal(200));\ninsomnia.test(\"PU-12 declares an XML content type\", () => insomnia.expect(String((insomnia.response.headers.find(h => h.key.toLowerCase() === \"content-type\") || {}).value)).to.match(/xml/i));\ninsomnia.test(\"PU-12 answers within 5 s\", () => insomnia.expect(insomnia.response.responseTime).to.be.below(5000));\ninsomnia.test(\"PU-12 returns <success />\", () => insomnia.expect(insomnia.response.text()).to.match(/<success\\s*\\/?>/));\n",
      "metaSortKey": 2,
      "body": {
        "mimeType": "application/xml",
        "text": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<message xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\n  <authentication login=\"{{ _.login }}\" password=\"{{ _.password }}\" />\n  <inventoryUpdate hotelId=\"{{ _.hotelCode }}\">\n    <room id=\"{{ _.room1 }}\">\n      <inventory>\n        <availability from=\"{{ _.month1 }}-01\" to=\"{{ _.month1 }}-08\" quantity=\"1\" />\n        <availability from=\"{{ _.month1 }}-09\" to=\"{{ _.month1 }}-13\" quantity=\"3\" />\n        <availability from=\"{{ _.month1 }}-14\" to=\"{{ _.month1 }}-18\" quantity=\"5\" />\n        <availability from=\"{{ _.month1 }}-19\" to=\"{{ _.month1 }}-26\" quantity=\"1\" />\n        <availability from=\"{{ _.month1 }}-27\" to=\"{{ _.month2 }}-05\" quantity=\"1\" />\n      </inventory>\n      <rate currency=\"{{ _.currency }}\" rateCode=\"{{ _.room1rate1 }}\" rateName=\"{{ _.room1rate1 }}\">\n        <planning from=\"{{ _.month1 }}-01\" to=\"{{ _.month1 }}-11\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"false\" unitPrice=\"210.00\" />\n        <planning from=\"{{ _.month1 }}-12\" to=\"{{ _.month1 }}-20\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"false\" unitPrice=\"273.00\" />\n        <planning from=\"{{ _.month1 }}-21\" to=\"{{ _.month1 }}-24\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"false\" unitPrice=\"340.50\" />\n        <planning from=\"{{ _.month1 }}-25\" to=\"{{ _.month1 }}-25\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"false\" unitPrice=\"294.00\" />\n        <planning from=\"{{ _.month1 }}-26\" to=\"{{ _.month2 }}-05\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"false\" unitPrice=\"340.00\" />\n      </rate>\n    </room>\n  </inventoryUpdate>\n</message>\n"
      }
    },
    {
      "_id": "req_ts_pu-13_perday",
      "_type": "request",
      "parentId": "fld_ts_planning-updates-prices-perday-",
      "name": "PU-13  Ranges with gaps",
      "description": "What we send: Ranges that leave gaps between them, in the inventory and in the planning.\n\nWhat we expect: `<success>`; the days not covered are left untouched.\n\nApplies to: all integrations.\n\nPrice model: PerDay.\n\nTest scenarios: https://docs.d-edge.com/channel-manager-api/get-certified/test-scenarios",
      "method": "POST",
      "url": "{{ _.planningUpdatesUrl }}",
      "parameters": [],
      "headers": [
        {
          "name": "Content-Type",
          "value": "application/xml; charset=utf-8"
        },
        {
          "name": "x-mock-api-key",
          "value": "{{ _.mockApiKey }}"
        }
      ],
      "authentication": {
        "type": "basic",
        "useISO88591": false,
        "disabled": false,
        "username": "{{ _.login }}",
        "password": "{{ _.password }}"
      },
      "afterResponseScript": "insomnia.test(\"PU-13 answers 200 OK\", () => insomnia.expect(insomnia.response.code).to.equal(200));\ninsomnia.test(\"PU-13 declares an XML content type\", () => insomnia.expect(String((insomnia.response.headers.find(h => h.key.toLowerCase() === \"content-type\") || {}).value)).to.match(/xml/i));\ninsomnia.test(\"PU-13 answers within 5 s\", () => insomnia.expect(insomnia.response.responseTime).to.be.below(5000));\ninsomnia.test(\"PU-13 returns <success />\", () => insomnia.expect(insomnia.response.text()).to.match(/<success\\s*\\/?>/));\n",
      "metaSortKey": 3,
      "body": {
        "mimeType": "application/xml",
        "text": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<message xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\n  <authentication login=\"{{ _.login }}\" password=\"{{ _.password }}\" />\n  <inventoryUpdate hotelId=\"{{ _.hotelCode }}\">\n    <room id=\"{{ _.room1 }}\">\n      <inventory>\n        <availability from=\"{{ _.month1 }}-01\" to=\"{{ _.month1 }}-05\" quantity=\"5\" />\n        <availability from=\"{{ _.month1 }}-09\" to=\"{{ _.month1 }}-13\" quantity=\"6\" />\n      </inventory>\n      <rate currency=\"{{ _.currency }}\" rateCode=\"{{ _.room1rate1 }}\" rateName=\"{{ _.room1rate1 }}\">\n        <planning from=\"{{ _.month1 }}-01\" to=\"{{ _.month1 }}-07\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"false\" unitPrice=\"111.00\" />\n        <planning from=\"{{ _.month1 }}-11\" to=\"{{ _.month1 }}-20\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"false\" unitPrice=\"112.00\" />\n      </rate>\n    </room>\n  </inventoryUpdate>\n</message>\n"
      }
    },
    {
      "_id": "req_ts_pu-14_perday",
      "_type": "request",
      "parentId": "fld_ts_planning-updates-prices-perday-",
      "name": "PU-14  One room, several rates, a zero quantity",
      "description": "What we send: One room with several rates, each with its own prices and restrictions, and an availability quantity of `0` on one range.\n\nWhat we expect: `<success>`, and the room closed to sale on that range.\n\nApplies to: all integrations.\n\nPrice model: PerDay.\n\nTest scenarios: https://docs.d-edge.com/channel-manager-api/get-certified/test-scenarios",
      "method": "POST",
      "url": "{{ _.planningUpdatesUrl }}",
      "parameters": [],
      "headers": [
        {
          "name": "Content-Type",
          "value": "application/xml; charset=utf-8"
        },
        {
          "name": "x-mock-api-key",
          "value": "{{ _.mockApiKey }}"
        }
      ],
      "authentication": {
        "type": "basic",
        "useISO88591": false,
        "disabled": false,
        "username": "{{ _.login }}",
        "password": "{{ _.password }}"
      },
      "afterResponseScript": "insomnia.test(\"PU-14 answers 200 OK\", () => insomnia.expect(insomnia.response.code).to.equal(200));\ninsomnia.test(\"PU-14 declares an XML content type\", () => insomnia.expect(String((insomnia.response.headers.find(h => h.key.toLowerCase() === \"content-type\") || {}).value)).to.match(/xml/i));\ninsomnia.test(\"PU-14 answers within 5 s\", () => insomnia.expect(insomnia.response.responseTime).to.be.below(5000));\ninsomnia.test(\"PU-14 returns <success />\", () => insomnia.expect(insomnia.response.text()).to.match(/<success\\s*\\/?>/));\n",
      "metaSortKey": 4,
      "body": {
        "mimeType": "application/xml",
        "text": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<message xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\n  <authentication login=\"{{ _.login }}\" password=\"{{ _.password }}\" />\n  <inventoryUpdate hotelId=\"{{ _.hotelCode }}\">\n    <room id=\"{{ _.room1 }}\">\n      <inventory>\n        <availability from=\"{{ _.month1 }}-01\" to=\"{{ _.month1 }}-03\" quantity=\"4\" />\n        <availability from=\"{{ _.month1 }}-04\" to=\"{{ _.month1 }}-08\" quantity=\"7\" />\n        <availability from=\"{{ _.month1 }}-09\" to=\"{{ _.month1 }}-12\" quantity=\"2\" />\n        <availability from=\"{{ _.month1 }}-13\" to=\"{{ _.month1 }}-26\" quantity=\"0\" />\n        <availability from=\"{{ _.month1 }}-27\" to=\"{{ _.month2 }}-06\" quantity=\"10\" />\n      </inventory>\n      <rate currency=\"{{ _.currency }}\" rateCode=\"{{ _.room1rate1 }}\" rateName=\"{{ _.room1rate1 }}\">\n        <planning from=\"{{ _.month1 }}-01\" to=\"{{ _.month1 }}-10\" minimumStay=\"2\" maximumStay=\"6\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"false\" unitPrice=\"147.00\" />\n        <planning from=\"{{ _.month1 }}-11\" to=\"{{ _.month1 }}-18\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"false\" unitPrice=\"111.00\" />\n        <planning from=\"{{ _.month1 }}-19\" to=\"{{ _.month1 }}-24\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"true\" unitPrice=\"147.60\" />\n        <planning from=\"{{ _.month1 }}-25\" to=\"{{ _.month1 }}-25\" minimumStay=\"3\" maximumStay=\"4\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"false\" unitPrice=\"136.00\" />\n        <planning from=\"{{ _.month1 }}-26\" to=\"{{ _.month1 }}-28\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"true\" noDeparture=\"false\" isClosed=\"false\" unitPrice=\"124.00\" />\n      </rate>\n      <rate currency=\"{{ _.currency }}\" rateCode=\"{{ _.room1rate2 }}\" rateName=\"{{ _.room1rate2 }}\">\n        <planning from=\"{{ _.month1 }}-01\" to=\"{{ _.month1 }}-03\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"false\" noDeparture=\"true\" isClosed=\"false\" unitPrice=\"444.00\" />\n        <planning from=\"{{ _.month1 }}-04\" to=\"{{ _.month1 }}-07\" minimumStay=\"3\" maximumStay=\"99\" noArrival=\"false\" noDeparture=\"true\" isClosed=\"false\" unitPrice=\"42.00\" />\n        <planning from=\"{{ _.month1 }}-08\" to=\"{{ _.month1 }}-11\" minimumStay=\"1\" maximumStay=\"2\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"false\" unitPrice=\"47.00\" />\n        <planning from=\"{{ _.month1 }}-12\" to=\"{{ _.month1 }}-20\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"false\" unitPrice=\"143.00\" />\n        <planning from=\"{{ _.month1 }}-21\" to=\"{{ _.month2 }}-05\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"true\" unitPrice=\"187.00\" />\n      </rate>\n    </room>\n  </inventoryUpdate>\n</message>\n"
      }
    },
    {
      "_id": "req_ts_pu-15_perday",
      "_type": "request",
      "parentId": "fld_ts_planning-updates-prices-perday-",
      "name": "PU-15  Several rooms, one rate",
      "description": "What we send: Several rooms with a single rate.\n\nWhat we expect: `<success>`.\n\nApplies to: all integrations.\n\nPrice model: PerDay.\n\nTest scenarios: https://docs.d-edge.com/channel-manager-api/get-certified/test-scenarios",
      "method": "POST",
      "url": "{{ _.planningUpdatesUrl }}",
      "parameters": [],
      "headers": [
        {
          "name": "Content-Type",
          "value": "application/xml; charset=utf-8"
        },
        {
          "name": "x-mock-api-key",
          "value": "{{ _.mockApiKey }}"
        }
      ],
      "authentication": {
        "type": "basic",
        "useISO88591": false,
        "disabled": false,
        "username": "{{ _.login }}",
        "password": "{{ _.password }}"
      },
      "afterResponseScript": "insomnia.test(\"PU-15 answers 200 OK\", () => insomnia.expect(insomnia.response.code).to.equal(200));\ninsomnia.test(\"PU-15 declares an XML content type\", () => insomnia.expect(String((insomnia.response.headers.find(h => h.key.toLowerCase() === \"content-type\") || {}).value)).to.match(/xml/i));\ninsomnia.test(\"PU-15 answers within 5 s\", () => insomnia.expect(insomnia.response.responseTime).to.be.below(5000));\ninsomnia.test(\"PU-15 returns <success />\", () => insomnia.expect(insomnia.response.text()).to.match(/<success\\s*\\/?>/));\n",
      "metaSortKey": 5,
      "body": {
        "mimeType": "application/xml",
        "text": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<message xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\n  <authentication login=\"{{ _.login }}\" password=\"{{ _.password }}\" />\n  <inventoryUpdate hotelId=\"{{ _.hotelCode }}\">\n    <room id=\"{{ _.room1 }}\">\n      <inventory>\n        <availability from=\"{{ _.month1 }}-01\" to=\"{{ _.month1 }}-08\" quantity=\"1\" />\n        <availability from=\"{{ _.month1 }}-09\" to=\"{{ _.month1 }}-13\" quantity=\"3\" />\n        <availability from=\"{{ _.month1 }}-16\" to=\"{{ _.month1 }}-26\" quantity=\"17\" />\n      </inventory>\n      <rate currency=\"{{ _.currency }}\" rateCode=\"{{ _.room1rate1 }}\" rateName=\"{{ _.room1rate1 }}\">\n        <planning from=\"{{ _.month1 }}-01\" to=\"{{ _.month1 }}-13\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"false\" unitPrice=\"210.00\" />\n        <planning from=\"{{ _.month1 }}-16\" to=\"{{ _.month1 }}-26\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"false\" unitPrice=\"273.00\" />\n      </rate>\n    </room>\n    <room id=\"{{ _.room2 }}\">\n      <inventory>\n        <availability from=\"{{ _.month1 }}-01\" to=\"{{ _.month1 }}-13\" quantity=\"4\" />\n        <availability from=\"{{ _.month1 }}-14\" to=\"{{ _.month1 }}-26\" quantity=\"6\" />\n      </inventory>\n      <rate currency=\"{{ _.currency }}\" rateCode=\"{{ _.room2rate1 }}\" rateName=\"{{ _.room2rate1 }}\">\n        <planning from=\"{{ _.month1 }}-01\" to=\"{{ _.month1 }}-13\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"false\" unitPrice=\"180.00\" />\n        <planning from=\"{{ _.month1 }}-14\" to=\"{{ _.month1 }}-26\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"false\" unitPrice=\"190.00\" />\n      </rate>\n    </room>\n  </inventoryUpdate>\n</message>\n"
      }
    },
    {
      "_id": "req_ts_pu-16_perday",
      "_type": "request",
      "parentId": "fld_ts_planning-updates-prices-perday-",
      "name": "PU-16  Several rooms, several rates, one room inventory only",
      "description": "What we send: Several rooms with several rates, one of the rooms carrying inventory only.\n\nWhat we expect: `<success>`.\n\nApplies to: all integrations.\n\nPrice model: PerDay.\n\nTest scenarios: https://docs.d-edge.com/channel-manager-api/get-certified/test-scenarios",
      "method": "POST",
      "url": "{{ _.planningUpdatesUrl }}",
      "parameters": [],
      "headers": [
        {
          "name": "Content-Type",
          "value": "application/xml; charset=utf-8"
        },
        {
          "name": "x-mock-api-key",
          "value": "{{ _.mockApiKey }}"
        }
      ],
      "authentication": {
        "type": "basic",
        "useISO88591": false,
        "disabled": false,
        "username": "{{ _.login }}",
        "password": "{{ _.password }}"
      },
      "afterResponseScript": "insomnia.test(\"PU-16 answers 200 OK\", () => insomnia.expect(insomnia.response.code).to.equal(200));\ninsomnia.test(\"PU-16 declares an XML content type\", () => insomnia.expect(String((insomnia.response.headers.find(h => h.key.toLowerCase() === \"content-type\") || {}).value)).to.match(/xml/i));\ninsomnia.test(\"PU-16 answers within 5 s\", () => insomnia.expect(insomnia.response.responseTime).to.be.below(5000));\ninsomnia.test(\"PU-16 returns <success />\", () => insomnia.expect(insomnia.response.text()).to.match(/<success\\s*\\/?>/));\n",
      "metaSortKey": 6,
      "body": {
        "mimeType": "application/xml",
        "text": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<message xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\n  <authentication login=\"{{ _.login }}\" password=\"{{ _.password }}\" />\n  <inventoryUpdate hotelId=\"{{ _.hotelCode }}\">\n    <room id=\"{{ _.room1 }}\">\n      <inventory>\n        <availability from=\"{{ _.month1 }}-01\" to=\"{{ _.month1 }}-03\" quantity=\"4\" />\n        <availability from=\"{{ _.month1 }}-04\" to=\"{{ _.month1 }}-08\" quantity=\"7\" />\n        <availability from=\"{{ _.month1 }}-09\" to=\"{{ _.month1 }}-12\" quantity=\"2\" />\n        <availability from=\"{{ _.month1 }}-13\" to=\"{{ _.month1 }}-26\" quantity=\"0\" />\n        <availability from=\"{{ _.month1 }}-27\" to=\"{{ _.month2 }}-06\" quantity=\"10\" />\n      </inventory>\n      <rate currency=\"{{ _.currency }}\" rateCode=\"{{ _.room1rate1 }}\" rateName=\"{{ _.room1rate1 }}\">\n        <planning from=\"{{ _.month1 }}-01\" to=\"{{ _.month1 }}-10\" minimumStay=\"2\" maximumStay=\"6\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"false\" unitPrice=\"147.00\" />\n        <planning from=\"{{ _.month1 }}-11\" to=\"{{ _.month1 }}-18\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"false\" unitPrice=\"111.00\" />\n        <planning from=\"{{ _.month1 }}-19\" to=\"{{ _.month1 }}-24\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"true\" unitPrice=\"147.60\" />\n        <planning from=\"{{ _.month1 }}-25\" to=\"{{ _.month1 }}-28\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"true\" noDeparture=\"false\" isClosed=\"false\" unitPrice=\"124.00\" />\n      </rate>\n      <rate currency=\"{{ _.currency }}\" rateCode=\"{{ _.room1rate2 }}\" rateName=\"{{ _.room1rate2 }}\">\n        <planning from=\"{{ _.month1 }}-01\" to=\"{{ _.month1 }}-03\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"false\" noDeparture=\"true\" isClosed=\"false\" unitPrice=\"444.00\" />\n        <planning from=\"{{ _.month1 }}-04\" to=\"{{ _.month1 }}-20\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"false\" unitPrice=\"143.00\" />\n        <planning from=\"{{ _.month1 }}-21\" to=\"{{ _.month2 }}-05\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"true\" unitPrice=\"187.00\" />\n      </rate>\n    </room>\n    <room id=\"{{ _.room2 }}\">\n      <inventory>\n        <availability from=\"{{ _.month1 }}-01\" to=\"{{ _.month1 }}-02\" quantity=\"2\" />\n        <availability from=\"{{ _.month1 }}-03\" to=\"{{ _.month1 }}-08\" quantity=\"3\" />\n        <availability from=\"{{ _.month1 }}-11\" to=\"{{ _.month1 }}-12\" quantity=\"4\" />\n        <availability from=\"{{ _.month1 }}-13\" to=\"{{ _.month1 }}-26\" quantity=\"5\" />\n        <availability from=\"{{ _.month1 }}-27\" to=\"{{ _.month2 }}-03\" quantity=\"6\" />\n      </inventory>\n    </room>\n    <room id=\"{{ _.room3 }}\">\n      <inventory>\n        <availability from=\"{{ _.month1 }}-01\" to=\"{{ _.month1 }}-21\" quantity=\"12\" />\n      </inventory>\n      <rate currency=\"{{ _.currency }}\" rateCode=\"{{ _.room3rate1 }}\" rateName=\"{{ _.room3rate1 }}\">\n        <planning from=\"{{ _.month1 }}-01\" to=\"{{ _.month1 }}-05\" minimumStay=\"1\" maximumStay=\"1\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"false\" unitPrice=\"41.00\" />\n        <planning from=\"{{ _.month1 }}-06\" to=\"{{ _.month1 }}-08\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"false\" unitPrice=\"57.00\" />\n        <planning from=\"{{ _.month1 }}-10\" to=\"{{ _.month1 }}-11\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"true\" unitPrice=\"111.00\" />\n        <planning from=\"{{ _.month1 }}-12\" to=\"{{ _.month1 }}-15\" minimumStay=\"1\" maximumStay=\"4\" noArrival=\"false\" noDeparture=\"true\" isClosed=\"false\" unitPrice=\"136.00\" />\n        <planning from=\"{{ _.month1 }}-16\" to=\"{{ _.month1 }}-28\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"false\" unitPrice=\"124.00\" />\n      </rate>\n      <rate currency=\"{{ _.currency }}\" rateCode=\"{{ _.room3rate2 }}\" rateName=\"{{ _.room3rate2 }}\">\n        <planning from=\"{{ _.month1 }}-01\" to=\"{{ _.month1 }}-03\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"false\" noDeparture=\"true\" isClosed=\"false\" unitPrice=\"122.00\" />\n        <planning from=\"{{ _.month1 }}-04\" to=\"{{ _.month2 }}-02\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"false\" unitPrice=\"123.00\" />\n      </rate>\n    </room>\n  </inventoryUpdate>\n</message>\n"
      }
    },
    {
      "_id": "req_ts_pu-17_perday",
      "_type": "request",
      "parentId": "fld_ts_planning-updates-prices-perday-",
      "name": "PU-17  Several rooms to the horizon",
      "description": "What we send: Several rooms up to the maximum horizon you declared.\n\nWhat we expect: `<success>`.\n\nApplies to: all integrations.\n\nPrice model: PerDay.\n\nTest scenarios: https://docs.d-edge.com/channel-manager-api/get-certified/test-scenarios",
      "method": "POST",
      "url": "{{ _.planningUpdatesUrl }}",
      "parameters": [],
      "headers": [
        {
          "name": "Content-Type",
          "value": "application/xml; charset=utf-8"
        },
        {
          "name": "x-mock-api-key",
          "value": "{{ _.mockApiKey }}"
        }
      ],
      "authentication": {
        "type": "basic",
        "useISO88591": false,
        "disabled": false,
        "username": "{{ _.login }}",
        "password": "{{ _.password }}"
      },
      "afterResponseScript": "insomnia.test(\"PU-17 answers 200 OK\", () => insomnia.expect(insomnia.response.code).to.equal(200));\ninsomnia.test(\"PU-17 declares an XML content type\", () => insomnia.expect(String((insomnia.response.headers.find(h => h.key.toLowerCase() === \"content-type\") || {}).value)).to.match(/xml/i));\ninsomnia.test(\"PU-17 answers within 5 s\", () => insomnia.expect(insomnia.response.responseTime).to.be.below(5000));\ninsomnia.test(\"PU-17 returns <success />\", () => insomnia.expect(insomnia.response.text()).to.match(/<success\\s*\\/?>/));\n",
      "metaSortKey": 7,
      "body": {
        "mimeType": "application/xml",
        "text": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<message xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\n  <authentication login=\"{{ _.login }}\" password=\"{{ _.password }}\" />\n  <inventoryUpdate hotelId=\"{{ _.hotelCode }}\">\n    <room id=\"{{ _.room1 }}\">\n      <inventory>\n        <availability from=\"{{ _.month1 }}-01\" to=\"{{ _.month2 }}-03\" quantity=\"3\" />\n        <availability from=\"{{ _.month2 }}-04\" to=\"{{ _.farMonth }}-28\" quantity=\"2\" />\n      </inventory>\n      <rate currency=\"{{ _.currency }}\" rateCode=\"{{ _.room1rate1 }}\" rateName=\"{{ _.room1rate1 }}\">\n        <planning from=\"{{ _.month1 }}-01\" to=\"{{ _.month2 }}-03\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"false\" unitPrice=\"1478.50\" />\n        <planning from=\"{{ _.month2 }}-04\" to=\"{{ _.farMonth }}-28\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"false\" unitPrice=\"1500.00\" />\n      </rate>\n    </room>\n    <room id=\"{{ _.room2 }}\">\n      <inventory>\n        <availability from=\"{{ _.month1 }}-01\" to=\"{{ _.month2 }}-03\" quantity=\"5\" />\n        <availability from=\"{{ _.month2 }}-04\" to=\"{{ _.farMonth }}-28\" quantity=\"4\" />\n      </inventory>\n      <rate currency=\"{{ _.currency }}\" rateCode=\"{{ _.room2rate1 }}\" rateName=\"{{ _.room2rate1 }}\">\n        <planning from=\"{{ _.month1 }}-01\" to=\"{{ _.month2 }}-03\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"false\" unitPrice=\"95.00\" />\n        <planning from=\"{{ _.month2 }}-04\" to=\"{{ _.farMonth }}-28\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"false\" unitPrice=\"99.00\" />\n      </rate>\n    </room>\n  </inventoryUpdate>\n</message>\n"
      }
    },
    {
      "_id": "req_ts_pu-18_perday",
      "_type": "request",
      "parentId": "fld_ts_planning-updates-prices-perday-",
      "name": "PU-18  Extreme prices",
      "description": "What we send: Prices of `2.00`, `200.00`, and `340000000.50`.\n\nWhat we expect: `<success>`, because the hotel set them. A price check on your side belongs in an internal alert, not in the response.\n\nApplies to: all integrations.\n\nPrice model: PerDay.\n\nTest scenarios: https://docs.d-edge.com/channel-manager-api/get-certified/test-scenarios",
      "method": "POST",
      "url": "{{ _.planningUpdatesUrl }}",
      "parameters": [],
      "headers": [
        {
          "name": "Content-Type",
          "value": "application/xml; charset=utf-8"
        },
        {
          "name": "x-mock-api-key",
          "value": "{{ _.mockApiKey }}"
        }
      ],
      "authentication": {
        "type": "basic",
        "useISO88591": false,
        "disabled": false,
        "username": "{{ _.login }}",
        "password": "{{ _.password }}"
      },
      "afterResponseScript": "insomnia.test(\"PU-18 answers 200 OK\", () => insomnia.expect(insomnia.response.code).to.equal(200));\ninsomnia.test(\"PU-18 declares an XML content type\", () => insomnia.expect(String((insomnia.response.headers.find(h => h.key.toLowerCase() === \"content-type\") || {}).value)).to.match(/xml/i));\ninsomnia.test(\"PU-18 answers within 5 s\", () => insomnia.expect(insomnia.response.responseTime).to.be.below(5000));\ninsomnia.test(\"PU-18 returns <success />\", () => insomnia.expect(insomnia.response.text()).to.match(/<success\\s*\\/?>/));\n",
      "metaSortKey": 8,
      "body": {
        "mimeType": "application/xml",
        "text": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<message xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\n  <authentication login=\"{{ _.login }}\" password=\"{{ _.password }}\" />\n  <inventoryUpdate hotelId=\"{{ _.hotelCode }}\">\n    <room id=\"{{ _.room1 }}\">\n      <rate currency=\"{{ _.currency }}\" rateCode=\"{{ _.room1rate1 }}\" rateName=\"{{ _.room1rate1 }}\">\n        <planning from=\"{{ _.month1 }}-01\" to=\"{{ _.month1 }}-04\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"false\" unitPrice=\"2.00\" />\n        <planning from=\"{{ _.month1 }}-05\" to=\"{{ _.month1 }}-07\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"false\" unitPrice=\"200.00\" />\n        <planning from=\"{{ _.month1 }}-08\" to=\"{{ _.month1 }}-10\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"false\" unitPrice=\"340000000.50\" />\n      </rate>\n    </room>\n  </inventoryUpdate>\n</message>\n"
      }
    },
    {
      "_id": "req_ts_pu-19_perday",
      "_type": "request",
      "parentId": "fld_ts_planning-updates-prices-perday-",
      "name": "PU-19  Meal plans",
      "description": "What we send: A rate with `mealPlanType` and `mealPlan` elements: adult only, child only, then adult and child.\n\nWhat we expect: `<success>`, with `unitPrice` applied as the total price, meals included. See Meal plans.\n\nCondition: Only if you support meal plans.\n\nPrice model: PerDay.\n\nTest scenarios: https://docs.d-edge.com/channel-manager-api/get-certified/test-scenarios",
      "method": "POST",
      "url": "{{ _.planningUpdatesUrl }}",
      "parameters": [],
      "headers": [
        {
          "name": "Content-Type",
          "value": "application/xml; charset=utf-8"
        },
        {
          "name": "x-mock-api-key",
          "value": "{{ _.mockApiKey }}"
        }
      ],
      "authentication": {
        "type": "basic",
        "useISO88591": false,
        "disabled": false,
        "username": "{{ _.login }}",
        "password": "{{ _.password }}"
      },
      "afterResponseScript": "insomnia.test(\"PU-19 answers 200 OK\", () => insomnia.expect(insomnia.response.code).to.equal(200));\ninsomnia.test(\"PU-19 declares an XML content type\", () => insomnia.expect(String((insomnia.response.headers.find(h => h.key.toLowerCase() === \"content-type\") || {}).value)).to.match(/xml/i));\ninsomnia.test(\"PU-19 answers within 5 s\", () => insomnia.expect(insomnia.response.responseTime).to.be.below(5000));\ninsomnia.test(\"PU-19 returns <success />\", () => insomnia.expect(insomnia.response.text()).to.match(/<success\\s*\\/?>/));\n",
      "metaSortKey": 9,
      "body": {
        "mimeType": "application/xml",
        "text": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<message xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\n  <authentication login=\"{{ _.login }}\" password=\"{{ _.password }}\" />\n  <inventoryUpdate hotelId=\"{{ _.hotelCode }}\">\n    <room id=\"{{ _.room1 }}\">\n      <inventory>\n        <availability from=\"{{ _.month1 }}-01\" to=\"{{ _.month1 }}-10\" quantity=\"4\" />\n      </inventory>\n      <rate currency=\"{{ _.currency }}\" rateCode=\"{{ _.room1rate1 }}\" rateName=\"{{ _.room1rate1 }}\" mealPlanType=\"BreakfastIncluded\">\n        <planning from=\"{{ _.month1 }}-01\" to=\"{{ _.month1 }}-04\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"false\" unitPrice=\"142.00\"><mealPlan paxType=\"adult\" price=\"9\" /></planning>\n        <planning from=\"{{ _.month1 }}-05\" to=\"{{ _.month1 }}-07\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"false\" unitPrice=\"142.00\"><mealPlan paxType=\"child\" price=\"4\" /></planning>\n        <planning from=\"{{ _.month1 }}-08\" to=\"{{ _.month1 }}-10\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"false\" unitPrice=\"158.00\"><mealPlan paxType=\"adult\" price=\"16\" /><mealPlan paxType=\"child\" price=\"16\" /></planning>\n      </rate>\n    </room>\n  </inventoryUpdate>\n</message>\n"
      }
    },
    {
      "_id": "fld_ts_planning-updates-prices-perperson-",
      "_type": "request_group",
      "parentId": "wrk_channel-manager-api-test-scenarios",
      "name": "Planning updates: prices (PerPerson)",
      "description": "The price scenarios in the shape of the PerPerson price model. Run the folder of the model your Get hotel response declares, and leave the two others. PU-19 applies to meal plans only. The occupancy elements assume rooms that accept one and two persons: edit the counts if yours do not.",
      "metaSortKey": 4
    },
    {
      "_id": "req_ts_pu-10_perperson",
      "_type": "request",
      "parentId": "fld_ts_planning-updates-prices-perperson-",
      "name": "PU-10  Prices only",
      "description": "What we send: Prices only, no inventory and no restriction.\n\nWhat we expect: `<success>`.\n\nApplies to: all integrations.\n\nPrice model: PerPerson.\n\nTest scenarios: https://docs.d-edge.com/channel-manager-api/get-certified/test-scenarios",
      "method": "POST",
      "url": "{{ _.planningUpdatesUrl }}",
      "parameters": [],
      "headers": [
        {
          "name": "Content-Type",
          "value": "application/xml; charset=utf-8"
        },
        {
          "name": "x-mock-api-key",
          "value": "{{ _.mockApiKey }}"
        }
      ],
      "authentication": {
        "type": "basic",
        "useISO88591": false,
        "disabled": false,
        "username": "{{ _.login }}",
        "password": "{{ _.password }}"
      },
      "afterResponseScript": "insomnia.test(\"PU-10 answers 200 OK\", () => insomnia.expect(insomnia.response.code).to.equal(200));\ninsomnia.test(\"PU-10 declares an XML content type\", () => insomnia.expect(String((insomnia.response.headers.find(h => h.key.toLowerCase() === \"content-type\") || {}).value)).to.match(/xml/i));\ninsomnia.test(\"PU-10 answers within 5 s\", () => insomnia.expect(insomnia.response.responseTime).to.be.below(5000));\ninsomnia.test(\"PU-10 returns <success />\", () => insomnia.expect(insomnia.response.text()).to.match(/<success\\s*\\/?>/));\n",
      "metaSortKey": 0,
      "body": {
        "mimeType": "application/xml",
        "text": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<message xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\n  <authentication login=\"{{ _.login }}\" password=\"{{ _.password }}\" />\n  <inventoryUpdate hotelId=\"{{ _.hotelCode }}\">\n    <room id=\"{{ _.room1 }}\">\n      <rate currency=\"{{ _.currency }}\" rateCode=\"{{ _.room1rate1 }}\" rateName=\"{{ _.room1rate1 }}\">\n        <planning from=\"{{ _.month1 }}-01\" to=\"{{ _.month1 }}-04\"><occupancy personCount=\"1\" unitPrice=\"222.00\" isClosed=\"false\" /><occupancy personCount=\"2\" unitPrice=\"252.00\" isClosed=\"false\" /></planning>\n        <planning from=\"{{ _.month1 }}-05\" to=\"{{ _.month1 }}-07\"><occupancy personCount=\"1\" unitPrice=\"223.00\" isClosed=\"false\" /><occupancy personCount=\"2\" unitPrice=\"253.00\" isClosed=\"false\" /></planning>\n      </rate>\n    </room>\n  </inventoryUpdate>\n</message>\n"
      }
    },
    {
      "_id": "req_ts_pu-11_perperson",
      "_type": "request",
      "parentId": "fld_ts_planning-updates-prices-perperson-",
      "name": "PU-11  Prices and restrictions, no inventory",
      "description": "What we send: Prices and restrictions together, no inventory.\n\nWhat we expect: `<success>`.\n\nApplies to: all integrations.\n\nPrice model: PerPerson.\n\nTest scenarios: https://docs.d-edge.com/channel-manager-api/get-certified/test-scenarios",
      "method": "POST",
      "url": "{{ _.planningUpdatesUrl }}",
      "parameters": [],
      "headers": [
        {
          "name": "Content-Type",
          "value": "application/xml; charset=utf-8"
        },
        {
          "name": "x-mock-api-key",
          "value": "{{ _.mockApiKey }}"
        }
      ],
      "authentication": {
        "type": "basic",
        "useISO88591": false,
        "disabled": false,
        "username": "{{ _.login }}",
        "password": "{{ _.password }}"
      },
      "afterResponseScript": "insomnia.test(\"PU-11 answers 200 OK\", () => insomnia.expect(insomnia.response.code).to.equal(200));\ninsomnia.test(\"PU-11 declares an XML content type\", () => insomnia.expect(String((insomnia.response.headers.find(h => h.key.toLowerCase() === \"content-type\") || {}).value)).to.match(/xml/i));\ninsomnia.test(\"PU-11 answers within 5 s\", () => insomnia.expect(insomnia.response.responseTime).to.be.below(5000));\ninsomnia.test(\"PU-11 returns <success />\", () => insomnia.expect(insomnia.response.text()).to.match(/<success\\s*\\/?>/));\n",
      "metaSortKey": 1,
      "body": {
        "mimeType": "application/xml",
        "text": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<message xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\n  <authentication login=\"{{ _.login }}\" password=\"{{ _.password }}\" />\n  <inventoryUpdate hotelId=\"{{ _.hotelCode }}\">\n    <room id=\"{{ _.room1 }}\">\n      <rate currency=\"{{ _.currency }}\" rateCode=\"{{ _.room1rate1 }}\" rateName=\"{{ _.room1rate1 }}\">\n        <planning from=\"{{ _.month1 }}-01\" to=\"{{ _.month1 }}-11\" minimumStay=\"2\" maximumStay=\"6\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"false\"><occupancy personCount=\"1\" unitPrice=\"340.00\" isClosed=\"false\" /><occupancy personCount=\"2\" unitPrice=\"370.00\" isClosed=\"false\" /></planning>\n        <planning from=\"{{ _.month1 }}-12\" to=\"{{ _.month1 }}-20\" minimumStay=\"1\" noDeparture=\"true\"><occupancy personCount=\"1\" unitPrice=\"273.00\" isClosed=\"false\" /><occupancy personCount=\"2\" unitPrice=\"303.00\" isClosed=\"false\" /></planning>\n      </rate>\n      <rate currency=\"{{ _.currency }}\" rateCode=\"{{ _.room1rate2 }}\" rateName=\"{{ _.room1rate2 }}\">\n        <planning from=\"{{ _.month1 }}-01\" to=\"{{ _.month1 }}-07\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"true\"><occupancy personCount=\"1\" unitPrice=\"111.00\" isClosed=\"false\" /><occupancy personCount=\"2\" unitPrice=\"141.00\" isClosed=\"false\" /></planning>\n      </rate>\n    </room>\n  </inventoryUpdate>\n</message>\n"
      }
    },
    {
      "_id": "req_ts_pu-12_perperson",
      "_type": "request",
      "parentId": "fld_ts_planning-updates-prices-perperson-",
      "name": "PU-12  Full update, one room, one rate",
      "description": "What we send: A full update of one room and one rate: inventory, prices, and restrictions over several ranges, including a single-day range.\n\nWhat we expect: `<success>`, and every value applied.\n\nApplies to: all integrations.\n\nPrice model: PerPerson.\n\nTest scenarios: https://docs.d-edge.com/channel-manager-api/get-certified/test-scenarios",
      "method": "POST",
      "url": "{{ _.planningUpdatesUrl }}",
      "parameters": [],
      "headers": [
        {
          "name": "Content-Type",
          "value": "application/xml; charset=utf-8"
        },
        {
          "name": "x-mock-api-key",
          "value": "{{ _.mockApiKey }}"
        }
      ],
      "authentication": {
        "type": "basic",
        "useISO88591": false,
        "disabled": false,
        "username": "{{ _.login }}",
        "password": "{{ _.password }}"
      },
      "afterResponseScript": "insomnia.test(\"PU-12 answers 200 OK\", () => insomnia.expect(insomnia.response.code).to.equal(200));\ninsomnia.test(\"PU-12 declares an XML content type\", () => insomnia.expect(String((insomnia.response.headers.find(h => h.key.toLowerCase() === \"content-type\") || {}).value)).to.match(/xml/i));\ninsomnia.test(\"PU-12 answers within 5 s\", () => insomnia.expect(insomnia.response.responseTime).to.be.below(5000));\ninsomnia.test(\"PU-12 returns <success />\", () => insomnia.expect(insomnia.response.text()).to.match(/<success\\s*\\/?>/));\n",
      "metaSortKey": 2,
      "body": {
        "mimeType": "application/xml",
        "text": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<message xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\n  <authentication login=\"{{ _.login }}\" password=\"{{ _.password }}\" />\n  <inventoryUpdate hotelId=\"{{ _.hotelCode }}\">\n    <room id=\"{{ _.room1 }}\">\n      <inventory>\n        <availability from=\"{{ _.month1 }}-01\" to=\"{{ _.month1 }}-08\" quantity=\"1\" />\n        <availability from=\"{{ _.month1 }}-09\" to=\"{{ _.month1 }}-13\" quantity=\"3\" />\n        <availability from=\"{{ _.month1 }}-14\" to=\"{{ _.month1 }}-18\" quantity=\"5\" />\n        <availability from=\"{{ _.month1 }}-19\" to=\"{{ _.month1 }}-26\" quantity=\"1\" />\n        <availability from=\"{{ _.month1 }}-27\" to=\"{{ _.month2 }}-05\" quantity=\"1\" />\n      </inventory>\n      <rate currency=\"{{ _.currency }}\" rateCode=\"{{ _.room1rate1 }}\" rateName=\"{{ _.room1rate1 }}\">\n        <planning from=\"{{ _.month1 }}-01\" to=\"{{ _.month1 }}-11\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"false\"><occupancy personCount=\"1\" unitPrice=\"210.00\" isClosed=\"false\" /><occupancy personCount=\"2\" unitPrice=\"240.00\" isClosed=\"false\" /></planning>\n        <planning from=\"{{ _.month1 }}-12\" to=\"{{ _.month1 }}-20\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"false\"><occupancy personCount=\"1\" unitPrice=\"273.00\" isClosed=\"false\" /><occupancy personCount=\"2\" unitPrice=\"303.00\" isClosed=\"false\" /></planning>\n        <planning from=\"{{ _.month1 }}-21\" to=\"{{ _.month1 }}-24\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"false\"><occupancy personCount=\"1\" unitPrice=\"340.50\" isClosed=\"false\" /><occupancy personCount=\"2\" unitPrice=\"370.50\" isClosed=\"false\" /></planning>\n        <planning from=\"{{ _.month1 }}-25\" to=\"{{ _.month1 }}-25\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"false\"><occupancy personCount=\"1\" unitPrice=\"294.00\" isClosed=\"false\" /><occupancy personCount=\"2\" unitPrice=\"324.00\" isClosed=\"false\" /></planning>\n        <planning from=\"{{ _.month1 }}-26\" to=\"{{ _.month2 }}-05\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"false\"><occupancy personCount=\"1\" unitPrice=\"340.00\" isClosed=\"false\" /><occupancy personCount=\"2\" unitPrice=\"370.00\" isClosed=\"false\" /></planning>\n      </rate>\n    </room>\n  </inventoryUpdate>\n</message>\n"
      }
    },
    {
      "_id": "req_ts_pu-13_perperson",
      "_type": "request",
      "parentId": "fld_ts_planning-updates-prices-perperson-",
      "name": "PU-13  Ranges with gaps",
      "description": "What we send: Ranges that leave gaps between them, in the inventory and in the planning.\n\nWhat we expect: `<success>`; the days not covered are left untouched.\n\nApplies to: all integrations.\n\nPrice model: PerPerson.\n\nTest scenarios: https://docs.d-edge.com/channel-manager-api/get-certified/test-scenarios",
      "method": "POST",
      "url": "{{ _.planningUpdatesUrl }}",
      "parameters": [],
      "headers": [
        {
          "name": "Content-Type",
          "value": "application/xml; charset=utf-8"
        },
        {
          "name": "x-mock-api-key",
          "value": "{{ _.mockApiKey }}"
        }
      ],
      "authentication": {
        "type": "basic",
        "useISO88591": false,
        "disabled": false,
        "username": "{{ _.login }}",
        "password": "{{ _.password }}"
      },
      "afterResponseScript": "insomnia.test(\"PU-13 answers 200 OK\", () => insomnia.expect(insomnia.response.code).to.equal(200));\ninsomnia.test(\"PU-13 declares an XML content type\", () => insomnia.expect(String((insomnia.response.headers.find(h => h.key.toLowerCase() === \"content-type\") || {}).value)).to.match(/xml/i));\ninsomnia.test(\"PU-13 answers within 5 s\", () => insomnia.expect(insomnia.response.responseTime).to.be.below(5000));\ninsomnia.test(\"PU-13 returns <success />\", () => insomnia.expect(insomnia.response.text()).to.match(/<success\\s*\\/?>/));\n",
      "metaSortKey": 3,
      "body": {
        "mimeType": "application/xml",
        "text": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<message xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\n  <authentication login=\"{{ _.login }}\" password=\"{{ _.password }}\" />\n  <inventoryUpdate hotelId=\"{{ _.hotelCode }}\">\n    <room id=\"{{ _.room1 }}\">\n      <inventory>\n        <availability from=\"{{ _.month1 }}-01\" to=\"{{ _.month1 }}-05\" quantity=\"5\" />\n        <availability from=\"{{ _.month1 }}-09\" to=\"{{ _.month1 }}-13\" quantity=\"6\" />\n      </inventory>\n      <rate currency=\"{{ _.currency }}\" rateCode=\"{{ _.room1rate1 }}\" rateName=\"{{ _.room1rate1 }}\">\n        <planning from=\"{{ _.month1 }}-01\" to=\"{{ _.month1 }}-07\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"false\"><occupancy personCount=\"1\" unitPrice=\"111.00\" isClosed=\"false\" /><occupancy personCount=\"2\" unitPrice=\"141.00\" isClosed=\"false\" /></planning>\n        <planning from=\"{{ _.month1 }}-11\" to=\"{{ _.month1 }}-20\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"false\"><occupancy personCount=\"1\" unitPrice=\"112.00\" isClosed=\"false\" /><occupancy personCount=\"2\" unitPrice=\"142.00\" isClosed=\"false\" /></planning>\n      </rate>\n    </room>\n  </inventoryUpdate>\n</message>\n"
      }
    },
    {
      "_id": "req_ts_pu-14_perperson",
      "_type": "request",
      "parentId": "fld_ts_planning-updates-prices-perperson-",
      "name": "PU-14  One room, several rates, a zero quantity",
      "description": "What we send: One room with several rates, each with its own prices and restrictions, and an availability quantity of `0` on one range.\n\nWhat we expect: `<success>`, and the room closed to sale on that range.\n\nApplies to: all integrations.\n\nPrice model: PerPerson.\n\nTest scenarios: https://docs.d-edge.com/channel-manager-api/get-certified/test-scenarios",
      "method": "POST",
      "url": "{{ _.planningUpdatesUrl }}",
      "parameters": [],
      "headers": [
        {
          "name": "Content-Type",
          "value": "application/xml; charset=utf-8"
        },
        {
          "name": "x-mock-api-key",
          "value": "{{ _.mockApiKey }}"
        }
      ],
      "authentication": {
        "type": "basic",
        "useISO88591": false,
        "disabled": false,
        "username": "{{ _.login }}",
        "password": "{{ _.password }}"
      },
      "afterResponseScript": "insomnia.test(\"PU-14 answers 200 OK\", () => insomnia.expect(insomnia.response.code).to.equal(200));\ninsomnia.test(\"PU-14 declares an XML content type\", () => insomnia.expect(String((insomnia.response.headers.find(h => h.key.toLowerCase() === \"content-type\") || {}).value)).to.match(/xml/i));\ninsomnia.test(\"PU-14 answers within 5 s\", () => insomnia.expect(insomnia.response.responseTime).to.be.below(5000));\ninsomnia.test(\"PU-14 returns <success />\", () => insomnia.expect(insomnia.response.text()).to.match(/<success\\s*\\/?>/));\n",
      "metaSortKey": 4,
      "body": {
        "mimeType": "application/xml",
        "text": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<message xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\n  <authentication login=\"{{ _.login }}\" password=\"{{ _.password }}\" />\n  <inventoryUpdate hotelId=\"{{ _.hotelCode }}\">\n    <room id=\"{{ _.room1 }}\">\n      <inventory>\n        <availability from=\"{{ _.month1 }}-01\" to=\"{{ _.month1 }}-03\" quantity=\"4\" />\n        <availability from=\"{{ _.month1 }}-04\" to=\"{{ _.month1 }}-08\" quantity=\"7\" />\n        <availability from=\"{{ _.month1 }}-09\" to=\"{{ _.month1 }}-12\" quantity=\"2\" />\n        <availability from=\"{{ _.month1 }}-13\" to=\"{{ _.month1 }}-26\" quantity=\"0\" />\n        <availability from=\"{{ _.month1 }}-27\" to=\"{{ _.month2 }}-06\" quantity=\"10\" />\n      </inventory>\n      <rate currency=\"{{ _.currency }}\" rateCode=\"{{ _.room1rate1 }}\" rateName=\"{{ _.room1rate1 }}\">\n        <planning from=\"{{ _.month1 }}-01\" to=\"{{ _.month1 }}-10\" minimumStay=\"2\" maximumStay=\"6\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"false\"><occupancy personCount=\"1\" unitPrice=\"147.00\" isClosed=\"false\" /><occupancy personCount=\"2\" unitPrice=\"177.00\" isClosed=\"false\" /></planning>\n        <planning from=\"{{ _.month1 }}-11\" to=\"{{ _.month1 }}-18\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"false\"><occupancy personCount=\"1\" unitPrice=\"111.00\" isClosed=\"false\" /><occupancy personCount=\"2\" unitPrice=\"141.00\" isClosed=\"false\" /></planning>\n        <planning from=\"{{ _.month1 }}-19\" to=\"{{ _.month1 }}-24\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"true\"><occupancy personCount=\"1\" unitPrice=\"147.60\" isClosed=\"false\" /><occupancy personCount=\"2\" unitPrice=\"177.60\" isClosed=\"false\" /></planning>\n        <planning from=\"{{ _.month1 }}-25\" to=\"{{ _.month1 }}-25\" minimumStay=\"3\" maximumStay=\"4\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"false\"><occupancy personCount=\"1\" unitPrice=\"136.00\" isClosed=\"false\" /><occupancy personCount=\"2\" unitPrice=\"166.00\" isClosed=\"false\" /></planning>\n        <planning from=\"{{ _.month1 }}-26\" to=\"{{ _.month1 }}-28\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"true\" noDeparture=\"false\" isClosed=\"false\"><occupancy personCount=\"1\" unitPrice=\"124.00\" isClosed=\"false\" /><occupancy personCount=\"2\" unitPrice=\"154.00\" isClosed=\"false\" /></planning>\n      </rate>\n      <rate currency=\"{{ _.currency }}\" rateCode=\"{{ _.room1rate2 }}\" rateName=\"{{ _.room1rate2 }}\">\n        <planning from=\"{{ _.month1 }}-01\" to=\"{{ _.month1 }}-03\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"false\" noDeparture=\"true\" isClosed=\"false\"><occupancy personCount=\"1\" unitPrice=\"444.00\" isClosed=\"false\" /><occupancy personCount=\"2\" unitPrice=\"474.00\" isClosed=\"false\" /></planning>\n        <planning from=\"{{ _.month1 }}-04\" to=\"{{ _.month1 }}-07\" minimumStay=\"3\" maximumStay=\"99\" noArrival=\"false\" noDeparture=\"true\" isClosed=\"false\"><occupancy personCount=\"1\" unitPrice=\"42.00\" isClosed=\"false\" /><occupancy personCount=\"2\" unitPrice=\"72.00\" isClosed=\"false\" /></planning>\n        <planning from=\"{{ _.month1 }}-08\" to=\"{{ _.month1 }}-11\" minimumStay=\"1\" maximumStay=\"2\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"false\"><occupancy personCount=\"1\" unitPrice=\"47.00\" isClosed=\"false\" /><occupancy personCount=\"2\" unitPrice=\"77.00\" isClosed=\"false\" /></planning>\n        <planning from=\"{{ _.month1 }}-12\" to=\"{{ _.month1 }}-20\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"false\"><occupancy personCount=\"1\" unitPrice=\"143.00\" isClosed=\"false\" /><occupancy personCount=\"2\" unitPrice=\"173.00\" isClosed=\"false\" /></planning>\n        <planning from=\"{{ _.month1 }}-21\" to=\"{{ _.month2 }}-05\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"true\"><occupancy personCount=\"1\" unitPrice=\"187.00\" isClosed=\"false\" /><occupancy personCount=\"2\" unitPrice=\"217.00\" isClosed=\"false\" /></planning>\n      </rate>\n    </room>\n  </inventoryUpdate>\n</message>\n"
      }
    },
    {
      "_id": "req_ts_pu-15_perperson",
      "_type": "request",
      "parentId": "fld_ts_planning-updates-prices-perperson-",
      "name": "PU-15  Several rooms, one rate",
      "description": "What we send: Several rooms with a single rate.\n\nWhat we expect: `<success>`.\n\nApplies to: all integrations.\n\nPrice model: PerPerson.\n\nTest scenarios: https://docs.d-edge.com/channel-manager-api/get-certified/test-scenarios",
      "method": "POST",
      "url": "{{ _.planningUpdatesUrl }}",
      "parameters": [],
      "headers": [
        {
          "name": "Content-Type",
          "value": "application/xml; charset=utf-8"
        },
        {
          "name": "x-mock-api-key",
          "value": "{{ _.mockApiKey }}"
        }
      ],
      "authentication": {
        "type": "basic",
        "useISO88591": false,
        "disabled": false,
        "username": "{{ _.login }}",
        "password": "{{ _.password }}"
      },
      "afterResponseScript": "insomnia.test(\"PU-15 answers 200 OK\", () => insomnia.expect(insomnia.response.code).to.equal(200));\ninsomnia.test(\"PU-15 declares an XML content type\", () => insomnia.expect(String((insomnia.response.headers.find(h => h.key.toLowerCase() === \"content-type\") || {}).value)).to.match(/xml/i));\ninsomnia.test(\"PU-15 answers within 5 s\", () => insomnia.expect(insomnia.response.responseTime).to.be.below(5000));\ninsomnia.test(\"PU-15 returns <success />\", () => insomnia.expect(insomnia.response.text()).to.match(/<success\\s*\\/?>/));\n",
      "metaSortKey": 5,
      "body": {
        "mimeType": "application/xml",
        "text": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<message xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\n  <authentication login=\"{{ _.login }}\" password=\"{{ _.password }}\" />\n  <inventoryUpdate hotelId=\"{{ _.hotelCode }}\">\n    <room id=\"{{ _.room1 }}\">\n      <inventory>\n        <availability from=\"{{ _.month1 }}-01\" to=\"{{ _.month1 }}-08\" quantity=\"1\" />\n        <availability from=\"{{ _.month1 }}-09\" to=\"{{ _.month1 }}-13\" quantity=\"3\" />\n        <availability from=\"{{ _.month1 }}-16\" to=\"{{ _.month1 }}-26\" quantity=\"17\" />\n      </inventory>\n      <rate currency=\"{{ _.currency }}\" rateCode=\"{{ _.room1rate1 }}\" rateName=\"{{ _.room1rate1 }}\">\n        <planning from=\"{{ _.month1 }}-01\" to=\"{{ _.month1 }}-13\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"false\"><occupancy personCount=\"1\" unitPrice=\"210.00\" isClosed=\"false\" /><occupancy personCount=\"2\" unitPrice=\"240.00\" isClosed=\"false\" /></planning>\n        <planning from=\"{{ _.month1 }}-16\" to=\"{{ _.month1 }}-26\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"false\"><occupancy personCount=\"1\" unitPrice=\"273.00\" isClosed=\"false\" /><occupancy personCount=\"2\" unitPrice=\"303.00\" isClosed=\"false\" /></planning>\n      </rate>\n    </room>\n    <room id=\"{{ _.room2 }}\">\n      <inventory>\n        <availability from=\"{{ _.month1 }}-01\" to=\"{{ _.month1 }}-13\" quantity=\"4\" />\n        <availability from=\"{{ _.month1 }}-14\" to=\"{{ _.month1 }}-26\" quantity=\"6\" />\n      </inventory>\n      <rate currency=\"{{ _.currency }}\" rateCode=\"{{ _.room2rate1 }}\" rateName=\"{{ _.room2rate1 }}\">\n        <planning from=\"{{ _.month1 }}-01\" to=\"{{ _.month1 }}-13\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"false\"><occupancy personCount=\"1\" unitPrice=\"180.00\" isClosed=\"false\" /><occupancy personCount=\"2\" unitPrice=\"210.00\" isClosed=\"false\" /></planning>\n        <planning from=\"{{ _.month1 }}-14\" to=\"{{ _.month1 }}-26\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"false\"><occupancy personCount=\"1\" unitPrice=\"190.00\" isClosed=\"false\" /><occupancy personCount=\"2\" unitPrice=\"220.00\" isClosed=\"false\" /></planning>\n      </rate>\n    </room>\n  </inventoryUpdate>\n</message>\n"
      }
    },
    {
      "_id": "req_ts_pu-16_perperson",
      "_type": "request",
      "parentId": "fld_ts_planning-updates-prices-perperson-",
      "name": "PU-16  Several rooms, several rates, one room inventory only",
      "description": "What we send: Several rooms with several rates, one of the rooms carrying inventory only.\n\nWhat we expect: `<success>`.\n\nApplies to: all integrations.\n\nPrice model: PerPerson.\n\nTest scenarios: https://docs.d-edge.com/channel-manager-api/get-certified/test-scenarios",
      "method": "POST",
      "url": "{{ _.planningUpdatesUrl }}",
      "parameters": [],
      "headers": [
        {
          "name": "Content-Type",
          "value": "application/xml; charset=utf-8"
        },
        {
          "name": "x-mock-api-key",
          "value": "{{ _.mockApiKey }}"
        }
      ],
      "authentication": {
        "type": "basic",
        "useISO88591": false,
        "disabled": false,
        "username": "{{ _.login }}",
        "password": "{{ _.password }}"
      },
      "afterResponseScript": "insomnia.test(\"PU-16 answers 200 OK\", () => insomnia.expect(insomnia.response.code).to.equal(200));\ninsomnia.test(\"PU-16 declares an XML content type\", () => insomnia.expect(String((insomnia.response.headers.find(h => h.key.toLowerCase() === \"content-type\") || {}).value)).to.match(/xml/i));\ninsomnia.test(\"PU-16 answers within 5 s\", () => insomnia.expect(insomnia.response.responseTime).to.be.below(5000));\ninsomnia.test(\"PU-16 returns <success />\", () => insomnia.expect(insomnia.response.text()).to.match(/<success\\s*\\/?>/));\n",
      "metaSortKey": 6,
      "body": {
        "mimeType": "application/xml",
        "text": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<message xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\n  <authentication login=\"{{ _.login }}\" password=\"{{ _.password }}\" />\n  <inventoryUpdate hotelId=\"{{ _.hotelCode }}\">\n    <room id=\"{{ _.room1 }}\">\n      <inventory>\n        <availability from=\"{{ _.month1 }}-01\" to=\"{{ _.month1 }}-03\" quantity=\"4\" />\n        <availability from=\"{{ _.month1 }}-04\" to=\"{{ _.month1 }}-08\" quantity=\"7\" />\n        <availability from=\"{{ _.month1 }}-09\" to=\"{{ _.month1 }}-12\" quantity=\"2\" />\n        <availability from=\"{{ _.month1 }}-13\" to=\"{{ _.month1 }}-26\" quantity=\"0\" />\n        <availability from=\"{{ _.month1 }}-27\" to=\"{{ _.month2 }}-06\" quantity=\"10\" />\n      </inventory>\n      <rate currency=\"{{ _.currency }}\" rateCode=\"{{ _.room1rate1 }}\" rateName=\"{{ _.room1rate1 }}\">\n        <planning from=\"{{ _.month1 }}-01\" to=\"{{ _.month1 }}-10\" minimumStay=\"2\" maximumStay=\"6\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"false\"><occupancy personCount=\"1\" unitPrice=\"147.00\" isClosed=\"false\" /><occupancy personCount=\"2\" unitPrice=\"177.00\" isClosed=\"false\" /></planning>\n        <planning from=\"{{ _.month1 }}-11\" to=\"{{ _.month1 }}-18\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"false\"><occupancy personCount=\"1\" unitPrice=\"111.00\" isClosed=\"false\" /><occupancy personCount=\"2\" unitPrice=\"141.00\" isClosed=\"false\" /></planning>\n        <planning from=\"{{ _.month1 }}-19\" to=\"{{ _.month1 }}-24\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"true\"><occupancy personCount=\"1\" unitPrice=\"147.60\" isClosed=\"false\" /><occupancy personCount=\"2\" unitPrice=\"177.60\" isClosed=\"false\" /></planning>\n        <planning from=\"{{ _.month1 }}-25\" to=\"{{ _.month1 }}-28\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"true\" noDeparture=\"false\" isClosed=\"false\"><occupancy personCount=\"1\" unitPrice=\"124.00\" isClosed=\"false\" /><occupancy personCount=\"2\" unitPrice=\"154.00\" isClosed=\"false\" /></planning>\n      </rate>\n      <rate currency=\"{{ _.currency }}\" rateCode=\"{{ _.room1rate2 }}\" rateName=\"{{ _.room1rate2 }}\">\n        <planning from=\"{{ _.month1 }}-01\" to=\"{{ _.month1 }}-03\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"false\" noDeparture=\"true\" isClosed=\"false\"><occupancy personCount=\"1\" unitPrice=\"444.00\" isClosed=\"false\" /><occupancy personCount=\"2\" unitPrice=\"474.00\" isClosed=\"false\" /></planning>\n        <planning from=\"{{ _.month1 }}-04\" to=\"{{ _.month1 }}-20\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"false\"><occupancy personCount=\"1\" unitPrice=\"143.00\" isClosed=\"false\" /><occupancy personCount=\"2\" unitPrice=\"173.00\" isClosed=\"false\" /></planning>\n        <planning from=\"{{ _.month1 }}-21\" to=\"{{ _.month2 }}-05\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"true\"><occupancy personCount=\"1\" unitPrice=\"187.00\" isClosed=\"false\" /><occupancy personCount=\"2\" unitPrice=\"217.00\" isClosed=\"false\" /></planning>\n      </rate>\n    </room>\n    <room id=\"{{ _.room2 }}\">\n      <inventory>\n        <availability from=\"{{ _.month1 }}-01\" to=\"{{ _.month1 }}-02\" quantity=\"2\" />\n        <availability from=\"{{ _.month1 }}-03\" to=\"{{ _.month1 }}-08\" quantity=\"3\" />\n        <availability from=\"{{ _.month1 }}-11\" to=\"{{ _.month1 }}-12\" quantity=\"4\" />\n        <availability from=\"{{ _.month1 }}-13\" to=\"{{ _.month1 }}-26\" quantity=\"5\" />\n        <availability from=\"{{ _.month1 }}-27\" to=\"{{ _.month2 }}-03\" quantity=\"6\" />\n      </inventory>\n    </room>\n    <room id=\"{{ _.room3 }}\">\n      <inventory>\n        <availability from=\"{{ _.month1 }}-01\" to=\"{{ _.month1 }}-21\" quantity=\"12\" />\n      </inventory>\n      <rate currency=\"{{ _.currency }}\" rateCode=\"{{ _.room3rate1 }}\" rateName=\"{{ _.room3rate1 }}\">\n        <planning from=\"{{ _.month1 }}-01\" to=\"{{ _.month1 }}-05\" minimumStay=\"1\" maximumStay=\"1\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"false\"><occupancy personCount=\"1\" unitPrice=\"41.00\" isClosed=\"false\" /><occupancy personCount=\"2\" unitPrice=\"71.00\" isClosed=\"false\" /></planning>\n        <planning from=\"{{ _.month1 }}-06\" to=\"{{ _.month1 }}-08\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"false\"><occupancy personCount=\"1\" unitPrice=\"57.00\" isClosed=\"false\" /><occupancy personCount=\"2\" unitPrice=\"87.00\" isClosed=\"false\" /></planning>\n        <planning from=\"{{ _.month1 }}-10\" to=\"{{ _.month1 }}-11\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"true\"><occupancy personCount=\"1\" unitPrice=\"111.00\" isClosed=\"false\" /><occupancy personCount=\"2\" unitPrice=\"141.00\" isClosed=\"false\" /></planning>\n        <planning from=\"{{ _.month1 }}-12\" to=\"{{ _.month1 }}-15\" minimumStay=\"1\" maximumStay=\"4\" noArrival=\"false\" noDeparture=\"true\" isClosed=\"false\"><occupancy personCount=\"1\" unitPrice=\"136.00\" isClosed=\"false\" /><occupancy personCount=\"2\" unitPrice=\"166.00\" isClosed=\"false\" /></planning>\n        <planning from=\"{{ _.month1 }}-16\" to=\"{{ _.month1 }}-28\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"false\"><occupancy personCount=\"1\" unitPrice=\"124.00\" isClosed=\"false\" /><occupancy personCount=\"2\" unitPrice=\"154.00\" isClosed=\"false\" /></planning>\n      </rate>\n      <rate currency=\"{{ _.currency }}\" rateCode=\"{{ _.room3rate2 }}\" rateName=\"{{ _.room3rate2 }}\">\n        <planning from=\"{{ _.month1 }}-01\" to=\"{{ _.month1 }}-03\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"false\" noDeparture=\"true\" isClosed=\"false\"><occupancy personCount=\"1\" unitPrice=\"122.00\" isClosed=\"false\" /><occupancy personCount=\"2\" unitPrice=\"152.00\" isClosed=\"false\" /></planning>\n        <planning from=\"{{ _.month1 }}-04\" to=\"{{ _.month2 }}-02\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"false\"><occupancy personCount=\"1\" unitPrice=\"123.00\" isClosed=\"false\" /><occupancy personCount=\"2\" unitPrice=\"153.00\" isClosed=\"false\" /></planning>\n      </rate>\n    </room>\n  </inventoryUpdate>\n</message>\n"
      }
    },
    {
      "_id": "req_ts_pu-17_perperson",
      "_type": "request",
      "parentId": "fld_ts_planning-updates-prices-perperson-",
      "name": "PU-17  Several rooms to the horizon",
      "description": "What we send: Several rooms up to the maximum horizon you declared.\n\nWhat we expect: `<success>`.\n\nApplies to: all integrations.\n\nPrice model: PerPerson.\n\nTest scenarios: https://docs.d-edge.com/channel-manager-api/get-certified/test-scenarios",
      "method": "POST",
      "url": "{{ _.planningUpdatesUrl }}",
      "parameters": [],
      "headers": [
        {
          "name": "Content-Type",
          "value": "application/xml; charset=utf-8"
        },
        {
          "name": "x-mock-api-key",
          "value": "{{ _.mockApiKey }}"
        }
      ],
      "authentication": {
        "type": "basic",
        "useISO88591": false,
        "disabled": false,
        "username": "{{ _.login }}",
        "password": "{{ _.password }}"
      },
      "afterResponseScript": "insomnia.test(\"PU-17 answers 200 OK\", () => insomnia.expect(insomnia.response.code).to.equal(200));\ninsomnia.test(\"PU-17 declares an XML content type\", () => insomnia.expect(String((insomnia.response.headers.find(h => h.key.toLowerCase() === \"content-type\") || {}).value)).to.match(/xml/i));\ninsomnia.test(\"PU-17 answers within 5 s\", () => insomnia.expect(insomnia.response.responseTime).to.be.below(5000));\ninsomnia.test(\"PU-17 returns <success />\", () => insomnia.expect(insomnia.response.text()).to.match(/<success\\s*\\/?>/));\n",
      "metaSortKey": 7,
      "body": {
        "mimeType": "application/xml",
        "text": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<message xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\n  <authentication login=\"{{ _.login }}\" password=\"{{ _.password }}\" />\n  <inventoryUpdate hotelId=\"{{ _.hotelCode }}\">\n    <room id=\"{{ _.room1 }}\">\n      <inventory>\n        <availability from=\"{{ _.month1 }}-01\" to=\"{{ _.month2 }}-03\" quantity=\"3\" />\n        <availability from=\"{{ _.month2 }}-04\" to=\"{{ _.farMonth }}-28\" quantity=\"2\" />\n      </inventory>\n      <rate currency=\"{{ _.currency }}\" rateCode=\"{{ _.room1rate1 }}\" rateName=\"{{ _.room1rate1 }}\">\n        <planning from=\"{{ _.month1 }}-01\" to=\"{{ _.month2 }}-03\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"false\"><occupancy personCount=\"1\" unitPrice=\"1478.50\" isClosed=\"false\" /><occupancy personCount=\"2\" unitPrice=\"1508.50\" isClosed=\"false\" /></planning>\n        <planning from=\"{{ _.month2 }}-04\" to=\"{{ _.farMonth }}-28\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"false\"><occupancy personCount=\"1\" unitPrice=\"1500.00\" isClosed=\"false\" /><occupancy personCount=\"2\" unitPrice=\"1530.00\" isClosed=\"false\" /></planning>\n      </rate>\n    </room>\n    <room id=\"{{ _.room2 }}\">\n      <inventory>\n        <availability from=\"{{ _.month1 }}-01\" to=\"{{ _.month2 }}-03\" quantity=\"5\" />\n        <availability from=\"{{ _.month2 }}-04\" to=\"{{ _.farMonth }}-28\" quantity=\"4\" />\n      </inventory>\n      <rate currency=\"{{ _.currency }}\" rateCode=\"{{ _.room2rate1 }}\" rateName=\"{{ _.room2rate1 }}\">\n        <planning from=\"{{ _.month1 }}-01\" to=\"{{ _.month2 }}-03\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"false\"><occupancy personCount=\"1\" unitPrice=\"95.00\" isClosed=\"false\" /><occupancy personCount=\"2\" unitPrice=\"125.00\" isClosed=\"false\" /></planning>\n        <planning from=\"{{ _.month2 }}-04\" to=\"{{ _.farMonth }}-28\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"false\"><occupancy personCount=\"1\" unitPrice=\"99.00\" isClosed=\"false\" /><occupancy personCount=\"2\" unitPrice=\"129.00\" isClosed=\"false\" /></planning>\n      </rate>\n    </room>\n  </inventoryUpdate>\n</message>\n"
      }
    },
    {
      "_id": "req_ts_pu-18_perperson",
      "_type": "request",
      "parentId": "fld_ts_planning-updates-prices-perperson-",
      "name": "PU-18  Extreme prices",
      "description": "What we send: Prices of `2.00`, `200.00`, and `340000000.50`.\n\nWhat we expect: `<success>`, because the hotel set them. A price check on your side belongs in an internal alert, not in the response.\n\nApplies to: all integrations.\n\nPrice model: PerPerson.\n\nTest scenarios: https://docs.d-edge.com/channel-manager-api/get-certified/test-scenarios",
      "method": "POST",
      "url": "{{ _.planningUpdatesUrl }}",
      "parameters": [],
      "headers": [
        {
          "name": "Content-Type",
          "value": "application/xml; charset=utf-8"
        },
        {
          "name": "x-mock-api-key",
          "value": "{{ _.mockApiKey }}"
        }
      ],
      "authentication": {
        "type": "basic",
        "useISO88591": false,
        "disabled": false,
        "username": "{{ _.login }}",
        "password": "{{ _.password }}"
      },
      "afterResponseScript": "insomnia.test(\"PU-18 answers 200 OK\", () => insomnia.expect(insomnia.response.code).to.equal(200));\ninsomnia.test(\"PU-18 declares an XML content type\", () => insomnia.expect(String((insomnia.response.headers.find(h => h.key.toLowerCase() === \"content-type\") || {}).value)).to.match(/xml/i));\ninsomnia.test(\"PU-18 answers within 5 s\", () => insomnia.expect(insomnia.response.responseTime).to.be.below(5000));\ninsomnia.test(\"PU-18 returns <success />\", () => insomnia.expect(insomnia.response.text()).to.match(/<success\\s*\\/?>/));\n",
      "metaSortKey": 8,
      "body": {
        "mimeType": "application/xml",
        "text": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<message xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\n  <authentication login=\"{{ _.login }}\" password=\"{{ _.password }}\" />\n  <inventoryUpdate hotelId=\"{{ _.hotelCode }}\">\n    <room id=\"{{ _.room1 }}\">\n      <rate currency=\"{{ _.currency }}\" rateCode=\"{{ _.room1rate1 }}\" rateName=\"{{ _.room1rate1 }}\">\n        <planning from=\"{{ _.month1 }}-01\" to=\"{{ _.month1 }}-04\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"false\"><occupancy personCount=\"1\" unitPrice=\"2.00\" isClosed=\"false\" /><occupancy personCount=\"2\" unitPrice=\"32.00\" isClosed=\"false\" /></planning>\n        <planning from=\"{{ _.month1 }}-05\" to=\"{{ _.month1 }}-07\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"false\"><occupancy personCount=\"1\" unitPrice=\"200.00\" isClosed=\"false\" /><occupancy personCount=\"2\" unitPrice=\"230.00\" isClosed=\"false\" /></planning>\n        <planning from=\"{{ _.month1 }}-08\" to=\"{{ _.month1 }}-10\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"false\"><occupancy personCount=\"1\" unitPrice=\"340000000.50\" isClosed=\"false\" /><occupancy personCount=\"2\" unitPrice=\"340000030.50\" isClosed=\"false\" /></planning>\n      </rate>\n    </room>\n  </inventoryUpdate>\n</message>\n"
      }
    },
    {
      "_id": "req_ts_pu-19_perperson",
      "_type": "request",
      "parentId": "fld_ts_planning-updates-prices-perperson-",
      "name": "PU-19  Meal plans",
      "description": "What we send: A rate with `mealPlanType` and `mealPlan` elements: adult only, child only, then adult and child.\n\nWhat we expect: `<success>`, with `unitPrice` applied as the total price, meals included. See Meal plans.\n\nCondition: Only if you support meal plans.\n\nPrice model: PerPerson.\n\nTest scenarios: https://docs.d-edge.com/channel-manager-api/get-certified/test-scenarios",
      "method": "POST",
      "url": "{{ _.planningUpdatesUrl }}",
      "parameters": [],
      "headers": [
        {
          "name": "Content-Type",
          "value": "application/xml; charset=utf-8"
        },
        {
          "name": "x-mock-api-key",
          "value": "{{ _.mockApiKey }}"
        }
      ],
      "authentication": {
        "type": "basic",
        "useISO88591": false,
        "disabled": false,
        "username": "{{ _.login }}",
        "password": "{{ _.password }}"
      },
      "afterResponseScript": "insomnia.test(\"PU-19 answers 200 OK\", () => insomnia.expect(insomnia.response.code).to.equal(200));\ninsomnia.test(\"PU-19 declares an XML content type\", () => insomnia.expect(String((insomnia.response.headers.find(h => h.key.toLowerCase() === \"content-type\") || {}).value)).to.match(/xml/i));\ninsomnia.test(\"PU-19 answers within 5 s\", () => insomnia.expect(insomnia.response.responseTime).to.be.below(5000));\ninsomnia.test(\"PU-19 returns <success />\", () => insomnia.expect(insomnia.response.text()).to.match(/<success\\s*\\/?>/));\n",
      "metaSortKey": 9,
      "body": {
        "mimeType": "application/xml",
        "text": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<message xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\n  <authentication login=\"{{ _.login }}\" password=\"{{ _.password }}\" />\n  <inventoryUpdate hotelId=\"{{ _.hotelCode }}\">\n    <room id=\"{{ _.room1 }}\">\n      <inventory>\n        <availability from=\"{{ _.month1 }}-01\" to=\"{{ _.month1 }}-10\" quantity=\"4\" />\n      </inventory>\n      <rate currency=\"{{ _.currency }}\" rateCode=\"{{ _.room1rate1 }}\" rateName=\"{{ _.room1rate1 }}\" mealPlanType=\"BreakfastIncluded\">\n        <planning from=\"{{ _.month1 }}-01\" to=\"{{ _.month1 }}-04\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"false\"><occupancy personCount=\"1\" unitPrice=\"142.00\" isClosed=\"false\" /><occupancy personCount=\"2\" unitPrice=\"172.00\" isClosed=\"false\" /><mealPlan paxType=\"adult\" price=\"9\" /></planning>\n        <planning from=\"{{ _.month1 }}-05\" to=\"{{ _.month1 }}-07\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"false\"><occupancy personCount=\"1\" unitPrice=\"142.00\" isClosed=\"false\" /><occupancy personCount=\"2\" unitPrice=\"172.00\" isClosed=\"false\" /><mealPlan paxType=\"child\" price=\"4\" /></planning>\n        <planning from=\"{{ _.month1 }}-08\" to=\"{{ _.month1 }}-10\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"false\"><occupancy personCount=\"1\" unitPrice=\"158.00\" isClosed=\"false\" /><occupancy personCount=\"2\" unitPrice=\"188.00\" isClosed=\"false\" /><mealPlan paxType=\"adult\" price=\"16\" /><mealPlan paxType=\"child\" price=\"16\" /></planning>\n      </rate>\n    </room>\n  </inventoryUpdate>\n</message>\n"
      }
    },
    {
      "_id": "fld_ts_planning-updates-prices-peroccupancy-",
      "_type": "request_group",
      "parentId": "wrk_channel-manager-api-test-scenarios",
      "name": "Planning updates: prices (PerOccupancy)",
      "description": "The price scenarios in the shape of the PerOccupancy price model. Run the folder of the model your Get hotel response declares, and leave the two others. PU-19 applies to meal plans only. The occupancy elements assume rooms that accept one and two persons: edit the counts if yours do not.",
      "metaSortKey": 5
    },
    {
      "_id": "req_ts_pu-10_peroccupancy",
      "_type": "request",
      "parentId": "fld_ts_planning-updates-prices-peroccupancy-",
      "name": "PU-10  Prices only",
      "description": "What we send: Prices only, no inventory and no restriction.\n\nWhat we expect: `<success>`.\n\nApplies to: all integrations.\n\nPrice model: PerOccupancy.\n\nTest scenarios: https://docs.d-edge.com/channel-manager-api/get-certified/test-scenarios",
      "method": "POST",
      "url": "{{ _.planningUpdatesUrl }}",
      "parameters": [],
      "headers": [
        {
          "name": "Content-Type",
          "value": "application/xml; charset=utf-8"
        },
        {
          "name": "x-mock-api-key",
          "value": "{{ _.mockApiKey }}"
        }
      ],
      "authentication": {
        "type": "basic",
        "useISO88591": false,
        "disabled": false,
        "username": "{{ _.login }}",
        "password": "{{ _.password }}"
      },
      "afterResponseScript": "insomnia.test(\"PU-10 answers 200 OK\", () => insomnia.expect(insomnia.response.code).to.equal(200));\ninsomnia.test(\"PU-10 declares an XML content type\", () => insomnia.expect(String((insomnia.response.headers.find(h => h.key.toLowerCase() === \"content-type\") || {}).value)).to.match(/xml/i));\ninsomnia.test(\"PU-10 answers within 5 s\", () => insomnia.expect(insomnia.response.responseTime).to.be.below(5000));\ninsomnia.test(\"PU-10 returns <success />\", () => insomnia.expect(insomnia.response.text()).to.match(/<success\\s*\\/?>/));\n",
      "metaSortKey": 0,
      "body": {
        "mimeType": "application/xml",
        "text": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<message xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\n  <authentication login=\"{{ _.login }}\" password=\"{{ _.password }}\" />\n  <inventoryUpdate hotelId=\"{{ _.hotelCode }}\">\n    <room id=\"{{ _.room1 }}\">\n      <rate currency=\"{{ _.currency }}\" rateCode=\"{{ _.room1rate1 }}\" rateName=\"{{ _.room1rate1 }}\">\n        <planning from=\"{{ _.month1 }}-01\" to=\"{{ _.month1 }}-04\"><occupancy adultCount=\"1\" childCount=\"0\" unitPrice=\"222.00\" isClosed=\"false\" /><occupancy adultCount=\"2\" childCount=\"0\" unitPrice=\"252.00\" isClosed=\"false\" /></planning>\n        <planning from=\"{{ _.month1 }}-05\" to=\"{{ _.month1 }}-07\"><occupancy adultCount=\"1\" childCount=\"0\" unitPrice=\"223.00\" isClosed=\"false\" /><occupancy adultCount=\"2\" childCount=\"0\" unitPrice=\"253.00\" isClosed=\"false\" /></planning>\n      </rate>\n    </room>\n  </inventoryUpdate>\n</message>\n"
      }
    },
    {
      "_id": "req_ts_pu-11_peroccupancy",
      "_type": "request",
      "parentId": "fld_ts_planning-updates-prices-peroccupancy-",
      "name": "PU-11  Prices and restrictions, no inventory",
      "description": "What we send: Prices and restrictions together, no inventory.\n\nWhat we expect: `<success>`.\n\nApplies to: all integrations.\n\nPrice model: PerOccupancy.\n\nTest scenarios: https://docs.d-edge.com/channel-manager-api/get-certified/test-scenarios",
      "method": "POST",
      "url": "{{ _.planningUpdatesUrl }}",
      "parameters": [],
      "headers": [
        {
          "name": "Content-Type",
          "value": "application/xml; charset=utf-8"
        },
        {
          "name": "x-mock-api-key",
          "value": "{{ _.mockApiKey }}"
        }
      ],
      "authentication": {
        "type": "basic",
        "useISO88591": false,
        "disabled": false,
        "username": "{{ _.login }}",
        "password": "{{ _.password }}"
      },
      "afterResponseScript": "insomnia.test(\"PU-11 answers 200 OK\", () => insomnia.expect(insomnia.response.code).to.equal(200));\ninsomnia.test(\"PU-11 declares an XML content type\", () => insomnia.expect(String((insomnia.response.headers.find(h => h.key.toLowerCase() === \"content-type\") || {}).value)).to.match(/xml/i));\ninsomnia.test(\"PU-11 answers within 5 s\", () => insomnia.expect(insomnia.response.responseTime).to.be.below(5000));\ninsomnia.test(\"PU-11 returns <success />\", () => insomnia.expect(insomnia.response.text()).to.match(/<success\\s*\\/?>/));\n",
      "metaSortKey": 1,
      "body": {
        "mimeType": "application/xml",
        "text": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<message xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\n  <authentication login=\"{{ _.login }}\" password=\"{{ _.password }}\" />\n  <inventoryUpdate hotelId=\"{{ _.hotelCode }}\">\n    <room id=\"{{ _.room1 }}\">\n      <rate currency=\"{{ _.currency }}\" rateCode=\"{{ _.room1rate1 }}\" rateName=\"{{ _.room1rate1 }}\">\n        <planning from=\"{{ _.month1 }}-01\" to=\"{{ _.month1 }}-11\" minimumStay=\"2\" maximumStay=\"6\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"false\"><occupancy adultCount=\"1\" childCount=\"0\" unitPrice=\"340.00\" isClosed=\"false\" /><occupancy adultCount=\"2\" childCount=\"0\" unitPrice=\"370.00\" isClosed=\"false\" /></planning>\n        <planning from=\"{{ _.month1 }}-12\" to=\"{{ _.month1 }}-20\" minimumStay=\"1\" noDeparture=\"true\"><occupancy adultCount=\"1\" childCount=\"0\" unitPrice=\"273.00\" isClosed=\"false\" /><occupancy adultCount=\"2\" childCount=\"0\" unitPrice=\"303.00\" isClosed=\"false\" /></planning>\n      </rate>\n      <rate currency=\"{{ _.currency }}\" rateCode=\"{{ _.room1rate2 }}\" rateName=\"{{ _.room1rate2 }}\">\n        <planning from=\"{{ _.month1 }}-01\" to=\"{{ _.month1 }}-07\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"true\"><occupancy adultCount=\"1\" childCount=\"0\" unitPrice=\"111.00\" isClosed=\"false\" /><occupancy adultCount=\"2\" childCount=\"0\" unitPrice=\"141.00\" isClosed=\"false\" /></planning>\n      </rate>\n    </room>\n  </inventoryUpdate>\n</message>\n"
      }
    },
    {
      "_id": "req_ts_pu-12_peroccupancy",
      "_type": "request",
      "parentId": "fld_ts_planning-updates-prices-peroccupancy-",
      "name": "PU-12  Full update, one room, one rate",
      "description": "What we send: A full update of one room and one rate: inventory, prices, and restrictions over several ranges, including a single-day range.\n\nWhat we expect: `<success>`, and every value applied.\n\nApplies to: all integrations.\n\nPrice model: PerOccupancy.\n\nTest scenarios: https://docs.d-edge.com/channel-manager-api/get-certified/test-scenarios",
      "method": "POST",
      "url": "{{ _.planningUpdatesUrl }}",
      "parameters": [],
      "headers": [
        {
          "name": "Content-Type",
          "value": "application/xml; charset=utf-8"
        },
        {
          "name": "x-mock-api-key",
          "value": "{{ _.mockApiKey }}"
        }
      ],
      "authentication": {
        "type": "basic",
        "useISO88591": false,
        "disabled": false,
        "username": "{{ _.login }}",
        "password": "{{ _.password }}"
      },
      "afterResponseScript": "insomnia.test(\"PU-12 answers 200 OK\", () => insomnia.expect(insomnia.response.code).to.equal(200));\ninsomnia.test(\"PU-12 declares an XML content type\", () => insomnia.expect(String((insomnia.response.headers.find(h => h.key.toLowerCase() === \"content-type\") || {}).value)).to.match(/xml/i));\ninsomnia.test(\"PU-12 answers within 5 s\", () => insomnia.expect(insomnia.response.responseTime).to.be.below(5000));\ninsomnia.test(\"PU-12 returns <success />\", () => insomnia.expect(insomnia.response.text()).to.match(/<success\\s*\\/?>/));\n",
      "metaSortKey": 2,
      "body": {
        "mimeType": "application/xml",
        "text": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<message xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\n  <authentication login=\"{{ _.login }}\" password=\"{{ _.password }}\" />\n  <inventoryUpdate hotelId=\"{{ _.hotelCode }}\">\n    <room id=\"{{ _.room1 }}\">\n      <inventory>\n        <availability from=\"{{ _.month1 }}-01\" to=\"{{ _.month1 }}-08\" quantity=\"1\" />\n        <availability from=\"{{ _.month1 }}-09\" to=\"{{ _.month1 }}-13\" quantity=\"3\" />\n        <availability from=\"{{ _.month1 }}-14\" to=\"{{ _.month1 }}-18\" quantity=\"5\" />\n        <availability from=\"{{ _.month1 }}-19\" to=\"{{ _.month1 }}-26\" quantity=\"1\" />\n        <availability from=\"{{ _.month1 }}-27\" to=\"{{ _.month2 }}-05\" quantity=\"1\" />\n      </inventory>\n      <rate currency=\"{{ _.currency }}\" rateCode=\"{{ _.room1rate1 }}\" rateName=\"{{ _.room1rate1 }}\">\n        <planning from=\"{{ _.month1 }}-01\" to=\"{{ _.month1 }}-11\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"false\"><occupancy adultCount=\"1\" childCount=\"0\" unitPrice=\"210.00\" isClosed=\"false\" /><occupancy adultCount=\"2\" childCount=\"0\" unitPrice=\"240.00\" isClosed=\"false\" /></planning>\n        <planning from=\"{{ _.month1 }}-12\" to=\"{{ _.month1 }}-20\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"false\"><occupancy adultCount=\"1\" childCount=\"0\" unitPrice=\"273.00\" isClosed=\"false\" /><occupancy adultCount=\"2\" childCount=\"0\" unitPrice=\"303.00\" isClosed=\"false\" /></planning>\n        <planning from=\"{{ _.month1 }}-21\" to=\"{{ _.month1 }}-24\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"false\"><occupancy adultCount=\"1\" childCount=\"0\" unitPrice=\"340.50\" isClosed=\"false\" /><occupancy adultCount=\"2\" childCount=\"0\" unitPrice=\"370.50\" isClosed=\"false\" /></planning>\n        <planning from=\"{{ _.month1 }}-25\" to=\"{{ _.month1 }}-25\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"false\"><occupancy adultCount=\"1\" childCount=\"0\" unitPrice=\"294.00\" isClosed=\"false\" /><occupancy adultCount=\"2\" childCount=\"0\" unitPrice=\"324.00\" isClosed=\"false\" /></planning>\n        <planning from=\"{{ _.month1 }}-26\" to=\"{{ _.month2 }}-05\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"false\"><occupancy adultCount=\"1\" childCount=\"0\" unitPrice=\"340.00\" isClosed=\"false\" /><occupancy adultCount=\"2\" childCount=\"0\" unitPrice=\"370.00\" isClosed=\"false\" /></planning>\n      </rate>\n    </room>\n  </inventoryUpdate>\n</message>\n"
      }
    },
    {
      "_id": "req_ts_pu-13_peroccupancy",
      "_type": "request",
      "parentId": "fld_ts_planning-updates-prices-peroccupancy-",
      "name": "PU-13  Ranges with gaps",
      "description": "What we send: Ranges that leave gaps between them, in the inventory and in the planning.\n\nWhat we expect: `<success>`; the days not covered are left untouched.\n\nApplies to: all integrations.\n\nPrice model: PerOccupancy.\n\nTest scenarios: https://docs.d-edge.com/channel-manager-api/get-certified/test-scenarios",
      "method": "POST",
      "url": "{{ _.planningUpdatesUrl }}",
      "parameters": [],
      "headers": [
        {
          "name": "Content-Type",
          "value": "application/xml; charset=utf-8"
        },
        {
          "name": "x-mock-api-key",
          "value": "{{ _.mockApiKey }}"
        }
      ],
      "authentication": {
        "type": "basic",
        "useISO88591": false,
        "disabled": false,
        "username": "{{ _.login }}",
        "password": "{{ _.password }}"
      },
      "afterResponseScript": "insomnia.test(\"PU-13 answers 200 OK\", () => insomnia.expect(insomnia.response.code).to.equal(200));\ninsomnia.test(\"PU-13 declares an XML content type\", () => insomnia.expect(String((insomnia.response.headers.find(h => h.key.toLowerCase() === \"content-type\") || {}).value)).to.match(/xml/i));\ninsomnia.test(\"PU-13 answers within 5 s\", () => insomnia.expect(insomnia.response.responseTime).to.be.below(5000));\ninsomnia.test(\"PU-13 returns <success />\", () => insomnia.expect(insomnia.response.text()).to.match(/<success\\s*\\/?>/));\n",
      "metaSortKey": 3,
      "body": {
        "mimeType": "application/xml",
        "text": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<message xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\n  <authentication login=\"{{ _.login }}\" password=\"{{ _.password }}\" />\n  <inventoryUpdate hotelId=\"{{ _.hotelCode }}\">\n    <room id=\"{{ _.room1 }}\">\n      <inventory>\n        <availability from=\"{{ _.month1 }}-01\" to=\"{{ _.month1 }}-05\" quantity=\"5\" />\n        <availability from=\"{{ _.month1 }}-09\" to=\"{{ _.month1 }}-13\" quantity=\"6\" />\n      </inventory>\n      <rate currency=\"{{ _.currency }}\" rateCode=\"{{ _.room1rate1 }}\" rateName=\"{{ _.room1rate1 }}\">\n        <planning from=\"{{ _.month1 }}-01\" to=\"{{ _.month1 }}-07\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"false\"><occupancy adultCount=\"1\" childCount=\"0\" unitPrice=\"111.00\" isClosed=\"false\" /><occupancy adultCount=\"2\" childCount=\"0\" unitPrice=\"141.00\" isClosed=\"false\" /></planning>\n        <planning from=\"{{ _.month1 }}-11\" to=\"{{ _.month1 }}-20\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"false\"><occupancy adultCount=\"1\" childCount=\"0\" unitPrice=\"112.00\" isClosed=\"false\" /><occupancy adultCount=\"2\" childCount=\"0\" unitPrice=\"142.00\" isClosed=\"false\" /></planning>\n      </rate>\n    </room>\n  </inventoryUpdate>\n</message>\n"
      }
    },
    {
      "_id": "req_ts_pu-14_peroccupancy",
      "_type": "request",
      "parentId": "fld_ts_planning-updates-prices-peroccupancy-",
      "name": "PU-14  One room, several rates, a zero quantity",
      "description": "What we send: One room with several rates, each with its own prices and restrictions, and an availability quantity of `0` on one range.\n\nWhat we expect: `<success>`, and the room closed to sale on that range.\n\nApplies to: all integrations.\n\nPrice model: PerOccupancy.\n\nTest scenarios: https://docs.d-edge.com/channel-manager-api/get-certified/test-scenarios",
      "method": "POST",
      "url": "{{ _.planningUpdatesUrl }}",
      "parameters": [],
      "headers": [
        {
          "name": "Content-Type",
          "value": "application/xml; charset=utf-8"
        },
        {
          "name": "x-mock-api-key",
          "value": "{{ _.mockApiKey }}"
        }
      ],
      "authentication": {
        "type": "basic",
        "useISO88591": false,
        "disabled": false,
        "username": "{{ _.login }}",
        "password": "{{ _.password }}"
      },
      "afterResponseScript": "insomnia.test(\"PU-14 answers 200 OK\", () => insomnia.expect(insomnia.response.code).to.equal(200));\ninsomnia.test(\"PU-14 declares an XML content type\", () => insomnia.expect(String((insomnia.response.headers.find(h => h.key.toLowerCase() === \"content-type\") || {}).value)).to.match(/xml/i));\ninsomnia.test(\"PU-14 answers within 5 s\", () => insomnia.expect(insomnia.response.responseTime).to.be.below(5000));\ninsomnia.test(\"PU-14 returns <success />\", () => insomnia.expect(insomnia.response.text()).to.match(/<success\\s*\\/?>/));\n",
      "metaSortKey": 4,
      "body": {
        "mimeType": "application/xml",
        "text": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<message xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\n  <authentication login=\"{{ _.login }}\" password=\"{{ _.password }}\" />\n  <inventoryUpdate hotelId=\"{{ _.hotelCode }}\">\n    <room id=\"{{ _.room1 }}\">\n      <inventory>\n        <availability from=\"{{ _.month1 }}-01\" to=\"{{ _.month1 }}-03\" quantity=\"4\" />\n        <availability from=\"{{ _.month1 }}-04\" to=\"{{ _.month1 }}-08\" quantity=\"7\" />\n        <availability from=\"{{ _.month1 }}-09\" to=\"{{ _.month1 }}-12\" quantity=\"2\" />\n        <availability from=\"{{ _.month1 }}-13\" to=\"{{ _.month1 }}-26\" quantity=\"0\" />\n        <availability from=\"{{ _.month1 }}-27\" to=\"{{ _.month2 }}-06\" quantity=\"10\" />\n      </inventory>\n      <rate currency=\"{{ _.currency }}\" rateCode=\"{{ _.room1rate1 }}\" rateName=\"{{ _.room1rate1 }}\">\n        <planning from=\"{{ _.month1 }}-01\" to=\"{{ _.month1 }}-10\" minimumStay=\"2\" maximumStay=\"6\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"false\"><occupancy adultCount=\"1\" childCount=\"0\" unitPrice=\"147.00\" isClosed=\"false\" /><occupancy adultCount=\"2\" childCount=\"0\" unitPrice=\"177.00\" isClosed=\"false\" /></planning>\n        <planning from=\"{{ _.month1 }}-11\" to=\"{{ _.month1 }}-18\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"false\"><occupancy adultCount=\"1\" childCount=\"0\" unitPrice=\"111.00\" isClosed=\"false\" /><occupancy adultCount=\"2\" childCount=\"0\" unitPrice=\"141.00\" isClosed=\"false\" /></planning>\n        <planning from=\"{{ _.month1 }}-19\" to=\"{{ _.month1 }}-24\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"true\"><occupancy adultCount=\"1\" childCount=\"0\" unitPrice=\"147.60\" isClosed=\"false\" /><occupancy adultCount=\"2\" childCount=\"0\" unitPrice=\"177.60\" isClosed=\"false\" /></planning>\n        <planning from=\"{{ _.month1 }}-25\" to=\"{{ _.month1 }}-25\" minimumStay=\"3\" maximumStay=\"4\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"false\"><occupancy adultCount=\"1\" childCount=\"0\" unitPrice=\"136.00\" isClosed=\"false\" /><occupancy adultCount=\"2\" childCount=\"0\" unitPrice=\"166.00\" isClosed=\"false\" /></planning>\n        <planning from=\"{{ _.month1 }}-26\" to=\"{{ _.month1 }}-28\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"true\" noDeparture=\"false\" isClosed=\"false\"><occupancy adultCount=\"1\" childCount=\"0\" unitPrice=\"124.00\" isClosed=\"false\" /><occupancy adultCount=\"2\" childCount=\"0\" unitPrice=\"154.00\" isClosed=\"false\" /></planning>\n      </rate>\n      <rate currency=\"{{ _.currency }}\" rateCode=\"{{ _.room1rate2 }}\" rateName=\"{{ _.room1rate2 }}\">\n        <planning from=\"{{ _.month1 }}-01\" to=\"{{ _.month1 }}-03\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"false\" noDeparture=\"true\" isClosed=\"false\"><occupancy adultCount=\"1\" childCount=\"0\" unitPrice=\"444.00\" isClosed=\"false\" /><occupancy adultCount=\"2\" childCount=\"0\" unitPrice=\"474.00\" isClosed=\"false\" /></planning>\n        <planning from=\"{{ _.month1 }}-04\" to=\"{{ _.month1 }}-07\" minimumStay=\"3\" maximumStay=\"99\" noArrival=\"false\" noDeparture=\"true\" isClosed=\"false\"><occupancy adultCount=\"1\" childCount=\"0\" unitPrice=\"42.00\" isClosed=\"false\" /><occupancy adultCount=\"2\" childCount=\"0\" unitPrice=\"72.00\" isClosed=\"false\" /></planning>\n        <planning from=\"{{ _.month1 }}-08\" to=\"{{ _.month1 }}-11\" minimumStay=\"1\" maximumStay=\"2\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"false\"><occupancy adultCount=\"1\" childCount=\"0\" unitPrice=\"47.00\" isClosed=\"false\" /><occupancy adultCount=\"2\" childCount=\"0\" unitPrice=\"77.00\" isClosed=\"false\" /></planning>\n        <planning from=\"{{ _.month1 }}-12\" to=\"{{ _.month1 }}-20\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"false\"><occupancy adultCount=\"1\" childCount=\"0\" unitPrice=\"143.00\" isClosed=\"false\" /><occupancy adultCount=\"2\" childCount=\"0\" unitPrice=\"173.00\" isClosed=\"false\" /></planning>\n        <planning from=\"{{ _.month1 }}-21\" to=\"{{ _.month2 }}-05\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"true\"><occupancy adultCount=\"1\" childCount=\"0\" unitPrice=\"187.00\" isClosed=\"false\" /><occupancy adultCount=\"2\" childCount=\"0\" unitPrice=\"217.00\" isClosed=\"false\" /></planning>\n      </rate>\n    </room>\n  </inventoryUpdate>\n</message>\n"
      }
    },
    {
      "_id": "req_ts_pu-15_peroccupancy",
      "_type": "request",
      "parentId": "fld_ts_planning-updates-prices-peroccupancy-",
      "name": "PU-15  Several rooms, one rate",
      "description": "What we send: Several rooms with a single rate.\n\nWhat we expect: `<success>`.\n\nApplies to: all integrations.\n\nPrice model: PerOccupancy.\n\nTest scenarios: https://docs.d-edge.com/channel-manager-api/get-certified/test-scenarios",
      "method": "POST",
      "url": "{{ _.planningUpdatesUrl }}",
      "parameters": [],
      "headers": [
        {
          "name": "Content-Type",
          "value": "application/xml; charset=utf-8"
        },
        {
          "name": "x-mock-api-key",
          "value": "{{ _.mockApiKey }}"
        }
      ],
      "authentication": {
        "type": "basic",
        "useISO88591": false,
        "disabled": false,
        "username": "{{ _.login }}",
        "password": "{{ _.password }}"
      },
      "afterResponseScript": "insomnia.test(\"PU-15 answers 200 OK\", () => insomnia.expect(insomnia.response.code).to.equal(200));\ninsomnia.test(\"PU-15 declares an XML content type\", () => insomnia.expect(String((insomnia.response.headers.find(h => h.key.toLowerCase() === \"content-type\") || {}).value)).to.match(/xml/i));\ninsomnia.test(\"PU-15 answers within 5 s\", () => insomnia.expect(insomnia.response.responseTime).to.be.below(5000));\ninsomnia.test(\"PU-15 returns <success />\", () => insomnia.expect(insomnia.response.text()).to.match(/<success\\s*\\/?>/));\n",
      "metaSortKey": 5,
      "body": {
        "mimeType": "application/xml",
        "text": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<message xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\n  <authentication login=\"{{ _.login }}\" password=\"{{ _.password }}\" />\n  <inventoryUpdate hotelId=\"{{ _.hotelCode }}\">\n    <room id=\"{{ _.room1 }}\">\n      <inventory>\n        <availability from=\"{{ _.month1 }}-01\" to=\"{{ _.month1 }}-08\" quantity=\"1\" />\n        <availability from=\"{{ _.month1 }}-09\" to=\"{{ _.month1 }}-13\" quantity=\"3\" />\n        <availability from=\"{{ _.month1 }}-16\" to=\"{{ _.month1 }}-26\" quantity=\"17\" />\n      </inventory>\n      <rate currency=\"{{ _.currency }}\" rateCode=\"{{ _.room1rate1 }}\" rateName=\"{{ _.room1rate1 }}\">\n        <planning from=\"{{ _.month1 }}-01\" to=\"{{ _.month1 }}-13\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"false\"><occupancy adultCount=\"1\" childCount=\"0\" unitPrice=\"210.00\" isClosed=\"false\" /><occupancy adultCount=\"2\" childCount=\"0\" unitPrice=\"240.00\" isClosed=\"false\" /></planning>\n        <planning from=\"{{ _.month1 }}-16\" to=\"{{ _.month1 }}-26\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"false\"><occupancy adultCount=\"1\" childCount=\"0\" unitPrice=\"273.00\" isClosed=\"false\" /><occupancy adultCount=\"2\" childCount=\"0\" unitPrice=\"303.00\" isClosed=\"false\" /></planning>\n      </rate>\n    </room>\n    <room id=\"{{ _.room2 }}\">\n      <inventory>\n        <availability from=\"{{ _.month1 }}-01\" to=\"{{ _.month1 }}-13\" quantity=\"4\" />\n        <availability from=\"{{ _.month1 }}-14\" to=\"{{ _.month1 }}-26\" quantity=\"6\" />\n      </inventory>\n      <rate currency=\"{{ _.currency }}\" rateCode=\"{{ _.room2rate1 }}\" rateName=\"{{ _.room2rate1 }}\">\n        <planning from=\"{{ _.month1 }}-01\" to=\"{{ _.month1 }}-13\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"false\"><occupancy adultCount=\"1\" childCount=\"0\" unitPrice=\"180.00\" isClosed=\"false\" /><occupancy adultCount=\"2\" childCount=\"0\" unitPrice=\"210.00\" isClosed=\"false\" /></planning>\n        <planning from=\"{{ _.month1 }}-14\" to=\"{{ _.month1 }}-26\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"false\"><occupancy adultCount=\"1\" childCount=\"0\" unitPrice=\"190.00\" isClosed=\"false\" /><occupancy adultCount=\"2\" childCount=\"0\" unitPrice=\"220.00\" isClosed=\"false\" /></planning>\n      </rate>\n    </room>\n  </inventoryUpdate>\n</message>\n"
      }
    },
    {
      "_id": "req_ts_pu-16_peroccupancy",
      "_type": "request",
      "parentId": "fld_ts_planning-updates-prices-peroccupancy-",
      "name": "PU-16  Several rooms, several rates, one room inventory only",
      "description": "What we send: Several rooms with several rates, one of the rooms carrying inventory only.\n\nWhat we expect: `<success>`.\n\nApplies to: all integrations.\n\nPrice model: PerOccupancy.\n\nTest scenarios: https://docs.d-edge.com/channel-manager-api/get-certified/test-scenarios",
      "method": "POST",
      "url": "{{ _.planningUpdatesUrl }}",
      "parameters": [],
      "headers": [
        {
          "name": "Content-Type",
          "value": "application/xml; charset=utf-8"
        },
        {
          "name": "x-mock-api-key",
          "value": "{{ _.mockApiKey }}"
        }
      ],
      "authentication": {
        "type": "basic",
        "useISO88591": false,
        "disabled": false,
        "username": "{{ _.login }}",
        "password": "{{ _.password }}"
      },
      "afterResponseScript": "insomnia.test(\"PU-16 answers 200 OK\", () => insomnia.expect(insomnia.response.code).to.equal(200));\ninsomnia.test(\"PU-16 declares an XML content type\", () => insomnia.expect(String((insomnia.response.headers.find(h => h.key.toLowerCase() === \"content-type\") || {}).value)).to.match(/xml/i));\ninsomnia.test(\"PU-16 answers within 5 s\", () => insomnia.expect(insomnia.response.responseTime).to.be.below(5000));\ninsomnia.test(\"PU-16 returns <success />\", () => insomnia.expect(insomnia.response.text()).to.match(/<success\\s*\\/?>/));\n",
      "metaSortKey": 6,
      "body": {
        "mimeType": "application/xml",
        "text": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<message xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\n  <authentication login=\"{{ _.login }}\" password=\"{{ _.password }}\" />\n  <inventoryUpdate hotelId=\"{{ _.hotelCode }}\">\n    <room id=\"{{ _.room1 }}\">\n      <inventory>\n        <availability from=\"{{ _.month1 }}-01\" to=\"{{ _.month1 }}-03\" quantity=\"4\" />\n        <availability from=\"{{ _.month1 }}-04\" to=\"{{ _.month1 }}-08\" quantity=\"7\" />\n        <availability from=\"{{ _.month1 }}-09\" to=\"{{ _.month1 }}-12\" quantity=\"2\" />\n        <availability from=\"{{ _.month1 }}-13\" to=\"{{ _.month1 }}-26\" quantity=\"0\" />\n        <availability from=\"{{ _.month1 }}-27\" to=\"{{ _.month2 }}-06\" quantity=\"10\" />\n      </inventory>\n      <rate currency=\"{{ _.currency }}\" rateCode=\"{{ _.room1rate1 }}\" rateName=\"{{ _.room1rate1 }}\">\n        <planning from=\"{{ _.month1 }}-01\" to=\"{{ _.month1 }}-10\" minimumStay=\"2\" maximumStay=\"6\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"false\"><occupancy adultCount=\"1\" childCount=\"0\" unitPrice=\"147.00\" isClosed=\"false\" /><occupancy adultCount=\"2\" childCount=\"0\" unitPrice=\"177.00\" isClosed=\"false\" /></planning>\n        <planning from=\"{{ _.month1 }}-11\" to=\"{{ _.month1 }}-18\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"false\"><occupancy adultCount=\"1\" childCount=\"0\" unitPrice=\"111.00\" isClosed=\"false\" /><occupancy adultCount=\"2\" childCount=\"0\" unitPrice=\"141.00\" isClosed=\"false\" /></planning>\n        <planning from=\"{{ _.month1 }}-19\" to=\"{{ _.month1 }}-24\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"true\"><occupancy adultCount=\"1\" childCount=\"0\" unitPrice=\"147.60\" isClosed=\"false\" /><occupancy adultCount=\"2\" childCount=\"0\" unitPrice=\"177.60\" isClosed=\"false\" /></planning>\n        <planning from=\"{{ _.month1 }}-25\" to=\"{{ _.month1 }}-28\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"true\" noDeparture=\"false\" isClosed=\"false\"><occupancy adultCount=\"1\" childCount=\"0\" unitPrice=\"124.00\" isClosed=\"false\" /><occupancy adultCount=\"2\" childCount=\"0\" unitPrice=\"154.00\" isClosed=\"false\" /></planning>\n      </rate>\n      <rate currency=\"{{ _.currency }}\" rateCode=\"{{ _.room1rate2 }}\" rateName=\"{{ _.room1rate2 }}\">\n        <planning from=\"{{ _.month1 }}-01\" to=\"{{ _.month1 }}-03\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"false\" noDeparture=\"true\" isClosed=\"false\"><occupancy adultCount=\"1\" childCount=\"0\" unitPrice=\"444.00\" isClosed=\"false\" /><occupancy adultCount=\"2\" childCount=\"0\" unitPrice=\"474.00\" isClosed=\"false\" /></planning>\n        <planning from=\"{{ _.month1 }}-04\" to=\"{{ _.month1 }}-20\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"false\"><occupancy adultCount=\"1\" childCount=\"0\" unitPrice=\"143.00\" isClosed=\"false\" /><occupancy adultCount=\"2\" childCount=\"0\" unitPrice=\"173.00\" isClosed=\"false\" /></planning>\n        <planning from=\"{{ _.month1 }}-21\" to=\"{{ _.month2 }}-05\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"true\"><occupancy adultCount=\"1\" childCount=\"0\" unitPrice=\"187.00\" isClosed=\"false\" /><occupancy adultCount=\"2\" childCount=\"0\" unitPrice=\"217.00\" isClosed=\"false\" /></planning>\n      </rate>\n    </room>\n    <room id=\"{{ _.room2 }}\">\n      <inventory>\n        <availability from=\"{{ _.month1 }}-01\" to=\"{{ _.month1 }}-02\" quantity=\"2\" />\n        <availability from=\"{{ _.month1 }}-03\" to=\"{{ _.month1 }}-08\" quantity=\"3\" />\n        <availability from=\"{{ _.month1 }}-11\" to=\"{{ _.month1 }}-12\" quantity=\"4\" />\n        <availability from=\"{{ _.month1 }}-13\" to=\"{{ _.month1 }}-26\" quantity=\"5\" />\n        <availability from=\"{{ _.month1 }}-27\" to=\"{{ _.month2 }}-03\" quantity=\"6\" />\n      </inventory>\n    </room>\n    <room id=\"{{ _.room3 }}\">\n      <inventory>\n        <availability from=\"{{ _.month1 }}-01\" to=\"{{ _.month1 }}-21\" quantity=\"12\" />\n      </inventory>\n      <rate currency=\"{{ _.currency }}\" rateCode=\"{{ _.room3rate1 }}\" rateName=\"{{ _.room3rate1 }}\">\n        <planning from=\"{{ _.month1 }}-01\" to=\"{{ _.month1 }}-05\" minimumStay=\"1\" maximumStay=\"1\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"false\"><occupancy adultCount=\"1\" childCount=\"0\" unitPrice=\"41.00\" isClosed=\"false\" /><occupancy adultCount=\"2\" childCount=\"0\" unitPrice=\"71.00\" isClosed=\"false\" /></planning>\n        <planning from=\"{{ _.month1 }}-06\" to=\"{{ _.month1 }}-08\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"false\"><occupancy adultCount=\"1\" childCount=\"0\" unitPrice=\"57.00\" isClosed=\"false\" /><occupancy adultCount=\"2\" childCount=\"0\" unitPrice=\"87.00\" isClosed=\"false\" /></planning>\n        <planning from=\"{{ _.month1 }}-10\" to=\"{{ _.month1 }}-11\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"true\"><occupancy adultCount=\"1\" childCount=\"0\" unitPrice=\"111.00\" isClosed=\"false\" /><occupancy adultCount=\"2\" childCount=\"0\" unitPrice=\"141.00\" isClosed=\"false\" /></planning>\n        <planning from=\"{{ _.month1 }}-12\" to=\"{{ _.month1 }}-15\" minimumStay=\"1\" maximumStay=\"4\" noArrival=\"false\" noDeparture=\"true\" isClosed=\"false\"><occupancy adultCount=\"1\" childCount=\"0\" unitPrice=\"136.00\" isClosed=\"false\" /><occupancy adultCount=\"2\" childCount=\"0\" unitPrice=\"166.00\" isClosed=\"false\" /></planning>\n        <planning from=\"{{ _.month1 }}-16\" to=\"{{ _.month1 }}-28\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"false\"><occupancy adultCount=\"1\" childCount=\"0\" unitPrice=\"124.00\" isClosed=\"false\" /><occupancy adultCount=\"2\" childCount=\"0\" unitPrice=\"154.00\" isClosed=\"false\" /></planning>\n      </rate>\n      <rate currency=\"{{ _.currency }}\" rateCode=\"{{ _.room3rate2 }}\" rateName=\"{{ _.room3rate2 }}\">\n        <planning from=\"{{ _.month1 }}-01\" to=\"{{ _.month1 }}-03\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"false\" noDeparture=\"true\" isClosed=\"false\"><occupancy adultCount=\"1\" childCount=\"0\" unitPrice=\"122.00\" isClosed=\"false\" /><occupancy adultCount=\"2\" childCount=\"0\" unitPrice=\"152.00\" isClosed=\"false\" /></planning>\n        <planning from=\"{{ _.month1 }}-04\" to=\"{{ _.month2 }}-02\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"false\"><occupancy adultCount=\"1\" childCount=\"0\" unitPrice=\"123.00\" isClosed=\"false\" /><occupancy adultCount=\"2\" childCount=\"0\" unitPrice=\"153.00\" isClosed=\"false\" /></planning>\n      </rate>\n    </room>\n  </inventoryUpdate>\n</message>\n"
      }
    },
    {
      "_id": "req_ts_pu-17_peroccupancy",
      "_type": "request",
      "parentId": "fld_ts_planning-updates-prices-peroccupancy-",
      "name": "PU-17  Several rooms to the horizon",
      "description": "What we send: Several rooms up to the maximum horizon you declared.\n\nWhat we expect: `<success>`.\n\nApplies to: all integrations.\n\nPrice model: PerOccupancy.\n\nTest scenarios: https://docs.d-edge.com/channel-manager-api/get-certified/test-scenarios",
      "method": "POST",
      "url": "{{ _.planningUpdatesUrl }}",
      "parameters": [],
      "headers": [
        {
          "name": "Content-Type",
          "value": "application/xml; charset=utf-8"
        },
        {
          "name": "x-mock-api-key",
          "value": "{{ _.mockApiKey }}"
        }
      ],
      "authentication": {
        "type": "basic",
        "useISO88591": false,
        "disabled": false,
        "username": "{{ _.login }}",
        "password": "{{ _.password }}"
      },
      "afterResponseScript": "insomnia.test(\"PU-17 answers 200 OK\", () => insomnia.expect(insomnia.response.code).to.equal(200));\ninsomnia.test(\"PU-17 declares an XML content type\", () => insomnia.expect(String((insomnia.response.headers.find(h => h.key.toLowerCase() === \"content-type\") || {}).value)).to.match(/xml/i));\ninsomnia.test(\"PU-17 answers within 5 s\", () => insomnia.expect(insomnia.response.responseTime).to.be.below(5000));\ninsomnia.test(\"PU-17 returns <success />\", () => insomnia.expect(insomnia.response.text()).to.match(/<success\\s*\\/?>/));\n",
      "metaSortKey": 7,
      "body": {
        "mimeType": "application/xml",
        "text": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<message xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\n  <authentication login=\"{{ _.login }}\" password=\"{{ _.password }}\" />\n  <inventoryUpdate hotelId=\"{{ _.hotelCode }}\">\n    <room id=\"{{ _.room1 }}\">\n      <inventory>\n        <availability from=\"{{ _.month1 }}-01\" to=\"{{ _.month2 }}-03\" quantity=\"3\" />\n        <availability from=\"{{ _.month2 }}-04\" to=\"{{ _.farMonth }}-28\" quantity=\"2\" />\n      </inventory>\n      <rate currency=\"{{ _.currency }}\" rateCode=\"{{ _.room1rate1 }}\" rateName=\"{{ _.room1rate1 }}\">\n        <planning from=\"{{ _.month1 }}-01\" to=\"{{ _.month2 }}-03\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"false\"><occupancy adultCount=\"1\" childCount=\"0\" unitPrice=\"1478.50\" isClosed=\"false\" /><occupancy adultCount=\"2\" childCount=\"0\" unitPrice=\"1508.50\" isClosed=\"false\" /></planning>\n        <planning from=\"{{ _.month2 }}-04\" to=\"{{ _.farMonth }}-28\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"false\"><occupancy adultCount=\"1\" childCount=\"0\" unitPrice=\"1500.00\" isClosed=\"false\" /><occupancy adultCount=\"2\" childCount=\"0\" unitPrice=\"1530.00\" isClosed=\"false\" /></planning>\n      </rate>\n    </room>\n    <room id=\"{{ _.room2 }}\">\n      <inventory>\n        <availability from=\"{{ _.month1 }}-01\" to=\"{{ _.month2 }}-03\" quantity=\"5\" />\n        <availability from=\"{{ _.month2 }}-04\" to=\"{{ _.farMonth }}-28\" quantity=\"4\" />\n      </inventory>\n      <rate currency=\"{{ _.currency }}\" rateCode=\"{{ _.room2rate1 }}\" rateName=\"{{ _.room2rate1 }}\">\n        <planning from=\"{{ _.month1 }}-01\" to=\"{{ _.month2 }}-03\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"false\"><occupancy adultCount=\"1\" childCount=\"0\" unitPrice=\"95.00\" isClosed=\"false\" /><occupancy adultCount=\"2\" childCount=\"0\" unitPrice=\"125.00\" isClosed=\"false\" /></planning>\n        <planning from=\"{{ _.month2 }}-04\" to=\"{{ _.farMonth }}-28\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"false\"><occupancy adultCount=\"1\" childCount=\"0\" unitPrice=\"99.00\" isClosed=\"false\" /><occupancy adultCount=\"2\" childCount=\"0\" unitPrice=\"129.00\" isClosed=\"false\" /></planning>\n      </rate>\n    </room>\n  </inventoryUpdate>\n</message>\n"
      }
    },
    {
      "_id": "req_ts_pu-18_peroccupancy",
      "_type": "request",
      "parentId": "fld_ts_planning-updates-prices-peroccupancy-",
      "name": "PU-18  Extreme prices",
      "description": "What we send: Prices of `2.00`, `200.00`, and `340000000.50`.\n\nWhat we expect: `<success>`, because the hotel set them. A price check on your side belongs in an internal alert, not in the response.\n\nApplies to: all integrations.\n\nPrice model: PerOccupancy.\n\nTest scenarios: https://docs.d-edge.com/channel-manager-api/get-certified/test-scenarios",
      "method": "POST",
      "url": "{{ _.planningUpdatesUrl }}",
      "parameters": [],
      "headers": [
        {
          "name": "Content-Type",
          "value": "application/xml; charset=utf-8"
        },
        {
          "name": "x-mock-api-key",
          "value": "{{ _.mockApiKey }}"
        }
      ],
      "authentication": {
        "type": "basic",
        "useISO88591": false,
        "disabled": false,
        "username": "{{ _.login }}",
        "password": "{{ _.password }}"
      },
      "afterResponseScript": "insomnia.test(\"PU-18 answers 200 OK\", () => insomnia.expect(insomnia.response.code).to.equal(200));\ninsomnia.test(\"PU-18 declares an XML content type\", () => insomnia.expect(String((insomnia.response.headers.find(h => h.key.toLowerCase() === \"content-type\") || {}).value)).to.match(/xml/i));\ninsomnia.test(\"PU-18 answers within 5 s\", () => insomnia.expect(insomnia.response.responseTime).to.be.below(5000));\ninsomnia.test(\"PU-18 returns <success />\", () => insomnia.expect(insomnia.response.text()).to.match(/<success\\s*\\/?>/));\n",
      "metaSortKey": 8,
      "body": {
        "mimeType": "application/xml",
        "text": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<message xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\n  <authentication login=\"{{ _.login }}\" password=\"{{ _.password }}\" />\n  <inventoryUpdate hotelId=\"{{ _.hotelCode }}\">\n    <room id=\"{{ _.room1 }}\">\n      <rate currency=\"{{ _.currency }}\" rateCode=\"{{ _.room1rate1 }}\" rateName=\"{{ _.room1rate1 }}\">\n        <planning from=\"{{ _.month1 }}-01\" to=\"{{ _.month1 }}-04\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"false\"><occupancy adultCount=\"1\" childCount=\"0\" unitPrice=\"2.00\" isClosed=\"false\" /><occupancy adultCount=\"2\" childCount=\"0\" unitPrice=\"32.00\" isClosed=\"false\" /></planning>\n        <planning from=\"{{ _.month1 }}-05\" to=\"{{ _.month1 }}-07\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"false\"><occupancy adultCount=\"1\" childCount=\"0\" unitPrice=\"200.00\" isClosed=\"false\" /><occupancy adultCount=\"2\" childCount=\"0\" unitPrice=\"230.00\" isClosed=\"false\" /></planning>\n        <planning from=\"{{ _.month1 }}-08\" to=\"{{ _.month1 }}-10\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"false\"><occupancy adultCount=\"1\" childCount=\"0\" unitPrice=\"340000000.50\" isClosed=\"false\" /><occupancy adultCount=\"2\" childCount=\"0\" unitPrice=\"340000030.50\" isClosed=\"false\" /></planning>\n      </rate>\n    </room>\n  </inventoryUpdate>\n</message>\n"
      }
    },
    {
      "_id": "req_ts_pu-19_peroccupancy",
      "_type": "request",
      "parentId": "fld_ts_planning-updates-prices-peroccupancy-",
      "name": "PU-19  Meal plans",
      "description": "What we send: A rate with `mealPlanType` and `mealPlan` elements: adult only, child only, then adult and child.\n\nWhat we expect: `<success>`, with `unitPrice` applied as the total price, meals included. See Meal plans.\n\nCondition: Only if you support meal plans.\n\nPrice model: PerOccupancy.\n\nTest scenarios: https://docs.d-edge.com/channel-manager-api/get-certified/test-scenarios",
      "method": "POST",
      "url": "{{ _.planningUpdatesUrl }}",
      "parameters": [],
      "headers": [
        {
          "name": "Content-Type",
          "value": "application/xml; charset=utf-8"
        },
        {
          "name": "x-mock-api-key",
          "value": "{{ _.mockApiKey }}"
        }
      ],
      "authentication": {
        "type": "basic",
        "useISO88591": false,
        "disabled": false,
        "username": "{{ _.login }}",
        "password": "{{ _.password }}"
      },
      "afterResponseScript": "insomnia.test(\"PU-19 answers 200 OK\", () => insomnia.expect(insomnia.response.code).to.equal(200));\ninsomnia.test(\"PU-19 declares an XML content type\", () => insomnia.expect(String((insomnia.response.headers.find(h => h.key.toLowerCase() === \"content-type\") || {}).value)).to.match(/xml/i));\ninsomnia.test(\"PU-19 answers within 5 s\", () => insomnia.expect(insomnia.response.responseTime).to.be.below(5000));\ninsomnia.test(\"PU-19 returns <success />\", () => insomnia.expect(insomnia.response.text()).to.match(/<success\\s*\\/?>/));\n",
      "metaSortKey": 9,
      "body": {
        "mimeType": "application/xml",
        "text": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<message xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\n  <authentication login=\"{{ _.login }}\" password=\"{{ _.password }}\" />\n  <inventoryUpdate hotelId=\"{{ _.hotelCode }}\">\n    <room id=\"{{ _.room1 }}\">\n      <inventory>\n        <availability from=\"{{ _.month1 }}-01\" to=\"{{ _.month1 }}-10\" quantity=\"4\" />\n      </inventory>\n      <rate currency=\"{{ _.currency }}\" rateCode=\"{{ _.room1rate1 }}\" rateName=\"{{ _.room1rate1 }}\" mealPlanType=\"BreakfastIncluded\">\n        <planning from=\"{{ _.month1 }}-01\" to=\"{{ _.month1 }}-04\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"false\"><occupancy adultCount=\"1\" childCount=\"0\" unitPrice=\"142.00\" isClosed=\"false\" /><occupancy adultCount=\"2\" childCount=\"0\" unitPrice=\"172.00\" isClosed=\"false\" /><mealPlan paxType=\"adult\" price=\"9\" /></planning>\n        <planning from=\"{{ _.month1 }}-05\" to=\"{{ _.month1 }}-07\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"false\"><occupancy adultCount=\"1\" childCount=\"0\" unitPrice=\"142.00\" isClosed=\"false\" /><occupancy adultCount=\"2\" childCount=\"0\" unitPrice=\"172.00\" isClosed=\"false\" /><mealPlan paxType=\"child\" price=\"4\" /></planning>\n        <planning from=\"{{ _.month1 }}-08\" to=\"{{ _.month1 }}-10\" minimumStay=\"1\" maximumStay=\"99\" noArrival=\"false\" noDeparture=\"false\" isClosed=\"false\"><occupancy adultCount=\"1\" childCount=\"0\" unitPrice=\"158.00\" isClosed=\"false\" /><occupancy adultCount=\"2\" childCount=\"0\" unitPrice=\"188.00\" isClosed=\"false\" /><mealPlan paxType=\"adult\" price=\"16\" /><mealPlan paxType=\"child\" price=\"16\" /></planning>\n      </rate>\n    </room>\n  </inventoryUpdate>\n</message>\n"
      }
    },
    {
      "_id": "fld_ts_planning-updates-refusals",
      "_type": "request_group",
      "parentId": "wrk_channel-manager-api-test-scenarios",
      "name": "Planning updates: refusals",
      "description": "Valid XML with one wrong value each. Run against your own server: the mock environment answers success to everything.",
      "metaSortKey": 6
    },
    {
      "_id": "req_ts_pu-f1",
      "_type": "request",
      "parentId": "fld_ts_planning-updates-refusals",
      "name": "PU-F1  Wrong password",
      "description": "What we send: A wrong password in `<authentication>`.\n\nWhat we expect: Type `3`, `BadAuthentication`.\n\nApplies to: all integrations.\n\nTest scenarios: https://docs.d-edge.com/channel-manager-api/get-certified/test-scenarios",
      "method": "POST",
      "url": "{{ _.planningUpdatesUrl }}",
      "parameters": [],
      "headers": [
        {
          "name": "Content-Type",
          "value": "application/xml; charset=utf-8"
        },
        {
          "name": "x-mock-api-key",
          "value": "{{ _.mockApiKey }}"
        }
      ],
      "authentication": {
        "type": "basic",
        "useISO88591": false,
        "disabled": false,
        "username": "{{ _.login }}",
        "password": "{{ _.password }}"
      },
      "afterResponseScript": "insomnia.test(\"PU-F1 answers 200 OK\", () => insomnia.expect(insomnia.response.code).to.equal(200));\ninsomnia.test(\"PU-F1 declares an XML content type\", () => insomnia.expect(String((insomnia.response.headers.find(h => h.key.toLowerCase() === \"content-type\") || {}).value)).to.match(/xml/i));\ninsomnia.test(\"PU-F1 answers within 5 s\", () => insomnia.expect(insomnia.response.responseTime).to.be.below(5000));\ninsomnia.test(\"PU-F1 returns <failure> of type 3\", () => insomnia.expect(insomnia.response.text()).to.match(/<failure[^>]*\\btype=\"(3)\"/));\n",
      "metaSortKey": 0,
      "body": {
        "mimeType": "application/xml",
        "text": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<message xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\n  <authentication login=\"{{ _.login }}\" password=\"{{ _.wrongPassword }}\" />\n  <inventoryUpdate hotelId=\"{{ _.hotelCode }}\">\n    <room id=\"{{ _.room1 }}\">\n      <inventory>\n        <availability from=\"{{ _.month1 }}-01\" to=\"{{ _.month1 }}-07\" quantity=\"5\" />\n        <availability from=\"{{ _.month1 }}-08\" to=\"{{ _.month1 }}-10\" quantity=\"5\" />\n        <availability from=\"{{ _.month1 }}-11\" to=\"{{ _.month2 }}-03\" quantity=\"5\" />\n        <availability from=\"{{ _.month2 }}-04\" to=\"{{ _.month2 }}-23\" quantity=\"3\" />\n      </inventory>\n    </room>\n  </inventoryUpdate>\n</message>\n"
      }
    },
    {
      "_id": "req_ts_pu-f2",
      "_type": "request",
      "parentId": "fld_ts_planning-updates-refusals",
      "name": "PU-F2  Unknown hotel",
      "description": "What we send: An unknown `hotelId`.\n\nWhat we expect: Type `1` or `2`.\n\nApplies to: all integrations.\n\nTest scenarios: https://docs.d-edge.com/channel-manager-api/get-certified/test-scenarios",
      "method": "POST",
      "url": "{{ _.planningUpdatesUrl }}",
      "parameters": [],
      "headers": [
        {
          "name": "Content-Type",
          "value": "application/xml; charset=utf-8"
        },
        {
          "name": "x-mock-api-key",
          "value": "{{ _.mockApiKey }}"
        }
      ],
      "authentication": {
        "type": "basic",
        "useISO88591": false,
        "disabled": false,
        "username": "{{ _.login }}",
        "password": "{{ _.password }}"
      },
      "afterResponseScript": "insomnia.test(\"PU-F2 answers 200 OK\", () => insomnia.expect(insomnia.response.code).to.equal(200));\ninsomnia.test(\"PU-F2 declares an XML content type\", () => insomnia.expect(String((insomnia.response.headers.find(h => h.key.toLowerCase() === \"content-type\") || {}).value)).to.match(/xml/i));\ninsomnia.test(\"PU-F2 answers within 5 s\", () => insomnia.expect(insomnia.response.responseTime).to.be.below(5000));\ninsomnia.test(\"PU-F2 returns <failure> of type 1 or 2\", () => insomnia.expect(insomnia.response.text()).to.match(/<failure[^>]*\\btype=\"(1|2)\"/));\n",
      "metaSortKey": 1,
      "body": {
        "mimeType": "application/xml",
        "text": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<message xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\n  <authentication login=\"{{ _.login }}\" password=\"{{ _.password }}\" />\n  <inventoryUpdate hotelId=\"UNKNOWN-HOTEL\">\n    <room id=\"{{ _.room1 }}\">\n      <inventory>\n        <availability from=\"{{ _.month1 }}-01\" to=\"{{ _.month1 }}-07\" quantity=\"5\" />\n        <availability from=\"{{ _.month1 }}-08\" to=\"{{ _.month1 }}-10\" quantity=\"5\" />\n        <availability from=\"{{ _.month1 }}-11\" to=\"{{ _.month2 }}-03\" quantity=\"5\" />\n        <availability from=\"{{ _.month2 }}-04\" to=\"{{ _.month2 }}-23\" quantity=\"3\" />\n      </inventory>\n    </room>\n  </inventoryUpdate>\n</message>\n"
      }
    },
    {
      "_id": "req_ts_pu-f3",
      "_type": "request",
      "parentId": "fld_ts_planning-updates-refusals",
      "name": "PU-F3  Unknown room",
      "description": "What we send: An unknown room `id`.\n\nWhat we expect: Type `4`, `RoomMappingError`.\n\nApplies to: all integrations.\n\nTest scenarios: https://docs.d-edge.com/channel-manager-api/get-certified/test-scenarios",
      "method": "POST",
      "url": "{{ _.planningUpdatesUrl }}",
      "parameters": [],
      "headers": [
        {
          "name": "Content-Type",
          "value": "application/xml; charset=utf-8"
        },
        {
          "name": "x-mock-api-key",
          "value": "{{ _.mockApiKey }}"
        }
      ],
      "authentication": {
        "type": "basic",
        "useISO88591": false,
        "disabled": false,
        "username": "{{ _.login }}",
        "password": "{{ _.password }}"
      },
      "afterResponseScript": "insomnia.test(\"PU-F3 answers 200 OK\", () => insomnia.expect(insomnia.response.code).to.equal(200));\ninsomnia.test(\"PU-F3 declares an XML content type\", () => insomnia.expect(String((insomnia.response.headers.find(h => h.key.toLowerCase() === \"content-type\") || {}).value)).to.match(/xml/i));\ninsomnia.test(\"PU-F3 answers within 5 s\", () => insomnia.expect(insomnia.response.responseTime).to.be.below(5000));\ninsomnia.test(\"PU-F3 returns <failure> of type 4\", () => insomnia.expect(insomnia.response.text()).to.match(/<failure[^>]*\\btype=\"(4)\"/));\n",
      "metaSortKey": 2,
      "body": {
        "mimeType": "application/xml",
        "text": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<message xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\n  <authentication login=\"{{ _.login }}\" password=\"{{ _.password }}\" />\n  <inventoryUpdate hotelId=\"{{ _.hotelCode }}\">\n    <room id=\"UNKNOWN-ROOM\">\n      <inventory>\n        <availability from=\"{{ _.month1 }}-01\" to=\"{{ _.month1 }}-07\" quantity=\"5\" />\n        <availability from=\"{{ _.month1 }}-08\" to=\"{{ _.month1 }}-10\" quantity=\"5\" />\n        <availability from=\"{{ _.month1 }}-11\" to=\"{{ _.month2 }}-03\" quantity=\"5\" />\n        <availability from=\"{{ _.month2 }}-04\" to=\"{{ _.month2 }}-23\" quantity=\"3\" />\n      </inventory>\n    </room>\n  </inventoryUpdate>\n</message>\n"
      }
    },
    {
      "_id": "req_ts_pu-f4",
      "_type": "request",
      "parentId": "fld_ts_planning-updates-refusals",
      "name": "PU-F4  Unknown room next to a valid room",
      "description": "What we send: An unknown room next to a valid room.\n\nWhat we expect: Type `4`, and the valid room applied anyway. See Your response.\n\nApplies to: all integrations.\n\nTest scenarios: https://docs.d-edge.com/channel-manager-api/get-certified/test-scenarios",
      "method": "POST",
      "url": "{{ _.planningUpdatesUrl }}",
      "parameters": [],
      "headers": [
        {
          "name": "Content-Type",
          "value": "application/xml; charset=utf-8"
        },
        {
          "name": "x-mock-api-key",
          "value": "{{ _.mockApiKey }}"
        }
      ],
      "authentication": {
        "type": "basic",
        "useISO88591": false,
        "disabled": false,
        "username": "{{ _.login }}",
        "password": "{{ _.password }}"
      },
      "afterResponseScript": "insomnia.test(\"PU-F4 answers 200 OK\", () => insomnia.expect(insomnia.response.code).to.equal(200));\ninsomnia.test(\"PU-F4 declares an XML content type\", () => insomnia.expect(String((insomnia.response.headers.find(h => h.key.toLowerCase() === \"content-type\") || {}).value)).to.match(/xml/i));\ninsomnia.test(\"PU-F4 answers within 5 s\", () => insomnia.expect(insomnia.response.responseTime).to.be.below(5000));\ninsomnia.test(\"PU-F4 returns <failure> of type 4\", () => insomnia.expect(insomnia.response.text()).to.match(/<failure[^>]*\\btype=\"(4)\"/));\n",
      "metaSortKey": 3,
      "body": {
        "mimeType": "application/xml",
        "text": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<message xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\n  <authentication login=\"{{ _.login }}\" password=\"{{ _.password }}\" />\n  <inventoryUpdate hotelId=\"{{ _.hotelCode }}\">\n    <room id=\"UNKNOWN-ROOM\">\n      <inventory>\n        <availability from=\"{{ _.month1 }}-01\" to=\"{{ _.month1 }}-07\" quantity=\"5\" />\n        <availability from=\"{{ _.month1 }}-08\" to=\"{{ _.month1 }}-10\" quantity=\"5\" />\n        <availability from=\"{{ _.month1 }}-11\" to=\"{{ _.month2 }}-03\" quantity=\"5\" />\n        <availability from=\"{{ _.month2 }}-04\" to=\"{{ _.month2 }}-23\" quantity=\"3\" />\n      </inventory>\n    </room>\n    <room id=\"{{ _.room1 }}\">\n      <inventory>\n        <availability from=\"{{ _.month1 }}-01\" to=\"{{ _.month1 }}-07\" quantity=\"5\" />\n        <availability from=\"{{ _.month1 }}-08\" to=\"{{ _.month1 }}-10\" quantity=\"5\" />\n        <availability from=\"{{ _.month1 }}-11\" to=\"{{ _.month2 }}-03\" quantity=\"5\" />\n        <availability from=\"{{ _.month2 }}-04\" to=\"{{ _.month2 }}-23\" quantity=\"3\" />\n      </inventory>\n    </room>\n  </inventoryUpdate>\n</message>\n"
      }
    },
    {
      "_id": "req_ts_pu-f5",
      "_type": "request",
      "parentId": "fld_ts_planning-updates-refusals",
      "name": "PU-F5  Unknown rate",
      "description": "What we send: An unknown `rateCode`.\n\nWhat we expect: Type `5`, `RateMappingError`.\n\nApplies to: all integrations.\n\nTest scenarios: https://docs.d-edge.com/channel-manager-api/get-certified/test-scenarios",
      "method": "POST",
      "url": "{{ _.planningUpdatesUrl }}",
      "parameters": [],
      "headers": [
        {
          "name": "Content-Type",
          "value": "application/xml; charset=utf-8"
        },
        {
          "name": "x-mock-api-key",
          "value": "{{ _.mockApiKey }}"
        }
      ],
      "authentication": {
        "type": "basic",
        "useISO88591": false,
        "disabled": false,
        "username": "{{ _.login }}",
        "password": "{{ _.password }}"
      },
      "afterResponseScript": "insomnia.test(\"PU-F5 answers 200 OK\", () => insomnia.expect(insomnia.response.code).to.equal(200));\ninsomnia.test(\"PU-F5 declares an XML content type\", () => insomnia.expect(String((insomnia.response.headers.find(h => h.key.toLowerCase() === \"content-type\") || {}).value)).to.match(/xml/i));\ninsomnia.test(\"PU-F5 answers within 5 s\", () => insomnia.expect(insomnia.response.responseTime).to.be.below(5000));\ninsomnia.test(\"PU-F5 returns <failure> of type 5\", () => insomnia.expect(insomnia.response.text()).to.match(/<failure[^>]*\\btype=\"(5)\"/));\n",
      "metaSortKey": 4,
      "body": {
        "mimeType": "application/xml",
        "text": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<message xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\n  <authentication login=\"{{ _.login }}\" password=\"{{ _.password }}\" />\n  <inventoryUpdate hotelId=\"{{ _.hotelCode }}\">\n    <room id=\"{{ _.room1 }}\">\n      <inventory>\n        <availability from=\"{{ _.month1 }}-01\" to=\"{{ _.month1 }}-07\" quantity=\"5\" />\n        <availability from=\"{{ _.month1 }}-08\" to=\"{{ _.month1 }}-10\" quantity=\"5\" />\n        <availability from=\"{{ _.month1 }}-11\" to=\"{{ _.month2 }}-03\" quantity=\"5\" />\n        <availability from=\"{{ _.month2 }}-04\" to=\"{{ _.month2 }}-23\" quantity=\"3\" />\n      </inventory>\n      <rate currency=\"{{ _.currency }}\" rateCode=\"UNKNOWN-RATE\" rateName=\"UNKNOWN-RATE\">\n        <planning from=\"{{ _.month1 }}-01\" to=\"{{ _.month1 }}-11\" minimumStay=\"1\" />\n      </rate>\n    </room>\n  </inventoryUpdate>\n</message>\n"
      }
    },
    {
      "_id": "req_ts_pu-f6",
      "_type": "request",
      "parentId": "fld_ts_planning-updates-refusals",
      "name": "PU-F6  Unknown rate next to a valid rate",
      "description": "What we send: An unknown rate next to a valid rate.\n\nWhat we expect: Type `5`, and the valid rate applied anyway.\n\nApplies to: all integrations.\n\nTest scenarios: https://docs.d-edge.com/channel-manager-api/get-certified/test-scenarios",
      "method": "POST",
      "url": "{{ _.planningUpdatesUrl }}",
      "parameters": [],
      "headers": [
        {
          "name": "Content-Type",
          "value": "application/xml; charset=utf-8"
        },
        {
          "name": "x-mock-api-key",
          "value": "{{ _.mockApiKey }}"
        }
      ],
      "authentication": {
        "type": "basic",
        "useISO88591": false,
        "disabled": false,
        "username": "{{ _.login }}",
        "password": "{{ _.password }}"
      },
      "afterResponseScript": "insomnia.test(\"PU-F6 answers 200 OK\", () => insomnia.expect(insomnia.response.code).to.equal(200));\ninsomnia.test(\"PU-F6 declares an XML content type\", () => insomnia.expect(String((insomnia.response.headers.find(h => h.key.toLowerCase() === \"content-type\") || {}).value)).to.match(/xml/i));\ninsomnia.test(\"PU-F6 answers within 5 s\", () => insomnia.expect(insomnia.response.responseTime).to.be.below(5000));\ninsomnia.test(\"PU-F6 returns <failure> of type 5\", () => insomnia.expect(insomnia.response.text()).to.match(/<failure[^>]*\\btype=\"(5)\"/));\n",
      "metaSortKey": 5,
      "body": {
        "mimeType": "application/xml",
        "text": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<message xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\n  <authentication login=\"{{ _.login }}\" password=\"{{ _.password }}\" />\n  <inventoryUpdate hotelId=\"{{ _.hotelCode }}\">\n    <room id=\"{{ _.room1 }}\">\n      <inventory>\n        <availability from=\"{{ _.month1 }}-01\" to=\"{{ _.month1 }}-07\" quantity=\"5\" />\n        <availability from=\"{{ _.month1 }}-08\" to=\"{{ _.month1 }}-10\" quantity=\"5\" />\n        <availability from=\"{{ _.month1 }}-11\" to=\"{{ _.month2 }}-03\" quantity=\"5\" />\n        <availability from=\"{{ _.month2 }}-04\" to=\"{{ _.month2 }}-23\" quantity=\"3\" />\n      </inventory>\n      <rate currency=\"{{ _.currency }}\" rateCode=\"UNKNOWN-RATE\" rateName=\"UNKNOWN-RATE\">\n        <planning from=\"{{ _.month1 }}-01\" to=\"{{ _.month1 }}-11\" minimumStay=\"1\" />\n      </rate>\n      <rate currency=\"{{ _.currency }}\" rateCode=\"{{ _.room1rate1 }}\" rateName=\"{{ _.room1rate1 }}\">\n        <planning from=\"{{ _.month1 }}-01\" to=\"{{ _.month1 }}-11\" minimumStay=\"1\" />\n      </rate>\n    </room>\n  </inventoryUpdate>\n</message>\n"
      }
    },
    {
      "_id": "fld_ts_get-bookings",
      "_type": "request_group",
      "parentId": "wrk_channel-manager-api-test-scenarios",
      "name": "Get bookings",
      "description": "GB-04 to GB-06 apply to master credentials only. The content of the bookings returned (GB-C1 to GB-C10) is checked by D-EDGE during the session, not by the collection.",
      "metaSortKey": 7
    },
    {
      "_id": "req_ts_gb-01",
      "_type": "request",
      "parentId": "fld_ts_get-bookings",
      "name": "GB-01  Per hotel, duration",
      "description": "What we send: The per-hotel variant with `duration`.\n\nWhat we expect: `<success>` followed by one `<bookings>` element for the hotel, with the bookings whose latest action falls in the window.\n\nApplies to: all integrations.\n\nTest scenarios: https://docs.d-edge.com/channel-manager-api/get-certified/test-scenarios",
      "method": "GET",
      "url": "{{ _.getBookingsUrl }}",
      "parameters": [
        {
          "name": "hotelId",
          "value": "{{ _.hotelCode }}"
        },
        {
          "name": "duration",
          "value": "2"
        }
      ],
      "headers": [
        {
          "name": "Accept",
          "value": "application/xml, text/xml"
        },
        {
          "name": "x-mock-api-key",
          "value": "{{ _.mockApiKey }}"
        }
      ],
      "authentication": {
        "type": "basic",
        "useISO88591": false,
        "disabled": false,
        "username": "{{ _.login }}",
        "password": "{{ _.password }}"
      },
      "afterResponseScript": "insomnia.test(\"GB-01 answers 200 OK\", () => insomnia.expect(insomnia.response.code).to.equal(200));\ninsomnia.test(\"GB-01 declares an XML content type\", () => insomnia.expect(String((insomnia.response.headers.find(h => h.key.toLowerCase() === \"content-type\") || {}).value)).to.match(/xml/i));\ninsomnia.test(\"GB-01 answers within 30 s\", () => insomnia.expect(insomnia.response.responseTime).to.be.below(30000));\ninsomnia.test(\"GB-01 returns <success />\", () => insomnia.expect(insomnia.response.text()).to.match(/<success\\s*\\/?>/));\n",
      "metaSortKey": 0
    },
    {
      "_id": "req_ts_gb-02",
      "_type": "request",
      "parentId": "fld_ts_get-bookings",
      "name": "GB-02  Per hotel, from and to",
      "description": "What we send: The per-hotel variant with `from` and `to`.\n\nWhat we expect: Same.\n\nApplies to: all integrations.\n\nTest scenarios: https://docs.d-edge.com/channel-manager-api/get-certified/test-scenarios",
      "method": "GET",
      "url": "{{ _.getBookingsUrl }}",
      "parameters": [
        {
          "name": "hotelId",
          "value": "{{ _.hotelCode }}"
        },
        {
          "name": "from",
          "value": "{{ _.from }}"
        },
        {
          "name": "to",
          "value": "{{ _.to }}"
        }
      ],
      "headers": [
        {
          "name": "Accept",
          "value": "application/xml, text/xml"
        },
        {
          "name": "x-mock-api-key",
          "value": "{{ _.mockApiKey }}"
        }
      ],
      "authentication": {
        "type": "basic",
        "useISO88591": false,
        "disabled": false,
        "username": "{{ _.login }}",
        "password": "{{ _.password }}"
      },
      "afterResponseScript": "insomnia.test(\"GB-02 answers 200 OK\", () => insomnia.expect(insomnia.response.code).to.equal(200));\ninsomnia.test(\"GB-02 declares an XML content type\", () => insomnia.expect(String((insomnia.response.headers.find(h => h.key.toLowerCase() === \"content-type\") || {}).value)).to.match(/xml/i));\ninsomnia.test(\"GB-02 answers within 30 s\", () => insomnia.expect(insomnia.response.responseTime).to.be.below(30000));\ninsomnia.test(\"GB-02 returns <success />\", () => insomnia.expect(insomnia.response.text()).to.match(/<success\\s*\\/?>/));\n",
      "metaSortKey": 1
    },
    {
      "_id": "req_ts_gb-03",
      "_type": "request",
      "parentId": "fld_ts_get-bookings",
      "name": "GB-03  Per hotel, no window",
      "description": "What we send: The per-hotel variant with no window parameter.\n\nWhat we expect: Same, behaving as `duration=1`.\n\nApplies to: all integrations.\n\nTest scenarios: https://docs.d-edge.com/channel-manager-api/get-certified/test-scenarios",
      "method": "GET",
      "url": "{{ _.getBookingsUrl }}",
      "parameters": [
        {
          "name": "hotelId",
          "value": "{{ _.hotelCode }}"
        }
      ],
      "headers": [
        {
          "name": "Accept",
          "value": "application/xml, text/xml"
        },
        {
          "name": "x-mock-api-key",
          "value": "{{ _.mockApiKey }}"
        }
      ],
      "authentication": {
        "type": "basic",
        "useISO88591": false,
        "disabled": false,
        "username": "{{ _.login }}",
        "password": "{{ _.password }}"
      },
      "afterResponseScript": "insomnia.test(\"GB-03 answers 200 OK\", () => insomnia.expect(insomnia.response.code).to.equal(200));\ninsomnia.test(\"GB-03 declares an XML content type\", () => insomnia.expect(String((insomnia.response.headers.find(h => h.key.toLowerCase() === \"content-type\") || {}).value)).to.match(/xml/i));\ninsomnia.test(\"GB-03 answers within 30 s\", () => insomnia.expect(insomnia.response.responseTime).to.be.below(30000));\ninsomnia.test(\"GB-03 returns <success />\", () => insomnia.expect(insomnia.response.text()).to.match(/<success\\s*\\/?>/));\n",
      "metaSortKey": 2
    },
    {
      "_id": "req_ts_gb-04",
      "_type": "request",
      "parentId": "fld_ts_get-bookings",
      "name": "GB-04  All hotels, duration",
      "description": "What we send: The all-hotels variant with `duration`.\n\nWhat we expect: `<success>` followed by one `<bookings>` element per hotel with bookings.\n\nCondition: Only if you provide master credentials.\n\nTest scenarios: https://docs.d-edge.com/channel-manager-api/get-certified/test-scenarios",
      "method": "GET",
      "url": "{{ _.getBookingsUrl }}",
      "parameters": [
        {
          "name": "duration",
          "value": "2"
        }
      ],
      "headers": [
        {
          "name": "Accept",
          "value": "application/xml, text/xml"
        },
        {
          "name": "x-mock-api-key",
          "value": "{{ _.mockApiKey }}"
        }
      ],
      "authentication": {
        "type": "basic",
        "useISO88591": false,
        "disabled": false,
        "username": "{{ _.login }}",
        "password": "{{ _.password }}"
      },
      "afterResponseScript": "insomnia.test(\"GB-04 answers 200 OK\", () => insomnia.expect(insomnia.response.code).to.equal(200));\ninsomnia.test(\"GB-04 declares an XML content type\", () => insomnia.expect(String((insomnia.response.headers.find(h => h.key.toLowerCase() === \"content-type\") || {}).value)).to.match(/xml/i));\ninsomnia.test(\"GB-04 answers within 30 s\", () => insomnia.expect(insomnia.response.responseTime).to.be.below(30000));\ninsomnia.test(\"GB-04 returns <success />\", () => insomnia.expect(insomnia.response.text()).to.match(/<success\\s*\\/?>/));\n",
      "metaSortKey": 3
    },
    {
      "_id": "req_ts_gb-05",
      "_type": "request",
      "parentId": "fld_ts_get-bookings",
      "name": "GB-05  All hotels, from and to",
      "description": "What we send: The all-hotels variant with `from` and `to`.\n\nWhat we expect: Same.\n\nCondition: Only if you provide master credentials.\n\nTest scenarios: https://docs.d-edge.com/channel-manager-api/get-certified/test-scenarios",
      "method": "GET",
      "url": "{{ _.getBookingsUrl }}",
      "parameters": [
        {
          "name": "from",
          "value": "{{ _.from }}"
        },
        {
          "name": "to",
          "value": "{{ _.to }}"
        }
      ],
      "headers": [
        {
          "name": "Accept",
          "value": "application/xml, text/xml"
        },
        {
          "name": "x-mock-api-key",
          "value": "{{ _.mockApiKey }}"
        }
      ],
      "authentication": {
        "type": "basic",
        "useISO88591": false,
        "disabled": false,
        "username": "{{ _.login }}",
        "password": "{{ _.password }}"
      },
      "afterResponseScript": "insomnia.test(\"GB-05 answers 200 OK\", () => insomnia.expect(insomnia.response.code).to.equal(200));\ninsomnia.test(\"GB-05 declares an XML content type\", () => insomnia.expect(String((insomnia.response.headers.find(h => h.key.toLowerCase() === \"content-type\") || {}).value)).to.match(/xml/i));\ninsomnia.test(\"GB-05 answers within 30 s\", () => insomnia.expect(insomnia.response.responseTime).to.be.below(30000));\ninsomnia.test(\"GB-05 returns <success />\", () => insomnia.expect(insomnia.response.text()).to.match(/<success\\s*\\/?>/));\n",
      "metaSortKey": 4
    },
    {
      "_id": "req_ts_gb-06",
      "_type": "request",
      "parentId": "fld_ts_get-bookings",
      "name": "GB-06  All hotels, no window",
      "description": "What we send: The all-hotels variant with no window parameter.\n\nWhat we expect: Same, behaving as `duration=1`.\n\nCondition: Only if you provide master credentials.\n\nTest scenarios: https://docs.d-edge.com/channel-manager-api/get-certified/test-scenarios",
      "method": "GET",
      "url": "{{ _.getBookingsUrl }}",
      "parameters": [],
      "headers": [
        {
          "name": "Accept",
          "value": "application/xml, text/xml"
        },
        {
          "name": "x-mock-api-key",
          "value": "{{ _.mockApiKey }}"
        }
      ],
      "authentication": {
        "type": "basic",
        "useISO88591": false,
        "disabled": false,
        "username": "{{ _.login }}",
        "password": "{{ _.password }}"
      },
      "afterResponseScript": "insomnia.test(\"GB-06 answers 200 OK\", () => insomnia.expect(insomnia.response.code).to.equal(200));\ninsomnia.test(\"GB-06 declares an XML content type\", () => insomnia.expect(String((insomnia.response.headers.find(h => h.key.toLowerCase() === \"content-type\") || {}).value)).to.match(/xml/i));\ninsomnia.test(\"GB-06 answers within 30 s\", () => insomnia.expect(insomnia.response.responseTime).to.be.below(30000));\ninsomnia.test(\"GB-06 returns <success />\", () => insomnia.expect(insomnia.response.text()).to.match(/<success\\s*\\/?>/));\n",
      "metaSortKey": 5
    },
    {
      "_id": "fld_ts_get-bookings-refusals",
      "_type": "request_group",
      "parentId": "wrk_channel-manager-api-test-scenarios",
      "name": "Get bookings: refusals",
      "description": "Run against your own server: the mock environment answers success to everything.",
      "metaSortKey": 8
    },
    {
      "_id": "req_ts_gb-f1",
      "_type": "request",
      "parentId": "fld_ts_get-bookings-refusals",
      "name": "GB-F1  Wrong password",
      "description": "What we send: A request with a wrong password.\n\nWhat we expect: Type `3`, `BadAuthentication`.\n\nApplies to: all integrations.\n\nTest scenarios: https://docs.d-edge.com/channel-manager-api/get-certified/test-scenarios",
      "method": "GET",
      "url": "{{ _.getBookingsUrl }}",
      "parameters": [
        {
          "name": "hotelId",
          "value": "{{ _.hotelCode }}"
        },
        {
          "name": "duration",
          "value": "2"
        }
      ],
      "headers": [
        {
          "name": "Accept",
          "value": "application/xml, text/xml"
        },
        {
          "name": "x-mock-api-key",
          "value": "{{ _.mockApiKey }}"
        }
      ],
      "authentication": {
        "type": "basic",
        "useISO88591": false,
        "disabled": false,
        "username": "{{ _.login }}",
        "password": "{{ _.wrongPassword }}"
      },
      "afterResponseScript": "insomnia.test(\"GB-F1 answers 200 OK\", () => insomnia.expect(insomnia.response.code).to.equal(200));\ninsomnia.test(\"GB-F1 declares an XML content type\", () => insomnia.expect(String((insomnia.response.headers.find(h => h.key.toLowerCase() === \"content-type\") || {}).value)).to.match(/xml/i));\ninsomnia.test(\"GB-F1 answers within 30 s\", () => insomnia.expect(insomnia.response.responseTime).to.be.below(30000));\ninsomnia.test(\"GB-F1 returns <failure> of type 3\", () => insomnia.expect(insomnia.response.text()).to.match(/<failure[^>]*\\btype=\"(3)\"/));\n",
      "metaSortKey": 0
    },
    {
      "_id": "req_ts_gb-f2",
      "_type": "request",
      "parentId": "fld_ts_get-bookings-refusals",
      "name": "GB-F2  Unknown hotelId",
      "description": "What we send: A request with an unknown `hotelId`.\n\nWhat we expect: Type `1` or `2`.\n\nApplies to: all integrations.\n\nTest scenarios: https://docs.d-edge.com/channel-manager-api/get-certified/test-scenarios",
      "method": "GET",
      "url": "{{ _.getBookingsUrl }}",
      "parameters": [
        {
          "name": "hotelId",
          "value": "UNKNOWN-HOTEL"
        },
        {
          "name": "duration",
          "value": "2"
        }
      ],
      "headers": [
        {
          "name": "Accept",
          "value": "application/xml, text/xml"
        },
        {
          "name": "x-mock-api-key",
          "value": "{{ _.mockApiKey }}"
        }
      ],
      "authentication": {
        "type": "basic",
        "useISO88591": false,
        "disabled": false,
        "username": "{{ _.login }}",
        "password": "{{ _.password }}"
      },
      "afterResponseScript": "insomnia.test(\"GB-F2 answers 200 OK\", () => insomnia.expect(insomnia.response.code).to.equal(200));\ninsomnia.test(\"GB-F2 declares an XML content type\", () => insomnia.expect(String((insomnia.response.headers.find(h => h.key.toLowerCase() === \"content-type\") || {}).value)).to.match(/xml/i));\ninsomnia.test(\"GB-F2 answers within 30 s\", () => insomnia.expect(insomnia.response.responseTime).to.be.below(30000));\ninsomnia.test(\"GB-F2 returns <failure> of type 1 or 2\", () => insomnia.expect(insomnia.response.text()).to.match(/<failure[^>]*\\btype=\"(1|2)\"/));\n",
      "metaSortKey": 1
    },
    {
      "_id": "req_ts_gb-f3",
      "_type": "request",
      "parentId": "fld_ts_get-bookings-refusals",
      "name": "GB-F3  Malformed duration",
      "description": "What we send: A `duration` that is not an integer.\n\nWhat we expect: Type `203`, naming the parameter in the comment.\n\nApplies to: all integrations.\n\nTest scenarios: https://docs.d-edge.com/channel-manager-api/get-certified/test-scenarios",
      "method": "GET",
      "url": "{{ _.getBookingsUrl }}",
      "parameters": [
        {
          "name": "hotelId",
          "value": "{{ _.hotelCode }}"
        },
        {
          "name": "duration",
          "value": "aaa"
        }
      ],
      "headers": [
        {
          "name": "Accept",
          "value": "application/xml, text/xml"
        },
        {
          "name": "x-mock-api-key",
          "value": "{{ _.mockApiKey }}"
        }
      ],
      "authentication": {
        "type": "basic",
        "useISO88591": false,
        "disabled": false,
        "username": "{{ _.login }}",
        "password": "{{ _.password }}"
      },
      "afterResponseScript": "insomnia.test(\"GB-F3 answers 200 OK\", () => insomnia.expect(insomnia.response.code).to.equal(200));\ninsomnia.test(\"GB-F3 declares an XML content type\", () => insomnia.expect(String((insomnia.response.headers.find(h => h.key.toLowerCase() === \"content-type\") || {}).value)).to.match(/xml/i));\ninsomnia.test(\"GB-F3 answers within 30 s\", () => insomnia.expect(insomnia.response.responseTime).to.be.below(30000));\ninsomnia.test(\"GB-F3 returns <failure> of type 203\", () => insomnia.expect(insomnia.response.text()).to.match(/<failure[^>]*\\btype=\"(203)\"/));\n",
      "metaSortKey": 2
    },
    {
      "_id": "req_ts_gb-f4",
      "_type": "request",
      "parentId": "fld_ts_get-bookings-refusals",
      "name": "GB-F4  Malformed from and to",
      "description": "What we send: A `from` or `to` that does not match `YYYY-MM-DDTHH:MM:SS`.\n\nWhat we expect: Type `203`, naming the parameter in the comment.\n\nApplies to: all integrations.\n\nTest scenarios: https://docs.d-edge.com/channel-manager-api/get-certified/test-scenarios",
      "method": "GET",
      "url": "{{ _.getBookingsUrl }}",
      "parameters": [
        {
          "name": "hotelId",
          "value": "{{ _.hotelCode }}"
        },
        {
          "name": "from",
          "value": "{{ _.month1 }}-9T12:30:00"
        },
        {
          "name": "to",
          "value": "{{ _.month1 }}-10T6:00:00"
        }
      ],
      "headers": [
        {
          "name": "Accept",
          "value": "application/xml, text/xml"
        },
        {
          "name": "x-mock-api-key",
          "value": "{{ _.mockApiKey }}"
        }
      ],
      "authentication": {
        "type": "basic",
        "useISO88591": false,
        "disabled": false,
        "username": "{{ _.login }}",
        "password": "{{ _.password }}"
      },
      "afterResponseScript": "insomnia.test(\"GB-F4 answers 200 OK\", () => insomnia.expect(insomnia.response.code).to.equal(200));\ninsomnia.test(\"GB-F4 declares an XML content type\", () => insomnia.expect(String((insomnia.response.headers.find(h => h.key.toLowerCase() === \"content-type\") || {}).value)).to.match(/xml/i));\ninsomnia.test(\"GB-F4 answers within 30 s\", () => insomnia.expect(insomnia.response.responseTime).to.be.below(30000));\ninsomnia.test(\"GB-F4 returns <failure> of type 203\", () => insomnia.expect(insomnia.response.text()).to.match(/<failure[^>]*\\btype=\"(203)\"/));\n",
      "metaSortKey": 3
    },
    {
      "_id": "fld_ts_confirm-bookings",
      "_type": "request_group",
      "parentId": "wrk_channel-manager-api-test-scenarios",
      "name": "Confirm bookings",
      "description": "Set bookingId to a booking your Get bookings endpoint returned.",
      "metaSortKey": 9
    },
    {
      "_id": "req_ts_cb-01",
      "_type": "request",
      "parentId": "fld_ts_confirm-bookings",
      "name": "CB-01  Acknowledge a creation",
      "description": "What we send: A `bookingConfirmation` with `status=\"Create\"`, naming a booking you returned in `partnerBookingId` and the D-EDGE reference in `crsBookingId`.\n\nWhat we expect: `<success>`, and the booking marked as integrated on your side.\n\nApplies to: all integrations.\n\nTest scenarios: https://docs.d-edge.com/channel-manager-api/get-certified/test-scenarios",
      "method": "POST",
      "url": "{{ _.confirmBookingsUrl }}",
      "parameters": [],
      "headers": [
        {
          "name": "Content-Type",
          "value": "application/xml; charset=utf-8"
        },
        {
          "name": "Accept",
          "value": "application/xml, text/xml"
        },
        {
          "name": "x-mock-api-key",
          "value": "{{ _.mockApiKey }}"
        }
      ],
      "authentication": {
        "type": "basic",
        "useISO88591": false,
        "disabled": false,
        "username": "{{ _.login }}",
        "password": "{{ _.password }}"
      },
      "afterResponseScript": "insomnia.test(\"CB-01 answers 200 OK\", () => insomnia.expect(insomnia.response.code).to.equal(200));\ninsomnia.test(\"CB-01 declares an XML content type\", () => insomnia.expect(String((insomnia.response.headers.find(h => h.key.toLowerCase() === \"content-type\") || {}).value)).to.match(/xml/i));\ninsomnia.test(\"CB-01 answers within 5 s\", () => insomnia.expect(insomnia.response.responseTime).to.be.below(5000));\ninsomnia.test(\"CB-01 returns <success />\", () => insomnia.expect(insomnia.response.text()).to.match(/<success\\s*\\/?>/));\n",
      "metaSortKey": 0,
      "body": {
        "mimeType": "application/xml",
        "text": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<message xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\n  <authentication login=\"{{ _.login }}\" password=\"{{ _.password }}\" />\n  <bookingConfirmation hotelCode=\"{{ _.hotelCode }}\" partnerBookingId=\"{{ _.bookingId }}\" status=\"Create\" crsBookingId=\"RXHS34\" />\n</message>\n"
      }
    },
    {
      "_id": "req_ts_cb-02",
      "_type": "request",
      "parentId": "fld_ts_confirm-bookings",
      "name": "CB-02  Acknowledge a modification",
      "description": "What we send: A `bookingConfirmation` with `status=\"Modify\"` for a modified booking.\n\nWhat we expect: `<success>`.\n\nCondition: Only if you support modifications.\n\nTest scenarios: https://docs.d-edge.com/channel-manager-api/get-certified/test-scenarios",
      "method": "POST",
      "url": "{{ _.confirmBookingsUrl }}",
      "parameters": [],
      "headers": [
        {
          "name": "Content-Type",
          "value": "application/xml; charset=utf-8"
        },
        {
          "name": "Accept",
          "value": "application/xml, text/xml"
        },
        {
          "name": "x-mock-api-key",
          "value": "{{ _.mockApiKey }}"
        }
      ],
      "authentication": {
        "type": "basic",
        "useISO88591": false,
        "disabled": false,
        "username": "{{ _.login }}",
        "password": "{{ _.password }}"
      },
      "afterResponseScript": "insomnia.test(\"CB-02 answers 200 OK\", () => insomnia.expect(insomnia.response.code).to.equal(200));\ninsomnia.test(\"CB-02 declares an XML content type\", () => insomnia.expect(String((insomnia.response.headers.find(h => h.key.toLowerCase() === \"content-type\") || {}).value)).to.match(/xml/i));\ninsomnia.test(\"CB-02 answers within 5 s\", () => insomnia.expect(insomnia.response.responseTime).to.be.below(5000));\ninsomnia.test(\"CB-02 returns <success />\", () => insomnia.expect(insomnia.response.text()).to.match(/<success\\s*\\/?>/));\n",
      "metaSortKey": 1,
      "body": {
        "mimeType": "application/xml",
        "text": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<message xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\n  <authentication login=\"{{ _.login }}\" password=\"{{ _.password }}\" />\n  <bookingConfirmation hotelCode=\"{{ _.hotelCode }}\" partnerBookingId=\"{{ _.bookingId }}\" status=\"Modify\" crsBookingId=\"RXHS34\" />\n</message>\n"
      }
    },
    {
      "_id": "req_ts_cb-03",
      "_type": "request",
      "parentId": "fld_ts_confirm-bookings",
      "name": "CB-03  Acknowledge a cancellation",
      "description": "What we send: A `bookingConfirmation` with `status=\"Cancel\"` for a cancelled booking.\n\nWhat we expect: `<success>`.\n\nCondition: Only if you support cancellations.\n\nTest scenarios: https://docs.d-edge.com/channel-manager-api/get-certified/test-scenarios",
      "method": "POST",
      "url": "{{ _.confirmBookingsUrl }}",
      "parameters": [],
      "headers": [
        {
          "name": "Content-Type",
          "value": "application/xml; charset=utf-8"
        },
        {
          "name": "Accept",
          "value": "application/xml, text/xml"
        },
        {
          "name": "x-mock-api-key",
          "value": "{{ _.mockApiKey }}"
        }
      ],
      "authentication": {
        "type": "basic",
        "useISO88591": false,
        "disabled": false,
        "username": "{{ _.login }}",
        "password": "{{ _.password }}"
      },
      "afterResponseScript": "insomnia.test(\"CB-03 answers 200 OK\", () => insomnia.expect(insomnia.response.code).to.equal(200));\ninsomnia.test(\"CB-03 declares an XML content type\", () => insomnia.expect(String((insomnia.response.headers.find(h => h.key.toLowerCase() === \"content-type\") || {}).value)).to.match(/xml/i));\ninsomnia.test(\"CB-03 answers within 5 s\", () => insomnia.expect(insomnia.response.responseTime).to.be.below(5000));\ninsomnia.test(\"CB-03 returns <success />\", () => insomnia.expect(insomnia.response.text()).to.match(/<success\\s*\\/?>/));\n",
      "metaSortKey": 2,
      "body": {
        "mimeType": "application/xml",
        "text": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<message xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\n  <authentication login=\"{{ _.login }}\" password=\"{{ _.password }}\" />\n  <bookingConfirmation hotelCode=\"{{ _.hotelCode }}\" partnerBookingId=\"{{ _.bookingId }}\" status=\"Cancel\" crsBookingId=\"RXHS34\" />\n</message>\n"
      }
    }
  ]
}