mirror of
https://github.com/correl/openapi-core.git
synced 2024-11-28 11:09:52 +00:00
56be4b10eb
Currently if valid swagger syntax is used for model composition an error will be thrown due to the lack of a type property. This was corrected by making object the default type. schema_type = schema_deref.get('type', 'object') I changed the swagger definition to test for this. Now PetCreate is a composite of PetCreatePartOne and PetCreatePartTwo. However, this caused `test_post_pets_empty_body` to fail, which turned out to be a bug in the required properties. In `_unmarshal_object` the `get_all_properties` method is called to get all properties from the subschemas. However, this is not done for required properties, meaning that only top level required properties will be correctly validated. I have added a `get_all_required_properties’ to fix this. This caused `test_get_pets` to fail. In this case the bug allowed an incorrect test case to be introduced. Pet requires `id`, but it also requires name because it inherits from PetCreate. I have fixed this test case by adding the missing required property. After these changes `test_get_pet_not_found` failed due to a string formatting error (double quotes vs single quotes). I fixed this by switching to dictionary comparisons.
215 lines
4.8 KiB
YAML
215 lines
4.8 KiB
YAML
openapi: "3.0.0"
|
|
info:
|
|
version: 1.0.0
|
|
title: Swagger Petstore
|
|
license:
|
|
name: MIT
|
|
servers:
|
|
- url: http://petstore.swagger.io/{version}
|
|
variables:
|
|
version:
|
|
enum:
|
|
- v1
|
|
- v2
|
|
default: v1
|
|
paths:
|
|
/pets:
|
|
get:
|
|
summary: List all pets
|
|
operationId: listPets
|
|
tags:
|
|
- pets
|
|
parameters:
|
|
- name: page
|
|
in: query
|
|
schema:
|
|
type: integer
|
|
format: int32
|
|
default: 1
|
|
- name: limit
|
|
in: query
|
|
description: How many items to return at one time (max 100)
|
|
required: true
|
|
schema:
|
|
type: integer
|
|
format: int32
|
|
nullable: true
|
|
- name: search
|
|
in: query
|
|
description: Search query
|
|
schema:
|
|
type: string
|
|
default: ""
|
|
allowEmptyValue: true
|
|
- name: ids
|
|
in: query
|
|
description: Filter pets with Ids
|
|
schema:
|
|
type: array
|
|
items:
|
|
type: integer
|
|
format: int32
|
|
- name: tags
|
|
in: query
|
|
description: Filter pets with tags
|
|
schema:
|
|
type: array
|
|
items:
|
|
$ref: "#/components/schemas/Tag"
|
|
explode: false
|
|
responses:
|
|
'200':
|
|
description: An paged array of pets
|
|
headers:
|
|
x-next:
|
|
description: A link to the next page of responses
|
|
schema:
|
|
type: string
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: "#/components/schemas/PetsData"
|
|
post:
|
|
summary: Create a pet
|
|
operationId: createPets
|
|
tags:
|
|
- pets
|
|
requestBody:
|
|
required: true
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/PetCreate'
|
|
responses:
|
|
'201':
|
|
description: Null response
|
|
default:
|
|
$ref: "#/components/responses/ErrorResponse"
|
|
/pets/{petId}:
|
|
get:
|
|
summary: Info for a specific pet
|
|
operationId: showPetById
|
|
tags:
|
|
- pets
|
|
parameters:
|
|
- name: petId
|
|
in: path
|
|
required: true
|
|
description: The id of the pet to retrieve
|
|
schema:
|
|
type: integer
|
|
format: int64
|
|
responses:
|
|
'200':
|
|
description: Expected response to a valid request
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: "#/components/schemas/PetData"
|
|
default:
|
|
$ref: "#/components/responses/ErrorResponse"
|
|
components:
|
|
schemas:
|
|
Address:
|
|
type: object
|
|
x-model: Address
|
|
required:
|
|
- city
|
|
properties:
|
|
street:
|
|
type: string
|
|
city:
|
|
type: string
|
|
Tag:
|
|
type: string
|
|
enum:
|
|
- cats
|
|
- dogs
|
|
- birds
|
|
Position:
|
|
type: integer
|
|
enum:
|
|
- 1
|
|
- 2
|
|
- 3
|
|
Pet:
|
|
type: object
|
|
x-model: Pet
|
|
allOf:
|
|
- $ref: "#/components/schemas/PetCreate"
|
|
required:
|
|
- id
|
|
properties:
|
|
id:
|
|
type: integer
|
|
format: int64
|
|
PetCreate:
|
|
x-model: PetCreate
|
|
allOf:
|
|
- $ref: "#/components/schemas/PetCreatePartOne"
|
|
- $ref: "#/components/schemas/PetCreatePartTwo"
|
|
PetCreatePartOne:
|
|
type: object
|
|
x-model: PetCreatePartOne
|
|
required:
|
|
- name
|
|
properties:
|
|
name:
|
|
type: string
|
|
tag:
|
|
$ref: "#/components/schemas/Tag"
|
|
address:
|
|
$ref: "#/components/schemas/Address"
|
|
PetCreatePartTwo:
|
|
type: object
|
|
x-model: PetCreatePartTwo
|
|
properties:
|
|
position:
|
|
$ref: "#/components/schemas/Position"
|
|
healthy:
|
|
type: boolean
|
|
Pets:
|
|
type: array
|
|
items:
|
|
$ref: "#/components/schemas/Pet"
|
|
PetsData:
|
|
type: object
|
|
required:
|
|
- data
|
|
properties:
|
|
data:
|
|
$ref: "#/components/schemas/Pets"
|
|
PetData:
|
|
type: object
|
|
required:
|
|
- data
|
|
properties:
|
|
data:
|
|
$ref: "#/components/schemas/Pet"
|
|
Error:
|
|
type: object
|
|
required:
|
|
- code
|
|
- message
|
|
properties:
|
|
code:
|
|
type: integer
|
|
format: int32
|
|
message:
|
|
type: string
|
|
ExtendedError:
|
|
allOf:
|
|
- $ref: "#/components/schemas/Error"
|
|
- type: object
|
|
required:
|
|
- rootCause
|
|
properties:
|
|
rootCause:
|
|
type: string
|
|
responses:
|
|
ErrorResponse:
|
|
description: unexpected error
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: "#/components/schemas/ExtendedError"
|