Skip to content

Commit

Permalink
adding tests for special paging scenarios
Browse files Browse the repository at this point in the history
  • Loading branch information
iscai-msft committed Nov 6, 2020
1 parent 09bd38d commit 0201487
Show file tree
Hide file tree
Showing 4 changed files with 167 additions and 1 deletion.
2 changes: 2 additions & 0 deletions legacy/app.js
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ var formData = require('./routes/formData');
var lros = require('./routes/lros');
var lroParameterizedEndpoints = require('./routes/lroParameterizedEndpoints.js');
var paging = require('./routes/paging');
var pagingSpecial = require('./routes/pagingSpecial');
var modelFlatten = require('./routes/model-flatten');
var azureUrl = require('./routes/azureUrl');
var azureSpecial = require('./routes/azureSpecials');
Expand Down Expand Up @@ -548,6 +549,7 @@ app.use('/model-flatten', new modelFlatten(coverage).router);
app.use('/lro', new lros(azurecoverage).router);
app.use('/lroParameterizedEndpoints', new lroParameterizedEndpoints(azurecoverage).router);
app.use('/paging', new paging(azurecoverage).router);
app.use('/pagingSpecial', new pagingSpecial(optionalCoverage).router)
app.use('/azurespecials', new azureSpecial(azurecoverage).router);
app.use('/report', new report(coverage, azurecoverage, optionalCoverage).router);
app.use('/subscriptions', new azureUrl(azurecoverage).router);
Expand Down
56 changes: 56 additions & 0 deletions legacy/routes/pagingSpecial.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
var express = require('express');
var router = express.Router();
var util = require('util');
var utils = require('../util/utils');

var pagingSpecial = function(optionalCoverage) {
optionalCoverage['PagingSpecialNextLinkInResponseHeaders'] = 0;
optionalCoverage["PagingSpecialContinuationTokenInResponseHeaders"] = 0;

router.get('/nextLinkInResponseHeaders', function(req, res, next) {
var headers = {
'x-ms-nextLink': '/pagingSpecial/nextLinkInResponseHeaders/page/2',
};
res.set(headers).status(200).json({ "value" : [ {"properties":{"id": 1, "name": "Product" }}] });
});


router.get('/nextLinkInResponseHeaders/page/:pagenumber', function(req, res, next) {
if (req.params.pagenumber < 10) {
var headers = {
'x-ms-nextLink': '/pagingSpecial/nextLinkInResponseHeaders/page/' + (++req.params.pagenumber),
};
res.set(headers).status(200).json({"value": [ {"properties":{"id" : parseInt(req.params.pagenumber), "name": "product"}} ]});
} else {
optionalCoverage['PagingSpecialNextLinkInResponseHeaders'] = 0;
res.status(200).json({"value": [ {"properties":{"id" : parseInt(req.params.pagenumber), "name": "product"}} ]});
}
});

router.get('/continuationTokenInResponseHeaders', function(req, res, next) {

if (req.headers['continuationtoken']) {
contToken = req.headers['continuationtoken']
if (contToken < 10) {
var headers = {
'continuationtoken': ++contToken,
};
res.set(headers).status(200).json({ "value" : [ {"properties":{"id": contToken, "name": "Product" }}] });
} else {
res.status(200).json({"value": [ {"properties":{"id" : contToken, "name": "product"}} ]});
}

} else {
console.log('first')
var headers = {
'continuationtoken': 2,
};
res.set(headers).status(200).json({ "value" : [ {"properties":{"id": 1, "name": "Product" }}] });
}

});
};

pagingSpecial.prototype.router = router;

module.exports = pagingSpecial;
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@microsoft.azure/autorest.testserver",
"version": "2.10.62",
"version": "2.10.63",
"main": "./legacy/startup/www.js",
"bin": {
"start-autorest-express": "./.scripts/start-autorest-express.js",
Expand Down
108 changes: 108 additions & 0 deletions swagger/paging-special.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
{
"swagger": "2.0",
"info": {
"title": "AutoRest Special Paging Test Service",
"description": "Long-running Operation for AutoRest",
"version": "1.0.0"
},
"host": "localhost:3000",
"schemes": [
"http"
],
"produces": [
"application/json"
],
"consumes": [
"application/json"
],
"paths": {
"/pagingSpecial/nextLinkInResponseHeaders": {
"get": {
"x-ms-pageable": { "nextLinkName": null},
"operationId": "nextLinkInResponseHeaders",
"description": "A paging operation where the next link is found in the response headers, not in the response body",
"responses": {
"200": {
"headers": {
"x-ms-nextLink": {
"description": "Next link for subsequent calls",
"type": "string"
}
},
"description": "Returns a list of products, where the next link for continued paging is located in response header x-ms-nextLink.",
"schema": {
"$ref": "#/definitions/ProductResultValue"
}
},
"default": {
"description": "Unexpected error"
}
}
}
},
"/pagingSpecial/continuationTokenInResponseHeaders": {
"get": {
"x-ms-pageable": { "nextLinkName": null},
"operationId": "continuationTokenInResponseHeaders",
"description": "A paging operation where the continuation is found in the response headers, and needs to be passed into subsequent calls.",
"parameters": [
{
"name": "continuationToken",
"in": "header",
"type": "string",
"description": "Continuation token for subsequent paging."
}
],
"responses": {
"200": {
"headers": {
"x-ms-continuationToken": {
"description": "Next link for subsequent calls",
"type": "string"
}
},
"description": "Returns a list of products, where the next link for continued paging is located in response header x-ms-nextLink.",
"schema": {
"$ref": "#/definitions/ProductResultValue"
}
},
"default": {
"description": "Unexpected error"
}
}
}
}
},
"definitions": {
"ProductResultValue": {
"type": "object",
"properties": {
"value": {
"type": "array",
"items": {
"$ref": "#/definitions/Product"
}
},
"nextLink": {
"type": "string"
}
}
},
"Product": {
"type": "object",
"properties": {
"properties": {
"type": "object",
"properties": {
"id": {
"type": "integer"
},
"name": {
"type": "string"
}
}
}
}
}
}
}

0 comments on commit 0201487

Please sign in to comment.