var queries = function()

in legacy/routes/queries.js [90:333]


var queries = function (coverage) {
  router.get("/:type/empty", function (req, res, next) {
    console.log("inside router\n");
    var type = req.params.type;
    var scenario = "empty";
    var queryName = getQueryParameterName(type);

    var test = getScenarioName(type, scenario);
    var queryParamCount = Object.keys(req.query).length;
    if (test === null) {
      console.log("test was null\n");
      utils.send400(res, next, 'Unable to parse scenario "/paths/' + type + "/" + scenario + '"');
    } else if (scenario === "empty" && queryParamCount == 1 && req.query[queryName] === "") {
      console.log("in empty test\n");
      coverage["UrlQueries" + test]++;
      res.status(200).end();
    } else {
      console.log("Null Failure!\n");
      utils.send400(
        res,
        next,
        'Failed null test for type "' + type + '" received query parameter "' + util.inspect(req.query) + '"',
      );
    }
  });

  router.get("/:type/null", function (req, res, next) {
    console.log("inside router\n");
    var type = req.params.type;
    var scenario = "null";
    var queryName = getQueryParameterName(type);

    var test = getScenarioName(type, scenario);
    if (test === null) {
      console.log("test was null\n");
      utils.send400(res, next, 'Unable to parse scenario "/paths/' + type + "/" + scenario + '"');
    } else if (scenario === "null" && Object.keys(req.query).length == 0) {
      console.log("in null test\n");
      coverage["UrlQueries" + test]++;
      res.status(200).end();
    } else {
      console.log("Null Failure!\n");
      utils.send400(
        res,
        next,
        'Failed null test for type "' + type + '" received query parameter "' + util.inspect(req.query) + '"',
      );
    }
  });

  router.get("/array/:format/string/:scenario", function (req, res, next) {
    console.log("inside router\n");
    var type = req.params.type;
    var scenario = req.params.scenario;
    var format = req.params.format;

    var test = getScenarioName(type, scenario);
    if (format === "csv") {
      console.log("In csv test\n");
      if (scenario === "null" && Object.keys(req.query).length == 0) {
        coverage["UrlQueriesArrayCsvNull"]++;
        res.status(200).end();
      } else if (scenario === "empty" && Object.keys(req.query).length == 1 && req.query.arrayQuery === "") {
        coverage["UrlQueriesArrayCsvEmpty"]++;
        res.status(200).end();
      } else if (
        scenario === "valid" &&
        Object.keys(req.query).length == 1 &&
        validateArrayQuery(req.query.arrayQuery, ",")
      ) {
        coverage["UrlQueriesArrayCsvValid"]++;
        res.status(200).end();
      } else {
        utils.send400(res, next, 'Failed csv array scenario format "' + format + '", scenario "' + scenario + '"');
      }
    } else if (format === "multi") {
      console.log("In multi test\n");
      if (scenario === "null" && Object.keys(req.query).length == 0) {
        coverage["UrlQueriesArrayMultiNull"]++;
        res.status(200).end();
      } else if (scenario === "empty" && Object.keys(req.query).length == 0) {
        coverage["UrlQueriesArrayMultiEmpty"]++;
        res.status(200).end();
      } else if (
        scenario === "valid" &&
        Object.keys(req.query).length == 1 &&
        validateArrayQuery(req.query.arrayQuery, ",")
      ) {
        //Note: comma is used as a seperator to test multi format with becuase Array.toString returns comma seperated list
        coverage["UrlQueriesArrayMultiValid"]++;
        res.status(200).end();
      } else {
        utils.send400(res, next, 'Failed csv array scenario format "' + format + '", scenario "' + scenario + '"');
      }
    } else if (format === "ssv" && scenario === "valid") {
      console.log("in ssv test\n");
      if (scenario === "valid" && Object.keys(req.query).length == 1 && validateArrayQuery(req.query.arrayQuery, " ")) {
        coverage["UrlQueriesArraySsvValid"]++;
        res.status(200).end();
      } else {
        utils.send400(res, next, 'Failed ssv array scenario format "' + format + '", scenario "' + scenario + '"');
      }
    } else if (format === "tsv" && scenario === "valid") {
      console.log("in tsv test\n");
      if (
        scenario === "valid" &&
        Object.keys(req.query).length == 1 &&
        validateArrayQuery(req.query.arrayQuery, "\t")
      ) {
        coverage["UrlQueriesArrayTsvValid"]++;
        res.status(200).end();
      } else {
        utils.send400(res, next, 'Failed tsv array scenario format "' + format + '", scenario "' + scenario + '"');
      }
    } else if (format === "pipes" && scenario === "valid") {
      console.log("in pipes test\n");
      if (scenario === "valid" && Object.keys(req.query).length == 1 && validateArrayQuery(req.query.arrayQuery, "|")) {
        coverage["UrlQueriesArrayPipesValid"]++;
        res.status(200).end();
      } else {
        utils.send400(res, next, 'Failed pipes array scenario format "' + format + '", scenario "' + scenario + '"');
      }
    } else if (format == "none") {
      if (req.query.arrayQuery == "hello,nihao,bonjour") {
        coverage["UrlQueriesArrayNoCollectionFormatValid"]++;
        res.status(200).end();
      } else {
        utils.send400(
          res,
          next,
          "'arrayQuery' parameter must be of value 'hello,nihao,bonjour', not '" + req.query["arrayQuery"] + "'",
        );
      }
    } else {
      console.log("Array Failure!\n");
      utils.send400(
        res,
        next,
        'Unable to find matching Array scenario for format "' + format + '" scenario "' + scenario + '"',
      );
    }
  });

  router.get("/:type/:scenario", function (req, res, next) {
    var type = req.params.type;
    var scenario = req.params.scenario;
    var queryName = getQueryParameterName(type);
    var wireParameter = req.query[queryName];
    var test = getScenarioName(type, scenario);
    console.log(
      'inside main function with values type "' +
        type +
        '" scenario "' +
        scenario +
        '" queryName "' +
        queryName +
        '" wireParameter "' +
        wireParameter +
        '"\n',
    );
    var bytes = new Buffer(constants.MULTIBYTE_BUFFER);

    if (
      type === "enum" ||
      type === "date" ||
      type === "datetime" ||
      scenario === "multibyte" ||
      (type === "string" && scenario.indexOf("begin") === 0) ||
      scenario == "unicode"
    ) {
      scenario = '"' + scenario + '"';
      wireParameter = '"' + wireParameter + '"';
    }

    scenario = JSON.parse(scenario);
    wireParameter = JSON.parse(wireParameter);

    if (test === null) {
      console.log("test was null\n");
      utils.send400(res, next, 'Unable to parse scenario "/paths/' + type + "/" + scenario + '"');
    } else if (scenario === "null" && wireParameter) {
      console.log("in null test\n");
      utils.send400(res, next, 'Null scenario must have empty query parameter instead of "' + wireParameter + '"');
    } else if (scenario === "empty" && wireParameter !== "" && wireParameter !== null) {
      console.log("in empty test\n");
      utils.send400(res, next, 'Empty scenario must have empty parameter instead of "' + wireParameter + '"');
    } else if (type === "string" || type === "date" || type === "enum") {
      if (scenario === wireParameter || (scenario === "unicode" && wireParameter === "啊齄丂狛狜隣郎隣兀﨩")) {
        console.log("Success!\n");
        coverage["UrlQueries" + test]++;
        res.status(200).end();
      } else {
        utils.send400(
          res,
          next,
          "Failed " + type + ' scenario "' + scenario + '" does not match wire parameter "' + wireParameter + '"',
        );
      }
    } else if (type === "byte") {
      if (scenario === "multibyte" && wireParameter === bytes.toString("base64")) {
        console.log("Success!\n");
        coverage["UrlQueries" + test]++;
        res.status(200).end();
      } else {
        utils.send400(
          res,
          next,
          'Failed byte scenario "' +
            wireParameter +
            '" does not match expected encoded string "' +
            bytes.toString("base64") +
            '"',
        );
      }
    } else if (type === "datetime") {
      if (utils.coerceDate(wireParameter) === scenario) {
        console.log("Success!\n");
        coverage["UrlQueries" + test]++;
        res.status(200).end();
      } else {
        utils.send400(
          res,
          next,
          'Failed date-time scenario "' +
            utils.coerceDate(wireParameter) +
            '" does not match expected date string "' +
            scenario +
            '"',
        );
      }
    } else if (scenario === wireParameter) {
      console.log("Success!\n");
      coverage["UrlQueries" + test]++;
      res.status(200).end();
    } else {
      console.log("mismatched parameters\n");
      utils.send400(
        res,
        next,
        'Expected query parameter "' + scenario + '" does not match wire parameter "' + wireParameter + '"',
      );
    }
  });
};