OpenAPITools / OpenAPITools/openapi-diff
[bug] [polymorphism] Changes in child schema are ignored when only parent schema is directly referenced
Nessuno ha ancora preso questa issue.
- Lingua principale
- Java
- Stelle
- 1.1k
- Fork
- 190
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Descrizione
When using AllOf for polymorphism, when a property references a parent schema using ref and a change is done to a child schema which is not referenced directly anywhere in the OAS file, changes done to child schema are ignored in the differ output.
Example schema:
openapi: 3.0.0
servers:
- url: 'http://petstore.swagger.io/v2'
info:
description: >-
This is a sample server Petstore server. You can find out more about
Swagger at [http://swagger.io](http://swagger.io) or on [irc.freenode.net,
#swagger](http://swagger.io/irc/). For this sample, you can use the api key
`special-key` to test the authorization filters.
version: 1.0.0
title: Swagger Petstore
termsOfService: 'http://swagger.io/terms/'
contact:
email: apiteam@swagger.io
license:
name: Apache 2.0
url: 'http://www.apache.org/licenses/LICENSE-2.0.html'
tags:
- name: pet
description: Everything about your Pets
externalDocs:
description: Find out more
url: 'http://swagger.io'
- name: store
description: Access to Petstore orders
- name: user
description: Operations about user
externalDocs:
description: Find out more about our store
url: 'http://swagger.io'
paths:
/pet/findByStatus:
get:
tags:
- pet
summary: Finds Pets by status
description: Multiple status values can be provided with comma separated strings
operationId: findPetsByStatus
parameters:
- name: status
in: query
description: Status values that need to be considered for filter
required: true
explode: true
schema:
type: array
items:
type: string
enum:
- available
- pending
- sold
default: available
responses:
'200':
description: successful operation
content:
application/json:
schema:
type: object
properties:
pets:
type: array
items:
$ref: '#/components/schemas/Pet'
'400':
description: Invalid status value
security:
- petstore_auth:
- 'write:pets'
- 'read:pets'
externalDocs:
description: Find out more about Swagger
url: 'http://swagger.io'
components:
requestBodies:
Pet:
content:
application/json:
schema:
$ref: '#/components/schemas/Pet'
description: Pet object that needs to be added to the store
required: true
securitySchemes:
petstore_auth:
type: oauth2
flows:
implicit:
authorizationUrl: 'http://petstore.swagger.io/oauth/dialog'
scopes:
'write:pets': modify pets in your account
'read:pets': read your pets
api_key:
type: apiKey
name: api_key
in: header
schemas:
BasePet:
type: object
properties:
pet_color:
type: string
Pet:
allOf:
- $ref: '#/components/schemas/BasePet'
type: object
discriminator:
propertyName: pet_type
mapping:
dog: '#/components/schemas/Dog'
cat: '#/components/schemas/Cat'
required:
- pet_type
properties:
pet_type:
nullable: false
allOf:
- type: string
Cat:
description: Cat class
allOf:
- $ref: '#/components/schemas/Pet'
type: object
discriminator:
propertyName: pet_type
mapping:
dog: '#/components/schemas/Cat'
properties:
name:
type: string
toy:
$ref: '#/components/schemas/Toy'
Dog:
description: Dog class
allOf:
- $ref: '#/components/schemas/Pet'
type: object
discriminator:
propertyName: pet_type
mapping:
dog: '#/components/schemas/Cat'
properties:
bark:
type: string
Toy:
description: Toy class
type: object
discriminator:
propertyName: toy_type
mapping:
ball: '#/components/schemas/Ball'
properties:
toy_type:
type: string
price:
type: number
Ball:
description: Ball class
allOf:
- $ref: '#/components/schemas/Toy'
- type: object
properties:
size:
type: string
discriminator:
propertyName: toy_type
mapping:
ball: '#/components/schemas/Ball'
If I add new property material to Ball, I would expect to see changes in GET /pet/findByStatus operation, while the actual situation is, that the changes are ignored.
Tested with 2.1.0-SNAPSHOT.
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Direzione di ricerca
Inizia riproducendo il caso segnalato con il documento OpenAPI fornito e confronta l'output di differ dopo aver aggiunto Ball.material. Traccia come il riferimento GET /pet/findByStatus raggiunge gli schemi polimorfici e verifica che siano incluse le modifiche agli schemi figlio referenziati indirettamente. Il lavoro è completato quando l'output segnala la modifica a Ball e un test di regressione copre questo scenario.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- java, openapi
- Ambito
- api
- Tipo di issue
- Bug
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Stato di attività
- Ferma
- Chiarezza
- Abbastanza chiara
- Idoneità per principianti
- 38/100