package org.jooby.swagger; import org.jooby.test.ServerFeature; import org.junit.Test; public class SwaggerFeature extends ServerFeature { { use(Pets.class); new SwaggerUI().install(this); } @Test public void ui() throws Exception { request() .get("/swagger") .expect(200) .startsWith("<!DOCTYPE html>\n" + "<html>\n" + "<head>\n" + " <title>Swagger UI</title>"); request() .get("/swagger/pets") .expect(200) .startsWith("<!DOCTYPE html>\n" + "<html>\n" + "<head>\n" + " <title>Swagger UI</title>"); } @Test public void json() throws Exception { request() .get("/swagger/swagger.json") .expect("{\n" + " \"swagger\" : \"2.0\",\n" + " \"info\" : {\n" + " \"version\" : \"0.0.0\",\n" + " \"title\" : \"swagger API\"\n" + " },\n" + " \"basePath\" : \"/\",\n" + " \"tags\" : [ {\n" + " \"name\" : \"pets\"\n" + " } ],\n" + " \"schemes\" : [ \"http\" ],\n" + " \"consumes\" : [ \"application/json\" ],\n" + " \"produces\" : [ \"application/json\" ],\n" + " \"paths\" : {\n" + " \"/api/pets\" : {\n" + " \"get\" : {\n" + " \"tags\" : [ \"pets\" ],\n" + " \"summary\" : \"list\",\n" + " \"operationId\" : \"list\",\n" + " \"parameters\" : [ {\n" + " \"name\" : \"size\",\n" + " \"in\" : \"query\",\n" + " \"required\" : false,\n" + " \"type\" : \"integer\",\n" + " \"format\" : \"int32\"\n" + " } ],\n" + " \"responses\" : {\n" + " \"200\" : {\n" + " \"description\" : \"Success\",\n" + " \"schema\" : {\n" + " \"$ref\" : \"#/definitions/IterablePet\"\n" + " }\n" + " }\n" + " }\n" + " },\n" + " \"post\" : {\n" + " \"tags\" : [ \"pets\" ],\n" + " \"summary\" : \"create\",\n" + " \"operationId\" : \"create\",\n" + " \"parameters\" : [ {\n" + " \"in\" : \"body\",\n" + " \"name\" : \"pet\",\n" + " \"required\" : true,\n" + " \"schema\" : {\n" + " \"$ref\" : \"#/definitions/Pet\"\n" + " }\n" + " } ],\n" + " \"responses\" : {\n" + " \"200\" : {\n" + " \"description\" : \"Success\",\n" + " \"schema\" : {\n" + " \"$ref\" : \"#/definitions/Pet\"\n" + " }\n" + " }\n" + " }\n" + " }\n" + " },\n" + " \"/api/pets/{id}\" : {\n" + " \"get\" : {\n" + " \"tags\" : [ \"pets\" ],\n" + " \"summary\" : \"get\",\n" + " \"operationId\" : \"get\",\n" + " \"parameters\" : [ {\n" + " \"name\" : \"id\",\n" + " \"in\" : \"path\",\n" + " \"required\" : true,\n" + " \"type\" : \"integer\",\n" + " \"format\" : \"int32\"\n" + " } ],\n" + " \"responses\" : {\n" + " \"200\" : {\n" + " \"description\" : \"Success\",\n" + " \"schema\" : {\n" + " \"$ref\" : \"#/definitions/Pet\"\n" + " }\n" + " }\n" + " }\n" + " }\n" + " }\n" + " },\n" + " \"definitions\" : {\n" + " \"Pet\" : {\n" + " \"type\" : \"object\",\n" + " \"properties\" : {\n" + " \"id\" : {\n" + " \"type\" : \"integer\",\n" + " \"format\" : \"int32\"\n" + " },\n" + " \"name\" : {\n" + " \"type\" : \"string\"\n" + " }\n" + " }\n" + " }\n" + " }\n" + "}"); request() .get("/swagger/pets/swagger.json") .expect("{\n" + " \"swagger\" : \"2.0\",\n" + " \"info\" : {\n" + " \"version\" : \"0.0.0\",\n" + " \"title\" : \"swagger API\"\n" + " },\n" + " \"basePath\" : \"/\",\n" + " \"tags\" : [ {\n" + " \"name\" : \"pets\"\n" + " } ],\n" + " \"schemes\" : [ \"http\" ],\n" + " \"consumes\" : [ \"application/json\" ],\n" + " \"produces\" : [ \"application/json\" ],\n" + " \"paths\" : {\n" + " \"/api/pets\" : {\n" + " \"get\" : {\n" + " \"tags\" : [ \"pets\" ],\n" + " \"summary\" : \"list\",\n" + " \"operationId\" : \"list\",\n" + " \"parameters\" : [ {\n" + " \"name\" : \"size\",\n" + " \"in\" : \"query\",\n" + " \"required\" : false,\n" + " \"type\" : \"integer\",\n" + " \"format\" : \"int32\"\n" + " } ],\n" + " \"responses\" : {\n" + " \"200\" : {\n" + " \"description\" : \"Success\",\n" + " \"schema\" : {\n" + " \"$ref\" : \"#/definitions/IterablePet\"\n" + " }\n" + " }\n" + " }\n" + " },\n" + " \"post\" : {\n" + " \"tags\" : [ \"pets\" ],\n" + " \"summary\" : \"create\",\n" + " \"operationId\" : \"create\",\n" + " \"parameters\" : [ {\n" + " \"in\" : \"body\",\n" + " \"name\" : \"pet\",\n" + " \"required\" : true,\n" + " \"schema\" : {\n" + " \"$ref\" : \"#/definitions/Pet\"\n" + " }\n" + " } ],\n" + " \"responses\" : {\n" + " \"200\" : {\n" + " \"description\" : \"Success\",\n" + " \"schema\" : {\n" + " \"$ref\" : \"#/definitions/Pet\"\n" + " }\n" + " }\n" + " }\n" + " }\n" + " },\n" + " \"/api/pets/{id}\" : {\n" + " \"get\" : {\n" + " \"tags\" : [ \"pets\" ],\n" + " \"summary\" : \"get\",\n" + " \"operationId\" : \"get\",\n" + " \"parameters\" : [ {\n" + " \"name\" : \"id\",\n" + " \"in\" : \"path\",\n" + " \"required\" : true,\n" + " \"type\" : \"integer\",\n" + " \"format\" : \"int32\"\n" + " } ],\n" + " \"responses\" : {\n" + " \"200\" : {\n" + " \"description\" : \"Success\",\n" + " \"schema\" : {\n" + " \"$ref\" : \"#/definitions/Pet\"\n" + " }\n" + " }\n" + " }\n" + " }\n" + " }\n" + " },\n" + " \"definitions\" : {\n" + " \"Pet\" : {\n" + " \"type\" : \"object\",\n" + " \"properties\" : {\n" + " \"id\" : {\n" + " \"type\" : \"integer\",\n" + " \"format\" : \"int32\"\n" + " },\n" + " \"name\" : {\n" + " \"type\" : \"string\"\n" + " }\n" + " }\n" + " }\n" + " }\n" + "}"); } @Test public void yml() throws Exception { request() .get("/swagger/swagger.yml") .expect("---\n" + "swagger: \"2.0\"\n" + "info:\n" + " version: \"0.0.0\"\n" + " title: \"swagger API\"\n" + "basePath: \"/\"\n" + "tags:\n" + "- name: \"pets\"\n" + "schemes:\n" + "- \"http\"\n" + "consumes:\n" + "- \"application/json\"\n" + "produces:\n" + "- \"application/json\"\n" + "paths:\n" + " /api/pets:\n" + " get:\n" + " tags:\n" + " - \"pets\"\n" + " summary: \"list\"\n" + " operationId: \"list\"\n" + " parameters:\n" + " - name: \"size\"\n" + " in: \"query\"\n" + " required: false\n" + " type: \"integer\"\n" + " format: \"int32\"\n" + " responses:\n" + " 200:\n" + " description: \"Success\"\n" + " schema:\n" + " $ref: \"#/definitions/IterablePet\"\n" + " post:\n" + " tags:\n" + " - \"pets\"\n" + " summary: \"create\"\n" + " operationId: \"create\"\n" + " parameters:\n" + " - in: \"body\"\n" + " name: \"pet\"\n" + " required: true\n" + " schema:\n" + " $ref: \"#/definitions/Pet\"\n" + " responses:\n" + " 200:\n" + " description: \"Success\"\n" + " schema:\n" + " $ref: \"#/definitions/Pet\"\n" + " /api/pets/{id}:\n" + " get:\n" + " tags:\n" + " - \"pets\"\n" + " summary: \"get\"\n" + " operationId: \"get\"\n" + " parameters:\n" + " - name: \"id\"\n" + " in: \"path\"\n" + " required: true\n" + " type: \"integer\"\n" + " format: \"int32\"\n" + " responses:\n" + " 200:\n" + " description: \"Success\"\n" + " schema:\n" + " $ref: \"#/definitions/Pet\"\n" + "definitions:\n" + " Pet:\n" + " type: \"object\"\n" + " properties:\n" + " id:\n" + " type: \"integer\"\n" + " format: \"int32\"\n" + " name:\n" + " type: \"string\"\n" + ""); request() .get("/swagger/pets/swagger.yml") .expect("---\n" + "swagger: \"2.0\"\n" + "info:\n" + " version: \"0.0.0\"\n" + " title: \"swagger API\"\n" + "basePath: \"/\"\n" + "tags:\n" + "- name: \"pets\"\n" + "schemes:\n" + "- \"http\"\n" + "consumes:\n" + "- \"application/json\"\n" + "produces:\n" + "- \"application/json\"\n" + "paths:\n" + " /api/pets:\n" + " get:\n" + " tags:\n" + " - \"pets\"\n" + " summary: \"list\"\n" + " operationId: \"list\"\n" + " parameters:\n" + " - name: \"size\"\n" + " in: \"query\"\n" + " required: false\n" + " type: \"integer\"\n" + " format: \"int32\"\n" + " responses:\n" + " 200:\n" + " description: \"Success\"\n" + " schema:\n" + " $ref: \"#/definitions/IterablePet\"\n" + " post:\n" + " tags:\n" + " - \"pets\"\n" + " summary: \"create\"\n" + " operationId: \"create\"\n" + " parameters:\n" + " - in: \"body\"\n" + " name: \"pet\"\n" + " required: true\n" + " schema:\n" + " $ref: \"#/definitions/Pet\"\n" + " responses:\n" + " 200:\n" + " description: \"Success\"\n" + " schema:\n" + " $ref: \"#/definitions/Pet\"\n" + " /api/pets/{id}:\n" + " get:\n" + " tags:\n" + " - \"pets\"\n" + " summary: \"get\"\n" + " operationId: \"get\"\n" + " parameters:\n" + " - name: \"id\"\n" + " in: \"path\"\n" + " required: true\n" + " type: \"integer\"\n" + " format: \"int32\"\n" + " responses:\n" + " 200:\n" + " description: \"Success\"\n" + " schema:\n" + " $ref: \"#/definitions/Pet\"\n" + "definitions:\n" + " Pet:\n" + " type: \"object\"\n" + " properties:\n" + " id:\n" + " type: \"integer\"\n" + " format: \"int32\"\n" + " name:\n" + " type: \"string\"\n" + ""); } }