Skip to content

allOf validation not working? #120

Open
@hotmeteor

Description

@hotmeteor

Hi, I'm having issues getting an example spec using allOf to work. This is the spec, as provided by the OpenAPI docs:

openapi: 3.0.0
info:
  title: AllOf.v1
  version: '1.0'
servers:
  - url: 'http://localhost:3000'
paths:
  /pets:
    patch:
      requestBody:
        content:
          application/json:
            schema:
              oneOf:
                - $ref: '#/components/schemas/Cat'
                - $ref: '#/components/schemas/Dog'
              discriminator:
                propertyName: pet_type
      responses:
        '200':
          description: Updated
components:
  schemas:
    Pet:
      type: object
      required:
        - pet_type
      properties:
        pet_type:
          type: string
    Dog: # "Dog" is a value for the pet_type property (the discriminator value)
      allOf: # Combines the main `Pet` schema with `Dog`-specific properties
        - $ref: '#/components/schemas/Pet'
        - type: object
          # all other properties specific to a `Dog`
          properties:
            bark:
              type: boolean
            breed:
              type: string
              enum: [ Dingo, Husky, Retriever, Shepherd ]
    Cat: # "Cat" is a value for the pet_type property (the discriminator value)
      allOf: # Combines the main `Pet` schema with `Cat`-specific properties
        - $ref: '#/components/schemas/Pet'
        - type: object
          # all other properties specific to a `Cat`
          properties:
            hunts:
              type: boolean
            age:
              type: integer

My test attempts to send a JSON PATCH request to the /pets endpoint, using:

[
    'pet_type' => 'Cat',
    'age' => 3,
    'hunts' => true,
]

However, this only results in:

Request body did not match provided JSON schema.

Digging in a bit more, it appears that the validator doesn't see the pet_type property it should be inheriting from the Pet component.

Any experience with this, or ideas? Thanks in advance.

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions