def test_simple_construction(): """ Constructing a simple API produces a valid schema. """ # construction works by constructor swagger = Swagger( swagger="2.0", info=Info( title="Hello", version="1.0.0", ), ) # construction works by assignment swagger.paths = Paths({ "/hello": PathItem( get=Operation( responses=Responses({ "200": Response( description="Returns hello", ) }) ), ), }) # constructed schema validates swagger.validate()
def test_simple_construction(): """ Constructing a simple API produces a valid schema. """ # construction works by constructor swagger = Swagger( swagger="2.0", info=Info( title="Hello", version="1.0.0", ), ) # construction works by assignment swagger.paths = Paths({ "/hello": PathItem(get=Operation(responses=Responses( {"200": Response(description="Returns hello", )})), ), }) # constructed schema validates swagger.validate()
def output(self): swagger = Swagger( swagger="2.0", info=Info(title=self.title, version="0.1"), host=self.host, basePath="/", paths=Paths(self.paths), ) with open(self.output_file, 'w') as fp: json.dump(swagger, fp, ensure_ascii=False, sort_keys=True, indent=2)
def load(fileobj): """ Load swagger model objects (from json). """ return Swagger.load(fileobj)
def test_crud_construction(): """ Constructing a CRUD API from the DSL produces a valid schema. """ swagger = Swagger( swagger="2.0", info=Info( title="Example", version="1.0.0", ), basePath="/api", consumes=MediaTypeList([ MimeType("application/json"), ]), produces=MediaTypeList([ MimeType("application/json"), ]), paths=Paths(), definitions=Definitions(), ) # definitions swagger.definitions.update( Error=Schema(Error), NewPerson=Schema(NewPerson), Person=Schema(Person), PersonList=Schema(PersonList), ) # collection operations swagger.paths.update({ "/person": PathItem( get=Operation( description="Search the collection of (all) people", operationId="get_person_list", parameters=ParametersList([ query_param("Pagination start index", "index", "integer"), query_param("Pagination size", "size", "integer"), ]), responses=Responses( **{ "200": response("Success", "PersonList"), "400": response("Malformed Syntax", "Error"), "default": response("Unexpected Error", "Error"), }), ), post=Operation( description="Create a new person", operationId="create_person", parameters=ParametersList([ body_param("NewPerson"), ]), responses=Responses( **{ "201": response("Created a new person", "Person", headers=Headers(**{ "Location": header("URI of created person"), })), "400": response("Malformed Syntax", "Error"), "409": response("Conflict", "Error"), "default": response("Unexpected Error", "Error"), }), ), ), }) # instance operations swagger.paths.update({ "/person/{personId}": PathItem( get=Operation( description="Get a person", operationId="get_person", parameters=ParametersList([ path_param("The id of the person", "personId"), ]), responses=Responses( **{ "200": response("Success", "Person"), "404": response("Not Found", "Error"), "default": response("Unexpected Error", "Error"), }), ), put=Operation( description="Update a person", operationId="update_person", parameters=ParametersList([ path_param("The id of the person", "personId"), ]), responses=Responses( **{ "200": response("Success", "Person"), "400": response("Malformed Syntax", "Error"), "404": response("Not Found", "Error"), "default": response("Unexpected Error", "Error"), }), ), delete=Operation( description="Delete a person", operationId="delete_person", parameters=ParametersList([ path_param("The id of the person", "personId"), ]), responses=Responses( **{ "204": response("Success"), "404": response("Not Found", "Error"), "default": response("Unexpected Error", "Error"), }), ), ), }) swagger.validate()
def test_crud_construction(): """ Constructing a CRUD API from the DSL produces a valid schema. """ swagger = Swagger( swagger="2.0", info=Info( title="Example", version="1.0.0", ), basePath="/api", consumes=MediaTypeList([ MimeType("application/json"), ]), produces=MediaTypeList([ MimeType("application/json"), ]), paths=Paths(), definitions=Definitions(), ) # definitions swagger.definitions.update( Error=Schema(Error), NewPerson=Schema(NewPerson), Person=Schema(Person), PersonList=Schema(PersonList), ) # collection operations swagger.paths.update({ "/person": PathItem( get=Operation( description="Search the collection of (all) people", operationId="get_person_list", parameters=ParametersList([ query_param("Pagination start index", "index", "integer"), query_param("Pagination size", "size", "integer"), ]), responses=Responses(**{ "200": response("Success", "PersonList"), "400": response("Malformed Syntax", "Error"), "default": response("Unexpected Error", "Error"), }), ), post=Operation( description="Create a new person", operationId="create_person", parameters=ParametersList([ body_param("NewPerson"), ]), responses=Responses(**{ "201": response("Created a new person", "Person", headers=Headers(**{ "Location": header("URI of created person"), })), "400": response("Malformed Syntax", "Error"), "409": response("Conflict", "Error"), "default": response("Unexpected Error", "Error"), }), ), ), }) # instance operations swagger.paths.update({ "/person/{personId}": PathItem( get=Operation( description="Get a person", operationId="get_person", parameters=ParametersList([ path_param("The id of the person", "personId"), ]), responses=Responses(**{ "200": response("Success", "Person"), "404": response("Not Found", "Error"), "default": response("Unexpected Error", "Error"), }), ), put=Operation( description="Update a person", operationId="update_person", parameters=ParametersList([ path_param("The id of the person", "personId"), ]), responses=Responses(**{ "200": response("Success", "Person"), "400": response("Malformed Syntax", "Error"), "404": response("Not Found", "Error"), "default": response("Unexpected Error", "Error"), }), ), delete=Operation( description="Delete a person", operationId="delete_person", parameters=ParametersList([ path_param("The id of the person", "personId"), ]), responses=Responses(**{ "204": response("Success"), "404": response("Not Found", "Error"), "default": response("Unexpected Error", "Error"), }), ), ), }) swagger.validate()
def test_invalid_swagger(): """ Validation of top-level Swagger model raises Validation error if incomplete. """ assert_that(calling(Swagger().validate), raises(ValidationError))