var xmlService = function()

in legacy/routes/xml.js [238:584]


var xmlService = function (coverage) {
  coverage["StorageListContainersXML"] = 0;
  coverage["StorageGetServicePropertiesXML"] = 0;
  coverage["StoragePutServicePropertiesXML"] = 0;
  coverage["StorageGetContainerACLXML"] = 0;
  coverage["StorageListBlobsXML"] = 0;
  coverage["StoragePutContainerACLXML"] = 0;
  coverage["GetSimpleXML"] = 0;
  coverage["PutSimpleXML"] = 0;
  coverage["GetWrappedXMLList"] = 0;
  coverage["PutWrappedXMLList"] = 0;
  coverage["GetEmptyXMLList"] = 0;
  coverage["PutEmptyXMLList"] = 0;
  coverage["GetEmptyWrappedXMLList"] = 0;
  coverage["PutEmptyWrappedXMLList"] = 0;
  coverage["GetXMLListAtRoot"] = 0;
  coverage["PutXMLListAtRoot"] = 0;
  coverage["GetXMLListAtRootSingle"] = 0;
  coverage["PutXMLListAtRootSingle"] = 0;
  coverage["GetEmptyXMLListAtRoot"] = 0;
  coverage["PutEmptyXMLListAtRoot"] = 0;
  coverage["GetXMLEmptyNode"] = 0;
  coverage["PutXMLEmptyNode"] = 0;
  coverage["GetRootWithRefAndNoMetaXML"] = 0;
  coverage["PutRootWithRefAndNoMetaXML"] = 0;
  coverage["GetRootWithRefAndMetaXML"] = 0;
  coverage["PutRootWithRefAndMetaXML"] = 0;
  coverage["jsonInputInXMLSwagger"] = 0;
  coverage["jsonOutputInXMLSwagger"] = 0;
  coverage["GetWithXMsText"] = 0;

  router.get("/", function (req, res, next) {
    var comp = req.query.comp;
    var restype = req.query.restype;
    switch (comp) {
      case "list":
        switch (restype) {
          // https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/list-containers2
          // https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/enumerating-blob-resources
          // Swagger: Service_ListContainers
          case undefined:
            sendXmlBody(res, body_list);
            coverage["StorageListContainersXML"]++;
            break;
          default:
            res.sendStatus(404);
            break;
        }
        break;
      case "properties":
        switch (restype) {
          // https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/get-blob-service-properties
          // Swagger: Service_GetServiceProperties
          case "service":
            sendXmlBody(res, body_properties_service);
            coverage["StorageGetServicePropertiesXML"]++;
            break;
          default:
            res.sendStatus(404);
            break;
        }
        break;
      default:
        res.sendStatus(404);
        break;
    }
  });
  router.put("/", function (req, res, next) {
    var comp = req.query.comp;
    var restype = req.query.restype;
    switch (comp) {
      case "properties":
        switch (restype) {
          // https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/set-blob-service-properties
          case "service":
            expectXmlBody(req, res, body_properties_service, coverage, "StoragePutServicePropertiesXML");
            break;
          default:
            res.sendStatus(404);
            break;
        }
        break;
      default:
        res.sendStatus(404);
        break;
    }
  });

  router.get("/mycontainer", function (req, res, next) {
    var comp = req.query.comp;
    var restype = req.query.restype;
    switch (comp) {
      case "acl":
        switch (restype) {
          // https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/get-container-acl
          case "container":
            sendXmlBody(res, body_acl_container);
            coverage["StorageGetContainerACLXML"]++;
            break;
          default:
            res.sendStatus(404);
            break;
        }
        break;
      case "list":
        switch (restype) {
          // https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/list-blobs
          // https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/enumerating-blob-resources
          // Swagger: Containers_ListBlobs
          case "container":
            sendXmlBody(res, body_list_container);
            coverage["StorageListBlobsXML"]++;
            break;
          default:
            res.sendStatus(404);
            break;
        }
        break;
      default:
        res.sendStatus(404);
        break;
    }
  });
  router.put("/mycontainer", function (req, res, next) {
    var comp = req.query.comp;
    var restype = req.query.restype;
    switch (comp) {
      case "acl":
        switch (restype) {
          // https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/set-container-acl
          case "container":
            expectXmlBody(req, res, body_acl_container, coverage, "StoragePutContainerACLXML");
            break;
          default:
            res.sendStatus(404);
            break;
        }
        break;
      default:
        res.sendStatus(404);
        break;
    }
  });

  const simpleBody = `<?xml version='1.0' encoding='UTF-8'?>
<slideshow
        title="Sample Slide Show"
        date="Date of publication"
        author="Yours Truly">
    <slide type="all">
        <title>Wake up to WonderWidgets!</title>
    </slide>

    <slide type="all">
        <title>Overview</title>
        <item>Why WonderWidgets are great</item>
        <item></item>
        <item>Who buys WonderWidgets</item>
    </slide>
</slideshow>`;

  router.get("/simple", function (req, res) {
    sendXmlBody(res, simpleBody);
    coverage["GetSimpleXML"]++;
  });

  router.put("/simple", function (req, res) {
    expectXmlBody(req, res, simpleBody, coverage, "PutSimpleXML");
  });

  const wrappedListsBody = `<?xml version='1.0' encoding='UTF-8'?>
<AppleBarrel>
    <GoodApples>
        <Apple>Fuji</Apple>
        <Apple>Gala</Apple>
    </GoodApples>
    <BadApples>
        <Apple>Red Delicious</Apple>
    </BadApples>
</AppleBarrel>`;

  router.get("/wrapped-lists", function (req, res) {
    sendXmlBody(res, wrappedListsBody);
    coverage["GetWrappedXMLList"]++;
  });

  router.put("/wrapped-lists", function (req, res) {
    expectXmlBody(req, res, wrappedListsBody, coverage, "PutWrappedXMLList");
  });

  const emptyListBody = `<?xml version='1.0' encoding='UTF-8'?>
<slideshow/>`;

  router.get("/empty-list", function (req, res) {
    sendXmlBody(res, emptyListBody);
    coverage["GetEmptyXMLList"]++;
  });

  router.put("/empty-list", function (req, res) {
    expectXmlBody(req, res, emptyListBody, coverage, "PutEmptyXMLList");
  });

  const emptyWrappedListsBody = `<?xml version='1.0' encoding='UTF-8'?>
<AppleBarrel>
    <GoodApples></GoodApples>
    <BadApples/>
</AppleBarrel>`;

  router.get("/empty-wrapped-lists", function (req, res) {
    sendXmlBody(res, emptyWrappedListsBody);
    coverage["GetEmptyWrappedXMLList"]++;
  });

  router.put("/empty-wrapped-lists", function (req, res) {
    expectXmlBody(req, res, emptyWrappedListsBody, coverage, "PutEmptyWrappedXMLList");
  });

  const rootListBody = `<?xml version='1.0' encoding='UTF-8'?>
<bananas>
    <banana>
        <name>Cavendish</name>
        <flavor>Sweet</flavor>
        <expiration>2018-02-28T00:40:00.123Z</expiration>
    </banana>
    <banana>
        <name>Plantain</name>
        <flavor>Savory</flavor>
        <expiration>2018-02-28T00:40:00.123Z</expiration>
    </banana>
</bananas>`;

  router.get("/root-list", function (req, res) {
    sendXmlBody(res, rootListBody);
    coverage["GetXMLListAtRoot"]++;
  });

  router.put("/root-list", function (req, res) {
    expectXmlBody(req, res, rootListBody, coverage, "PutXMLListAtRoot");
  });

  const rootListSingleItemBody = `<?xml version='1.0' encoding='UTF-8'?>
<bananas>
    <banana>
        <name>Cavendish</name>
        <flavor>Sweet</flavor>
        <expiration>2018-02-28T00:40:00.123Z</expiration>
    </banana>
</bananas>`;

  router.get("/root-list-single-item", function (req, res) {
    sendXmlBody(res, rootListSingleItemBody);
    coverage["GetXMLListAtRootSingle"]++;
  });

  router.put("/root-list-single-item", function (req, res) {
    expectXmlBody(req, res, rootListSingleItemBody, coverage, "PutXMLListAtRootSingle");
  });

  const emptyRootListBody = `<?xml version='1.0' encoding='UTF-8'?>
<bananas/>`;

  router.get("/empty-root-list", function (req, res) {
    sendXmlBody(res, emptyRootListBody);
    coverage["GetEmptyXMLListAtRoot"]++;
  });

  router.put("/empty-root-list", function (req, res) {
    expectXmlBody(req, res, emptyRootListBody, coverage, "PutEmptyXMLListAtRoot");
  });

  const emptyChildElementBody = `<?xml version='1.0' encoding='UTF-8'?>
<banana>
  <name>Unknown Banana</name>
  <flavor></flavor>
  <expiration>2012-02-24T00:53:52.789Z</expiration>
</banana>`;

  router.get("/empty-child-element", function (req, res) {
    sendXmlBody(res, emptyChildElementBody);
    coverage["GetXMLEmptyNode"]++;
  });

  router.put("/empty-child-element", function (req, res) {
    expectXmlBody(req, res, emptyChildElementBody, coverage, "PutXMLEmptyNode");
  });

  const complexTypeRefComplexTypeWithNoXMLmeta = `<?xml version='1.0' encoding='UTF-8'?>
  <RootWithRefAndNoMeta>
    <RefToModel>
      <ID>myid</ID>
    </RefToModel>
    <Something>else</Something>
  </RootWithRefAndNoMeta>`;

  router.get("/complex-type-ref-no-meta", function (req, res) {
    coverage["GetRootWithRefAndNoMetaXML"]++;
    sendXmlBody(res, complexTypeRefComplexTypeWithNoXMLmeta);
  });

  router.put("/complex-type-ref-no-meta", function (req, res) {
    expectXmlBody(req, res, complexTypeRefComplexTypeWithNoXMLmeta, coverage, "PutRootWithRefAndNoMetaXML");
  });

  const complexTypeRefComplexTypeWithXMLmeta = `<?xml version='1.0' encoding='UTF-8'?>
  <RootWithRefAndMeta>
    <XMLComplexTypeWithMeta>
      <ID>myid</ID>
    </XMLComplexTypeWithMeta>
    <Something>else</Something>
  </RootWithRefAndMeta>`;

  router.get("/complex-type-ref-with-meta", function (req, res) {
    coverage["GetRootWithRefAndMetaXML"]++;
    sendXmlBody(res, complexTypeRefComplexTypeWithXMLmeta);
  });

  router.put("/complex-type-ref-with-meta", function (req, res) {
    expectXmlBody(req, res, complexTypeRefComplexTypeWithXMLmeta, coverage, "PutRootWithRefAndMetaXML");
  });

  router.get("/headers", function (req, res) {
    res.status(200);
    res.setHeader("Custom-HEADER", "custom-value");
    res.end();
  });

  router.put("/jsoninput", function (req, res, next) {
    if (_.isEqual(req.body, { id: 42 })) {
      coverage["jsonInputInXMLSwagger"]++;
      res.status(200).end();
    } else {
      utils.send400(res, next, "Did not like valid req " + util.inspect(req.body));
    }
  });

  router.get("/jsonoutput", function (req, res, next) {
    coverage["jsonOutputInXMLSwagger"]++;
    res.status(200).json({ id: 42 });
  });

  router.get("/x-ms-text", function (req, res, next) {
    const xmsTextXML = `<?xml version='1.0' encoding='UTF-8'?>
    <Data language="english">I am text</Data>`;
    sendXmlBody(res, xmsTextXML);
    coverage["GetWithXMsText"]++;
  });
};