From 36dc24da37a1f78d491de3049ab3814d45bacdeb Mon Sep 17 00:00:00 2001 From: Thomas Bombach Date: Tue, 12 Jul 2016 14:13:32 -0700 Subject: [PATCH] Adding a validation test that validates a clean spec - This verifies that rules are not unintentionally being returned for specs that don't have the issue. If a rule is added that causes this test to fail, this spec should be updated so that it passes those rules (and verify that the rule isn't being triggered inadvertently) --- .../Validation/clean-complex-spec.json | 206 ++++++++++++++++++ .../SwaggerModelerValidationTests.cs | 10 + 2 files changed, 216 insertions(+) create mode 100644 src/modeler/AutoRest.Swagger.Tests/Swagger/Validation/clean-complex-spec.json diff --git a/src/modeler/AutoRest.Swagger.Tests/Swagger/Validation/clean-complex-spec.json b/src/modeler/AutoRest.Swagger.Tests/Swagger/Validation/clean-complex-spec.json new file mode 100644 index 0000000000..612ddec72b --- /dev/null +++ b/src/modeler/AutoRest.Swagger.Tests/Swagger/Validation/clean-complex-spec.json @@ -0,0 +1,206 @@ +{ + "swagger": "2.0", + "info": { + "version": "1.0.0", + "title": "Swagger Petstore", + "license": { + "name": "MIT" + } + }, + "host": "petstore.swagger.io", + "basePath": "/v1", + "schemes": [ + "http" + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "paths": { + "/pets": { + "get": { + "summary": "List all pets", + "operationId": "listPets", + "tags": [ + "pets" + ], + "parameters": [ + { + "name": "limit", + "in": "query", + "description": "How many items to return at one time (max 100)", + "required": false, + "type": "integer", + "format": "int32" + } + ], + "responses": { + "200": { + "description": "An paged array of pets", + "headers": { + "x-next": { + "type": "string", + "description": "A link to the next page of responses" + } + }, + "schema": { + "$ref": "#/definitions/Pets" + } + }, + "default": { + "description": "unexpected error", + "schema": { + "$ref": "#/definitions/Error" + } + } + } + }, + "post": { + "summary": "Create a pet", + "operationId": "createPets", + "tags": [ + "pets" + ], + "responses": { + "201": { + "description": "Null response" + }, + "default": { + "description": "unexpected error", + "schema": { + "$ref": "#/definitions/Error" + } + } + } + } + }, + "/pets/{petId}": { + "get": { + "summary": "Info for a specific pet", + "operationId": "showPetById", + "tags": [ + "pets" + ], + "parameters": [ + { + "name": "petId", + "in": "path", + "required": true, + "description": "The id of the pet to retrieve", + "type": "string" + } + ], + "responses": { + "200": { + "description": "Expected response to a valid request", + "schema": { + "$ref": "#/definitions/Pets" + } + }, + "default": { + "description": "unexpected error", + "schema": { + "$ref": "#/definitions/Error" + } + } + } + } + }, + "/foo": { + "get": { + "operationId": "Foo_Get", + "responses": { + "default": { + "$ref": "#/responses/FooResponse" + } + } + }, + "post": { + "operationId": "Foo_Post", + "parameters": [ + { + "in": "body", + "name": "fooPost", + "schema": { + "type": "object", + "description": "A foo object" + }, + "description": "Foo body parameter" + }, + { + "$ref": "#/parameters/FooQueryParam" + } + ], + "responses": { + "default": { + "$ref": "#/responses/FooResponse" + } + } + } + } + }, + "parameters": { + "FooQueryParam": { + "in": "query", + "name": "FooQueryParam", + "description": "Query parameter for Foo operation", + "type": "string" + } + }, + "responses": { + "FooResponse": { + "description": "Response for Foo" + } + }, + "definitions": { + "Pet": { + "required": [ + "id", + "name" + ], + "properties": { + "id": { + "type": "integer", + "format": "int64", + "description": "The pet id" + }, + "name": { + "type": "string", + "description": "The pet name" + }, + "tag": { + "type": "string", + "description": "The pet tag" + } + }, + "description": "A pet" + }, + "Pets": { + "type": "array", + "items": { + "$ref": "#/definitions/Pet" + }, + "description": "A set of pets" + }, + "Error": { + "required": [ + "code", + "message" + ], + "properties": { + "code": { + "type": "integer", + "format": "int32", + "description": "The code of the error" + }, + "message": { + "type": "string", + "description": "The message of the error" + } + }, + "description": "An error result" + } + } +} \ No newline at end of file diff --git a/src/modeler/AutoRest.Swagger.Tests/SwaggerModelerValidationTests.cs b/src/modeler/AutoRest.Swagger.Tests/SwaggerModelerValidationTests.cs index a5a46fecdb..141a72fbf0 100644 --- a/src/modeler/AutoRest.Swagger.Tests/SwaggerModelerValidationTests.cs +++ b/src/modeler/AutoRest.Swagger.Tests/SwaggerModelerValidationTests.cs @@ -40,6 +40,16 @@ private IEnumerable ValidateSwagger(string input) return messages; } + /// + /// Verifies that a clean Swagger file does not result in any validation errors + /// + [Fact] + public void CleanFileValidation() + { + var messages = ValidateSwagger(Path.Combine("Swagger", "Validation", "clean-complex-spec.json")); + Assert.Empty(messages.Where(m => m.Severity >= LogEntrySeverity.Warning)); + } + [Fact] public void MissingDescriptionValidation() {