in legacy/routes/paging.js [33:347]
var paging = function (coverage) {
coverage["PagingNoItemName"] = 0;
coverage["PagingNextLinkNameNull"] = 0;
coverage["PagingSingle"] = 0;
coverage["PagingSingleWithBodyParams"] = 0;
coverage["PagingMultiple"] = 0;
coverage["PagingMultipleWithQueryParameters"] = 0;
coverage["PagingOdataMultiple"] = 0;
coverage["PagingMultiplePath"] = 0;
coverage["PagingMultipleRetryFirst"] = 0;
coverage["PagingMultipleRetrySecond"] = 0;
coverage["PagingSingleFailure"] = 0;
coverage["PagingMultipleFailure"] = 0;
coverage["PagingMultipleFailureUri"] = 0;
coverage["PagingFragment"] = 0;
coverage["PagingMultipleLRO"] = 0;
coverage["PagingCustomUrlPartialNextLink"] = 0;
coverage["PagingCustomUrlPartialOperationNextLink"] = 0;
coverage["PagingReturnModelWithXMSClientName"] = 0;
coverage["PagingFirstResponseEmpty"] = 0;
router.get("/noitemname", function (req, res, next) {
coverage["PagingNoItemName"]++;
res.status(200).json({ value: [{ properties: { id: 1, name: "Product" } }] });
});
router.get("/nullnextlink", function (req, res, next) {
coverage["PagingNextLinkNameNull"]++;
res.status(200).json({
values: [{ properties: { id: 1, name: "Product" } }],
nextLink: getRequestBaseUrl(req) + "/paging/idontexistraise404",
});
});
router.get("/single", function (req, res, next) {
coverage["PagingSingle"]++;
res.status(200).json({ values: [{ properties: { id: 1, name: "Product" } }] });
});
router.get("/single/getWithBodyParams", function (req, res, next) {
if (req.body["name"] === "body") {
coverage["PagingSingleWithBodyParams"]++;
res.status(200).json({ values: [{ properties: { id: 1, name: "Product" } }] });
} else {
utils.send400(res, next, "body can not be null");
}
});
router.get("/multiple", function (req, res, next) {
coverage["PagingMultiple"]++;
res.status(200).json({
values: [{ properties: { id: 1, name: "Product" } }],
nextLink: getRequestBaseUrl(req) + "/paging/multiple/page/2",
});
});
router.get("/multiple/getWithQueryParams", function (req, res, next) {
// No coverage added here, gets added in next operation nextOperationWithQueryParams
if (req.query["requiredQueryParameter"] == "100" && req.query["queryConstant"] == "true") {
res.status(200).json({
values: [{ properties: { id: 1, name: "Product" } }],
nextLink: getRequestBaseUrl(req) + "/paging/multiple/nextOperationWithQueryParams",
});
} else {
utils.send400(res, next, "The query parameters to getWithQueryParams were not passed correctly");
}
});
router.get("/multiple/nextOperationWithQueryParams", function (req, res, next) {
if (
((Object.keys(req.query).length <= 2 && req.query["api-version"] == "1.0.0") ||
Object.keys(req.query).length <= 1) &&
req.query["queryConstant"] === "true"
) {
coverage["PagingMultipleWithQueryParameters"]++;
res.status(200).json({ values: [{ properties: { id: 2, name: "Product" } }] });
} else {
utils.send400(res, next, "The query parameters to nextOperationWithQueryParams were not passed correctly");
}
});
router.get("/multiple/page/:pagenumber", function (req, res, next) {
if (req.params.pagenumber < 10) {
res.status(200).json({
values: [{ properties: { id: parseInt(req.params.pagenumber), name: "product" } }],
nextLink: getRequestBaseUrl(req) + "/paging/multiple/page/" + ++req.params.pagenumber,
});
} else {
res.status(200).json({ values: [{ properties: { id: parseInt(req.params.pagenumber), name: "product" } }] });
}
});
router.get("/multiple/odata", function (req, res, next) {
coverage["PagingOdataMultiple"]++;
res.status(200).json({
"values": [{ properties: { id: 1, name: "Product" } }],
"odata.nextLink": getRequestBaseUrl(req) + "/paging/multiple/odata/page/2",
});
});
router.get("/multiple/odata/page/:pagenumber", function (req, res, next) {
if (req.params.pagenumber < 10) {
res.status(200).json({
"values": [{ properties: { id: parseInt(req.params.pagenumber), name: "product" } }],
"odata.nextLink": getRequestBaseUrl(req) + "/paging/multiple/odata/page/" + ++req.params.pagenumber,
});
} else {
res.status(200).json({ values: [{ properties: { id: parseInt(req.params.pagenumber), name: "product" } }] });
}
});
router.get("/multiple/withpath/:offset", function (req, res, next) {
coverage["PagingMultiplePath"]++;
res.status(200).json({
values: [{ properties: { id: 1, name: "Product" } }],
nextLink: getRequestBaseUrl(req) + "/paging/multiple/withpath/page/" + req.params.offset + "/2",
});
});
router.get("/multiple/withpath/page/:offset/:pagenumber", function (req, res, next) {
if (req.params.pagenumber < 10) {
res.status(200).json({
values: [
{ properties: { id: parseInt(req.params.pagenumber) + parseInt(req.params.offset), name: "product" } },
],
nextLink:
getRequestBaseUrl(req) +
"/paging/multiple/withpath/page/" +
req.params.offset +
"/" +
++req.params.pagenumber,
});
} else {
res.status(200).json({
values: [
{ properties: { id: parseInt(req.params.pagenumber) + parseInt(req.params.offset), name: "product" } },
],
});
}
});
router.get("/multiple/retryfirst", function (req, res, next) {
var scenario = "PagingMultipleRetryFirst";
if (!hasScenarioCookie(req, scenario)) {
addScenarioCookie(res, scenario);
res.status(500).end();
} else {
coverage[scenario]++;
removeScenarioCookie(res);
res.status(200).json({
values: [{ properties: { id: 1, name: "Product" } }],
nextLink: getRequestBaseUrl(req) + "/paging/multiple/page/2",
});
}
});
router.get("/multiple/retrysecond", function (req, res, next) {
res.status(200).json({
values: [{ properties: { id: 1, name: "Product" } }],
nextLink: getRequestBaseUrl(req) + "/paging/multiple/retrysecond/page/2",
});
});
router.get("/multiple/retrysecond/page/:pagenumber", function (req, res, next) {
var scenario = "PagingMultipleRetrySecond";
if (req.params.pagenumber === "2") {
if (!hasScenarioCookie(req, scenario)) {
addScenarioCookie(res, scenario);
res.status(500).end();
} else {
coverage[scenario]++;
removeScenarioCookie(res);
res.status(200).json({
values: [{ properties: { id: 1, name: "Product" } }],
nextLink: getRequestBaseUrl(req) + "/paging/multiple/retrysecond/page/3",
});
}
} else if (req.params.pagenumber < 10) {
res.status(200).json({
values: [{ properties: { id: parseInt(req.params.pagenumber), name: "product" } }],
nextLink: getRequestBaseUrl(req) + "/paging/multiple/retrysecond/page/" + ++req.params.pagenumber,
});
} else {
res.status(200).json({ values: [{ properties: { id: parseInt(req.params.pagenumber), name: "product" } }] });
}
});
router.get("/multiple/fragment/:tenant", function (req, res, next) {
if (req.query.api_version != "1.6" || req.params.tenant != "test_user") {
res.status(400).end("Required path and query parameters are not present");
} else {
res.status(200).json({ "values": [{ properties: { id: 1, name: "product" } }], "odata.nextLink": "next?page=2" });
}
});
router.get("/multiple/fragment/:tenant/next", function (req, res, next) {
if (req.query.api_version != "1.6" || req.params.tenant != "test_user") {
res.status(400).end("Required path and query parameters are not present");
} else if (req.query.page < 10) {
res.status(200).json({
"values": [{ properties: { id: parseInt(req.query.page), name: "product" } }],
"odata.nextLink": "next?page=" + ++req.query.page,
});
} else {
coverage["PagingFragment"]++;
res.status(200).json({ values: [{ properties: { id: parseInt(req.query.page), name: "product" } }] });
}
});
router.get("/multiple/fragmentwithgrouping/:tenant", function (req, res, next) {
if (req.query.api_version != "1.6" || req.params.tenant != "test_user") {
res.status(400).end("Required path and query parameters are not present");
} else {
res.status(200).json({ "values": [{ properties: { id: 1, name: "product" } }], "odata.nextLink": "next?page=2" });
}
});
router.get("/multiple/fragmentwithgrouping/:tenant/next", function (req, res, next) {
if (req.query.api_version != "1.6" || req.params.tenant != "test_user") {
res.status(400).end("Required path and query parameters are not present");
} else if (req.query.page < 10) {
res.status(200).json({
"values": [{ properties: { id: parseInt(req.query.page), name: "product" } }],
"odata.nextLink": "next?page=" + ++req.query.page,
});
} else {
res.status(200).json({ values: [{ properties: { id: parseInt(req.query.page), name: "product" } }] });
}
});
router.get("/itemNameWithXMSClientName", function (req, res, next) {
coverage["PagingReturnModelWithXMSClientName"]++;
res.status(200).json({ values: [{ properties: { id: 1, name: "Product" } }] });
});
router.get("/firstResponseEmpty/:pagenumber", function (req, res, next) {
if (req.params.pagenumber == 1) {
res.status(200).json({ value: [], nextLink: "/paging/firstResponseEmpty/2" });
} else if (req.params.pagenumber == 2) {
coverage["PagingFirstResponseEmpty"]++;
res.status(200).json({ value: [{ properties: { id: 1, name: "Product" } }] });
} else {
res
.status(400)
.end(
"Incorrect page number " +
req.params.pagenumber +
". Needs to be either 1 for the initial call, or 2 for the final call",
);
}
});
/*** PAGEABLE LROs ***/
router.post("/multiple/lro", function (req, res, next) {
var pollingUri = getRequestBaseUrl(req) + "/paging/multiple/lro/200";
var headers = {
"Azure-AsyncOperation": pollingUri,
"Location": getRequestBaseUrl(req) + "/paging/multiple",
"Retry-After": 0,
};
res.set(headers).status(202).json({ status: "Accepted" });
});
router.get("/multiple/lro/200", function (req, res, next) {
coverage["PagingMultipleLRO"]++;
res.status(200).json({ status: "Succeeded" });
});
/*** NEGATIVE TESTS HERE ***/
router.get("/single/failure", function (req, res, next) {
coverage["PagingSingleFailure"]++;
res.status(400).json({ status: 400, message: "Expected single failure test." });
});
router.get("/multiple/failure", function (req, res, next) {
coverage["PagingMultipleFailure"]++;
res.status(200).json({
values: [{ properties: { id: 1, name: "Product" } }],
nextLink: getRequestBaseUrl(req) + "/paging/multiple/failure/page/2",
});
});
router.get("/multiple/failure/page/:pagenumber", function (req, res, next) {
res.status(400).json({ status: 400, message: "Expected single failure test." });
});
router.get("/multiple/failureuri", function (req, res, next) {
coverage["PagingMultipleFailureUri"]++;
res.status(200).json({ values: [{ properties: { id: 1, name: "Product" } }], nextLink: "*&*#&$" });
});
/** CUSTOM URL **/
router.get("/customurl/partialnextlink", function (req, res, next) {
res.status(200).json({
values: [{ properties: { id: 1, name: "Product" } }],
nextLink: "/paging/customurl/partialnextlink/page/2",
});
});
router.get("/customurl/partialnextlink/page/2", function (req, res, next) {
coverage["PagingCustomUrlPartialNextLink"]++;
res.status(200).json({ values: [{ properties: { id: 2, name: "Product" } }] });
});
router.get("/customurl/partialnextlinkop", function (req, res, next) {
res
.status(200)
.json({ values: [{ properties: { id: 1, name: "Product" } }], nextLink: "partialnextlinkop/page/2" });
});
router.get("/customurl/partialnextlinkop/page/2", function (req, res, next) {
coverage["PagingCustomUrlPartialOperationNextLink"]++;
res.status(200).json({ values: [{ properties: { id: 2, name: "Product" } }] });
});
};