diff --git a/pom.xml b/pom.xml index 58eb9d9..0aa808e 100644 --- a/pom.xml +++ b/pom.xml @@ -201,6 +201,18 @@ ${junit.version} test + + org.mock-server + mockserver-netty + 5.15.0 + test + + + org.mock-server + mockserver-client-java + 5.15.0 + test + diff --git a/src/test/java/com/mascix/swaggerific/SwaggerGuiTest.java b/src/test/java/com/mascix/swaggerific/SwaggerGuiTest.java index 67ecd4d..9a7f3cd 100644 --- a/src/test/java/com/mascix/swaggerific/SwaggerGuiTest.java +++ b/src/test/java/com/mascix/swaggerific/SwaggerGuiTest.java @@ -3,8 +3,11 @@ import javafx.application.Platform; import javafx.scene.input.KeyCode; import javafx.stage.Stage; +import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; +import org.mockserver.client.MockServerClient; +import org.mockserver.model.Header; import org.testfx.api.FxAssert; import org.testfx.api.FxRobot; import org.testfx.framework.junit5.ApplicationExtension; @@ -12,13 +15,19 @@ import org.testfx.matcher.control.TextInputControlMatchers; import java.io.IOException; +import java.util.Objects; import static org.hamcrest.Matchers.containsString; +import static org.mockserver.integration.ClientAndServer.startClientAndServer; +import static org.mockserver.model.HttpRequest.request; +import static org.mockserver.model.HttpResponse.response; import static org.testfx.matcher.base.NodeMatchers.isEnabled; @ExtendWith(ApplicationExtension.class) class SwaggerGuiTest { + private static MockServerClient mockServer; + /** * Will be called with {@code @Before} semantics, i. e. before each test method. * @@ -26,15 +35,41 @@ class SwaggerGuiTest { */ @Start private void start(Stage stage) throws IOException { + String jsonBody = new String(Objects.requireNonNull(getClass().getResourceAsStream("/petstore-swagger.json")).readAllBytes()); + String findByStatusResponse = new String(Objects.requireNonNull(getClass().getResourceAsStream("/findbystatus-response.json")).readAllBytes()); + mockServer = startClientAndServer(1080); + mockServer.hasStarted(); + mockServer.when( + request() + .withMethod("GET") + .withPath("/petstore-swagger.json") + ) + .respond( + response() + .withStatusCode(200) + .withHeaders( + new Header("Content-Type", "application/json; charset=utf-8"), + new Header("Cache-Control", "public, max-age=86400")) + .withBody(jsonBody) + ); + + mockServer.when(request("/petstore-pet/findByStatus")).respond(response(findByStatusResponse)); + Platform.isNestedLoopRunning(); SwaggerApplication swaggerApplication = new SwaggerApplication(); swaggerApplication.start(stage); stage.show(); } + @AfterAll + public static void stopServer() { + mockServer.stop(); + } + @Test void click_treeview_call_get(FxRobot robot) { robot.push(KeyCode.CONTROL, KeyCode.O); + robot.write("http://127.0.0.1:1080/petstore-swagger.json"); robot.push(KeyCode.ENTER); robot.sleep(100); System.out.println(robot.lookup("#treePaths").query()); diff --git a/src/test/resources/findbystatus-response.json b/src/test/resources/findbystatus-response.json new file mode 100644 index 0000000..d1ebc40 --- /dev/null +++ b/src/test/resources/findbystatus-response.json @@ -0,0 +1,235 @@ +[ + { + "id": 9, + "category": { + "id": 0, + "name": "cats" + }, + "name": "King Kong", + "photoUrls": [ + "string" + ], + "tags": [ + { + "id": 0, + "name": "string" + } + ], + "status": "sold" + }, + { + "id": 9223372036854775000, + "category": { + "id": -34705574, + "name": "consectetur ea fugiat" + }, + "name": "doggie", + "photoUrls": [ + "cillum qui pariatur incididunt", + "laboris re" + ], + "tags": [ + { + "id": 8890229, + "name": "eu" + }, + { + "id": 19670278, + "name": "ipsum Duis anim veniam" + } + ], + "status": "sold" + }, + { + "id": 1111, + "category": { + "id": 1111, + "name": "" + }, + "name": "doggie", + "photoUrls": [ + "string" + ], + "tags": [ + { + "id": 0, + "name": "ToToToTo" + } + ], + "status": "sold" + }, + { + "id": 922337203685951900, + "name": "Chapa (mtkp-edition)", + "photoUrls": [ + "./doggy.png" + ], + "tags": [], + "status": "sold" + }, + { + "id": 7574746, + "category": { + "id": 1, + "name": "Dog" + }, + "name": "Hardyyy", + "photoUrls": [ + "https://i.pinimg.com/originals/5c/2c/44/5c2c44f16da1caf134c00bc4f9c72ea0.jpg" + ], + "tags": [ + { + "id": 7805, + "name": "Mainecoon" + } + ], + "status": "sold" + }, + { + "id": 12084391, + "category": { + "id": -48583, + "name": "cupidatat amet commodo" + }, + "name": "doggie", + "photoUrls": [ + "fugiat Ut eu", + "exercitation nostr" + ], + "tags": [ + { + "id": -27183415, + "name": "e" + }, + { + "id": 86979382, + "name": "in anim consectetur Lorem ut" + } + ], + "status": "sold" + }, + { + "id": 822922, + "category": { + "id": -69794609, + "name": "irure laborum id proident incididunt" + }, + "name": "doggie", + "photoUrls": [ + "dolore ipsum qui", + "fugiat non eiusmod Duis nisi" + ], + "tags": [ + { + "id": -24720491, + "name": "nisi" + }, + { + "id": 87603503, + "name": "ut sint enim cillum nisi" + } + ], + "status": "sold" + }, + { + "id": 561, + "name": "Bella", + "photoUrls": [ + "string" + ], + "tags": [], + "status": "sold" + }, + { + "id": 922337203685477600, + "category": { + "id": 5, + "name": "dog" + }, + "name": "GOG", + "photoUrls": [], + "tags": [], + "status": "sold" + }, + { + "id": 9223372036854762000, + "category": { + "id": 4, + "name": "Bird" + }, + "name": "Jack", + "photoUrls": [ + "url" + ], + "tags": [], + "status": "sold" + }, + { + "id": 18, + "category": { + "id": 1, + "name": "Not selected" + }, + "name": "Silviu", + "photoUrls": [ + "data:image/jpeg;base64,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" + ], + "tags": [ + { + "id": 1, + "name": "tag1" + } + ], + "status": "sold" + }, + { + "id": 19, + "category": { + "id": 5, + "name": "Fish" + }, + "name": "Silviu2", + "photoUrls": [ + "data:image/jpeg;base64,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", + "data:image/jpeg;base64,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" + ], + "tags": [ + { + "id": 1, + "name": "tag1" + } + ], + "status": "sold" + }, + { + "id": 20, + "category": { + "id": 1, + "name": "Not selected" + }, + "name": "SilviuEduard", + "photoUrls": [ + "data:image/jpeg;base64,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", + "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAkGBxQHEBMQERQWEBESExIWEBESDRsVDxASGBIWFxoXFhMYKCggGBolGxUXITEhJio3LjouFx8zODMuNygtLisBCgoKDg0OGxAQGjclHyAvLys3Ny83Ky44LTItMisrLSszKy0rNy8uMS0tLS83KystLS0rLTUtLS0tKy0tLSstK//AABEIAMIBAwMBIgACEQEDEQH/xAAcAAEBAAMBAQEBAAAAAAAAAAAABgQFBwEIAwL/xABGEAACAgACBAoIAgcGBwEAAAAAAQIDBBEFBhIhBxUiMUFSYXGBoRMyNFFykbGyc7MUQ1NiksHRIzOCg6LCFyQ1QqO08Bb/xAAaAQEAAwEBAQAAAAAAAAAAAAAAAgMEBQEG/8QAKxEBAAICAQIFAwMFAAAAAAAAAAECAxEEEjEFITNBcRMyNCJRoRRhgZGx/9oADAMBAAIRAxEAPwDhoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACtyGQEkCtyGQEkCtyGQEkCtyGQEkCtyGQEkCtyGQEkCtyGQEkCtyGQEkCtyGQEkCtyGQEkCtyGQEkCtyGQEkCtyGQEkCtyGQEkCtyGQEkCtyGQEkCtyAHoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACWZ7sv3P5DTzcPAeHoegAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9rrdrUYpyk90Yxi3KT9yS3sttX+C7G6Vylalg6302raua7Kl/uaAh+YypaPthSsQ65xpclCNrg1XKTTaUW/W3RfN7jver3BxgtC5ScP0m1frL8pJP92v1V8s+01XDistHUpc36XX+RcBzLg/9uj8Fn2nUbvVl8L+hxjRFF2ItUcNtelylls2bEsst/KbRvZaJ0ok83bl0/wDOR5v4jbgyzWmunbj87jxkyxabxHylK+ZdyP6PE9xucNqvisVCNkKtqE4qUX6WCzi1mnk3uMdazbs6t8lKRu06acGXitF24S1UTg1a8soJqTefNls5m4w+pGLuWbUK+ydvK/0pkox3ntCFuRirG7WjzTgNrpbV3EaJW1bDkdNkHtQXf0rxRg4LBWY+exVB2S90VzL3t8yXazya2idaSrlpavVE+T8AU0NRcXJZ/wBkux2va8k15mn0roa7RLyug4p80k84S7pL6c5K2K9Y3MI05GK86raJlggHhWueg3ej9U8Vj47SrUIvmdstnPw3vyP2xepeLwy2tmNuXOq7M5fwySb8Cz6V9b0o/qsMW6eqNp4Gbo7RF2k5ShVBylD14uSi478t+010oyMfq5idH1u22rYhHLal6SDyzaS3Jt87RHotrekpzY4t0zaNsDBYSzHzVdUJWWNScYQWc5bMXJ5Lp3JvwPysg624yTjJbpRkmpRfuae9Mq+Cn/rGF/z/AP1rTuOndWsLp9ZYimNj6J5bNse6xb0RWvmIHUtYOB6dWc8FcrF0U38ma7rVufc0u85zpXRF+h57GIqnTLo248mXwyXJl4MDDAAAAAAAAAAHh07VLgoekq68RirtmuyMZxqpXLcZJNbVkllHc+ZJ95zE+ktQ9L0aQwWHhVbCydVFUbIRny65KCTUo863gZugtW8LoCOWHpjW+meW1bLvslnJ/Mx9Pa44PQOauvjtr9VDl2/wR5vHIzNP6Ghp2p0znbUn/wB1GIlVPx2d0l2STRyTTnBBiMJnLCWRxEefYnlXd8/Vk/kBl6d4YrLc44OlVr9rfyp5dlcXkn3t9xz7TGncTpuW1ibp3ZPNKUsq4v8AdrjlFc/OkY+kdHW6Ln6O+udM+rZBxb7s9zXajGAouD/26HwWfadRu9WXwv6HLuD/ANuj8Fn2nUb/AFZfC/odPielL5zxT8iPiHCocy7kdl1Z9iw34FX2I41XzLuX0Oy6s+xYb8Cr7EU8L7pa/GPTr8mPnRohzxduUZSUYubWc2lzQgu3f/8AI1WB15w+LtjXs2V7TSjOaWzm3ks8m8jT8J1zdlFefJUZyy7W0s/kn8yIzy39K5iWbkWpfpr2V8Xw+mXDF7zO5/h3WyCsTjJJprJprNNPoaNJOeF1Qp5thSk8kltW2S/mkt2/cjdweaXcjmXCLe7cZs57q64JLoTecn9V8jTnv0V6tebBwsM5cn05n9Pef8K7Qut1GlrPRJTrm89hTSynks8k03vNzjsHDH1yqsWcJrJ9navc1zpnINX5bGLw7X7arzmkdnIcfJOWs9Szn8evHyR9Nw3E0vDTnW97hKUX2uLa/kWXB9oGN/8Azdq2km1TFrk5rnm105cy8ewmNYVli8R+NZ9zOq6t0/o+Dw8V+yg33yW0/NmbjY4nJO/Z0vEeRavHjXezKx+Oho+t22y2IR52/f7kul9hN16/4aUsnG2Mc/XcE135J5mq4TsS3ZTTnyVCU2uhty2U/BRfzZFE8/KtW/TX2UcPw7HkxRe/eXacJRVZN4qrJu2EU5x5rIp5pvt7TWa++wW99X5sDV8GWKdlNtTearmpR7FNPNLxi34s2mvvsFvfV+dA0dUWwzaP2Yvpzj5cUmd6mHLKbpYeSnCUoTjvjOEnGcX2SW9FroLhSxujMo2uOLrXRatm3Lstj/uTIcLfuW9vcl0t9hyH1LvuguFDBaUyjZJ4Sx9F393n2Wrk/PIr7qatJ17MlC+qa5mlOuS80z5/0DwdY7TOUvRfo9b/AFl/I3dlfrP5Jdp1TUvUCOq7U/0i62fTCNjrwrfv9Cnyn8TYGt1g4JMNjc54WcsJPqf3mHb+F8qPg8uw5Dp/Q9mgcRPDW7LnXlm4Szi04qSabS6Gj6hxF8cNFznKMIxWcpSkoxS7W9yPnLhF0hXpTSV91M1bXL0ajOO+Msq4p5Pp3p7wJsAAAAAAAA/qq2VElOEpQnH1Zwk4zi+yS3o/kAXmr3Cpi9GZRvyxla672b0uyxet/iTfadN1e4Q8FpzKKs9Ba8l6K/KEm/dGXqy8HmfOx41mB9W43A16Qg67oQtg+eFkFKD8HuOQ8LGpmF0BRDFYaMqpTvVcq9turJ12SzSlm084Lcnlve4kdXtdcZq/kqrXKtfqbeXVl7knvj/haN1rrr/HWzBV0SpdN0L4WSykpVSiq7IvJ86ec1uy8Q8afg/9uj8Fn2nUb/Vl8L+hy7g/9uj8Fn2nUb/Vl8L+h1OJ6UvnfFfyI+IcKr5l3L6HZdWfYsN+BV9iONQ5l3I7Lqz7FhvwKvsRRwvulr8Y9OvyjOEz2ir8J/eyOlzFjwme0U/hP72R0uYp5Hqy2cH8avw7pV6q7l9Dlmvvt9nw1flxOp1equ5fQ5Zr77fZ8NX5cTZzPThyPCvyJ+JazQXtWH/Gq+9HaTi2gvasP+NV96O0keD9srPGfvr8OM6xe14j8az7mdU1cuWIwlEl+ygn3qOy/NM5XrD7XiPxrPuZU8HmnFWnhLHlm26G3ubfPDvz3rvZVx7xXLMT7tHPwzfjVmPbU/w/jhOwrVlN2XJcZVt9Cae0l47UvkyJO347Bwx8HXbFThLnT+qfQ+0na9Q8NCW03ZJZ+o7Fs92aSfmWZ+La1+qvup4fiWPHiil+8MXgzwjrpttayVk0o9qgmm/m2vBmz199gt76vzoG2wl1acqKsl6FQUoRXJrzTyju5nkubuNTr77Bb31fnQL+mK4ZiP2lijLOTlxeY1uYQupWh4afx9GFtco12Oe04NKeUapzyTafO45eJ3/QeqmE0D7PRCEssnY1t3PvslnLwzyPn/UvTENAY6nFWKUoVelzjBLbblTOCSzyXPJFHrDwq4vSWccOlhK30x5V7XbN7o+C8TkPqnZNNaew+go7WJuhUn6qlLlz+GC5UvBHNtYeGHPOGBp/zr15xqX834HKb7pYiTnOTnOXrTnJynLvk97P4Az9M6bxGnJbeJunc881GUv7OL/drXJj4IwAAAAAAAAAAAAAAAAAAM3Q2k5aIuV0EpSSkspZ7OTWXQb+ev18k16OremvVl/UkwWVy3rGolRk42LJPVeu5eJZbinwGu12BqhVGFbjXGMU2pZtJZb8mTIPKXtTzrKWXDTLGrxtstPaanpycZ2KMXGOylBPLLNvpb95rHvPQRtabTuU6UrSvTWPJWR1/vikvR1bv3Zf1J/TGkpaWuldNKMpKKajns7opdPcYYJ2y3tGplVj42LHPVWupfrhL3hbIWRybhKMknzNxae/5FR/xAxH7Or+GX9SSB5TJanlWXuXj48s7vG37Y3EvGWTtlkpTlKTS5k289xsMFq3icdVG6qvbhLPLK2Kluk1zSa6Uagu+D3TsKovCWNRe03S28oyz54Z+/Peu9k8Na3vq091XKvfFi6scb1/xiR0xpLQcP7aDlXHJbVsNrZ6EvSRf1Zh47XbFYqLinGpPndcWpfxNvLwOm4vDRxkJV2RU4SWUovmaNAtR8Innsz7vTPL+vmbL4MvatvJycXM40/qyY9T/ZruDGLcMRN785wWb6Wotvf/AIl8zZcIM9nAzXWnUl/GpfSLN7g8JDAQVdcVXCPMlzL3tv8AmznmvunY6RnGip7VdTblJPkzsyy3PpSTe/tJX1iw9Mz5oYd8nl/UrHlvf+kmADlvpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADw9AGywmsGJwaShdNJcybUkvCWeRmf8A7HGftf8Awwz+hoQTjJeO0qZ4+KZ3NYZ+O01iNILK26c49XPKL74xyTMAAjMzPdZWlaxqsaAAeJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJzjKzreSHGVnW8kBRgnOMrOt5IcZWdbyQFGCc4ys63khxlZ1vJAUYJzjKzreSHGVnW8kBRgnOMrOt5IcZWdbyQFGCc4ys63khxlZ1vJAUYJzjKzreSHGVnW8kBRgnOMrOt5IcZWdbyQFGCc4ys63khxlZ1vJAUYJzjKzreSHGVnW8kBRgnOMrOt5IcZWdbyQFGCc4ys63khxlZ1vJAUYJzjKzreSHGVnW8kBRgnOMrOt5IcZWdbyQFGCc4ys63khxlZ1vJAUYJzjKzreSHGVnW8kBRgnOMrOt/pQAxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB/9k=", + "data:image/jpeg;base64,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" + ], + "tags": [ + { + "id": 1, + "name": "taaaaaag" + } + ], + "status": "sold" + }, + { + "id": 1, + "category": { + "id": 1, + "name": "cat" + }, + "name": "dog", + "photoUrls": [], + "tags": [], + "status": "sold" + } +] \ No newline at end of file diff --git a/src/test/resources/petstore-swagger.json b/src/test/resources/petstore-swagger.json index a5d2631..4d3c061 100644 --- a/src/test/resources/petstore-swagger.json +++ b/src/test/resources/petstore-swagger.json @@ -42,145 +42,6 @@ "http" ], "paths": { - "/pet/{petId}": { - "get": { - "tags": [ - "pet" - ], - "summary": "Find pet by ID", - "description": "Returns a single pet", - "operationId": "getPetById", - "produces": [ - "application/json", - "application/xml" - ], - "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/json", - "application/xml" - ], - "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/json", - "application/xml" - ], - "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": [ @@ -430,28 +291,40 @@ "deprecated": true } }, - "/store/inventory": { + "/pet/{petId}": { "get": { "tags": [ - "store" + "pet" ], - "summary": "Returns pet inventories by status", - "description": "Returns a map of status codes to quantities", - "operationId": "getInventory", + "summary": "Find pet by ID", + "description": "Returns a single pet", + "operationId": "getPetById", "produces": [ - "application/json" + "application/json", + "application/xml" + ], + "parameters": [ + { + "name": "petId", + "in": "path", + "description": "ID of pet to return", + "required": true, + "type": "integer", + "format": "int64" + } ], - "parameters": [], "responses": { "200": { "description": "successful operation", "schema": { - "type": "object", - "additionalProperties": { - "type": "integer", - "format": "int32" - } + "$ref": "#/definitions/Pet" } + }, + "400": { + "description": "Invalid ID supplied" + }, + "404": { + "description": "Pet not found" } }, "security": [ @@ -459,6 +332,141 @@ "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/json", + "application/xml" + ], + "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/json", + "application/xml" + ], + "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" + ] + } + ] + } + }, + "/store/order": { + "post": { + "tags": [ + "store" + ], + "summary": "Place an order for a pet", + "description": "", + "operationId": "placeOrder", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json", + "application/xml" + ], + "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}": { @@ -532,14 +540,45 @@ } } }, - "/store/order": { - "post": { + "/store/inventory": { + "get": { "tags": [ "store" ], - "summary": "Place an order for a pet", + "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": [] + } + ] + } + }, + "/user/createWithArray": { + "post": { + "tags": [ + "user" + ], + "summary": "Creates list of users with given input array", "description": "", - "operationId": "placeOrder", + "operationId": "createUsersWithArrayInput", "consumes": [ "application/json" ], @@ -551,22 +590,55 @@ { "in": "body", "name": "body", - "description": "order placed for purchasing the pet", + "description": "List of user object", "required": true, "schema": { - "$ref": "#/definitions/Order" + "type": "array", + "items": { + "$ref": "#/definitions/User" + } } } ], "responses": { - "200": { - "description": "successful operation", + "default": { + "description": "successful operation" + } + } + } + }, + "/user/createWithList": { + "post": { + "tags": [ + "user" + ], + "summary": "Creates list of users with given input array", + "description": "", + "operationId": "createUsersWithListInput", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json", + "application/xml" + ], + "parameters": [ + { + "in": "body", + "name": "body", + "description": "List of user object", + "required": true, "schema": { - "$ref": "#/definitions/Order" + "type": "array", + "items": { + "$ref": "#/definitions/User" + } } - }, - "400": { - "description": "Invalid Order" + } + ], + "responses": { + "default": { + "description": "successful operation" } } } @@ -678,75 +750,6 @@ } } }, - "/user": { - "post": { - "tags": [ - "user" - ], - "summary": "Create user", - "description": "This can only be done by the logged in user.", - "operationId": "createUser", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json", - "application/xml" - ], - "parameters": [ - { - "in": "body", - "name": "body", - "description": "Created user object", - "required": true, - "schema": { - "$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", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json", - "application/xml" - ], - "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": [ @@ -820,14 +823,14 @@ } } }, - "/user/createWithArray": { + "/user": { "post": { "tags": [ "user" ], - "summary": "Creates list of users with given input array", - "description": "", - "operationId": "createUsersWithArrayInput", + "summary": "Create user", + "description": "This can only be done by the logged in user.", + "operationId": "createUser", "consumes": [ "application/json" ], @@ -839,13 +842,10 @@ { "in": "body", "name": "body", - "description": "List of user object", + "description": "Created user object", "required": true, "schema": { - "type": "array", - "items": { - "$ref": "#/definitions/User" - } + "$ref": "#/definitions/User" } } ], @@ -874,6 +874,21 @@ } }, "definitions": { + "ApiResponse": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "type": { + "type": "string" + }, + "message": { + "type": "string" + } + } + }, "Category": { "type": "object", "properties": { @@ -960,21 +975,6 @@ "name": "Tag" } }, - "ApiResponse": { - "type": "object", - "properties": { - "code": { - "type": "integer", - "format": "int32" - }, - "type": { - "type": "string" - }, - "message": { - "type": "string" - } - } - }, "Order": { "type": "object", "properties": {