You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicecomb.apache.org by ni...@apache.org on 2019/06/21 07:09:20 UTC
[servicecomb-toolkit] 04/49: Add unit test
This is an automated email from the ASF dual-hosted git repository.
ningjiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/servicecomb-toolkit.git
commit 5aad421e81e047e078d7c7f6bebfde63b4f2c881
Author: MabinGo <bi...@huawei.com>
AuthorDate: Fri May 17 18:07:01 2019 +0800
Add unit test
Signed-off-by: MabinGo <bi...@huawei.com>
---
code-generator/pom.xml | 6 +
.../servicecomb/toolkit/codegen/GeneratorTest.java | 60 ++
.../servicecomb/toolkit/codegen/ReflectUtils.java | 38 ++
.../codegen/ServiceCombProviderCodegenTest.java | 33 +
code-generator/src/test/resources/swagger.yaml | 707 +++++++++++++++++++++
toolkit-cli/pom.xml | 7 +
.../apache/servicecomb/toolkit/cli/CliTest.java | 118 ++++
.../contracts/CalculatorRestEndpoint.yaml | 43 ++
.../test/resources/contracts/HelloEndPoint.yaml | 74 +++
.../contracts/pojo/CodeFirstComputeImpl.yaml | 113 ++++
toolkit-cli/src/test/resources/swagger.yaml | 707 +++++++++++++++++++++
11 files changed, 1906 insertions(+)
diff --git a/code-generator/pom.xml b/code-generator/pom.xml
index 9866719..692f757 100755
--- a/code-generator/pom.xml
+++ b/code-generator/pom.xml
@@ -42,6 +42,12 @@
<artifactId>swagger-codegen</artifactId>
<version>${swagger-codegen-version}</version>
</dependency>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>4.12</version>
+ <scope>test</scope>
+ </dependency>
</dependencies>
<build>
diff --git a/code-generator/src/test/java/org/apache/servicecomb/toolkit/codegen/GeneratorTest.java b/code-generator/src/test/java/org/apache/servicecomb/toolkit/codegen/GeneratorTest.java
new file mode 100755
index 0000000..638dd96
--- /dev/null
+++ b/code-generator/src/test/java/org/apache/servicecomb/toolkit/codegen/GeneratorTest.java
@@ -0,0 +1,60 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.servicecomb.toolkit.codegen;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.URISyntaxException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.List;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+import io.swagger.codegen.CodegenType;
+import io.swagger.codegen.DefaultGenerator;
+import io.swagger.codegen.config.CodegenConfigurator;
+
+public class GeneratorTest {
+
+ @Test
+ public void generateCode() throws IOException, URISyntaxException {
+
+ Path tempDir = Files.createTempDirectory(null);
+ Path specFilePath = Paths.get(GeneratorTest.class.getClassLoader().getResource("swagger.yaml").toURI());
+ CodegenConfigurator configurator = new CodegenConfigurator();
+
+ configurator.setLang("ServiceCombProvider");
+ configurator.setOutputDir(tempDir.toFile().getCanonicalPath() + "/ServiceCombProvider");
+ configurator.setInputSpec(specFilePath.toFile().getCanonicalPath());
+ DefaultCodeGenerator codeGenerator = new DefaultCodeGenerator();
+ List<File> generatedFiles = codeGenerator.opts(configurator).generate();
+
+ Object internalGenerator = ReflectUtils.getProperty(codeGenerator, "generator");
+ Assert.assertEquals(DefaultGenerator.class, internalGenerator.getClass());
+ Object swaggerCodegenConfig = ReflectUtils.getProperty(internalGenerator, "config");
+ Assert.assertEquals(ServiceCombProviderCodegen.class, swaggerCodegenConfig.getClass());
+ Assert.assertEquals("ServiceCombProvider", ((ServiceCombProviderCodegen) swaggerCodegenConfig).getName());
+ Assert.assertEquals(CodegenType.SERVER, ((ServiceCombProviderCodegen) swaggerCodegenConfig).getTag());
+
+ Assert.assertEquals(16, generatedFiles.size());
+ tempDir.toFile().deleteOnExit();
+ }
+}
diff --git a/code-generator/src/test/java/org/apache/servicecomb/toolkit/codegen/ReflectUtils.java b/code-generator/src/test/java/org/apache/servicecomb/toolkit/codegen/ReflectUtils.java
new file mode 100755
index 0000000..b5892a3
--- /dev/null
+++ b/code-generator/src/test/java/org/apache/servicecomb/toolkit/codegen/ReflectUtils.java
@@ -0,0 +1,38 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.servicecomb.toolkit.codegen;
+
+import java.lang.reflect.Field;
+
+class ReflectUtils {
+
+ static Object getProperty(Object obj, String propName) {
+
+ try {
+ Field propFiled = obj.getClass().getDeclaredField(propName);
+ propFiled.setAccessible(true);
+ return propFiled.get(obj);
+ } catch (NoSuchFieldException e) {
+ e.printStackTrace();
+ } catch (IllegalAccessException e) {
+ e.printStackTrace();
+ }
+
+ return null;
+ }
+}
diff --git a/code-generator/src/test/java/org/apache/servicecomb/toolkit/codegen/ServiceCombProviderCodegenTest.java b/code-generator/src/test/java/org/apache/servicecomb/toolkit/codegen/ServiceCombProviderCodegenTest.java
new file mode 100755
index 0000000..72cd210
--- /dev/null
+++ b/code-generator/src/test/java/org/apache/servicecomb/toolkit/codegen/ServiceCombProviderCodegenTest.java
@@ -0,0 +1,33 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.servicecomb.toolkit.codegen;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+import io.swagger.codegen.CodegenConfig;
+import io.swagger.codegen.CodegenConfigLoader;
+
+public class ServiceCombProviderCodegenTest {
+
+ @Test
+ public void loadImpl() {
+ CodegenConfig codegenConfig = CodegenConfigLoader.forName("ServiceCombProvider");
+ Assert.assertEquals(ServiceCombProviderCodegen.class, codegenConfig.getClass());
+ }
+}
diff --git a/code-generator/src/test/resources/swagger.yaml b/code-generator/src/test/resources/swagger.yaml
new file mode 100755
index 0000000..b97799c
--- /dev/null
+++ b/code-generator/src/test/resources/swagger.yaml
@@ -0,0 +1,707 @@
+---
+swagger: "2.0"
+info:
+ description: "This is a sample server Petstore server. You can find out more about\
+ \ Swagger at [http://swagger.io](http://swagger.io) or on [irc.freenode.net, #swagger](http://swagger.io/irc/).\
+ \ For this sample, you can use the api key `special-key` to test the authorization\
+ \ filters."
+ version: "1.0.0"
+ title: "Swagger Petstore"
+ termsOfService: "http://swagger.io/terms/"
+ contact:
+ email: "apiteam@swagger.io"
+ license:
+ name: "Apache 2.0"
+ url: "http://www.apache.org/licenses/LICENSE-2.0.html"
+host: "petstore.swagger.io"
+basePath: "/v2"
+tags:
+- name: "pet"
+ description: "Everything about your Pets"
+ externalDocs:
+ description: "Find out more"
+ url: "http://swagger.io"
+- name: "store"
+ description: "Access to Petstore orders"
+- name: "user"
+ description: "Operations about user"
+ externalDocs:
+ description: "Find out more about our store"
+ url: "http://swagger.io"
+schemes:
+- "https"
+- "http"
+paths:
+ /pet:
+ post:
+ tags:
+ - "pet"
+ summary: "Add a new pet to the store"
+ description: ""
+ operationId: "addPet"
+ consumes:
+ - "application/json"
+ - "application/xml"
+ produces:
+ - "application/xml"
+ - "application/json"
+ parameters:
+ - in: "body"
+ name: "body"
+ description: "Pet object that needs to be added to the store"
+ required: true
+ schema:
+ $ref: "#/definitions/Pet"
+ responses:
+ 405:
+ description: "Invalid input"
+ security:
+ - petstore_auth:
+ - "write:pets"
+ - "read:pets"
+ put:
+ tags:
+ - "pet"
+ summary: "Update an existing pet"
+ description: ""
+ operationId: "updatePet"
+ consumes:
+ - "application/json"
+ - "application/xml"
+ produces:
+ - "application/xml"
+ - "application/json"
+ parameters:
+ - in: "body"
+ name: "body"
+ description: "Pet object that needs to be added to the store"
+ required: true
+ schema:
+ $ref: "#/definitions/Pet"
+ responses:
+ 400:
+ description: "Invalid ID supplied"
+ 404:
+ description: "Pet not found"
+ 405:
+ description: "Validation exception"
+ security:
+ - petstore_auth:
+ - "write:pets"
+ - "read:pets"
+ /pet/findByStatus:
+ get:
+ tags:
+ - "pet"
+ summary: "Finds Pets by status"
+ description: "Multiple status values can be provided with comma separated strings"
+ operationId: "findPetsByStatus"
+ produces:
+ - "application/xml"
+ - "application/json"
+ parameters:
+ - name: "status"
+ in: "query"
+ description: "Status values that need to be considered for filter"
+ required: true
+ type: "array"
+ items:
+ type: "string"
+ enum:
+ - "available"
+ - "pending"
+ - "sold"
+ default: "available"
+ collectionFormat: "multi"
+ responses:
+ 200:
+ description: "successful operation"
+ schema:
+ type: "array"
+ items:
+ $ref: "#/definitions/Pet"
+ 400:
+ description: "Invalid status value"
+ security:
+ - petstore_auth:
+ - "write:pets"
+ - "read:pets"
+ /pet/findByTags:
+ get:
+ tags:
+ - "pet"
+ summary: "Finds Pets by tags"
+ description: "Multiple tags can be provided with comma separated strings. Use\
+ \ tag1, tag2, tag3 for testing."
+ operationId: "findPetsByTags"
+ produces:
+ - "application/xml"
+ - "application/json"
+ parameters:
+ - name: "tags"
+ in: "query"
+ description: "Tags to filter by"
+ required: true
+ type: "array"
+ items:
+ type: "string"
+ collectionFormat: "multi"
+ responses:
+ 200:
+ description: "successful operation"
+ schema:
+ type: "array"
+ items:
+ $ref: "#/definitions/Pet"
+ 400:
+ description: "Invalid tag value"
+ security:
+ - petstore_auth:
+ - "write:pets"
+ - "read:pets"
+ deprecated: true
+ /pet/{petId}:
+ get:
+ tags:
+ - "pet"
+ summary: "Find pet by ID"
+ description: "Returns a single pet"
+ operationId: "getPetById"
+ produces:
+ - "application/xml"
+ - "application/json"
+ parameters:
+ - name: "petId"
+ in: "path"
+ description: "ID of pet to return"
+ required: true
+ type: "integer"
+ format: "int64"
+ responses:
+ 200:
+ description: "successful operation"
+ schema:
+ $ref: "#/definitions/Pet"
+ 400:
+ description: "Invalid ID supplied"
+ 404:
+ description: "Pet not found"
+ security:
+ - api_key: []
+ post:
+ tags:
+ - "pet"
+ summary: "Updates a pet in the store with form data"
+ description: ""
+ operationId: "updatePetWithForm"
+ consumes:
+ - "application/x-www-form-urlencoded"
+ produces:
+ - "application/xml"
+ - "application/json"
+ parameters:
+ - name: "petId"
+ in: "path"
+ description: "ID of pet that needs to be updated"
+ required: true
+ type: "integer"
+ format: "int64"
+ - name: "name"
+ in: "formData"
+ description: "Updated name of the pet"
+ required: false
+ type: "string"
+ - name: "status"
+ in: "formData"
+ description: "Updated status of the pet"
+ required: false
+ type: "string"
+ responses:
+ 405:
+ description: "Invalid input"
+ security:
+ - petstore_auth:
+ - "write:pets"
+ - "read:pets"
+ delete:
+ tags:
+ - "pet"
+ summary: "Deletes a pet"
+ description: ""
+ operationId: "deletePet"
+ produces:
+ - "application/xml"
+ - "application/json"
+ parameters:
+ - name: "api_key"
+ in: "header"
+ required: false
+ type: "string"
+ - name: "petId"
+ in: "path"
+ description: "Pet id to delete"
+ required: true
+ type: "integer"
+ format: "int64"
+ responses:
+ 400:
+ description: "Invalid ID supplied"
+ 404:
+ description: "Pet not found"
+ security:
+ - petstore_auth:
+ - "write:pets"
+ - "read:pets"
+ /pet/{petId}/uploadImage:
+ post:
+ tags:
+ - "pet"
+ summary: "uploads an image"
+ description: ""
+ operationId: "uploadFile"
+ consumes:
+ - "multipart/form-data"
+ produces:
+ - "application/json"
+ parameters:
+ - name: "petId"
+ in: "path"
+ description: "ID of pet to update"
+ required: true
+ type: "integer"
+ format: "int64"
+ - name: "additionalMetadata"
+ in: "formData"
+ description: "Additional data to pass to server"
+ required: false
+ type: "string"
+ - name: "file"
+ in: "formData"
+ description: "file to upload"
+ required: false
+ type: "file"
+ responses:
+ 200:
+ description: "successful operation"
+ schema:
+ $ref: "#/definitions/ApiResponse"
+ security:
+ - petstore_auth:
+ - "write:pets"
+ - "read:pets"
+ /store/inventory:
+ get:
+ tags:
+ - "store"
+ summary: "Returns pet inventories by status"
+ description: "Returns a map of status codes to quantities"
+ operationId: "getInventory"
+ produces:
+ - "application/json"
+ parameters: []
+ responses:
+ 200:
+ description: "successful operation"
+ schema:
+ type: "object"
+ additionalProperties:
+ type: "integer"
+ format: "int32"
+ security:
+ - api_key: []
+ /store/order:
+ post:
+ tags:
+ - "store"
+ summary: "Place an order for a pet"
+ description: ""
+ operationId: "placeOrder"
+ produces:
+ - "application/xml"
+ - "application/json"
+ parameters:
+ - in: "body"
+ name: "body"
+ description: "order placed for purchasing the pet"
+ required: true
+ schema:
+ $ref: "#/definitions/Order"
+ responses:
+ 200:
+ description: "successful operation"
+ schema:
+ $ref: "#/definitions/Order"
+ 400:
+ description: "Invalid Order"
+ /store/order/{orderId}:
+ get:
+ tags:
+ - "store"
+ summary: "Find purchase order by ID"
+ description: "For valid response try integer IDs with value >= 1 and <= 10.\
+ \ Other values will generated exceptions"
+ operationId: "getOrderById"
+ produces:
+ - "application/xml"
+ - "application/json"
+ parameters:
+ - name: "orderId"
+ in: "path"
+ description: "ID of pet that needs to be fetched"
+ required: true
+ type: "integer"
+ maximum: 10.0
+ minimum: 1.0
+ format: "int64"
+ responses:
+ 200:
+ description: "successful operation"
+ schema:
+ $ref: "#/definitions/Order"
+ 400:
+ description: "Invalid ID supplied"
+ 404:
+ description: "Order not found"
+ delete:
+ tags:
+ - "store"
+ summary: "Delete purchase order by ID"
+ description: "For valid response try integer IDs with positive integer value.\
+ \ Negative or non-integer values will generate API errors"
+ operationId: "deleteOrder"
+ produces:
+ - "application/xml"
+ - "application/json"
+ parameters:
+ - name: "orderId"
+ in: "path"
+ description: "ID of the order that needs to be deleted"
+ required: true
+ type: "integer"
+ minimum: 1.0
+ format: "int64"
+ responses:
+ 400:
+ description: "Invalid ID supplied"
+ 404:
+ description: "Order not found"
+ /user:
+ post:
+ tags:
+ - "user"
+ summary: "Create user"
+ description: "This can only be done by the logged in user."
+ operationId: "createUser"
+ produces:
+ - "application/xml"
+ - "application/json"
+ parameters:
+ - in: "body"
+ name: "body"
+ description: "Created user object"
+ required: true
+ schema:
+ $ref: "#/definitions/User"
+ responses:
+ default:
+ description: "successful operation"
+ /user/createWithArray:
+ post:
+ tags:
+ - "user"
+ summary: "Creates list of users with given input array"
+ description: ""
+ operationId: "createUsersWithArrayInput"
+ produces:
+ - "application/xml"
+ - "application/json"
+ parameters:
+ - in: "body"
+ name: "body"
+ description: "List of user object"
+ required: true
+ schema:
+ type: "array"
+ items:
+ $ref: "#/definitions/User"
+ responses:
+ default:
+ description: "successful operation"
+ /user/createWithList:
+ post:
+ tags:
+ - "user"
+ summary: "Creates list of users with given input array"
+ description: ""
+ operationId: "createUsersWithListInput"
+ produces:
+ - "application/xml"
+ - "application/json"
+ parameters:
+ - in: "body"
+ name: "body"
+ description: "List of user object"
+ required: true
+ schema:
+ type: "array"
+ items:
+ $ref: "#/definitions/User"
+ responses:
+ default:
+ description: "successful operation"
+ /user/login:
+ get:
+ tags:
+ - "user"
+ summary: "Logs user into the system"
+ description: ""
+ operationId: "loginUser"
+ produces:
+ - "application/xml"
+ - "application/json"
+ parameters:
+ - name: "username"
+ in: "query"
+ description: "The user name for login"
+ required: true
+ type: "string"
+ - name: "password"
+ in: "query"
+ description: "The password for login in clear text"
+ required: true
+ type: "string"
+ responses:
+ 200:
+ description: "successful operation"
+ schema:
+ type: "string"
+ headers:
+ X-Rate-Limit:
+ type: "integer"
+ format: "int32"
+ description: "calls per hour allowed by the user"
+ X-Expires-After:
+ type: "string"
+ format: "date-time"
+ description: "date in UTC when token expires"
+ 400:
+ description: "Invalid username/password supplied"
+ /user/logout:
+ get:
+ tags:
+ - "user"
+ summary: "Logs out current logged in user session"
+ description: ""
+ operationId: "logoutUser"
+ produces:
+ - "application/xml"
+ - "application/json"
+ parameters: []
+ responses:
+ default:
+ description: "successful operation"
+ /user/{username}:
+ get:
+ tags:
+ - "user"
+ summary: "Get user by user name"
+ description: ""
+ operationId: "getUserByName"
+ produces:
+ - "application/xml"
+ - "application/json"
+ parameters:
+ - name: "username"
+ in: "path"
+ description: "The name that needs to be fetched. Use user1 for testing. "
+ required: true
+ type: "string"
+ responses:
+ 200:
+ description: "successful operation"
+ schema:
+ $ref: "#/definitions/User"
+ 400:
+ description: "Invalid username supplied"
+ 404:
+ description: "User not found"
+ put:
+ tags:
+ - "user"
+ summary: "Updated user"
+ description: "This can only be done by the logged in user."
+ operationId: "updateUser"
+ produces:
+ - "application/xml"
+ - "application/json"
+ parameters:
+ - name: "username"
+ in: "path"
+ description: "name that need to be updated"
+ required: true
+ type: "string"
+ - in: "body"
+ name: "body"
+ description: "Updated user object"
+ required: true
+ schema:
+ $ref: "#/definitions/User"
+ responses:
+ 400:
+ description: "Invalid user supplied"
+ 404:
+ description: "User not found"
+ delete:
+ tags:
+ - "user"
+ summary: "Delete user"
+ description: "This can only be done by the logged in user."
+ operationId: "deleteUser"
+ produces:
+ - "application/xml"
+ - "application/json"
+ parameters:
+ - name: "username"
+ in: "path"
+ description: "The name that needs to be deleted"
+ required: true
+ type: "string"
+ responses:
+ 400:
+ description: "Invalid username supplied"
+ 404:
+ description: "User not found"
+securityDefinitions:
+ petstore_auth:
+ type: "oauth2"
+ authorizationUrl: "https://petstore.swagger.io/oauth/authorize"
+ flow: "implicit"
+ scopes:
+ write:pets: "modify pets in your account"
+ read:pets: "read your pets"
+ api_key:
+ type: "apiKey"
+ name: "api_key"
+ in: "header"
+definitions:
+ Order:
+ type: "object"
+ properties:
+ id:
+ type: "integer"
+ format: "int64"
+ petId:
+ type: "integer"
+ format: "int64"
+ quantity:
+ type: "integer"
+ format: "int32"
+ shipDate:
+ type: "string"
+ format: "date-time"
+ status:
+ type: "string"
+ description: "Order Status"
+ enum:
+ - "placed"
+ - "approved"
+ - "delivered"
+ complete:
+ type: "boolean"
+ default: false
+ xml:
+ name: "Order"
+ User:
+ type: "object"
+ properties:
+ id:
+ type: "integer"
+ format: "int64"
+ username:
+ type: "string"
+ firstName:
+ type: "string"
+ lastName:
+ type: "string"
+ email:
+ type: "string"
+ password:
+ type: "string"
+ phone:
+ type: "string"
+ userStatus:
+ type: "integer"
+ format: "int32"
+ description: "User Status"
+ xml:
+ name: "User"
+ Category:
+ type: "object"
+ properties:
+ id:
+ type: "integer"
+ format: "int64"
+ name:
+ type: "string"
+ xml:
+ name: "Category"
+ Tag:
+ type: "object"
+ properties:
+ id:
+ type: "integer"
+ format: "int64"
+ name:
+ type: "string"
+ xml:
+ name: "Tag"
+ Pet:
+ type: "object"
+ required:
+ - "name"
+ - "photoUrls"
+ properties:
+ id:
+ type: "integer"
+ format: "int64"
+ category:
+ $ref: "#/definitions/Category"
+ name:
+ type: "string"
+ example: "doggie"
+ photoUrls:
+ type: "array"
+ xml:
+ name: "photoUrl"
+ wrapped: true
+ items:
+ type: "string"
+ tags:
+ type: "array"
+ xml:
+ name: "tag"
+ wrapped: true
+ items:
+ $ref: "#/definitions/Tag"
+ status:
+ type: "string"
+ description: "pet status in the store"
+ enum:
+ - "available"
+ - "pending"
+ - "sold"
+ xml:
+ name: "Pet"
+ ApiResponse:
+ type: "object"
+ properties:
+ code:
+ type: "integer"
+ format: "int32"
+ type:
+ type: "string"
+ message:
+ type: "string"
+externalDocs:
+ description: "Find out more about Swagger"
+ url: "http://swagger.io"
diff --git a/toolkit-cli/pom.xml b/toolkit-cli/pom.xml
index 1151674..23107f6 100755
--- a/toolkit-cli/pom.xml
+++ b/toolkit-cli/pom.xml
@@ -40,6 +40,13 @@
<artifactId>code-generator</artifactId>
<version>${project.version}</version>
</dependency>
+
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>4.12</version>
+ <scope>test</scope>
+ </dependency>
</dependencies>
<build>
diff --git a/toolkit-cli/src/test/java/org/apache/servicecomb/toolkit/cli/CliTest.java b/toolkit-cli/src/test/java/org/apache/servicecomb/toolkit/cli/CliTest.java
new file mode 100755
index 0000000..9c50338
--- /dev/null
+++ b/toolkit-cli/src/test/java/org/apache/servicecomb/toolkit/cli/CliTest.java
@@ -0,0 +1,118 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.servicecomb.toolkit.cli;
+
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.Arrays;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+public class CliTest {
+
+ @Test
+ public void generateServiceCombCodeFromSingleContract() throws IOException {
+
+ String[] programModels = new String[] {"SpringMvc"};
+ Path tempDir = Files.createTempDirectory(null);
+ Arrays.stream(programModels).forEach(model -> {
+ try {
+ Path tempFile = Paths.get(tempDir.toFile().getCanonicalPath() + "/" + model + "Server");
+ CliTest.class.getClassLoader().getResource("swagger.yaml");
+ String[] args = new String[] {
+ "generate",
+ "-l",
+ "ServiceCombProvider",
+ "-i",
+ Paths.get("./src/test/resources/swagger.yaml").toFile().getCanonicalPath(),
+ "-o",
+ tempFile.toFile().getCanonicalPath(),
+ "--library",
+ model
+ };
+ Assert.assertTrue(!Files.exists(tempFile));
+ ToolkitMain.main(args);
+ Assert.assertTrue(Files.exists(tempFile));
+ Assert.assertTrue(Files.size(tempFile) > 0);
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ });
+
+ tempDir.toFile().deleteOnExit();
+ }
+
+ @Test
+ public void generateSpringCloudCodeFromSingleContract() throws IOException {
+
+ Path tempDir = Files.createTempDirectory(null);
+ Path tempFile = Paths.get(tempDir.toFile().getCanonicalPath() + "/SpringCloudServer");
+ String[] args = new String[] {
+ "generate",
+ "-l",
+ "spring",
+ "-i",
+ Paths.get("./src/test/resources/swagger.yaml").toFile().getCanonicalPath(),
+ "-o",
+ tempFile.toFile().getCanonicalPath(),
+ "--library",
+ "spring-cloud"
+ };
+ Assert.assertTrue(!Files.exists(tempFile));
+
+ ToolkitMain.main(args);
+ Assert.assertTrue(Files.exists(tempFile));
+ Assert.assertTrue(Files.size(tempFile) > 0);
+
+ tempDir.toFile().deleteOnExit();
+ }
+
+ @Test
+ public void generateCodeFromMultiContract() throws IOException {
+
+ Path tempDir = Files.createTempDirectory(null);
+ Path tempFile = Paths.get(tempDir.toFile().getCanonicalPath() + "/ServiceCombProvider");
+ String[] args = new String[] {
+ "generate",
+ "-i",
+ Paths.get("./src/test/resources/contracts").toFile().getCanonicalPath(),
+ "--artifact-id",
+ "ServiceCombProvider",
+ "--group-id",
+ "org.apache.servicecomb.demo",
+ "--artifact-version",
+ "0.0.1",
+ "--programming-model",
+ "SpringMvc",
+ "-o",
+ tempFile.toFile().getCanonicalPath()
+ };
+
+ Assert.assertTrue(!Files.exists(tempFile));
+
+ ToolkitMain.main(args);
+
+ Assert.assertTrue(Files.exists(tempFile));
+ Assert.assertTrue(Files.size(tempFile) > 0);
+
+ tempDir.toFile().deleteOnExit();
+ }
+}
diff --git a/toolkit-cli/src/test/resources/contracts/CalculatorRestEndpoint.yaml b/toolkit-cli/src/test/resources/contracts/CalculatorRestEndpoint.yaml
new file mode 100755
index 0000000..a7540d4
--- /dev/null
+++ b/toolkit-cli/src/test/resources/contracts/CalculatorRestEndpoint.yaml
@@ -0,0 +1,43 @@
+---
+swagger: "2.0"
+info:
+ version: "1.0.0"
+ title: "swagger definition for org.apache.servicecomb.samples.bmi.CalculatorRestEndpoint"
+ x-java-interface: "gen.swagger.CalculatorRestEndpointIntf"
+basePath: "/"
+consumes:
+- "application/json"
+produces:
+- "application/json"
+paths:
+ /bmi:
+ get:
+ operationId: "calculate"
+ parameters:
+ - name: "height"
+ in: "query"
+ required: false
+ type: "number"
+ format: "double"
+ - name: "weight"
+ in: "query"
+ required: false
+ type: "number"
+ format: "double"
+ responses:
+ 200:
+ description: "response of 200"
+ schema:
+ $ref: "#/definitions/BMIViewObject"
+definitions:
+ BMIViewObject:
+ type: "object"
+ properties:
+ result:
+ type: "number"
+ format: "double"
+ instanceId:
+ type: "string"
+ callTime:
+ type: "string"
+ x-java-class: "org.apache.servicecomb.samples.bmi.BMIViewObject"
diff --git a/toolkit-cli/src/test/resources/contracts/HelloEndPoint.yaml b/toolkit-cli/src/test/resources/contracts/HelloEndPoint.yaml
new file mode 100755
index 0000000..14cd7a1
--- /dev/null
+++ b/toolkit-cli/src/test/resources/contracts/HelloEndPoint.yaml
@@ -0,0 +1,74 @@
+---
+swagger: "2.0"
+info:
+ version: "1.0.0"
+ title: "swagger definition for org.apache.servicecomb.samples.bmi.HelloEndPoint"
+ x-java-interface: "gen.swagger.HelloEndPointIntf"
+basePath: "/hello"
+consumes:
+- "application/json"
+produces:
+- "application/json"
+paths:
+ /sayHello:
+ get:
+ operationId: "sayHello"
+ parameters:
+ - name: "name"
+ in: "query"
+ required: false
+ type: "string"
+ - name: "result"
+ in: "query"
+ required: false
+ type: "number"
+ format: "double"
+ - name: "instanceId"
+ in: "query"
+ required: false
+ type: "string"
+ - name: "callTime"
+ in: "query"
+ required: false
+ type: "string"
+ responses:
+ 200:
+ description: "response of 200"
+ schema:
+ type: "string"
+ /sayHi:
+ get:
+ operationId: "sayHi"
+ parameters:
+ - name: "name"
+ in: "query"
+ required: false
+ type: "string"
+ - name: "Authorization"
+ in: "header"
+ description: "aa"
+ required: true
+ type: "string"
+ responses:
+ 200:
+ description: "response of 200"
+ schema:
+ type: "string"
+ /sayNo:
+ get:
+ operationId: "sayNo"
+ parameters:
+ - name: "name"
+ in: "query"
+ required: false
+ type: "string"
+ - name: "Authorization"
+ in: "header"
+ description: "aa"
+ required: true
+ type: "string"
+ responses:
+ 200:
+ description: "response of 200"
+ schema:
+ type: "string"
\ No newline at end of file
diff --git a/toolkit-cli/src/test/resources/contracts/pojo/CodeFirstComputeImpl.yaml b/toolkit-cli/src/test/resources/contracts/pojo/CodeFirstComputeImpl.yaml
new file mode 100755
index 0000000..190f579
--- /dev/null
+++ b/toolkit-cli/src/test/resources/contracts/pojo/CodeFirstComputeImpl.yaml
@@ -0,0 +1,113 @@
+---
+swagger: "2.0"
+info:
+ version: "1.0.0"
+ title: "swagger definition for org.apache.servicecomb.samples.pojo.provider.CodeFirstComputeImpl"
+ x-java-interface: "gen.swagger.CodeFirstComputeImplIntf"
+basePath: "/CodeFirstComputeImpl"
+consumes:
+- "application/json"
+produces:
+- "application/json"
+paths:
+ /add:
+ post:
+ operationId: "add"
+ parameters:
+ - in: "body"
+ name: "addBody"
+ required: false
+ schema:
+ $ref: "#/definitions/addBody"
+ responses:
+ 200:
+ description: "response of 200"
+ schema:
+ type: "integer"
+ format: "int32"
+ /divide:
+ post:
+ operationId: "divide"
+ parameters:
+ - in: "body"
+ name: "divideBody"
+ required: false
+ schema:
+ $ref: "#/definitions/divideBody"
+ responses:
+ 200:
+ description: "response of 200"
+ schema:
+ type: "integer"
+ format: "int32"
+ /multi:
+ post:
+ operationId: "multi"
+ parameters:
+ - in: "body"
+ name: "multiBody"
+ required: false
+ schema:
+ $ref: "#/definitions/multiBody"
+ responses:
+ 200:
+ description: "response of 200"
+ schema:
+ type: "integer"
+ format: "int32"
+ /sub:
+ post:
+ operationId: "sub"
+ parameters:
+ - in: "body"
+ name: "subBody"
+ required: false
+ schema:
+ $ref: "#/definitions/subBody"
+ responses:
+ 200:
+ description: "response of 200"
+ schema:
+ type: "integer"
+ format: "int32"
+definitions:
+ addBody:
+ type: "object"
+ properties:
+ a:
+ type: "integer"
+ format: "int32"
+ b:
+ type: "integer"
+ format: "int32"
+ x-java-class: "gen.swagger.addBody"
+ divideBody:
+ type: "object"
+ properties:
+ a:
+ type: "integer"
+ format: "int32"
+ b:
+ type: "integer"
+ format: "int32"
+ x-java-class: "gen.swagger.divideBody"
+ multiBody:
+ type: "object"
+ properties:
+ a:
+ type: "integer"
+ format: "int32"
+ b:
+ type: "integer"
+ format: "int32"
+ x-java-class: "gen.swagger.multiBody"
+ subBody:
+ type: "object"
+ properties:
+ a:
+ type: "integer"
+ format: "int32"
+ b:
+ type: "integer"
+ format: "int32"
+ x-java-class: "gen.swagger.subBody"
diff --git a/toolkit-cli/src/test/resources/swagger.yaml b/toolkit-cli/src/test/resources/swagger.yaml
new file mode 100755
index 0000000..b97799c
--- /dev/null
+++ b/toolkit-cli/src/test/resources/swagger.yaml
@@ -0,0 +1,707 @@
+---
+swagger: "2.0"
+info:
+ description: "This is a sample server Petstore server. You can find out more about\
+ \ Swagger at [http://swagger.io](http://swagger.io) or on [irc.freenode.net, #swagger](http://swagger.io/irc/).\
+ \ For this sample, you can use the api key `special-key` to test the authorization\
+ \ filters."
+ version: "1.0.0"
+ title: "Swagger Petstore"
+ termsOfService: "http://swagger.io/terms/"
+ contact:
+ email: "apiteam@swagger.io"
+ license:
+ name: "Apache 2.0"
+ url: "http://www.apache.org/licenses/LICENSE-2.0.html"
+host: "petstore.swagger.io"
+basePath: "/v2"
+tags:
+- name: "pet"
+ description: "Everything about your Pets"
+ externalDocs:
+ description: "Find out more"
+ url: "http://swagger.io"
+- name: "store"
+ description: "Access to Petstore orders"
+- name: "user"
+ description: "Operations about user"
+ externalDocs:
+ description: "Find out more about our store"
+ url: "http://swagger.io"
+schemes:
+- "https"
+- "http"
+paths:
+ /pet:
+ post:
+ tags:
+ - "pet"
+ summary: "Add a new pet to the store"
+ description: ""
+ operationId: "addPet"
+ consumes:
+ - "application/json"
+ - "application/xml"
+ produces:
+ - "application/xml"
+ - "application/json"
+ parameters:
+ - in: "body"
+ name: "body"
+ description: "Pet object that needs to be added to the store"
+ required: true
+ schema:
+ $ref: "#/definitions/Pet"
+ responses:
+ 405:
+ description: "Invalid input"
+ security:
+ - petstore_auth:
+ - "write:pets"
+ - "read:pets"
+ put:
+ tags:
+ - "pet"
+ summary: "Update an existing pet"
+ description: ""
+ operationId: "updatePet"
+ consumes:
+ - "application/json"
+ - "application/xml"
+ produces:
+ - "application/xml"
+ - "application/json"
+ parameters:
+ - in: "body"
+ name: "body"
+ description: "Pet object that needs to be added to the store"
+ required: true
+ schema:
+ $ref: "#/definitions/Pet"
+ responses:
+ 400:
+ description: "Invalid ID supplied"
+ 404:
+ description: "Pet not found"
+ 405:
+ description: "Validation exception"
+ security:
+ - petstore_auth:
+ - "write:pets"
+ - "read:pets"
+ /pet/findByStatus:
+ get:
+ tags:
+ - "pet"
+ summary: "Finds Pets by status"
+ description: "Multiple status values can be provided with comma separated strings"
+ operationId: "findPetsByStatus"
+ produces:
+ - "application/xml"
+ - "application/json"
+ parameters:
+ - name: "status"
+ in: "query"
+ description: "Status values that need to be considered for filter"
+ required: true
+ type: "array"
+ items:
+ type: "string"
+ enum:
+ - "available"
+ - "pending"
+ - "sold"
+ default: "available"
+ collectionFormat: "multi"
+ responses:
+ 200:
+ description: "successful operation"
+ schema:
+ type: "array"
+ items:
+ $ref: "#/definitions/Pet"
+ 400:
+ description: "Invalid status value"
+ security:
+ - petstore_auth:
+ - "write:pets"
+ - "read:pets"
+ /pet/findByTags:
+ get:
+ tags:
+ - "pet"
+ summary: "Finds Pets by tags"
+ description: "Multiple tags can be provided with comma separated strings. Use\
+ \ tag1, tag2, tag3 for testing."
+ operationId: "findPetsByTags"
+ produces:
+ - "application/xml"
+ - "application/json"
+ parameters:
+ - name: "tags"
+ in: "query"
+ description: "Tags to filter by"
+ required: true
+ type: "array"
+ items:
+ type: "string"
+ collectionFormat: "multi"
+ responses:
+ 200:
+ description: "successful operation"
+ schema:
+ type: "array"
+ items:
+ $ref: "#/definitions/Pet"
+ 400:
+ description: "Invalid tag value"
+ security:
+ - petstore_auth:
+ - "write:pets"
+ - "read:pets"
+ deprecated: true
+ /pet/{petId}:
+ get:
+ tags:
+ - "pet"
+ summary: "Find pet by ID"
+ description: "Returns a single pet"
+ operationId: "getPetById"
+ produces:
+ - "application/xml"
+ - "application/json"
+ parameters:
+ - name: "petId"
+ in: "path"
+ description: "ID of pet to return"
+ required: true
+ type: "integer"
+ format: "int64"
+ responses:
+ 200:
+ description: "successful operation"
+ schema:
+ $ref: "#/definitions/Pet"
+ 400:
+ description: "Invalid ID supplied"
+ 404:
+ description: "Pet not found"
+ security:
+ - api_key: []
+ post:
+ tags:
+ - "pet"
+ summary: "Updates a pet in the store with form data"
+ description: ""
+ operationId: "updatePetWithForm"
+ consumes:
+ - "application/x-www-form-urlencoded"
+ produces:
+ - "application/xml"
+ - "application/json"
+ parameters:
+ - name: "petId"
+ in: "path"
+ description: "ID of pet that needs to be updated"
+ required: true
+ type: "integer"
+ format: "int64"
+ - name: "name"
+ in: "formData"
+ description: "Updated name of the pet"
+ required: false
+ type: "string"
+ - name: "status"
+ in: "formData"
+ description: "Updated status of the pet"
+ required: false
+ type: "string"
+ responses:
+ 405:
+ description: "Invalid input"
+ security:
+ - petstore_auth:
+ - "write:pets"
+ - "read:pets"
+ delete:
+ tags:
+ - "pet"
+ summary: "Deletes a pet"
+ description: ""
+ operationId: "deletePet"
+ produces:
+ - "application/xml"
+ - "application/json"
+ parameters:
+ - name: "api_key"
+ in: "header"
+ required: false
+ type: "string"
+ - name: "petId"
+ in: "path"
+ description: "Pet id to delete"
+ required: true
+ type: "integer"
+ format: "int64"
+ responses:
+ 400:
+ description: "Invalid ID supplied"
+ 404:
+ description: "Pet not found"
+ security:
+ - petstore_auth:
+ - "write:pets"
+ - "read:pets"
+ /pet/{petId}/uploadImage:
+ post:
+ tags:
+ - "pet"
+ summary: "uploads an image"
+ description: ""
+ operationId: "uploadFile"
+ consumes:
+ - "multipart/form-data"
+ produces:
+ - "application/json"
+ parameters:
+ - name: "petId"
+ in: "path"
+ description: "ID of pet to update"
+ required: true
+ type: "integer"
+ format: "int64"
+ - name: "additionalMetadata"
+ in: "formData"
+ description: "Additional data to pass to server"
+ required: false
+ type: "string"
+ - name: "file"
+ in: "formData"
+ description: "file to upload"
+ required: false
+ type: "file"
+ responses:
+ 200:
+ description: "successful operation"
+ schema:
+ $ref: "#/definitions/ApiResponse"
+ security:
+ - petstore_auth:
+ - "write:pets"
+ - "read:pets"
+ /store/inventory:
+ get:
+ tags:
+ - "store"
+ summary: "Returns pet inventories by status"
+ description: "Returns a map of status codes to quantities"
+ operationId: "getInventory"
+ produces:
+ - "application/json"
+ parameters: []
+ responses:
+ 200:
+ description: "successful operation"
+ schema:
+ type: "object"
+ additionalProperties:
+ type: "integer"
+ format: "int32"
+ security:
+ - api_key: []
+ /store/order:
+ post:
+ tags:
+ - "store"
+ summary: "Place an order for a pet"
+ description: ""
+ operationId: "placeOrder"
+ produces:
+ - "application/xml"
+ - "application/json"
+ parameters:
+ - in: "body"
+ name: "body"
+ description: "order placed for purchasing the pet"
+ required: true
+ schema:
+ $ref: "#/definitions/Order"
+ responses:
+ 200:
+ description: "successful operation"
+ schema:
+ $ref: "#/definitions/Order"
+ 400:
+ description: "Invalid Order"
+ /store/order/{orderId}:
+ get:
+ tags:
+ - "store"
+ summary: "Find purchase order by ID"
+ description: "For valid response try integer IDs with value >= 1 and <= 10.\
+ \ Other values will generated exceptions"
+ operationId: "getOrderById"
+ produces:
+ - "application/xml"
+ - "application/json"
+ parameters:
+ - name: "orderId"
+ in: "path"
+ description: "ID of pet that needs to be fetched"
+ required: true
+ type: "integer"
+ maximum: 10.0
+ minimum: 1.0
+ format: "int64"
+ responses:
+ 200:
+ description: "successful operation"
+ schema:
+ $ref: "#/definitions/Order"
+ 400:
+ description: "Invalid ID supplied"
+ 404:
+ description: "Order not found"
+ delete:
+ tags:
+ - "store"
+ summary: "Delete purchase order by ID"
+ description: "For valid response try integer IDs with positive integer value.\
+ \ Negative or non-integer values will generate API errors"
+ operationId: "deleteOrder"
+ produces:
+ - "application/xml"
+ - "application/json"
+ parameters:
+ - name: "orderId"
+ in: "path"
+ description: "ID of the order that needs to be deleted"
+ required: true
+ type: "integer"
+ minimum: 1.0
+ format: "int64"
+ responses:
+ 400:
+ description: "Invalid ID supplied"
+ 404:
+ description: "Order not found"
+ /user:
+ post:
+ tags:
+ - "user"
+ summary: "Create user"
+ description: "This can only be done by the logged in user."
+ operationId: "createUser"
+ produces:
+ - "application/xml"
+ - "application/json"
+ parameters:
+ - in: "body"
+ name: "body"
+ description: "Created user object"
+ required: true
+ schema:
+ $ref: "#/definitions/User"
+ responses:
+ default:
+ description: "successful operation"
+ /user/createWithArray:
+ post:
+ tags:
+ - "user"
+ summary: "Creates list of users with given input array"
+ description: ""
+ operationId: "createUsersWithArrayInput"
+ produces:
+ - "application/xml"
+ - "application/json"
+ parameters:
+ - in: "body"
+ name: "body"
+ description: "List of user object"
+ required: true
+ schema:
+ type: "array"
+ items:
+ $ref: "#/definitions/User"
+ responses:
+ default:
+ description: "successful operation"
+ /user/createWithList:
+ post:
+ tags:
+ - "user"
+ summary: "Creates list of users with given input array"
+ description: ""
+ operationId: "createUsersWithListInput"
+ produces:
+ - "application/xml"
+ - "application/json"
+ parameters:
+ - in: "body"
+ name: "body"
+ description: "List of user object"
+ required: true
+ schema:
+ type: "array"
+ items:
+ $ref: "#/definitions/User"
+ responses:
+ default:
+ description: "successful operation"
+ /user/login:
+ get:
+ tags:
+ - "user"
+ summary: "Logs user into the system"
+ description: ""
+ operationId: "loginUser"
+ produces:
+ - "application/xml"
+ - "application/json"
+ parameters:
+ - name: "username"
+ in: "query"
+ description: "The user name for login"
+ required: true
+ type: "string"
+ - name: "password"
+ in: "query"
+ description: "The password for login in clear text"
+ required: true
+ type: "string"
+ responses:
+ 200:
+ description: "successful operation"
+ schema:
+ type: "string"
+ headers:
+ X-Rate-Limit:
+ type: "integer"
+ format: "int32"
+ description: "calls per hour allowed by the user"
+ X-Expires-After:
+ type: "string"
+ format: "date-time"
+ description: "date in UTC when token expires"
+ 400:
+ description: "Invalid username/password supplied"
+ /user/logout:
+ get:
+ tags:
+ - "user"
+ summary: "Logs out current logged in user session"
+ description: ""
+ operationId: "logoutUser"
+ produces:
+ - "application/xml"
+ - "application/json"
+ parameters: []
+ responses:
+ default:
+ description: "successful operation"
+ /user/{username}:
+ get:
+ tags:
+ - "user"
+ summary: "Get user by user name"
+ description: ""
+ operationId: "getUserByName"
+ produces:
+ - "application/xml"
+ - "application/json"
+ parameters:
+ - name: "username"
+ in: "path"
+ description: "The name that needs to be fetched. Use user1 for testing. "
+ required: true
+ type: "string"
+ responses:
+ 200:
+ description: "successful operation"
+ schema:
+ $ref: "#/definitions/User"
+ 400:
+ description: "Invalid username supplied"
+ 404:
+ description: "User not found"
+ put:
+ tags:
+ - "user"
+ summary: "Updated user"
+ description: "This can only be done by the logged in user."
+ operationId: "updateUser"
+ produces:
+ - "application/xml"
+ - "application/json"
+ parameters:
+ - name: "username"
+ in: "path"
+ description: "name that need to be updated"
+ required: true
+ type: "string"
+ - in: "body"
+ name: "body"
+ description: "Updated user object"
+ required: true
+ schema:
+ $ref: "#/definitions/User"
+ responses:
+ 400:
+ description: "Invalid user supplied"
+ 404:
+ description: "User not found"
+ delete:
+ tags:
+ - "user"
+ summary: "Delete user"
+ description: "This can only be done by the logged in user."
+ operationId: "deleteUser"
+ produces:
+ - "application/xml"
+ - "application/json"
+ parameters:
+ - name: "username"
+ in: "path"
+ description: "The name that needs to be deleted"
+ required: true
+ type: "string"
+ responses:
+ 400:
+ description: "Invalid username supplied"
+ 404:
+ description: "User not found"
+securityDefinitions:
+ petstore_auth:
+ type: "oauth2"
+ authorizationUrl: "https://petstore.swagger.io/oauth/authorize"
+ flow: "implicit"
+ scopes:
+ write:pets: "modify pets in your account"
+ read:pets: "read your pets"
+ api_key:
+ type: "apiKey"
+ name: "api_key"
+ in: "header"
+definitions:
+ Order:
+ type: "object"
+ properties:
+ id:
+ type: "integer"
+ format: "int64"
+ petId:
+ type: "integer"
+ format: "int64"
+ quantity:
+ type: "integer"
+ format: "int32"
+ shipDate:
+ type: "string"
+ format: "date-time"
+ status:
+ type: "string"
+ description: "Order Status"
+ enum:
+ - "placed"
+ - "approved"
+ - "delivered"
+ complete:
+ type: "boolean"
+ default: false
+ xml:
+ name: "Order"
+ User:
+ type: "object"
+ properties:
+ id:
+ type: "integer"
+ format: "int64"
+ username:
+ type: "string"
+ firstName:
+ type: "string"
+ lastName:
+ type: "string"
+ email:
+ type: "string"
+ password:
+ type: "string"
+ phone:
+ type: "string"
+ userStatus:
+ type: "integer"
+ format: "int32"
+ description: "User Status"
+ xml:
+ name: "User"
+ Category:
+ type: "object"
+ properties:
+ id:
+ type: "integer"
+ format: "int64"
+ name:
+ type: "string"
+ xml:
+ name: "Category"
+ Tag:
+ type: "object"
+ properties:
+ id:
+ type: "integer"
+ format: "int64"
+ name:
+ type: "string"
+ xml:
+ name: "Tag"
+ Pet:
+ type: "object"
+ required:
+ - "name"
+ - "photoUrls"
+ properties:
+ id:
+ type: "integer"
+ format: "int64"
+ category:
+ $ref: "#/definitions/Category"
+ name:
+ type: "string"
+ example: "doggie"
+ photoUrls:
+ type: "array"
+ xml:
+ name: "photoUrl"
+ wrapped: true
+ items:
+ type: "string"
+ tags:
+ type: "array"
+ xml:
+ name: "tag"
+ wrapped: true
+ items:
+ $ref: "#/definitions/Tag"
+ status:
+ type: "string"
+ description: "pet status in the store"
+ enum:
+ - "available"
+ - "pending"
+ - "sold"
+ xml:
+ name: "Pet"
+ ApiResponse:
+ type: "object"
+ properties:
+ code:
+ type: "integer"
+ format: "int32"
+ type:
+ type: "string"
+ message:
+ type: "string"
+externalDocs:
+ description: "Find out more about Swagger"
+ url: "http://swagger.io"