diff --git a/package-lock.json b/package-lock.json index 78c90736..87c1d0b1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2391,7 +2391,7 @@ "tunnel": { "version": "0.0.5", "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.5.tgz", - "integrity": "sha512-gj5sdqherx4VZKMcBA4vewER7zdK25Td+z1npBqpbDys4eJrLx+SlYjJvq1bDXs2irkuJM5pf8ktaEQVipkrbA==" + "integrity": "sha1-0VMiVHSe02Yg/NEBCGVJWh+p0K4=" }, "tunnel-agent": { "version": "0.6.0", diff --git a/test/modelValidation/swaggers/specification/query/examples/array.json b/test/modelValidation/swaggers/specification/query/examples/array.json new file mode 100644 index 00000000..b689234f --- /dev/null +++ b/test/modelValidation/swaggers/specification/query/examples/array.json @@ -0,0 +1,11 @@ +{ + "parameters": { + "hello": [ + "Wake up at 3:14:16 AM", + "World" + ] + }, + "responses": { + "200": {} + } +} \ No newline at end of file diff --git a/test/modelValidation/swaggers/specification/query/examples/bool.json b/test/modelValidation/swaggers/specification/query/examples/bool.json new file mode 100644 index 00000000..71ae5ac9 --- /dev/null +++ b/test/modelValidation/swaggers/specification/query/examples/bool.json @@ -0,0 +1,8 @@ +{ + "parameters": { + "hello": true + }, + "responses": { + "200": {} + } +} \ No newline at end of file diff --git a/test/modelValidation/swaggers/specification/query/examples/integer.json b/test/modelValidation/swaggers/specification/query/examples/integer.json new file mode 100644 index 00000000..580ab85f --- /dev/null +++ b/test/modelValidation/swaggers/specification/query/examples/integer.json @@ -0,0 +1,8 @@ +{ + "parameters": { + "hello": 31416 + }, + "responses": { + "200": {} + } +} \ No newline at end of file diff --git a/test/modelValidation/swaggers/specification/query/examples/string.json b/test/modelValidation/swaggers/specification/query/examples/string.json new file mode 100644 index 00000000..5d2f26f8 --- /dev/null +++ b/test/modelValidation/swaggers/specification/query/examples/string.json @@ -0,0 +1,8 @@ +{ + "parameters": { + "hello": "Wake up at 3:14:16 AM" + }, + "responses": { + "200": {} + } +} \ No newline at end of file diff --git a/test/modelValidation/swaggers/specification/query/test.json b/test/modelValidation/swaggers/specification/query/test.json new file mode 100644 index 00000000..998414c5 --- /dev/null +++ b/test/modelValidation/swaggers/specification/query/test.json @@ -0,0 +1,275 @@ +{ + "swagger": "2.0", + "info": { + "title": "QueryTests", + "description": "Tests for query parameters" + }, + "host": "management.azure.com", + "schemes": [ + "https" + ], + "consumes": [], + "produces": [], + "paths": { + "/query/string/encoded": { + "post": { + "tags": [ + "Query" + ], + "operationId": "Query_StringEncoded", + "description": "The parameter is a query, an encoded string", + "x-ms-examples": { + "queryStringEncoded": { + "$ref": "./examples/string.json" + } + }, + "parameters": [ + { + "name": "hello", + "in": "query", + "required": false, + "type": "string", + "description": "Encoded query string", + "x-ms-skip-url-encoding": false + } + ], + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/query/string/notEncoded": { + "post": { + "tags": [ + "Query" + ], + "operationId": "Query_StringNotEncoded", + "description": "The parameter is a query, a not encoded string", + "x-ms-examples": { + "queryStringNotEncoded": { + "$ref": "./examples/string.json" + } + }, + "parameters": [ + { + "name": "hello", + "in": "query", + "required": false, + "type": "string", + "description": "Not encoded query string", + "x-ms-skip-url-encoding": true + } + ], + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/query/bool/encoded": { + "post": { + "tags": [ + "Query" + ], + "operationId": "Query_BoolEncoded", + "description": "The parameter is a query, an encoded bool", + "x-ms-examples": { + "queryBoolEncoded": { + "$ref": "./examples/bool.json" + } + }, + "parameters": [ + { + "name": "hello", + "in": "query", + "required": false, + "type": "boolean", + "description": "Encoded query bool", + "x-ms-skip-url-encoding": false + } + ], + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/query/bool/notEncoded": { + "post": { + "tags": [ + "Query" + ], + "operationId": "Query_BoolNotEncoded", + "description": "The parameter is a query, a not encoded bool", + "x-ms-examples": { + "queryBoolNotEncoded": { + "$ref": "./examples/bool.json" + } + }, + "parameters": [ + { + "name": "hello", + "in": "query", + "required": false, + "type": "boolean", + "description": "Not encoded query bool", + "x-ms-skip-url-encoding": true + } + ], + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/query/array/encoded": { + "post": { + "tags": [ + "Query" + ], + "operationId": "Query_ArrayEncoded", + "description": "The parameter is a query, an encoded array", + "x-ms-examples": { + "queryArrayEncoded": { + "$ref": "./examples/array.json" + } + }, + "parameters": [ + { + "name": "hello", + "in": "query", + "required": false, + "type": "array", + "description": "Encoded query array", + "x-ms-skip-url-encoding": false, + "collectionFormat": "csv", + "items": { + "type": "string", + "x-nullable": false, + "x-ms-enum": { + "name": "Hello", + "modelAsString": true + }, + "enum": [ + "Wake up at 3:14:16 AM", + "World" + ] + } + } + ], + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/query/array/notEncoded": { + "post": { + "tags": [ + "Query" + ], + "operationId": "Query_ArrayNotEncoded", + "description": "The parameter is a query, a not encoded array", + "x-ms-examples": { + "queryArrayNotEncoded": { + "$ref": "./examples/array.json" + } + }, + "parameters": [ + { + "name": "hello", + "in": "query", + "required": false, + "type": "array", + "description": "Encoded query array", + "x-ms-skip-url-encoding": true, + "collectionFormat": "csv", + "items": { + "type": "string", + "x-nullable": false, + "x-ms-enum": { + "name": "Hello", + "modelAsString": true + }, + "enum": [ + "Wake up at 3:14:16 AM", + "World" + ] + } + } + ], + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/query/integer/encoded": { + "post": { + "tags": [ + "Query" + ], + "operationId": "Query_IntegerEncoded", + "description": "The parameter is a query, an encoded integer", + "x-ms-examples": { + "queryIntegerEncoded": { + "$ref": "./examples/integer.json" + } + }, + "parameters": [ + { + "name": "hello", + "in": "query", + "required": false, + "type": "integer", + "description": "Encoded query integer", + "x-ms-skip-url-encoding": false + } + ], + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/query/integer/notEncoded": { + "post": { + "tags": [ + "Query" + ], + "operationId": "Query_IntegerNotEncoded", + "description": "The parameter is a query, a not encoded integer", + "x-ms-examples": { + "queryIntegerNotEncoded": { + "$ref": "./examples/integer.json" + } + }, + "parameters": [ + { + "name": "hello", + "in": "query", + "required": false, + "type": "integer", + "description": "Not encoded query integer", + "x-ms-skip-url-encoding": true + } + ], + "responses": { + "200": { + "description": "OK" + } + } + } + } + }, + "definitions": {}, + "parameters": {} +} \ No newline at end of file diff --git a/test/modelValidatorTests.js b/test/modelValidatorTests.js index 1f7e082c..e730f509 100644 --- a/test/modelValidatorTests.js +++ b/test/modelValidatorTests.js @@ -321,4 +321,18 @@ describe('Model Validation', function () { }); }); }); + + describe('Queries - ', function () { + it('should pass for various query parameters', function (done) { + let specPath = `${__dirname}/modelValidation/swaggers/specification/query/test.json`; + validate.validateExamples(specPath, undefined, { consoleLogLevel: 'off' }).then((result) => { + console.dir(result, { depth: null }); + assert(result.validityStatus === true, `swagger "${specPath}" contains model validation errors.`); + console.log(result); + done(); + }).catch((err) => { + done(err); + }); + }); + }); }); \ No newline at end of file