From 78a35354b9095c7afe42ac3da7477eb7c3cc2ba6 Mon Sep 17 00:00:00 2001 From: "Sean C. Sullivan" Date: Sun, 17 Nov 2019 18:49:31 -0500 Subject: [PATCH 1/2] add [sbt-test] [java-codegen-app] --- .../sbt-guardrail/java-codegen-app/build.sbt | 28 + .../java-codegen-app/petstore.json | 1188 +++++++++++++++++ .../java-codegen-app/project/build.properties | 1 + .../java-codegen-app/project/plugins.sbt | 7 + .../src/main/scala/helloworld/Hello.scala | 10 + .../src/test/scala/helloworld/HelloSpec.scala | 22 + .../sbt-guardrail/java-codegen-app/test | 10 + 7 files changed, 1266 insertions(+) create mode 100644 src/sbt-test/sbt-guardrail/java-codegen-app/build.sbt create mode 100644 src/sbt-test/sbt-guardrail/java-codegen-app/petstore.json create mode 100644 src/sbt-test/sbt-guardrail/java-codegen-app/project/build.properties create mode 100644 src/sbt-test/sbt-guardrail/java-codegen-app/project/plugins.sbt create mode 100644 src/sbt-test/sbt-guardrail/java-codegen-app/src/main/scala/helloworld/Hello.scala create mode 100644 src/sbt-test/sbt-guardrail/java-codegen-app/src/test/scala/helloworld/HelloSpec.scala create mode 100644 src/sbt-test/sbt-guardrail/java-codegen-app/test diff --git a/src/sbt-test/sbt-guardrail/java-codegen-app/build.sbt b/src/sbt-test/sbt-guardrail/java-codegen-app/build.sbt new file mode 100644 index 0000000..42213a7 --- /dev/null +++ b/src/sbt-test/sbt-guardrail/java-codegen-app/build.sbt @@ -0,0 +1,28 @@ + +enablePlugins(GuardrailPlugin) + +name := "sbt-guardrail-java-test-app" + +version := "1.0." + System.currentTimeMillis + +scalaVersion := "2.12.10" + +scalacOptions += "-Xexperimental" + +guardrailTasks in Compile := List( + JavaClient(file("petstore.json"), pkg="com.example.clients.petstore") +) + +// workaround for SBT issue +unmanagedSourceDirectories in Compile += (sourceManaged in Compile).value + +val jacksonVersion = "2.10.1" + +libraryDependencies ++= Seq( + "com.fasterxml.jackson.core" % "jackson-databind" % jacksonVersion, + "com.fasterxml.jackson.datatype" % "jackson-datatype-jdk8" % jacksonVersion, + "com.fasterxml.jackson.datatype" % "jackson-datatype-jsr310" % jacksonVersion, + "org.asynchttpclient" % "async-http-client" % "2.10.4", + "javax.xml.bind" % "jaxb-api" % "2.3.1", + "org.scalatest" %% "scalatest" % "3.0.8" % "test" +) diff --git a/src/sbt-test/sbt-guardrail/java-codegen-app/petstore.json b/src/sbt-test/sbt-guardrail/java-codegen-app/petstore.json new file mode 100644 index 0000000..6a35c82 --- /dev/null +++ b/src/sbt-test/sbt-guardrail/java-codegen-app/petstore.json @@ -0,0 +1,1188 @@ +{ + "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": [ + "http" + ], + "paths": { + "/pet": { + "post": { + "tags": [ + "pet" + ], + "x-jvm-package": "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": { + "201": { + "description": "Created" + }, + "400": { + "description": "Invalid input" + } + }, + "security": [ + { + "petstore_auth": [ + "write:pets", + "read:pets" + ] + } + ] + }, + "put": { + "tags": [ + "pet" + ], + "x-jvm-package": "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" + }, + "400": { + "description": "Validation exception" + } + }, + "security": [ + { + "petstore_auth": [ + "write:pets", + "read:pets" + ] + } + ] + } + }, + "/pet/findByStatus/{status}": { + "get": { + "tags": [ + "pet" + ], + "x-jvm-package": "pet", + "summary": "Finds Pets by status", + "description": "Multiple status values can be provided with comma separated strings", + "operationId": "findPetsByStatusEnum", + "produces": [ + "application/json" + ], + "parameters": [ + { + "name": "status", + "in": "path", + "type": "string", + "x-scala-type": "PetStatus" + } + ], + "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/findByStatus": { + "get": { + "tags": [ + "pet" + ], + "x-jvm-package": "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", + "x-scala-type": "PetStatus", + "default": "available" + }, + "collectionFormat": "multi" + } + ], + "responses": { + "200": { + "description": "successful operation", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/Pet" + } + } + }, + "400": { + "description": "Invalid status value" + }, + "404": { + "description": "Pet not found" + } + }, + "security": [ + { + "petstore_auth": [ + "write:pets", + "read:pets" + ] + } + ] + } + }, + "/pet/findByTags": { + "get": { + "tags": [ + "pet" + ], + "x-jvm-package": "pet", + "summary": "Finds Pets by tags", + "description": "Muliple 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" + ], + "x-jvm-package": "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" + ], + "x-jvm-package": "pet", + "summary": "Updates a pet in the store with form data", + "description": "", + "operationId": "updatePetWithForm", + "consumes": [ + "application/x-www-form-urlencoded", + "multipart/form-data" + ], + "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": { + "400": { + "description": "Invalid input" + } + }, + "security": [ + { + "petstore_auth": [ + "write:pets", + "read:pets" + ] + } + ] + }, + "delete": { + "tags": [ + "pet" + ], + "x-jvm-package": "pet", + "summary": "Deletes a pet", + "description": "", + "operationId": "deletePet", + "produces": [ + "application/xml", + "application/json" + ], + "parameters": [ + { + "name": "api_key", + "in": "header", + "required": false, + "type": "string" + }, + { + "name": "includeChildren", + "in": "query", + "description": "Delete children as well", + "type": "boolean" + }, + { + "name": "status", + "in": "query", + "description": "Only delete pets with the specified status", + "type": "string", + "x-scala-type": "PetStatus" + }, + { + "name": "petId", + "in": "path", + "description": "Pet id to delete", + "required": true, + "type": "integer", + "format": "int64" + } + ], + "responses": { + "200": { + "description": "Pet deleted" + }, + "400": { + "description": "Invalid ID supplied" + }, + "404": { + "description": "Pet not found" + } + }, + "security": [ + { + "petstore_auth": [ + "write:pets", + "read:pets" + ] + } + ] + } + }, + "/pet/{petId}/uploadImage": { + "post": { + "tags": [ + "pet" + ], + "x-jvm-package": "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", + "x-scala-type": "PositiveLong" + }, + { + "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" + }, + { + "name": "file2", + "in": "formData", + "description": "file to upload", + "required": true, + "type": "file" + }, + { + "name": "file3", + "in": "formData", + "description": "file to upload", + "required": true, + "type": "file", + "x-file-hash": "SHA-256" + }, + { + "name": "long-value", + "in": "formData", + "required": true, + "type": "integer", + "format": "int64" + }, + { + "name": "custom-value", + "in": "formData", + "required": true, + "type": "integer", + "format": "int64", + "x-scala-type": "PositiveLong" + }, + { + "name": "custom-optional-value", + "in": "formData", + "type": "integer", + "format": "int64", + "x-scala-type": "PositiveLong" + } + ], + "responses": { + "200": { + "description": "successful operation", + "schema": { + "$ref": "#/definitions/ApiResponse" + } + } + }, + "security": [ + { + "petstore_auth": [ + "write:pets", + "read:pets" + ] + } + ] + } + }, + "/store/inventory": { + "get": { + "tags": [ + "store" + ], + "x-jvm-package": "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" + ], + "x-jvm-package": "store", + "summary": "Place an order for a pet", + "description": "", + "operationId": "placeOrder", + "consumes": [ + "application/json" + ], + "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" + ], + "x-jvm-package": "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, + "minimum": 1, + "format": "int64" + } + ], + "responses": { + "200": { + "description": "successful operation", + "schema": { + "$ref": "#/definitions/Order" + } + }, + "400": { + "description": "Invalid ID supplied" + }, + "404": { + "description": "Order not found" + } + } + }, + "delete": { + "tags": [ + "store" + ], + "x-jvm-package": "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, + "format": "int64" + } + ], + "responses": { + "400": { + "description": "Invalid ID supplied" + }, + "404": { + "description": "Order not found" + } + } + } + }, + "/user": { + "post": { + "tags": [ + "user" + ], + "x-jvm-package": "user", + "summary": "Create user", + "description": "This can only be done by the logged in user.", + "operationId": "createUser", + "consumes": [ + "application/json" + ], + "produces": [ + "application/xml", + "application/json" + ], + "parameters": [ + { + "in": "body", + "name": "body", + "description": "Created user object", + "required": true, + "schema": { + "$ref": "#/definitions/User" + } + } + ], + "responses": { + "200": { + "description": "successful operation" + } + } + } + }, + "/user/createWithArray": { + "post": { + "tags": [ + "user" + ], + "x-jvm-package": "user", + "summary": "Creates list of users with given input array", + "description": "", + "operationId": "createUsersWithArrayInput", + "consumes": [ + "application/json" + ], + "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": { + "200": { + "description": "successful operation" + } + } + } + }, + "/user/createWithList": { + "post": { + "tags": [ + "user" + ], + "x-jvm-package": "user", + "summary": "Creates list of users with given input array", + "description": "", + "operationId": "createUsersWithListInput", + "consumes": [ + "application/json" + ], + "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": { + "200": { + "description": "successful operation" + } + } + } + }, + "/user/login": { + "get": { + "tags": [ + "user" + ], + "x-jvm-package": "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" + ], + "x-jvm-package": "user", + "summary": "Logs out current logged in user session", + "description": "", + "operationId": "logoutUser", + "produces": [ + "application/xml", + "application/json" + ], + "parameters": [], + "responses": { + "200": { + "description": "successful operation" + } + } + } + }, + "/user/{username}": { + "get": { + "tags": [ + "user" + ], + "x-jvm-package": "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" + ], + "x-jvm-package": "user", + "summary": "Updated user", + "description": "This can only be done by the logged in user.", + "operationId": "updateUser", + "consumes": [ + "application/json" + ], + "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" + ], + "x-jvm-package": "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": "http://petstore.swagger.io/oauth/dialog", + "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", + "x-scala-type": "OrderStatus" + }, + "complete": { + "type": "boolean", + "default": false + } + }, + "xml": { + "name": "Order" + } + }, + "Category": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int64" + }, + "name": { + "type": "string" + } + }, + "xml": { + "name": "Category" + } + }, + "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" + } + }, + "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", + "x-scala-type": "PetStatus" + } + }, + "xml": { + "name": "Pet" + } + }, + "ApiResponse": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "type": { + "type": "string" + }, + "message": { + "type": "string" + } + } + }, + "PetStatus": { + "type": "string", + "enum": [ + "available", + "pending", + "sold" + ] + }, + "OrderStatus": { + "type": "string", + "enum": [ + "placed", + "approved", + "delivered" + ] + }, + "SingleValue": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int64" + } + } + } + }, + "externalDocs": { + "description": "Find out more about Swagger", + "url": "http://swagger.io" + } +} diff --git a/src/sbt-test/sbt-guardrail/java-codegen-app/project/build.properties b/src/sbt-test/sbt-guardrail/java-codegen-app/project/build.properties new file mode 100644 index 0000000..6adcdc7 --- /dev/null +++ b/src/sbt-test/sbt-guardrail/java-codegen-app/project/build.properties @@ -0,0 +1 @@ +sbt.version=1.3.3 diff --git a/src/sbt-test/sbt-guardrail/java-codegen-app/project/plugins.sbt b/src/sbt-test/sbt-guardrail/java-codegen-app/project/plugins.sbt new file mode 100644 index 0000000..d6ce530 --- /dev/null +++ b/src/sbt-test/sbt-guardrail/java-codegen-app/project/plugins.sbt @@ -0,0 +1,7 @@ +{ + val pluginVersion = System.getProperty("plugin.version") + if(pluginVersion == null) + throw new RuntimeException("""|The system property 'plugin.version' is not defined. + |Specify this property using the scriptedLaunchOpts -D.""".stripMargin) + else addSbtPlugin("com.twilio" % "sbt-guardrail" % pluginVersion) +} diff --git a/src/sbt-test/sbt-guardrail/java-codegen-app/src/main/scala/helloworld/Hello.scala b/src/sbt-test/sbt-guardrail/java-codegen-app/src/main/scala/helloworld/Hello.scala new file mode 100644 index 0000000..29dfa8c --- /dev/null +++ b/src/sbt-test/sbt-guardrail/java-codegen-app/src/main/scala/helloworld/Hello.scala @@ -0,0 +1,10 @@ +package helloworld + +import com.example.clients.petstore.user.UserClient + +object Hello { + def buildUserClient = { + new UserClient.Builder().build + } + +} diff --git a/src/sbt-test/sbt-guardrail/java-codegen-app/src/test/scala/helloworld/HelloSpec.scala b/src/sbt-test/sbt-guardrail/java-codegen-app/src/test/scala/helloworld/HelloSpec.scala new file mode 100644 index 0000000..016a717 --- /dev/null +++ b/src/sbt-test/sbt-guardrail/java-codegen-app/src/test/scala/helloworld/HelloSpec.scala @@ -0,0 +1,22 @@ + +package helloworld + +import java.util.concurrent.TimeUnit + +import com.example.clients.petstore.user.LogoutUserResponse +import org.scalatest._ +import org.scalatest.concurrent.ScalaFutures + +class HelloSpec extends FlatSpec + with Matchers + with ScalaFutures { + + "UserClient" should "pass sanity check" in { + val userClient = Hello.buildUserClient + val future = userClient.logoutUser().call().toCompletableFuture + val logoutResponse = future.get(10, TimeUnit.SECONDS) + future.isDone shouldBe true + future.isCompletedExceptionally shouldBe false + logoutResponse.getClass shouldBe classOf[LogoutUserResponse.Ok] + } +} diff --git a/src/sbt-test/sbt-guardrail/java-codegen-app/test b/src/sbt-test/sbt-guardrail/java-codegen-app/test new file mode 100644 index 0000000..5d8e657 --- /dev/null +++ b/src/sbt-test/sbt-guardrail/java-codegen-app/test @@ -0,0 +1,10 @@ +> clean +$ absent target/scala-2.12/src_managed/main/com/example/clients/petstore/user/UserClient.java +$ absent target/scala-2.12/classes/com/example/clients/petstore/user/UserClient.class +> compile +$ exists target/scala-2.12/src_managed/main/com/example/clients/petstore/user/UserClient.java +$ exists target/scala-2.12/classes/com/example/clients/petstore/user/UserClient.class +> compile +$ exists target/scala-2.12/src_managed/main/com/example/clients/petstore/user/UserClient.java +$ exists target/scala-2.12/classes/com/example/clients/petstore/user/UserClient.class +> test From 97ed70a3ded131c7440c83eb800982914af62d1e Mon Sep 17 00:00:00 2001 From: "Sean C. Sullivan" Date: Sun, 17 Nov 2019 19:25:19 -0500 Subject: [PATCH 2/2] add link to [https://github.com/sbt/sbt/issues/1664] --- src/sbt-test/sbt-guardrail/java-codegen-app/build.sbt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sbt-test/sbt-guardrail/java-codegen-app/build.sbt b/src/sbt-test/sbt-guardrail/java-codegen-app/build.sbt index 42213a7..4152e07 100644 --- a/src/sbt-test/sbt-guardrail/java-codegen-app/build.sbt +++ b/src/sbt-test/sbt-guardrail/java-codegen-app/build.sbt @@ -13,7 +13,7 @@ guardrailTasks in Compile := List( JavaClient(file("petstore.json"), pkg="com.example.clients.petstore") ) -// workaround for SBT issue +// workaround for SBT issue. see: https://github.com/sbt/sbt/issues/1664 unmanagedSourceDirectories in Compile += (sourceManaged in Compile).value val jacksonVersion = "2.10.1"