package io.swagger;
import io.swagger.converter.ModelConverters;
import io.swagger.matchers.SerializationMatchers;
import io.swagger.models.Contact;
import io.swagger.models.Info;
import io.swagger.models.Model;
import io.swagger.models.Operation;
import io.swagger.models.Path;
import io.swagger.models.Person;
import io.swagger.models.Response;
import io.swagger.models.Scheme;
import io.swagger.models.Error;
import io.swagger.models.SecurityRequirement;
import io.swagger.models.Swagger;
import io.swagger.models.auth.OAuth2Definition;
import io.swagger.models.parameters.PathParameter;
import io.swagger.models.parameters.QueryParameter;
import io.swagger.models.properties.LongProperty;
import io.swagger.models.properties.RefProperty;
import io.swagger.models.properties.StringProperty;
import io.swagger.util.ResourceUtils;
import org.testng.annotations.Test;
import java.io.IOException;
public class SecurityDefinitionTest {
@Test(description = "it should create a model with security requirements")
public void createModelWithSecurityRequirements() throws IOException{
final Model personModel = ModelConverters.getInstance().read(Person.class).get("Person");
final Model errorModel = ModelConverters.getInstance().read(Error.class).get("Error");
final Info info = new Info()
.version("1.0.0")
.title("Swagger Petstore");
final Contact contact = new Contact()
.name("Swagger API Team")
.email("foo@bar.baz")
.url("http://swagger.io");
info.setContact(contact);
final Swagger swagger = new Swagger()
.info(info)
.host("petstore.swagger.io")
.scheme(Scheme.HTTP)
.consumes("application/json")
.produces("application/json")
.model("Person", personModel)
.model("Error", errorModel);
swagger.securityDefinition("githubAccessCode",
new OAuth2Definition()
.accessCode("http://foo.com/accessCode", "http://foo.com/tokenUrl")
.scope("user:email", "Grants read access to a user’s email addresses."));
final Operation get = new Operation()
.produces("application/json")
.summary("finds pets in the system")
.description("a longer description")
.tag("Pet Operations")
.operationId("get pet by id");
get.parameter(new QueryParameter()
.name("tags")
.description("tags to filter by")
.required(false)
.property(new StringProperty())
);
get.parameter(new PathParameter()
.name("petId")
.description("pet to fetch")
.property(new LongProperty())
);
final Response response = new Response()
.description("pets returned")
.schema(new RefProperty().asDefault("Person"));
final Response errorResponse = new Response()
.description("error response")
.schema(new RefProperty().asDefault("Error"));
get.response(200, response)
.defaultResponse(errorResponse)
.security(new SecurityRequirement("internal_oauth2")
.scope("user:email"))
.security(new SecurityRequirement("api_key"));
swagger.path("/pets", new Path().get(get));
final String json = ResourceUtils.loadClassResource(getClass(), "ModelWithSecurityRequirements.json");
SerializationMatchers.assertEqualsToJson(swagger, json);
}
}