{
  "info": {
    "name": "D-EDGE Docs: Channel Manager API test scenarios",
    "_postman_id": "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.",
    "version": "1.0",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
  },
  "item": [
    {
      "name": "Get hotel",
      "description": "GH-01 first: the other scenarios use the room and rate codes it returns, which you copy into the variables.",
      "item": [
        {
          "name": "GH-01  Nominal read",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test(\"GH-01 answers 200 OK\", () => pm.expect(pm.response.code).to.equal(200));",
                  "pm.test(\"GH-01 declares an XML content type\", () => pm.expect(String(pm.response.headers.get(\"Content-Type\"))).to.match(/xml/i));",
                  "pm.test(\"GH-01 answers within 5 s\", () => pm.expect(pm.response.responseTime).to.be.below(5000));",
                  "pm.test(\"GH-01 returns the <rooms> configuration\", () => pm.expect(pm.response.text()).to.match(/<rooms\\b/));"
                ]
              }
            }
          ],
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/xml, text/xml"
              },
              {
                "key": "x-mock-api-key",
                "value": "{{mockApiKey}}"
              }
            ],
            "url": {
              "raw": "{{getHotelUrl}}?hotelCode={{hotelCode}}&lang=EN",
              "host": [
                "{{getHotelUrl}}"
              ],
              "query": [
                {
                  "key": "hotelCode",
                  "value": "{{hotelCode}}"
                },
                {
                  "key": "lang",
                  "value": "EN"
                }
              ]
            },
            "auth": {
              "type": "basic",
              "basic": [
                {
                  "key": "username",
                  "value": "{{login}}",
                  "type": "string"
                },
                {
                  "key": "password",
                  "value": "{{password}}",
                  "type": "string"
                }
              ]
            },
            "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"
          },
          "response": []
        }
      ]
    },
    {
      "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.",
      "item": [
        {
          "name": "GH-02  No credentials",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test(\"GH-02 answers 200 OK\", () => pm.expect(pm.response.code).to.equal(200));",
                  "pm.test(\"GH-02 declares an XML content type\", () => pm.expect(String(pm.response.headers.get(\"Content-Type\"))).to.match(/xml/i));",
                  "pm.test(\"GH-02 answers within 5 s\", () => pm.expect(pm.response.responseTime).to.be.below(5000));",
                  "pm.test(\"GH-02 returns <failure> of type 3 or 203\", () => pm.expect(pm.response.text()).to.match(/<failure[^>]*\\btype=\"(3|203)\"/));"
                ]
              }
            }
          ],
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/xml, text/xml"
              },
              {
                "key": "x-mock-api-key",
                "value": "{{mockApiKey}}"
              }
            ],
            "url": {
              "raw": "{{getHotelUrl}}?hotelCode={{hotelCode}}&lang=EN",
              "host": [
                "{{getHotelUrl}}"
              ],
              "query": [
                {
                  "key": "hotelCode",
                  "value": "{{hotelCode}}"
                },
                {
                  "key": "lang",
                  "value": "EN"
                }
              ]
            },
            "auth": {
              "type": "noauth"
            },
            "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"
          },
          "response": []
        },
        {
          "name": "GH-03  Wrong password",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test(\"GH-03 answers 200 OK\", () => pm.expect(pm.response.code).to.equal(200));",
                  "pm.test(\"GH-03 declares an XML content type\", () => pm.expect(String(pm.response.headers.get(\"Content-Type\"))).to.match(/xml/i));",
                  "pm.test(\"GH-03 answers within 5 s\", () => pm.expect(pm.response.responseTime).to.be.below(5000));",
                  "pm.test(\"GH-03 returns <failure> of type 3\", () => pm.expect(pm.response.text()).to.match(/<failure[^>]*\\btype=\"(3)\"/));"
                ]
              }
            }
          ],
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/xml, text/xml"
              },
              {
                "key": "x-mock-api-key",
                "value": "{{mockApiKey}}"
              }
            ],
            "url": {
              "raw": "{{getHotelUrl}}?hotelCode={{hotelCode}}&lang=EN",
              "host": [
                "{{getHotelUrl}}"
              ],
              "query": [
                {
                  "key": "hotelCode",
                  "value": "{{hotelCode}}"
                },
                {
                  "key": "lang",
                  "value": "EN"
                }
              ]
            },
            "auth": {
              "type": "basic",
              "basic": [
                {
                  "key": "username",
                  "value": "{{login}}",
                  "type": "string"
                },
                {
                  "key": "password",
                  "value": "{{wrongPassword}}",
                  "type": "string"
                }
              ]
            },
            "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"
          },
          "response": []
        },
        {
          "name": "GH-04  Missing hotelCode",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test(\"GH-04 answers 200 OK\", () => pm.expect(pm.response.code).to.equal(200));",
                  "pm.test(\"GH-04 declares an XML content type\", () => pm.expect(String(pm.response.headers.get(\"Content-Type\"))).to.match(/xml/i));",
                  "pm.test(\"GH-04 answers within 5 s\", () => pm.expect(pm.response.responseTime).to.be.below(5000));",
                  "pm.test(\"GH-04 returns <failure> of type 1 or 2 or 203\", () => pm.expect(pm.response.text()).to.match(/<failure[^>]*\\btype=\"(1|2|203)\"/));"
                ]
              }
            }
          ],
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/xml, text/xml"
              },
              {
                "key": "x-mock-api-key",
                "value": "{{mockApiKey}}"
              }
            ],
            "url": {
              "raw": "{{getHotelUrl}}",
              "host": [
                "{{getHotelUrl}}"
              ]
            },
            "auth": {
              "type": "basic",
              "basic": [
                {
                  "key": "username",
                  "value": "{{login}}",
                  "type": "string"
                },
                {
                  "key": "password",
                  "value": "{{password}}",
                  "type": "string"
                }
              ]
            },
            "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"
          },
          "response": []
        },
        {
          "name": "GH-05  Unknown hotelCode",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test(\"GH-05 answers 200 OK\", () => pm.expect(pm.response.code).to.equal(200));",
                  "pm.test(\"GH-05 declares an XML content type\", () => pm.expect(String(pm.response.headers.get(\"Content-Type\"))).to.match(/xml/i));",
                  "pm.test(\"GH-05 answers within 5 s\", () => pm.expect(pm.response.responseTime).to.be.below(5000));",
                  "pm.test(\"GH-05 returns <failure> of type 1 or 2\", () => pm.expect(pm.response.text()).to.match(/<failure[^>]*\\btype=\"(1|2)\"/));"
                ]
              }
            }
          ],
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/xml, text/xml"
              },
              {
                "key": "x-mock-api-key",
                "value": "{{mockApiKey}}"
              }
            ],
            "url": {
              "raw": "{{getHotelUrl}}?hotelCode=UNKNOWN-HOTEL&lang=EN",
              "host": [
                "{{getHotelUrl}}"
              ],
              "query": [
                {
                  "key": "hotelCode",
                  "value": "UNKNOWN-HOTEL"
                },
                {
                  "key": "lang",
                  "value": "EN"
                }
              ]
            },
            "auth": {
              "type": "basic",
              "basic": [
                {
                  "key": "username",
                  "value": "{{login}}",
                  "type": "string"
                },
                {
                  "key": "password",
                  "value": "{{password}}",
                  "type": "string"
                }
              ]
            },
            "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"
          },
          "response": []
        }
      ]
    },
    {
      "name": "Planning updates",
      "description": "Inventory and restrictions, without prices. PU-04 applies to per-rate availability only.",
      "item": [
        {
          "name": "PU-01  Room inventory only",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test(\"PU-01 answers 200 OK\", () => pm.expect(pm.response.code).to.equal(200));",
                  "pm.test(\"PU-01 declares an XML content type\", () => pm.expect(String(pm.response.headers.get(\"Content-Type\"))).to.match(/xml/i));",
                  "pm.test(\"PU-01 answers within 5 s\", () => pm.expect(pm.response.responseTime).to.be.below(5000));",
                  "pm.test(\"PU-01 returns <success />\", () => pm.expect(pm.response.text()).to.match(/<success\\s*\\/?>/));"
                ]
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/xml; charset=utf-8"
              },
              {
                "key": "x-mock-api-key",
                "value": "{{mockApiKey}}"
              }
            ],
            "url": {
              "raw": "{{planningUpdatesUrl}}",
              "host": [
                "{{planningUpdatesUrl}}"
              ]
            },
            "auth": {
              "type": "basic",
              "basic": [
                {
                  "key": "username",
                  "value": "{{login}}",
                  "type": "string"
                },
                {
                  "key": "password",
                  "value": "{{password}}",
                  "type": "string"
                }
              ]
            },
            "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",
            "body": {
              "mode": "raw",
              "raw": "<?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",
              "options": {
                "raw": {
                  "language": "xml"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "PU-02  Room inventory to the horizon",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test(\"PU-02 answers 200 OK\", () => pm.expect(pm.response.code).to.equal(200));",
                  "pm.test(\"PU-02 declares an XML content type\", () => pm.expect(String(pm.response.headers.get(\"Content-Type\"))).to.match(/xml/i));",
                  "pm.test(\"PU-02 answers within 5 s\", () => pm.expect(pm.response.responseTime).to.be.below(5000));",
                  "pm.test(\"PU-02 returns <success />\", () => pm.expect(pm.response.text()).to.match(/<success\\s*\\/?>/));"
                ]
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/xml; charset=utf-8"
              },
              {
                "key": "x-mock-api-key",
                "value": "{{mockApiKey}}"
              }
            ],
            "url": {
              "raw": "{{planningUpdatesUrl}}",
              "host": [
                "{{planningUpdatesUrl}}"
              ]
            },
            "auth": {
              "type": "basic",
              "basic": [
                {
                  "key": "username",
                  "value": "{{login}}",
                  "type": "string"
                },
                {
                  "key": "password",
                  "value": "{{password}}",
                  "type": "string"
                }
              ]
            },
            "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",
            "body": {
              "mode": "raw",
              "raw": "<?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",
              "options": {
                "raw": {
                  "language": "xml"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "PU-03  Range starting in the past",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test(\"PU-03 answers 200 OK\", () => pm.expect(pm.response.code).to.equal(200));",
                  "pm.test(\"PU-03 declares an XML content type\", () => pm.expect(String(pm.response.headers.get(\"Content-Type\"))).to.match(/xml/i));",
                  "pm.test(\"PU-03 answers within 5 s\", () => pm.expect(pm.response.responseTime).to.be.below(5000));",
                  "pm.test(\"PU-03 returns <success />\", () => pm.expect(pm.response.text()).to.match(/<success\\s*\\/?>/));"
                ]
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/xml; charset=utf-8"
              },
              {
                "key": "x-mock-api-key",
                "value": "{{mockApiKey}}"
              }
            ],
            "url": {
              "raw": "{{planningUpdatesUrl}}",
              "host": [
                "{{planningUpdatesUrl}}"
              ]
            },
            "auth": {
              "type": "basic",
              "basic": [
                {
                  "key": "username",
                  "value": "{{login}}",
                  "type": "string"
                },
                {
                  "key": "password",
                  "value": "{{password}}",
                  "type": "string"
                }
              ]
            },
            "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",
            "body": {
              "mode": "raw",
              "raw": "<?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",
              "options": {
                "raw": {
                  "language": "xml"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "PU-04  Room and rate availability",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test(\"PU-04 answers 200 OK\", () => pm.expect(pm.response.code).to.equal(200));",
                  "pm.test(\"PU-04 declares an XML content type\", () => pm.expect(String(pm.response.headers.get(\"Content-Type\"))).to.match(/xml/i));",
                  "pm.test(\"PU-04 answers within 5 s\", () => pm.expect(pm.response.responseTime).to.be.below(5000));",
                  "pm.test(\"PU-04 returns <success />\", () => pm.expect(pm.response.text()).to.match(/<success\\s*\\/?>/));"
                ]
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/xml; charset=utf-8"
              },
              {
                "key": "x-mock-api-key",
                "value": "{{mockApiKey}}"
              }
            ],
            "url": {
              "raw": "{{planningUpdatesUrl}}",
              "host": [
                "{{planningUpdatesUrl}}"
              ]
            },
            "auth": {
              "type": "basic",
              "basic": [
                {
                  "key": "username",
                  "value": "{{login}}",
                  "type": "string"
                },
                {
                  "key": "password",
                  "value": "{{password}}",
                  "type": "string"
                }
              ]
            },
            "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",
            "body": {
              "mode": "raw",
              "raw": "<?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",
              "options": {
                "raw": {
                  "language": "xml"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "PU-05  Minimum stay only",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test(\"PU-05 answers 200 OK\", () => pm.expect(pm.response.code).to.equal(200));",
                  "pm.test(\"PU-05 declares an XML content type\", () => pm.expect(String(pm.response.headers.get(\"Content-Type\"))).to.match(/xml/i));",
                  "pm.test(\"PU-05 answers within 5 s\", () => pm.expect(pm.response.responseTime).to.be.below(5000));",
                  "pm.test(\"PU-05 returns <success />\", () => pm.expect(pm.response.text()).to.match(/<success\\s*\\/?>/));"
                ]
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/xml; charset=utf-8"
              },
              {
                "key": "x-mock-api-key",
                "value": "{{mockApiKey}}"
              }
            ],
            "url": {
              "raw": "{{planningUpdatesUrl}}",
              "host": [
                "{{planningUpdatesUrl}}"
              ]
            },
            "auth": {
              "type": "basic",
              "basic": [
                {
                  "key": "username",
                  "value": "{{login}}",
                  "type": "string"
                },
                {
                  "key": "password",
                  "value": "{{password}}",
                  "type": "string"
                }
              ]
            },
            "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",
            "body": {
              "mode": "raw",
              "raw": "<?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",
              "options": {
                "raw": {
                  "language": "xml"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "PU-06  Maximum stay only",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test(\"PU-06 answers 200 OK\", () => pm.expect(pm.response.code).to.equal(200));",
                  "pm.test(\"PU-06 declares an XML content type\", () => pm.expect(String(pm.response.headers.get(\"Content-Type\"))).to.match(/xml/i));",
                  "pm.test(\"PU-06 answers within 5 s\", () => pm.expect(pm.response.responseTime).to.be.below(5000));",
                  "pm.test(\"PU-06 returns <success />\", () => pm.expect(pm.response.text()).to.match(/<success\\s*\\/?>/));"
                ]
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/xml; charset=utf-8"
              },
              {
                "key": "x-mock-api-key",
                "value": "{{mockApiKey}}"
              }
            ],
            "url": {
              "raw": "{{planningUpdatesUrl}}",
              "host": [
                "{{planningUpdatesUrl}}"
              ]
            },
            "auth": {
              "type": "basic",
              "basic": [
                {
                  "key": "username",
                  "value": "{{login}}",
                  "type": "string"
                },
                {
                  "key": "password",
                  "value": "{{password}}",
                  "type": "string"
                }
              ]
            },
            "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",
            "body": {
              "mode": "raw",
              "raw": "<?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",
              "options": {
                "raw": {
                  "language": "xml"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "PU-07  Closed to arrival only",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test(\"PU-07 answers 200 OK\", () => pm.expect(pm.response.code).to.equal(200));",
                  "pm.test(\"PU-07 declares an XML content type\", () => pm.expect(String(pm.response.headers.get(\"Content-Type\"))).to.match(/xml/i));",
                  "pm.test(\"PU-07 answers within 5 s\", () => pm.expect(pm.response.responseTime).to.be.below(5000));",
                  "pm.test(\"PU-07 returns <success />\", () => pm.expect(pm.response.text()).to.match(/<success\\s*\\/?>/));"
                ]
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/xml; charset=utf-8"
              },
              {
                "key": "x-mock-api-key",
                "value": "{{mockApiKey}}"
              }
            ],
            "url": {
              "raw": "{{planningUpdatesUrl}}",
              "host": [
                "{{planningUpdatesUrl}}"
              ]
            },
            "auth": {
              "type": "basic",
              "basic": [
                {
                  "key": "username",
                  "value": "{{login}}",
                  "type": "string"
                },
                {
                  "key": "password",
                  "value": "{{password}}",
                  "type": "string"
                }
              ]
            },
            "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",
            "body": {
              "mode": "raw",
              "raw": "<?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",
              "options": {
                "raw": {
                  "language": "xml"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "PU-08  Closed to departure only",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test(\"PU-08 answers 200 OK\", () => pm.expect(pm.response.code).to.equal(200));",
                  "pm.test(\"PU-08 declares an XML content type\", () => pm.expect(String(pm.response.headers.get(\"Content-Type\"))).to.match(/xml/i));",
                  "pm.test(\"PU-08 answers within 5 s\", () => pm.expect(pm.response.responseTime).to.be.below(5000));",
                  "pm.test(\"PU-08 returns <success />\", () => pm.expect(pm.response.text()).to.match(/<success\\s*\\/?>/));"
                ]
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/xml; charset=utf-8"
              },
              {
                "key": "x-mock-api-key",
                "value": "{{mockApiKey}}"
              }
            ],
            "url": {
              "raw": "{{planningUpdatesUrl}}",
              "host": [
                "{{planningUpdatesUrl}}"
              ]
            },
            "auth": {
              "type": "basic",
              "basic": [
                {
                  "key": "username",
                  "value": "{{login}}",
                  "type": "string"
                },
                {
                  "key": "password",
                  "value": "{{password}}",
                  "type": "string"
                }
              ]
            },
            "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",
            "body": {
              "mode": "raw",
              "raw": "<?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",
              "options": {
                "raw": {
                  "language": "xml"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "PU-09  Closed to sale, then reopened",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test(\"PU-09 answers 200 OK\", () => pm.expect(pm.response.code).to.equal(200));",
                  "pm.test(\"PU-09 declares an XML content type\", () => pm.expect(String(pm.response.headers.get(\"Content-Type\"))).to.match(/xml/i));",
                  "pm.test(\"PU-09 answers within 5 s\", () => pm.expect(pm.response.responseTime).to.be.below(5000));",
                  "pm.test(\"PU-09 returns <success />\", () => pm.expect(pm.response.text()).to.match(/<success\\s*\\/?>/));"
                ]
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/xml; charset=utf-8"
              },
              {
                "key": "x-mock-api-key",
                "value": "{{mockApiKey}}"
              }
            ],
            "url": {
              "raw": "{{planningUpdatesUrl}}",
              "host": [
                "{{planningUpdatesUrl}}"
              ]
            },
            "auth": {
              "type": "basic",
              "basic": [
                {
                  "key": "username",
                  "value": "{{login}}",
                  "type": "string"
                },
                {
                  "key": "password",
                  "value": "{{password}}",
                  "type": "string"
                }
              ]
            },
            "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",
            "body": {
              "mode": "raw",
              "raw": "<?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",
              "options": {
                "raw": {
                  "language": "xml"
                }
              }
            }
          },
          "response": []
        }
      ]
    },
    {
      "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.",
      "item": [
        {
          "name": "PU-10  Prices only",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test(\"PU-10 answers 200 OK\", () => pm.expect(pm.response.code).to.equal(200));",
                  "pm.test(\"PU-10 declares an XML content type\", () => pm.expect(String(pm.response.headers.get(\"Content-Type\"))).to.match(/xml/i));",
                  "pm.test(\"PU-10 answers within 5 s\", () => pm.expect(pm.response.responseTime).to.be.below(5000));",
                  "pm.test(\"PU-10 returns <success />\", () => pm.expect(pm.response.text()).to.match(/<success\\s*\\/?>/));"
                ]
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/xml; charset=utf-8"
              },
              {
                "key": "x-mock-api-key",
                "value": "{{mockApiKey}}"
              }
            ],
            "url": {
              "raw": "{{planningUpdatesUrl}}",
              "host": [
                "{{planningUpdatesUrl}}"
              ]
            },
            "auth": {
              "type": "basic",
              "basic": [
                {
                  "key": "username",
                  "value": "{{login}}",
                  "type": "string"
                },
                {
                  "key": "password",
                  "value": "{{password}}",
                  "type": "string"
                }
              ]
            },
            "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",
            "body": {
              "mode": "raw",
              "raw": "<?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",
              "options": {
                "raw": {
                  "language": "xml"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "PU-11  Prices and restrictions, no inventory",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test(\"PU-11 answers 200 OK\", () => pm.expect(pm.response.code).to.equal(200));",
                  "pm.test(\"PU-11 declares an XML content type\", () => pm.expect(String(pm.response.headers.get(\"Content-Type\"))).to.match(/xml/i));",
                  "pm.test(\"PU-11 answers within 5 s\", () => pm.expect(pm.response.responseTime).to.be.below(5000));",
                  "pm.test(\"PU-11 returns <success />\", () => pm.expect(pm.response.text()).to.match(/<success\\s*\\/?>/));"
                ]
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/xml; charset=utf-8"
              },
              {
                "key": "x-mock-api-key",
                "value": "{{mockApiKey}}"
              }
            ],
            "url": {
              "raw": "{{planningUpdatesUrl}}",
              "host": [
                "{{planningUpdatesUrl}}"
              ]
            },
            "auth": {
              "type": "basic",
              "basic": [
                {
                  "key": "username",
                  "value": "{{login}}",
                  "type": "string"
                },
                {
                  "key": "password",
                  "value": "{{password}}",
                  "type": "string"
                }
              ]
            },
            "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",
            "body": {
              "mode": "raw",
              "raw": "<?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",
              "options": {
                "raw": {
                  "language": "xml"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "PU-12  Full update, one room, one rate",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test(\"PU-12 answers 200 OK\", () => pm.expect(pm.response.code).to.equal(200));",
                  "pm.test(\"PU-12 declares an XML content type\", () => pm.expect(String(pm.response.headers.get(\"Content-Type\"))).to.match(/xml/i));",
                  "pm.test(\"PU-12 answers within 5 s\", () => pm.expect(pm.response.responseTime).to.be.below(5000));",
                  "pm.test(\"PU-12 returns <success />\", () => pm.expect(pm.response.text()).to.match(/<success\\s*\\/?>/));"
                ]
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/xml; charset=utf-8"
              },
              {
                "key": "x-mock-api-key",
                "value": "{{mockApiKey}}"
              }
            ],
            "url": {
              "raw": "{{planningUpdatesUrl}}",
              "host": [
                "{{planningUpdatesUrl}}"
              ]
            },
            "auth": {
              "type": "basic",
              "basic": [
                {
                  "key": "username",
                  "value": "{{login}}",
                  "type": "string"
                },
                {
                  "key": "password",
                  "value": "{{password}}",
                  "type": "string"
                }
              ]
            },
            "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",
            "body": {
              "mode": "raw",
              "raw": "<?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",
              "options": {
                "raw": {
                  "language": "xml"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "PU-13  Ranges with gaps",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test(\"PU-13 answers 200 OK\", () => pm.expect(pm.response.code).to.equal(200));",
                  "pm.test(\"PU-13 declares an XML content type\", () => pm.expect(String(pm.response.headers.get(\"Content-Type\"))).to.match(/xml/i));",
                  "pm.test(\"PU-13 answers within 5 s\", () => pm.expect(pm.response.responseTime).to.be.below(5000));",
                  "pm.test(\"PU-13 returns <success />\", () => pm.expect(pm.response.text()).to.match(/<success\\s*\\/?>/));"
                ]
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/xml; charset=utf-8"
              },
              {
                "key": "x-mock-api-key",
                "value": "{{mockApiKey}}"
              }
            ],
            "url": {
              "raw": "{{planningUpdatesUrl}}",
              "host": [
                "{{planningUpdatesUrl}}"
              ]
            },
            "auth": {
              "type": "basic",
              "basic": [
                {
                  "key": "username",
                  "value": "{{login}}",
                  "type": "string"
                },
                {
                  "key": "password",
                  "value": "{{password}}",
                  "type": "string"
                }
              ]
            },
            "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",
            "body": {
              "mode": "raw",
              "raw": "<?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",
              "options": {
                "raw": {
                  "language": "xml"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "PU-14  One room, several rates, a zero quantity",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test(\"PU-14 answers 200 OK\", () => pm.expect(pm.response.code).to.equal(200));",
                  "pm.test(\"PU-14 declares an XML content type\", () => pm.expect(String(pm.response.headers.get(\"Content-Type\"))).to.match(/xml/i));",
                  "pm.test(\"PU-14 answers within 5 s\", () => pm.expect(pm.response.responseTime).to.be.below(5000));",
                  "pm.test(\"PU-14 returns <success />\", () => pm.expect(pm.response.text()).to.match(/<success\\s*\\/?>/));"
                ]
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/xml; charset=utf-8"
              },
              {
                "key": "x-mock-api-key",
                "value": "{{mockApiKey}}"
              }
            ],
            "url": {
              "raw": "{{planningUpdatesUrl}}",
              "host": [
                "{{planningUpdatesUrl}}"
              ]
            },
            "auth": {
              "type": "basic",
              "basic": [
                {
                  "key": "username",
                  "value": "{{login}}",
                  "type": "string"
                },
                {
                  "key": "password",
                  "value": "{{password}}",
                  "type": "string"
                }
              ]
            },
            "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",
            "body": {
              "mode": "raw",
              "raw": "<?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",
              "options": {
                "raw": {
                  "language": "xml"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "PU-15  Several rooms, one rate",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test(\"PU-15 answers 200 OK\", () => pm.expect(pm.response.code).to.equal(200));",
                  "pm.test(\"PU-15 declares an XML content type\", () => pm.expect(String(pm.response.headers.get(\"Content-Type\"))).to.match(/xml/i));",
                  "pm.test(\"PU-15 answers within 5 s\", () => pm.expect(pm.response.responseTime).to.be.below(5000));",
                  "pm.test(\"PU-15 returns <success />\", () => pm.expect(pm.response.text()).to.match(/<success\\s*\\/?>/));"
                ]
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/xml; charset=utf-8"
              },
              {
                "key": "x-mock-api-key",
                "value": "{{mockApiKey}}"
              }
            ],
            "url": {
              "raw": "{{planningUpdatesUrl}}",
              "host": [
                "{{planningUpdatesUrl}}"
              ]
            },
            "auth": {
              "type": "basic",
              "basic": [
                {
                  "key": "username",
                  "value": "{{login}}",
                  "type": "string"
                },
                {
                  "key": "password",
                  "value": "{{password}}",
                  "type": "string"
                }
              ]
            },
            "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",
            "body": {
              "mode": "raw",
              "raw": "<?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",
              "options": {
                "raw": {
                  "language": "xml"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "PU-16  Several rooms, several rates, one room inventory only",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test(\"PU-16 answers 200 OK\", () => pm.expect(pm.response.code).to.equal(200));",
                  "pm.test(\"PU-16 declares an XML content type\", () => pm.expect(String(pm.response.headers.get(\"Content-Type\"))).to.match(/xml/i));",
                  "pm.test(\"PU-16 answers within 5 s\", () => pm.expect(pm.response.responseTime).to.be.below(5000));",
                  "pm.test(\"PU-16 returns <success />\", () => pm.expect(pm.response.text()).to.match(/<success\\s*\\/?>/));"
                ]
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/xml; charset=utf-8"
              },
              {
                "key": "x-mock-api-key",
                "value": "{{mockApiKey}}"
              }
            ],
            "url": {
              "raw": "{{planningUpdatesUrl}}",
              "host": [
                "{{planningUpdatesUrl}}"
              ]
            },
            "auth": {
              "type": "basic",
              "basic": [
                {
                  "key": "username",
                  "value": "{{login}}",
                  "type": "string"
                },
                {
                  "key": "password",
                  "value": "{{password}}",
                  "type": "string"
                }
              ]
            },
            "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",
            "body": {
              "mode": "raw",
              "raw": "<?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",
              "options": {
                "raw": {
                  "language": "xml"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "PU-17  Several rooms to the horizon",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test(\"PU-17 answers 200 OK\", () => pm.expect(pm.response.code).to.equal(200));",
                  "pm.test(\"PU-17 declares an XML content type\", () => pm.expect(String(pm.response.headers.get(\"Content-Type\"))).to.match(/xml/i));",
                  "pm.test(\"PU-17 answers within 5 s\", () => pm.expect(pm.response.responseTime).to.be.below(5000));",
                  "pm.test(\"PU-17 returns <success />\", () => pm.expect(pm.response.text()).to.match(/<success\\s*\\/?>/));"
                ]
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/xml; charset=utf-8"
              },
              {
                "key": "x-mock-api-key",
                "value": "{{mockApiKey}}"
              }
            ],
            "url": {
              "raw": "{{planningUpdatesUrl}}",
              "host": [
                "{{planningUpdatesUrl}}"
              ]
            },
            "auth": {
              "type": "basic",
              "basic": [
                {
                  "key": "username",
                  "value": "{{login}}",
                  "type": "string"
                },
                {
                  "key": "password",
                  "value": "{{password}}",
                  "type": "string"
                }
              ]
            },
            "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",
            "body": {
              "mode": "raw",
              "raw": "<?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",
              "options": {
                "raw": {
                  "language": "xml"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "PU-18  Extreme prices",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test(\"PU-18 answers 200 OK\", () => pm.expect(pm.response.code).to.equal(200));",
                  "pm.test(\"PU-18 declares an XML content type\", () => pm.expect(String(pm.response.headers.get(\"Content-Type\"))).to.match(/xml/i));",
                  "pm.test(\"PU-18 answers within 5 s\", () => pm.expect(pm.response.responseTime).to.be.below(5000));",
                  "pm.test(\"PU-18 returns <success />\", () => pm.expect(pm.response.text()).to.match(/<success\\s*\\/?>/));"
                ]
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/xml; charset=utf-8"
              },
              {
                "key": "x-mock-api-key",
                "value": "{{mockApiKey}}"
              }
            ],
            "url": {
              "raw": "{{planningUpdatesUrl}}",
              "host": [
                "{{planningUpdatesUrl}}"
              ]
            },
            "auth": {
              "type": "basic",
              "basic": [
                {
                  "key": "username",
                  "value": "{{login}}",
                  "type": "string"
                },
                {
                  "key": "password",
                  "value": "{{password}}",
                  "type": "string"
                }
              ]
            },
            "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",
            "body": {
              "mode": "raw",
              "raw": "<?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",
              "options": {
                "raw": {
                  "language": "xml"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "PU-19  Meal plans",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test(\"PU-19 answers 200 OK\", () => pm.expect(pm.response.code).to.equal(200));",
                  "pm.test(\"PU-19 declares an XML content type\", () => pm.expect(String(pm.response.headers.get(\"Content-Type\"))).to.match(/xml/i));",
                  "pm.test(\"PU-19 answers within 5 s\", () => pm.expect(pm.response.responseTime).to.be.below(5000));",
                  "pm.test(\"PU-19 returns <success />\", () => pm.expect(pm.response.text()).to.match(/<success\\s*\\/?>/));"
                ]
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/xml; charset=utf-8"
              },
              {
                "key": "x-mock-api-key",
                "value": "{{mockApiKey}}"
              }
            ],
            "url": {
              "raw": "{{planningUpdatesUrl}}",
              "host": [
                "{{planningUpdatesUrl}}"
              ]
            },
            "auth": {
              "type": "basic",
              "basic": [
                {
                  "key": "username",
                  "value": "{{login}}",
                  "type": "string"
                },
                {
                  "key": "password",
                  "value": "{{password}}",
                  "type": "string"
                }
              ]
            },
            "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",
            "body": {
              "mode": "raw",
              "raw": "<?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",
              "options": {
                "raw": {
                  "language": "xml"
                }
              }
            }
          },
          "response": []
        }
      ]
    },
    {
      "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.",
      "item": [
        {
          "name": "PU-10  Prices only",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test(\"PU-10 answers 200 OK\", () => pm.expect(pm.response.code).to.equal(200));",
                  "pm.test(\"PU-10 declares an XML content type\", () => pm.expect(String(pm.response.headers.get(\"Content-Type\"))).to.match(/xml/i));",
                  "pm.test(\"PU-10 answers within 5 s\", () => pm.expect(pm.response.responseTime).to.be.below(5000));",
                  "pm.test(\"PU-10 returns <success />\", () => pm.expect(pm.response.text()).to.match(/<success\\s*\\/?>/));"
                ]
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/xml; charset=utf-8"
              },
              {
                "key": "x-mock-api-key",
                "value": "{{mockApiKey}}"
              }
            ],
            "url": {
              "raw": "{{planningUpdatesUrl}}",
              "host": [
                "{{planningUpdatesUrl}}"
              ]
            },
            "auth": {
              "type": "basic",
              "basic": [
                {
                  "key": "username",
                  "value": "{{login}}",
                  "type": "string"
                },
                {
                  "key": "password",
                  "value": "{{password}}",
                  "type": "string"
                }
              ]
            },
            "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",
            "body": {
              "mode": "raw",
              "raw": "<?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",
              "options": {
                "raw": {
                  "language": "xml"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "PU-11  Prices and restrictions, no inventory",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test(\"PU-11 answers 200 OK\", () => pm.expect(pm.response.code).to.equal(200));",
                  "pm.test(\"PU-11 declares an XML content type\", () => pm.expect(String(pm.response.headers.get(\"Content-Type\"))).to.match(/xml/i));",
                  "pm.test(\"PU-11 answers within 5 s\", () => pm.expect(pm.response.responseTime).to.be.below(5000));",
                  "pm.test(\"PU-11 returns <success />\", () => pm.expect(pm.response.text()).to.match(/<success\\s*\\/?>/));"
                ]
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/xml; charset=utf-8"
              },
              {
                "key": "x-mock-api-key",
                "value": "{{mockApiKey}}"
              }
            ],
            "url": {
              "raw": "{{planningUpdatesUrl}}",
              "host": [
                "{{planningUpdatesUrl}}"
              ]
            },
            "auth": {
              "type": "basic",
              "basic": [
                {
                  "key": "username",
                  "value": "{{login}}",
                  "type": "string"
                },
                {
                  "key": "password",
                  "value": "{{password}}",
                  "type": "string"
                }
              ]
            },
            "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",
            "body": {
              "mode": "raw",
              "raw": "<?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",
              "options": {
                "raw": {
                  "language": "xml"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "PU-12  Full update, one room, one rate",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test(\"PU-12 answers 200 OK\", () => pm.expect(pm.response.code).to.equal(200));",
                  "pm.test(\"PU-12 declares an XML content type\", () => pm.expect(String(pm.response.headers.get(\"Content-Type\"))).to.match(/xml/i));",
                  "pm.test(\"PU-12 answers within 5 s\", () => pm.expect(pm.response.responseTime).to.be.below(5000));",
                  "pm.test(\"PU-12 returns <success />\", () => pm.expect(pm.response.text()).to.match(/<success\\s*\\/?>/));"
                ]
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/xml; charset=utf-8"
              },
              {
                "key": "x-mock-api-key",
                "value": "{{mockApiKey}}"
              }
            ],
            "url": {
              "raw": "{{planningUpdatesUrl}}",
              "host": [
                "{{planningUpdatesUrl}}"
              ]
            },
            "auth": {
              "type": "basic",
              "basic": [
                {
                  "key": "username",
                  "value": "{{login}}",
                  "type": "string"
                },
                {
                  "key": "password",
                  "value": "{{password}}",
                  "type": "string"
                }
              ]
            },
            "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",
            "body": {
              "mode": "raw",
              "raw": "<?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",
              "options": {
                "raw": {
                  "language": "xml"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "PU-13  Ranges with gaps",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test(\"PU-13 answers 200 OK\", () => pm.expect(pm.response.code).to.equal(200));",
                  "pm.test(\"PU-13 declares an XML content type\", () => pm.expect(String(pm.response.headers.get(\"Content-Type\"))).to.match(/xml/i));",
                  "pm.test(\"PU-13 answers within 5 s\", () => pm.expect(pm.response.responseTime).to.be.below(5000));",
                  "pm.test(\"PU-13 returns <success />\", () => pm.expect(pm.response.text()).to.match(/<success\\s*\\/?>/));"
                ]
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/xml; charset=utf-8"
              },
              {
                "key": "x-mock-api-key",
                "value": "{{mockApiKey}}"
              }
            ],
            "url": {
              "raw": "{{planningUpdatesUrl}}",
              "host": [
                "{{planningUpdatesUrl}}"
              ]
            },
            "auth": {
              "type": "basic",
              "basic": [
                {
                  "key": "username",
                  "value": "{{login}}",
                  "type": "string"
                },
                {
                  "key": "password",
                  "value": "{{password}}",
                  "type": "string"
                }
              ]
            },
            "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",
            "body": {
              "mode": "raw",
              "raw": "<?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",
              "options": {
                "raw": {
                  "language": "xml"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "PU-14  One room, several rates, a zero quantity",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test(\"PU-14 answers 200 OK\", () => pm.expect(pm.response.code).to.equal(200));",
                  "pm.test(\"PU-14 declares an XML content type\", () => pm.expect(String(pm.response.headers.get(\"Content-Type\"))).to.match(/xml/i));",
                  "pm.test(\"PU-14 answers within 5 s\", () => pm.expect(pm.response.responseTime).to.be.below(5000));",
                  "pm.test(\"PU-14 returns <success />\", () => pm.expect(pm.response.text()).to.match(/<success\\s*\\/?>/));"
                ]
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/xml; charset=utf-8"
              },
              {
                "key": "x-mock-api-key",
                "value": "{{mockApiKey}}"
              }
            ],
            "url": {
              "raw": "{{planningUpdatesUrl}}",
              "host": [
                "{{planningUpdatesUrl}}"
              ]
            },
            "auth": {
              "type": "basic",
              "basic": [
                {
                  "key": "username",
                  "value": "{{login}}",
                  "type": "string"
                },
                {
                  "key": "password",
                  "value": "{{password}}",
                  "type": "string"
                }
              ]
            },
            "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",
            "body": {
              "mode": "raw",
              "raw": "<?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",
              "options": {
                "raw": {
                  "language": "xml"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "PU-15  Several rooms, one rate",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test(\"PU-15 answers 200 OK\", () => pm.expect(pm.response.code).to.equal(200));",
                  "pm.test(\"PU-15 declares an XML content type\", () => pm.expect(String(pm.response.headers.get(\"Content-Type\"))).to.match(/xml/i));",
                  "pm.test(\"PU-15 answers within 5 s\", () => pm.expect(pm.response.responseTime).to.be.below(5000));",
                  "pm.test(\"PU-15 returns <success />\", () => pm.expect(pm.response.text()).to.match(/<success\\s*\\/?>/));"
                ]
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/xml; charset=utf-8"
              },
              {
                "key": "x-mock-api-key",
                "value": "{{mockApiKey}}"
              }
            ],
            "url": {
              "raw": "{{planningUpdatesUrl}}",
              "host": [
                "{{planningUpdatesUrl}}"
              ]
            },
            "auth": {
              "type": "basic",
              "basic": [
                {
                  "key": "username",
                  "value": "{{login}}",
                  "type": "string"
                },
                {
                  "key": "password",
                  "value": "{{password}}",
                  "type": "string"
                }
              ]
            },
            "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",
            "body": {
              "mode": "raw",
              "raw": "<?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",
              "options": {
                "raw": {
                  "language": "xml"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "PU-16  Several rooms, several rates, one room inventory only",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test(\"PU-16 answers 200 OK\", () => pm.expect(pm.response.code).to.equal(200));",
                  "pm.test(\"PU-16 declares an XML content type\", () => pm.expect(String(pm.response.headers.get(\"Content-Type\"))).to.match(/xml/i));",
                  "pm.test(\"PU-16 answers within 5 s\", () => pm.expect(pm.response.responseTime).to.be.below(5000));",
                  "pm.test(\"PU-16 returns <success />\", () => pm.expect(pm.response.text()).to.match(/<success\\s*\\/?>/));"
                ]
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/xml; charset=utf-8"
              },
              {
                "key": "x-mock-api-key",
                "value": "{{mockApiKey}}"
              }
            ],
            "url": {
              "raw": "{{planningUpdatesUrl}}",
              "host": [
                "{{planningUpdatesUrl}}"
              ]
            },
            "auth": {
              "type": "basic",
              "basic": [
                {
                  "key": "username",
                  "value": "{{login}}",
                  "type": "string"
                },
                {
                  "key": "password",
                  "value": "{{password}}",
                  "type": "string"
                }
              ]
            },
            "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",
            "body": {
              "mode": "raw",
              "raw": "<?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",
              "options": {
                "raw": {
                  "language": "xml"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "PU-17  Several rooms to the horizon",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test(\"PU-17 answers 200 OK\", () => pm.expect(pm.response.code).to.equal(200));",
                  "pm.test(\"PU-17 declares an XML content type\", () => pm.expect(String(pm.response.headers.get(\"Content-Type\"))).to.match(/xml/i));",
                  "pm.test(\"PU-17 answers within 5 s\", () => pm.expect(pm.response.responseTime).to.be.below(5000));",
                  "pm.test(\"PU-17 returns <success />\", () => pm.expect(pm.response.text()).to.match(/<success\\s*\\/?>/));"
                ]
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/xml; charset=utf-8"
              },
              {
                "key": "x-mock-api-key",
                "value": "{{mockApiKey}}"
              }
            ],
            "url": {
              "raw": "{{planningUpdatesUrl}}",
              "host": [
                "{{planningUpdatesUrl}}"
              ]
            },
            "auth": {
              "type": "basic",
              "basic": [
                {
                  "key": "username",
                  "value": "{{login}}",
                  "type": "string"
                },
                {
                  "key": "password",
                  "value": "{{password}}",
                  "type": "string"
                }
              ]
            },
            "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",
            "body": {
              "mode": "raw",
              "raw": "<?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",
              "options": {
                "raw": {
                  "language": "xml"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "PU-18  Extreme prices",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test(\"PU-18 answers 200 OK\", () => pm.expect(pm.response.code).to.equal(200));",
                  "pm.test(\"PU-18 declares an XML content type\", () => pm.expect(String(pm.response.headers.get(\"Content-Type\"))).to.match(/xml/i));",
                  "pm.test(\"PU-18 answers within 5 s\", () => pm.expect(pm.response.responseTime).to.be.below(5000));",
                  "pm.test(\"PU-18 returns <success />\", () => pm.expect(pm.response.text()).to.match(/<success\\s*\\/?>/));"
                ]
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/xml; charset=utf-8"
              },
              {
                "key": "x-mock-api-key",
                "value": "{{mockApiKey}}"
              }
            ],
            "url": {
              "raw": "{{planningUpdatesUrl}}",
              "host": [
                "{{planningUpdatesUrl}}"
              ]
            },
            "auth": {
              "type": "basic",
              "basic": [
                {
                  "key": "username",
                  "value": "{{login}}",
                  "type": "string"
                },
                {
                  "key": "password",
                  "value": "{{password}}",
                  "type": "string"
                }
              ]
            },
            "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",
            "body": {
              "mode": "raw",
              "raw": "<?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",
              "options": {
                "raw": {
                  "language": "xml"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "PU-19  Meal plans",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test(\"PU-19 answers 200 OK\", () => pm.expect(pm.response.code).to.equal(200));",
                  "pm.test(\"PU-19 declares an XML content type\", () => pm.expect(String(pm.response.headers.get(\"Content-Type\"))).to.match(/xml/i));",
                  "pm.test(\"PU-19 answers within 5 s\", () => pm.expect(pm.response.responseTime).to.be.below(5000));",
                  "pm.test(\"PU-19 returns <success />\", () => pm.expect(pm.response.text()).to.match(/<success\\s*\\/?>/));"
                ]
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/xml; charset=utf-8"
              },
              {
                "key": "x-mock-api-key",
                "value": "{{mockApiKey}}"
              }
            ],
            "url": {
              "raw": "{{planningUpdatesUrl}}",
              "host": [
                "{{planningUpdatesUrl}}"
              ]
            },
            "auth": {
              "type": "basic",
              "basic": [
                {
                  "key": "username",
                  "value": "{{login}}",
                  "type": "string"
                },
                {
                  "key": "password",
                  "value": "{{password}}",
                  "type": "string"
                }
              ]
            },
            "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",
            "body": {
              "mode": "raw",
              "raw": "<?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",
              "options": {
                "raw": {
                  "language": "xml"
                }
              }
            }
          },
          "response": []
        }
      ]
    },
    {
      "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.",
      "item": [
        {
          "name": "PU-10  Prices only",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test(\"PU-10 answers 200 OK\", () => pm.expect(pm.response.code).to.equal(200));",
                  "pm.test(\"PU-10 declares an XML content type\", () => pm.expect(String(pm.response.headers.get(\"Content-Type\"))).to.match(/xml/i));",
                  "pm.test(\"PU-10 answers within 5 s\", () => pm.expect(pm.response.responseTime).to.be.below(5000));",
                  "pm.test(\"PU-10 returns <success />\", () => pm.expect(pm.response.text()).to.match(/<success\\s*\\/?>/));"
                ]
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/xml; charset=utf-8"
              },
              {
                "key": "x-mock-api-key",
                "value": "{{mockApiKey}}"
              }
            ],
            "url": {
              "raw": "{{planningUpdatesUrl}}",
              "host": [
                "{{planningUpdatesUrl}}"
              ]
            },
            "auth": {
              "type": "basic",
              "basic": [
                {
                  "key": "username",
                  "value": "{{login}}",
                  "type": "string"
                },
                {
                  "key": "password",
                  "value": "{{password}}",
                  "type": "string"
                }
              ]
            },
            "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",
            "body": {
              "mode": "raw",
              "raw": "<?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",
              "options": {
                "raw": {
                  "language": "xml"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "PU-11  Prices and restrictions, no inventory",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test(\"PU-11 answers 200 OK\", () => pm.expect(pm.response.code).to.equal(200));",
                  "pm.test(\"PU-11 declares an XML content type\", () => pm.expect(String(pm.response.headers.get(\"Content-Type\"))).to.match(/xml/i));",
                  "pm.test(\"PU-11 answers within 5 s\", () => pm.expect(pm.response.responseTime).to.be.below(5000));",
                  "pm.test(\"PU-11 returns <success />\", () => pm.expect(pm.response.text()).to.match(/<success\\s*\\/?>/));"
                ]
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/xml; charset=utf-8"
              },
              {
                "key": "x-mock-api-key",
                "value": "{{mockApiKey}}"
              }
            ],
            "url": {
              "raw": "{{planningUpdatesUrl}}",
              "host": [
                "{{planningUpdatesUrl}}"
              ]
            },
            "auth": {
              "type": "basic",
              "basic": [
                {
                  "key": "username",
                  "value": "{{login}}",
                  "type": "string"
                },
                {
                  "key": "password",
                  "value": "{{password}}",
                  "type": "string"
                }
              ]
            },
            "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",
            "body": {
              "mode": "raw",
              "raw": "<?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",
              "options": {
                "raw": {
                  "language": "xml"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "PU-12  Full update, one room, one rate",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test(\"PU-12 answers 200 OK\", () => pm.expect(pm.response.code).to.equal(200));",
                  "pm.test(\"PU-12 declares an XML content type\", () => pm.expect(String(pm.response.headers.get(\"Content-Type\"))).to.match(/xml/i));",
                  "pm.test(\"PU-12 answers within 5 s\", () => pm.expect(pm.response.responseTime).to.be.below(5000));",
                  "pm.test(\"PU-12 returns <success />\", () => pm.expect(pm.response.text()).to.match(/<success\\s*\\/?>/));"
                ]
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/xml; charset=utf-8"
              },
              {
                "key": "x-mock-api-key",
                "value": "{{mockApiKey}}"
              }
            ],
            "url": {
              "raw": "{{planningUpdatesUrl}}",
              "host": [
                "{{planningUpdatesUrl}}"
              ]
            },
            "auth": {
              "type": "basic",
              "basic": [
                {
                  "key": "username",
                  "value": "{{login}}",
                  "type": "string"
                },
                {
                  "key": "password",
                  "value": "{{password}}",
                  "type": "string"
                }
              ]
            },
            "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",
            "body": {
              "mode": "raw",
              "raw": "<?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",
              "options": {
                "raw": {
                  "language": "xml"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "PU-13  Ranges with gaps",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test(\"PU-13 answers 200 OK\", () => pm.expect(pm.response.code).to.equal(200));",
                  "pm.test(\"PU-13 declares an XML content type\", () => pm.expect(String(pm.response.headers.get(\"Content-Type\"))).to.match(/xml/i));",
                  "pm.test(\"PU-13 answers within 5 s\", () => pm.expect(pm.response.responseTime).to.be.below(5000));",
                  "pm.test(\"PU-13 returns <success />\", () => pm.expect(pm.response.text()).to.match(/<success\\s*\\/?>/));"
                ]
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/xml; charset=utf-8"
              },
              {
                "key": "x-mock-api-key",
                "value": "{{mockApiKey}}"
              }
            ],
            "url": {
              "raw": "{{planningUpdatesUrl}}",
              "host": [
                "{{planningUpdatesUrl}}"
              ]
            },
            "auth": {
              "type": "basic",
              "basic": [
                {
                  "key": "username",
                  "value": "{{login}}",
                  "type": "string"
                },
                {
                  "key": "password",
                  "value": "{{password}}",
                  "type": "string"
                }
              ]
            },
            "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",
            "body": {
              "mode": "raw",
              "raw": "<?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",
              "options": {
                "raw": {
                  "language": "xml"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "PU-14  One room, several rates, a zero quantity",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test(\"PU-14 answers 200 OK\", () => pm.expect(pm.response.code).to.equal(200));",
                  "pm.test(\"PU-14 declares an XML content type\", () => pm.expect(String(pm.response.headers.get(\"Content-Type\"))).to.match(/xml/i));",
                  "pm.test(\"PU-14 answers within 5 s\", () => pm.expect(pm.response.responseTime).to.be.below(5000));",
                  "pm.test(\"PU-14 returns <success />\", () => pm.expect(pm.response.text()).to.match(/<success\\s*\\/?>/));"
                ]
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/xml; charset=utf-8"
              },
              {
                "key": "x-mock-api-key",
                "value": "{{mockApiKey}}"
              }
            ],
            "url": {
              "raw": "{{planningUpdatesUrl}}",
              "host": [
                "{{planningUpdatesUrl}}"
              ]
            },
            "auth": {
              "type": "basic",
              "basic": [
                {
                  "key": "username",
                  "value": "{{login}}",
                  "type": "string"
                },
                {
                  "key": "password",
                  "value": "{{password}}",
                  "type": "string"
                }
              ]
            },
            "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",
            "body": {
              "mode": "raw",
              "raw": "<?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",
              "options": {
                "raw": {
                  "language": "xml"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "PU-15  Several rooms, one rate",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test(\"PU-15 answers 200 OK\", () => pm.expect(pm.response.code).to.equal(200));",
                  "pm.test(\"PU-15 declares an XML content type\", () => pm.expect(String(pm.response.headers.get(\"Content-Type\"))).to.match(/xml/i));",
                  "pm.test(\"PU-15 answers within 5 s\", () => pm.expect(pm.response.responseTime).to.be.below(5000));",
                  "pm.test(\"PU-15 returns <success />\", () => pm.expect(pm.response.text()).to.match(/<success\\s*\\/?>/));"
                ]
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/xml; charset=utf-8"
              },
              {
                "key": "x-mock-api-key",
                "value": "{{mockApiKey}}"
              }
            ],
            "url": {
              "raw": "{{planningUpdatesUrl}}",
              "host": [
                "{{planningUpdatesUrl}}"
              ]
            },
            "auth": {
              "type": "basic",
              "basic": [
                {
                  "key": "username",
                  "value": "{{login}}",
                  "type": "string"
                },
                {
                  "key": "password",
                  "value": "{{password}}",
                  "type": "string"
                }
              ]
            },
            "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",
            "body": {
              "mode": "raw",
              "raw": "<?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",
              "options": {
                "raw": {
                  "language": "xml"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "PU-16  Several rooms, several rates, one room inventory only",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test(\"PU-16 answers 200 OK\", () => pm.expect(pm.response.code).to.equal(200));",
                  "pm.test(\"PU-16 declares an XML content type\", () => pm.expect(String(pm.response.headers.get(\"Content-Type\"))).to.match(/xml/i));",
                  "pm.test(\"PU-16 answers within 5 s\", () => pm.expect(pm.response.responseTime).to.be.below(5000));",
                  "pm.test(\"PU-16 returns <success />\", () => pm.expect(pm.response.text()).to.match(/<success\\s*\\/?>/));"
                ]
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/xml; charset=utf-8"
              },
              {
                "key": "x-mock-api-key",
                "value": "{{mockApiKey}}"
              }
            ],
            "url": {
              "raw": "{{planningUpdatesUrl}}",
              "host": [
                "{{planningUpdatesUrl}}"
              ]
            },
            "auth": {
              "type": "basic",
              "basic": [
                {
                  "key": "username",
                  "value": "{{login}}",
                  "type": "string"
                },
                {
                  "key": "password",
                  "value": "{{password}}",
                  "type": "string"
                }
              ]
            },
            "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",
            "body": {
              "mode": "raw",
              "raw": "<?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",
              "options": {
                "raw": {
                  "language": "xml"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "PU-17  Several rooms to the horizon",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test(\"PU-17 answers 200 OK\", () => pm.expect(pm.response.code).to.equal(200));",
                  "pm.test(\"PU-17 declares an XML content type\", () => pm.expect(String(pm.response.headers.get(\"Content-Type\"))).to.match(/xml/i));",
                  "pm.test(\"PU-17 answers within 5 s\", () => pm.expect(pm.response.responseTime).to.be.below(5000));",
                  "pm.test(\"PU-17 returns <success />\", () => pm.expect(pm.response.text()).to.match(/<success\\s*\\/?>/));"
                ]
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/xml; charset=utf-8"
              },
              {
                "key": "x-mock-api-key",
                "value": "{{mockApiKey}}"
              }
            ],
            "url": {
              "raw": "{{planningUpdatesUrl}}",
              "host": [
                "{{planningUpdatesUrl}}"
              ]
            },
            "auth": {
              "type": "basic",
              "basic": [
                {
                  "key": "username",
                  "value": "{{login}}",
                  "type": "string"
                },
                {
                  "key": "password",
                  "value": "{{password}}",
                  "type": "string"
                }
              ]
            },
            "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",
            "body": {
              "mode": "raw",
              "raw": "<?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",
              "options": {
                "raw": {
                  "language": "xml"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "PU-18  Extreme prices",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test(\"PU-18 answers 200 OK\", () => pm.expect(pm.response.code).to.equal(200));",
                  "pm.test(\"PU-18 declares an XML content type\", () => pm.expect(String(pm.response.headers.get(\"Content-Type\"))).to.match(/xml/i));",
                  "pm.test(\"PU-18 answers within 5 s\", () => pm.expect(pm.response.responseTime).to.be.below(5000));",
                  "pm.test(\"PU-18 returns <success />\", () => pm.expect(pm.response.text()).to.match(/<success\\s*\\/?>/));"
                ]
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/xml; charset=utf-8"
              },
              {
                "key": "x-mock-api-key",
                "value": "{{mockApiKey}}"
              }
            ],
            "url": {
              "raw": "{{planningUpdatesUrl}}",
              "host": [
                "{{planningUpdatesUrl}}"
              ]
            },
            "auth": {
              "type": "basic",
              "basic": [
                {
                  "key": "username",
                  "value": "{{login}}",
                  "type": "string"
                },
                {
                  "key": "password",
                  "value": "{{password}}",
                  "type": "string"
                }
              ]
            },
            "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",
            "body": {
              "mode": "raw",
              "raw": "<?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",
              "options": {
                "raw": {
                  "language": "xml"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "PU-19  Meal plans",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test(\"PU-19 answers 200 OK\", () => pm.expect(pm.response.code).to.equal(200));",
                  "pm.test(\"PU-19 declares an XML content type\", () => pm.expect(String(pm.response.headers.get(\"Content-Type\"))).to.match(/xml/i));",
                  "pm.test(\"PU-19 answers within 5 s\", () => pm.expect(pm.response.responseTime).to.be.below(5000));",
                  "pm.test(\"PU-19 returns <success />\", () => pm.expect(pm.response.text()).to.match(/<success\\s*\\/?>/));"
                ]
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/xml; charset=utf-8"
              },
              {
                "key": "x-mock-api-key",
                "value": "{{mockApiKey}}"
              }
            ],
            "url": {
              "raw": "{{planningUpdatesUrl}}",
              "host": [
                "{{planningUpdatesUrl}}"
              ]
            },
            "auth": {
              "type": "basic",
              "basic": [
                {
                  "key": "username",
                  "value": "{{login}}",
                  "type": "string"
                },
                {
                  "key": "password",
                  "value": "{{password}}",
                  "type": "string"
                }
              ]
            },
            "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",
            "body": {
              "mode": "raw",
              "raw": "<?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",
              "options": {
                "raw": {
                  "language": "xml"
                }
              }
            }
          },
          "response": []
        }
      ]
    },
    {
      "name": "Planning updates: refusals",
      "description": "Valid XML with one wrong value each. Run against your own server: the mock environment answers success to everything.",
      "item": [
        {
          "name": "PU-F1  Wrong password",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test(\"PU-F1 answers 200 OK\", () => pm.expect(pm.response.code).to.equal(200));",
                  "pm.test(\"PU-F1 declares an XML content type\", () => pm.expect(String(pm.response.headers.get(\"Content-Type\"))).to.match(/xml/i));",
                  "pm.test(\"PU-F1 answers within 5 s\", () => pm.expect(pm.response.responseTime).to.be.below(5000));",
                  "pm.test(\"PU-F1 returns <failure> of type 3\", () => pm.expect(pm.response.text()).to.match(/<failure[^>]*\\btype=\"(3)\"/));"
                ]
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/xml; charset=utf-8"
              },
              {
                "key": "x-mock-api-key",
                "value": "{{mockApiKey}}"
              }
            ],
            "url": {
              "raw": "{{planningUpdatesUrl}}",
              "host": [
                "{{planningUpdatesUrl}}"
              ]
            },
            "auth": {
              "type": "basic",
              "basic": [
                {
                  "key": "username",
                  "value": "{{login}}",
                  "type": "string"
                },
                {
                  "key": "password",
                  "value": "{{password}}",
                  "type": "string"
                }
              ]
            },
            "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",
            "body": {
              "mode": "raw",
              "raw": "<?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",
              "options": {
                "raw": {
                  "language": "xml"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "PU-F2  Unknown hotel",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test(\"PU-F2 answers 200 OK\", () => pm.expect(pm.response.code).to.equal(200));",
                  "pm.test(\"PU-F2 declares an XML content type\", () => pm.expect(String(pm.response.headers.get(\"Content-Type\"))).to.match(/xml/i));",
                  "pm.test(\"PU-F2 answers within 5 s\", () => pm.expect(pm.response.responseTime).to.be.below(5000));",
                  "pm.test(\"PU-F2 returns <failure> of type 1 or 2\", () => pm.expect(pm.response.text()).to.match(/<failure[^>]*\\btype=\"(1|2)\"/));"
                ]
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/xml; charset=utf-8"
              },
              {
                "key": "x-mock-api-key",
                "value": "{{mockApiKey}}"
              }
            ],
            "url": {
              "raw": "{{planningUpdatesUrl}}",
              "host": [
                "{{planningUpdatesUrl}}"
              ]
            },
            "auth": {
              "type": "basic",
              "basic": [
                {
                  "key": "username",
                  "value": "{{login}}",
                  "type": "string"
                },
                {
                  "key": "password",
                  "value": "{{password}}",
                  "type": "string"
                }
              ]
            },
            "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",
            "body": {
              "mode": "raw",
              "raw": "<?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",
              "options": {
                "raw": {
                  "language": "xml"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "PU-F3  Unknown room",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test(\"PU-F3 answers 200 OK\", () => pm.expect(pm.response.code).to.equal(200));",
                  "pm.test(\"PU-F3 declares an XML content type\", () => pm.expect(String(pm.response.headers.get(\"Content-Type\"))).to.match(/xml/i));",
                  "pm.test(\"PU-F3 answers within 5 s\", () => pm.expect(pm.response.responseTime).to.be.below(5000));",
                  "pm.test(\"PU-F3 returns <failure> of type 4\", () => pm.expect(pm.response.text()).to.match(/<failure[^>]*\\btype=\"(4)\"/));"
                ]
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/xml; charset=utf-8"
              },
              {
                "key": "x-mock-api-key",
                "value": "{{mockApiKey}}"
              }
            ],
            "url": {
              "raw": "{{planningUpdatesUrl}}",
              "host": [
                "{{planningUpdatesUrl}}"
              ]
            },
            "auth": {
              "type": "basic",
              "basic": [
                {
                  "key": "username",
                  "value": "{{login}}",
                  "type": "string"
                },
                {
                  "key": "password",
                  "value": "{{password}}",
                  "type": "string"
                }
              ]
            },
            "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",
            "body": {
              "mode": "raw",
              "raw": "<?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",
              "options": {
                "raw": {
                  "language": "xml"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "PU-F4  Unknown room next to a valid room",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test(\"PU-F4 answers 200 OK\", () => pm.expect(pm.response.code).to.equal(200));",
                  "pm.test(\"PU-F4 declares an XML content type\", () => pm.expect(String(pm.response.headers.get(\"Content-Type\"))).to.match(/xml/i));",
                  "pm.test(\"PU-F4 answers within 5 s\", () => pm.expect(pm.response.responseTime).to.be.below(5000));",
                  "pm.test(\"PU-F4 returns <failure> of type 4\", () => pm.expect(pm.response.text()).to.match(/<failure[^>]*\\btype=\"(4)\"/));"
                ]
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/xml; charset=utf-8"
              },
              {
                "key": "x-mock-api-key",
                "value": "{{mockApiKey}}"
              }
            ],
            "url": {
              "raw": "{{planningUpdatesUrl}}",
              "host": [
                "{{planningUpdatesUrl}}"
              ]
            },
            "auth": {
              "type": "basic",
              "basic": [
                {
                  "key": "username",
                  "value": "{{login}}",
                  "type": "string"
                },
                {
                  "key": "password",
                  "value": "{{password}}",
                  "type": "string"
                }
              ]
            },
            "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",
            "body": {
              "mode": "raw",
              "raw": "<?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",
              "options": {
                "raw": {
                  "language": "xml"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "PU-F5  Unknown rate",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test(\"PU-F5 answers 200 OK\", () => pm.expect(pm.response.code).to.equal(200));",
                  "pm.test(\"PU-F5 declares an XML content type\", () => pm.expect(String(pm.response.headers.get(\"Content-Type\"))).to.match(/xml/i));",
                  "pm.test(\"PU-F5 answers within 5 s\", () => pm.expect(pm.response.responseTime).to.be.below(5000));",
                  "pm.test(\"PU-F5 returns <failure> of type 5\", () => pm.expect(pm.response.text()).to.match(/<failure[^>]*\\btype=\"(5)\"/));"
                ]
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/xml; charset=utf-8"
              },
              {
                "key": "x-mock-api-key",
                "value": "{{mockApiKey}}"
              }
            ],
            "url": {
              "raw": "{{planningUpdatesUrl}}",
              "host": [
                "{{planningUpdatesUrl}}"
              ]
            },
            "auth": {
              "type": "basic",
              "basic": [
                {
                  "key": "username",
                  "value": "{{login}}",
                  "type": "string"
                },
                {
                  "key": "password",
                  "value": "{{password}}",
                  "type": "string"
                }
              ]
            },
            "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",
            "body": {
              "mode": "raw",
              "raw": "<?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",
              "options": {
                "raw": {
                  "language": "xml"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "PU-F6  Unknown rate next to a valid rate",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test(\"PU-F6 answers 200 OK\", () => pm.expect(pm.response.code).to.equal(200));",
                  "pm.test(\"PU-F6 declares an XML content type\", () => pm.expect(String(pm.response.headers.get(\"Content-Type\"))).to.match(/xml/i));",
                  "pm.test(\"PU-F6 answers within 5 s\", () => pm.expect(pm.response.responseTime).to.be.below(5000));",
                  "pm.test(\"PU-F6 returns <failure> of type 5\", () => pm.expect(pm.response.text()).to.match(/<failure[^>]*\\btype=\"(5)\"/));"
                ]
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/xml; charset=utf-8"
              },
              {
                "key": "x-mock-api-key",
                "value": "{{mockApiKey}}"
              }
            ],
            "url": {
              "raw": "{{planningUpdatesUrl}}",
              "host": [
                "{{planningUpdatesUrl}}"
              ]
            },
            "auth": {
              "type": "basic",
              "basic": [
                {
                  "key": "username",
                  "value": "{{login}}",
                  "type": "string"
                },
                {
                  "key": "password",
                  "value": "{{password}}",
                  "type": "string"
                }
              ]
            },
            "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",
            "body": {
              "mode": "raw",
              "raw": "<?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",
              "options": {
                "raw": {
                  "language": "xml"
                }
              }
            }
          },
          "response": []
        }
      ]
    },
    {
      "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.",
      "item": [
        {
          "name": "GB-01  Per hotel, duration",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test(\"GB-01 answers 200 OK\", () => pm.expect(pm.response.code).to.equal(200));",
                  "pm.test(\"GB-01 declares an XML content type\", () => pm.expect(String(pm.response.headers.get(\"Content-Type\"))).to.match(/xml/i));",
                  "pm.test(\"GB-01 answers within 30 s\", () => pm.expect(pm.response.responseTime).to.be.below(30000));",
                  "pm.test(\"GB-01 returns <success />\", () => pm.expect(pm.response.text()).to.match(/<success\\s*\\/?>/));"
                ]
              }
            }
          ],
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/xml, text/xml"
              },
              {
                "key": "x-mock-api-key",
                "value": "{{mockApiKey}}"
              }
            ],
            "url": {
              "raw": "{{getBookingsUrl}}?hotelId={{hotelCode}}&duration=2",
              "host": [
                "{{getBookingsUrl}}"
              ],
              "query": [
                {
                  "key": "hotelId",
                  "value": "{{hotelCode}}"
                },
                {
                  "key": "duration",
                  "value": "2"
                }
              ]
            },
            "auth": {
              "type": "basic",
              "basic": [
                {
                  "key": "username",
                  "value": "{{login}}",
                  "type": "string"
                },
                {
                  "key": "password",
                  "value": "{{password}}",
                  "type": "string"
                }
              ]
            },
            "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"
          },
          "response": []
        },
        {
          "name": "GB-02  Per hotel, from and to",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test(\"GB-02 answers 200 OK\", () => pm.expect(pm.response.code).to.equal(200));",
                  "pm.test(\"GB-02 declares an XML content type\", () => pm.expect(String(pm.response.headers.get(\"Content-Type\"))).to.match(/xml/i));",
                  "pm.test(\"GB-02 answers within 30 s\", () => pm.expect(pm.response.responseTime).to.be.below(30000));",
                  "pm.test(\"GB-02 returns <success />\", () => pm.expect(pm.response.text()).to.match(/<success\\s*\\/?>/));"
                ]
              }
            }
          ],
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/xml, text/xml"
              },
              {
                "key": "x-mock-api-key",
                "value": "{{mockApiKey}}"
              }
            ],
            "url": {
              "raw": "{{getBookingsUrl}}?hotelId={{hotelCode}}&from={{from}}&to={{to}}",
              "host": [
                "{{getBookingsUrl}}"
              ],
              "query": [
                {
                  "key": "hotelId",
                  "value": "{{hotelCode}}"
                },
                {
                  "key": "from",
                  "value": "{{from}}"
                },
                {
                  "key": "to",
                  "value": "{{to}}"
                }
              ]
            },
            "auth": {
              "type": "basic",
              "basic": [
                {
                  "key": "username",
                  "value": "{{login}}",
                  "type": "string"
                },
                {
                  "key": "password",
                  "value": "{{password}}",
                  "type": "string"
                }
              ]
            },
            "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"
          },
          "response": []
        },
        {
          "name": "GB-03  Per hotel, no window",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test(\"GB-03 answers 200 OK\", () => pm.expect(pm.response.code).to.equal(200));",
                  "pm.test(\"GB-03 declares an XML content type\", () => pm.expect(String(pm.response.headers.get(\"Content-Type\"))).to.match(/xml/i));",
                  "pm.test(\"GB-03 answers within 30 s\", () => pm.expect(pm.response.responseTime).to.be.below(30000));",
                  "pm.test(\"GB-03 returns <success />\", () => pm.expect(pm.response.text()).to.match(/<success\\s*\\/?>/));"
                ]
              }
            }
          ],
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/xml, text/xml"
              },
              {
                "key": "x-mock-api-key",
                "value": "{{mockApiKey}}"
              }
            ],
            "url": {
              "raw": "{{getBookingsUrl}}?hotelId={{hotelCode}}",
              "host": [
                "{{getBookingsUrl}}"
              ],
              "query": [
                {
                  "key": "hotelId",
                  "value": "{{hotelCode}}"
                }
              ]
            },
            "auth": {
              "type": "basic",
              "basic": [
                {
                  "key": "username",
                  "value": "{{login}}",
                  "type": "string"
                },
                {
                  "key": "password",
                  "value": "{{password}}",
                  "type": "string"
                }
              ]
            },
            "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"
          },
          "response": []
        },
        {
          "name": "GB-04  All hotels, duration",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test(\"GB-04 answers 200 OK\", () => pm.expect(pm.response.code).to.equal(200));",
                  "pm.test(\"GB-04 declares an XML content type\", () => pm.expect(String(pm.response.headers.get(\"Content-Type\"))).to.match(/xml/i));",
                  "pm.test(\"GB-04 answers within 30 s\", () => pm.expect(pm.response.responseTime).to.be.below(30000));",
                  "pm.test(\"GB-04 returns <success />\", () => pm.expect(pm.response.text()).to.match(/<success\\s*\\/?>/));"
                ]
              }
            }
          ],
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/xml, text/xml"
              },
              {
                "key": "x-mock-api-key",
                "value": "{{mockApiKey}}"
              }
            ],
            "url": {
              "raw": "{{getBookingsUrl}}?duration=2",
              "host": [
                "{{getBookingsUrl}}"
              ],
              "query": [
                {
                  "key": "duration",
                  "value": "2"
                }
              ]
            },
            "auth": {
              "type": "basic",
              "basic": [
                {
                  "key": "username",
                  "value": "{{login}}",
                  "type": "string"
                },
                {
                  "key": "password",
                  "value": "{{password}}",
                  "type": "string"
                }
              ]
            },
            "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"
          },
          "response": []
        },
        {
          "name": "GB-05  All hotels, from and to",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test(\"GB-05 answers 200 OK\", () => pm.expect(pm.response.code).to.equal(200));",
                  "pm.test(\"GB-05 declares an XML content type\", () => pm.expect(String(pm.response.headers.get(\"Content-Type\"))).to.match(/xml/i));",
                  "pm.test(\"GB-05 answers within 30 s\", () => pm.expect(pm.response.responseTime).to.be.below(30000));",
                  "pm.test(\"GB-05 returns <success />\", () => pm.expect(pm.response.text()).to.match(/<success\\s*\\/?>/));"
                ]
              }
            }
          ],
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/xml, text/xml"
              },
              {
                "key": "x-mock-api-key",
                "value": "{{mockApiKey}}"
              }
            ],
            "url": {
              "raw": "{{getBookingsUrl}}?from={{from}}&to={{to}}",
              "host": [
                "{{getBookingsUrl}}"
              ],
              "query": [
                {
                  "key": "from",
                  "value": "{{from}}"
                },
                {
                  "key": "to",
                  "value": "{{to}}"
                }
              ]
            },
            "auth": {
              "type": "basic",
              "basic": [
                {
                  "key": "username",
                  "value": "{{login}}",
                  "type": "string"
                },
                {
                  "key": "password",
                  "value": "{{password}}",
                  "type": "string"
                }
              ]
            },
            "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"
          },
          "response": []
        },
        {
          "name": "GB-06  All hotels, no window",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test(\"GB-06 answers 200 OK\", () => pm.expect(pm.response.code).to.equal(200));",
                  "pm.test(\"GB-06 declares an XML content type\", () => pm.expect(String(pm.response.headers.get(\"Content-Type\"))).to.match(/xml/i));",
                  "pm.test(\"GB-06 answers within 30 s\", () => pm.expect(pm.response.responseTime).to.be.below(30000));",
                  "pm.test(\"GB-06 returns <success />\", () => pm.expect(pm.response.text()).to.match(/<success\\s*\\/?>/));"
                ]
              }
            }
          ],
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/xml, text/xml"
              },
              {
                "key": "x-mock-api-key",
                "value": "{{mockApiKey}}"
              }
            ],
            "url": {
              "raw": "{{getBookingsUrl}}",
              "host": [
                "{{getBookingsUrl}}"
              ]
            },
            "auth": {
              "type": "basic",
              "basic": [
                {
                  "key": "username",
                  "value": "{{login}}",
                  "type": "string"
                },
                {
                  "key": "password",
                  "value": "{{password}}",
                  "type": "string"
                }
              ]
            },
            "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"
          },
          "response": []
        }
      ]
    },
    {
      "name": "Get bookings: refusals",
      "description": "Run against your own server: the mock environment answers success to everything.",
      "item": [
        {
          "name": "GB-F1  Wrong password",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test(\"GB-F1 answers 200 OK\", () => pm.expect(pm.response.code).to.equal(200));",
                  "pm.test(\"GB-F1 declares an XML content type\", () => pm.expect(String(pm.response.headers.get(\"Content-Type\"))).to.match(/xml/i));",
                  "pm.test(\"GB-F1 answers within 30 s\", () => pm.expect(pm.response.responseTime).to.be.below(30000));",
                  "pm.test(\"GB-F1 returns <failure> of type 3\", () => pm.expect(pm.response.text()).to.match(/<failure[^>]*\\btype=\"(3)\"/));"
                ]
              }
            }
          ],
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/xml, text/xml"
              },
              {
                "key": "x-mock-api-key",
                "value": "{{mockApiKey}}"
              }
            ],
            "url": {
              "raw": "{{getBookingsUrl}}?hotelId={{hotelCode}}&duration=2",
              "host": [
                "{{getBookingsUrl}}"
              ],
              "query": [
                {
                  "key": "hotelId",
                  "value": "{{hotelCode}}"
                },
                {
                  "key": "duration",
                  "value": "2"
                }
              ]
            },
            "auth": {
              "type": "basic",
              "basic": [
                {
                  "key": "username",
                  "value": "{{login}}",
                  "type": "string"
                },
                {
                  "key": "password",
                  "value": "{{wrongPassword}}",
                  "type": "string"
                }
              ]
            },
            "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"
          },
          "response": []
        },
        {
          "name": "GB-F2  Unknown hotelId",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test(\"GB-F2 answers 200 OK\", () => pm.expect(pm.response.code).to.equal(200));",
                  "pm.test(\"GB-F2 declares an XML content type\", () => pm.expect(String(pm.response.headers.get(\"Content-Type\"))).to.match(/xml/i));",
                  "pm.test(\"GB-F2 answers within 30 s\", () => pm.expect(pm.response.responseTime).to.be.below(30000));",
                  "pm.test(\"GB-F2 returns <failure> of type 1 or 2\", () => pm.expect(pm.response.text()).to.match(/<failure[^>]*\\btype=\"(1|2)\"/));"
                ]
              }
            }
          ],
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/xml, text/xml"
              },
              {
                "key": "x-mock-api-key",
                "value": "{{mockApiKey}}"
              }
            ],
            "url": {
              "raw": "{{getBookingsUrl}}?hotelId=UNKNOWN-HOTEL&duration=2",
              "host": [
                "{{getBookingsUrl}}"
              ],
              "query": [
                {
                  "key": "hotelId",
                  "value": "UNKNOWN-HOTEL"
                },
                {
                  "key": "duration",
                  "value": "2"
                }
              ]
            },
            "auth": {
              "type": "basic",
              "basic": [
                {
                  "key": "username",
                  "value": "{{login}}",
                  "type": "string"
                },
                {
                  "key": "password",
                  "value": "{{password}}",
                  "type": "string"
                }
              ]
            },
            "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"
          },
          "response": []
        },
        {
          "name": "GB-F3  Malformed duration",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test(\"GB-F3 answers 200 OK\", () => pm.expect(pm.response.code).to.equal(200));",
                  "pm.test(\"GB-F3 declares an XML content type\", () => pm.expect(String(pm.response.headers.get(\"Content-Type\"))).to.match(/xml/i));",
                  "pm.test(\"GB-F3 answers within 30 s\", () => pm.expect(pm.response.responseTime).to.be.below(30000));",
                  "pm.test(\"GB-F3 returns <failure> of type 203\", () => pm.expect(pm.response.text()).to.match(/<failure[^>]*\\btype=\"(203)\"/));"
                ]
              }
            }
          ],
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/xml, text/xml"
              },
              {
                "key": "x-mock-api-key",
                "value": "{{mockApiKey}}"
              }
            ],
            "url": {
              "raw": "{{getBookingsUrl}}?hotelId={{hotelCode}}&duration=aaa",
              "host": [
                "{{getBookingsUrl}}"
              ],
              "query": [
                {
                  "key": "hotelId",
                  "value": "{{hotelCode}}"
                },
                {
                  "key": "duration",
                  "value": "aaa"
                }
              ]
            },
            "auth": {
              "type": "basic",
              "basic": [
                {
                  "key": "username",
                  "value": "{{login}}",
                  "type": "string"
                },
                {
                  "key": "password",
                  "value": "{{password}}",
                  "type": "string"
                }
              ]
            },
            "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"
          },
          "response": []
        },
        {
          "name": "GB-F4  Malformed from and to",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test(\"GB-F4 answers 200 OK\", () => pm.expect(pm.response.code).to.equal(200));",
                  "pm.test(\"GB-F4 declares an XML content type\", () => pm.expect(String(pm.response.headers.get(\"Content-Type\"))).to.match(/xml/i));",
                  "pm.test(\"GB-F4 answers within 30 s\", () => pm.expect(pm.response.responseTime).to.be.below(30000));",
                  "pm.test(\"GB-F4 returns <failure> of type 203\", () => pm.expect(pm.response.text()).to.match(/<failure[^>]*\\btype=\"(203)\"/));"
                ]
              }
            }
          ],
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/xml, text/xml"
              },
              {
                "key": "x-mock-api-key",
                "value": "{{mockApiKey}}"
              }
            ],
            "url": {
              "raw": "{{getBookingsUrl}}?hotelId={{hotelCode}}&from={{month1}}-9T12:30:00&to={{month1}}-10T6:00:00",
              "host": [
                "{{getBookingsUrl}}"
              ],
              "query": [
                {
                  "key": "hotelId",
                  "value": "{{hotelCode}}"
                },
                {
                  "key": "from",
                  "value": "{{month1}}-9T12:30:00"
                },
                {
                  "key": "to",
                  "value": "{{month1}}-10T6:00:00"
                }
              ]
            },
            "auth": {
              "type": "basic",
              "basic": [
                {
                  "key": "username",
                  "value": "{{login}}",
                  "type": "string"
                },
                {
                  "key": "password",
                  "value": "{{password}}",
                  "type": "string"
                }
              ]
            },
            "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"
          },
          "response": []
        }
      ]
    },
    {
      "name": "Confirm bookings",
      "description": "Set bookingId to a booking your Get bookings endpoint returned.",
      "item": [
        {
          "name": "CB-01  Acknowledge a creation",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test(\"CB-01 answers 200 OK\", () => pm.expect(pm.response.code).to.equal(200));",
                  "pm.test(\"CB-01 declares an XML content type\", () => pm.expect(String(pm.response.headers.get(\"Content-Type\"))).to.match(/xml/i));",
                  "pm.test(\"CB-01 answers within 5 s\", () => pm.expect(pm.response.responseTime).to.be.below(5000));",
                  "pm.test(\"CB-01 returns <success />\", () => pm.expect(pm.response.text()).to.match(/<success\\s*\\/?>/));"
                ]
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/xml; charset=utf-8"
              },
              {
                "key": "Accept",
                "value": "application/xml, text/xml"
              },
              {
                "key": "x-mock-api-key",
                "value": "{{mockApiKey}}"
              }
            ],
            "url": {
              "raw": "{{confirmBookingsUrl}}",
              "host": [
                "{{confirmBookingsUrl}}"
              ]
            },
            "auth": {
              "type": "basic",
              "basic": [
                {
                  "key": "username",
                  "value": "{{login}}",
                  "type": "string"
                },
                {
                  "key": "password",
                  "value": "{{password}}",
                  "type": "string"
                }
              ]
            },
            "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",
            "body": {
              "mode": "raw",
              "raw": "<?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",
              "options": {
                "raw": {
                  "language": "xml"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "CB-02  Acknowledge a modification",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test(\"CB-02 answers 200 OK\", () => pm.expect(pm.response.code).to.equal(200));",
                  "pm.test(\"CB-02 declares an XML content type\", () => pm.expect(String(pm.response.headers.get(\"Content-Type\"))).to.match(/xml/i));",
                  "pm.test(\"CB-02 answers within 5 s\", () => pm.expect(pm.response.responseTime).to.be.below(5000));",
                  "pm.test(\"CB-02 returns <success />\", () => pm.expect(pm.response.text()).to.match(/<success\\s*\\/?>/));"
                ]
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/xml; charset=utf-8"
              },
              {
                "key": "Accept",
                "value": "application/xml, text/xml"
              },
              {
                "key": "x-mock-api-key",
                "value": "{{mockApiKey}}"
              }
            ],
            "url": {
              "raw": "{{confirmBookingsUrl}}",
              "host": [
                "{{confirmBookingsUrl}}"
              ]
            },
            "auth": {
              "type": "basic",
              "basic": [
                {
                  "key": "username",
                  "value": "{{login}}",
                  "type": "string"
                },
                {
                  "key": "password",
                  "value": "{{password}}",
                  "type": "string"
                }
              ]
            },
            "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",
            "body": {
              "mode": "raw",
              "raw": "<?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",
              "options": {
                "raw": {
                  "language": "xml"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "CB-03  Acknowledge a cancellation",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test(\"CB-03 answers 200 OK\", () => pm.expect(pm.response.code).to.equal(200));",
                  "pm.test(\"CB-03 declares an XML content type\", () => pm.expect(String(pm.response.headers.get(\"Content-Type\"))).to.match(/xml/i));",
                  "pm.test(\"CB-03 answers within 5 s\", () => pm.expect(pm.response.responseTime).to.be.below(5000));",
                  "pm.test(\"CB-03 returns <success />\", () => pm.expect(pm.response.text()).to.match(/<success\\s*\\/?>/));"
                ]
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/xml; charset=utf-8"
              },
              {
                "key": "Accept",
                "value": "application/xml, text/xml"
              },
              {
                "key": "x-mock-api-key",
                "value": "{{mockApiKey}}"
              }
            ],
            "url": {
              "raw": "{{confirmBookingsUrl}}",
              "host": [
                "{{confirmBookingsUrl}}"
              ]
            },
            "auth": {
              "type": "basic",
              "basic": [
                {
                  "key": "username",
                  "value": "{{login}}",
                  "type": "string"
                },
                {
                  "key": "password",
                  "value": "{{password}}",
                  "type": "string"
                }
              ]
            },
            "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",
            "body": {
              "mode": "raw",
              "raw": "<?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",
              "options": {
                "raw": {
                  "language": "xml"
                }
              }
            }
          },
          "response": []
        }
      ]
    }
  ],
  "variable": [
    {
      "key": "getHotelUrl",
      "value": "https://api-mock.d-edge.com/channel-manager-api/getHotel",
      "type": "string",
      "description": "URL of your Get hotel endpoint. Mock by default."
    },
    {
      "key": "planningUpdatesUrl",
      "value": "https://api-mock.d-edge.com/channel-manager-api/planningUpdates",
      "type": "string",
      "description": "URL of your Planning updates endpoint. Mock by default."
    },
    {
      "key": "getBookingsUrl",
      "value": "https://api-mock.d-edge.com/channel-manager-api/getBookings",
      "type": "string",
      "description": "URL of your Get bookings endpoint. Mock by default."
    },
    {
      "key": "confirmBookingsUrl",
      "value": "https://api-mock.d-edge.com/channel-manager-api/confirmBookings",
      "type": "string",
      "description": "URL of your Confirm bookings endpoint. Mock by default."
    },
    {
      "key": "login",
      "value": "testhotel",
      "type": "string",
      "description": "The login you defined for D-EDGE, sent as Basic Auth and inside the XML of the POST messages."
    },
    {
      "key": "password",
      "value": "testpassword",
      "type": "string",
      "description": "The password you defined for D-EDGE."
    },
    {
      "key": "wrongPassword",
      "value": "wrongpassword",
      "type": "string",
      "description": "A password your platform must reject, sent by the scenarios that check a refusal. Any value other than your password."
    },
    {
      "key": "hotelCode",
      "value": "1234",
      "type": "string",
      "description": "The code of your test hotel on your platform."
    },
    {
      "key": "currency",
      "value": "EUR",
      "type": "string",
      "description": "The currency your Get hotel response declares for the test hotel."
    },
    {
      "key": "room1",
      "value": "CLA",
      "type": "string",
      "description": "Code of a room type carrying at least two rates."
    },
    {
      "key": "room1rate1",
      "value": "BAR",
      "type": "string",
      "description": "Code of the first rate of room1."
    },
    {
      "key": "room1rate2",
      "value": "NR",
      "type": "string",
      "description": "Code of the second rate of room1."
    },
    {
      "key": "room2",
      "value": "SUP",
      "type": "string",
      "description": "Code of a second room type."
    },
    {
      "key": "room2rate1",
      "value": "BAR",
      "type": "string",
      "description": "Code of a rate of room2."
    },
    {
      "key": "room3",
      "value": "SUI",
      "type": "string",
      "description": "Code of a third room type."
    },
    {
      "key": "room3rate1",
      "value": "BB",
      "type": "string",
      "description": "Code of a rate of room3."
    },
    {
      "key": "room3rate2",
      "value": "BB",
      "type": "string",
      "description": "Code of a second rate of room3, or the same code again when it has one rate."
    },
    {
      "key": "month1",
      "value": "2027-03",
      "type": "string",
      "description": "First month of every date range of the collection, YYYY-MM. Set it to the month you want to test; the ranges use days 01 to 28."
    },
    {
      "key": "month2",
      "value": "2027-04",
      "type": "string",
      "description": "The month after month1, YYYY-MM: the longer ranges end there."
    },
    {
      "key": "farMonth",
      "value": "2028-03",
      "type": "string",
      "description": "The month the long-range scenarios (PU-02, PU-04, PU-17) reach, YYYY-MM. Keep it within the horizon your platform stores."
    },
    {
      "key": "pastDate",
      "value": "2026-09-21",
      "type": "string",
      "description": "A day in the past, YYYY-MM-DD, where the range of PU-03 starts."
    },
    {
      "key": "from",
      "value": "2026-09-22T00:00:00",
      "type": "string",
      "description": "Start of the Get bookings window for GB-02 and GB-05, UTC. Move it to a window that holds bookings on your test hotel."
    },
    {
      "key": "to",
      "value": "2026-09-22T23:59:59",
      "type": "string",
      "description": "End of that window, UTC."
    },
    {
      "key": "bookingId",
      "value": "EOCFGA",
      "type": "string",
      "description": "Identifier of a booking your Get bookings endpoint returned, acknowledged by the Confirm bookings scenarios."
    },
    {
      "key": "mockApiKey",
      "value": "@erBN6$LE$#rrotSzD@c6iPtYe!Xt!k#s&aNhL?J",
      "type": "string",
      "description": "Key of the shared mock environment, sent as the x-mock-api-key header. Ignored by your own server. Leave unchanged."
    }
  ]
}