Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

warning: invalid allOf variant warning if allOf includes oneOf #2827

Open
corneliu-petrescu opened this issue Apr 10, 2024 · 5 comments
Open
Labels
bug Something isn't working

Comments

@corneliu-petrescu
Copy link

Hi,

We're seeing a parse warning when trying to lint the following API spec:

Example: -- invalid allOf variant

---
openapi: 3.0.3
info:
title: Test
version: 3.0.0
servers:
- url: /test
  description: Test
tags:
- name: Test
  description: test
paths:
/test:
  post:
    description: test
    operationId: test
    tags:
      - Test
    requestBody:
      content:
        application/vnd.api+json:
          schema:
            allOf:
              - type: object
                properties:
                  prop1:
                     type: string
                required: [prop1]
              - oneOf:
                  - type: object
                    properties:
                      prop2:
                        type: string
                  - type: object
                    properties:
                      prop3:
                        type: string
    responses:
      '201':
        description: success
        content:
          application/vnd.api+json:
            schema:
              type: object
          location:
            schema:
              type: string
@corneliu-petrescu corneliu-petrescu added the bug Something isn't working label Apr 10, 2024
@niclim
Copy link
Contributor

niclim commented Apr 11, 2024

Ah interesting, it looks like our mergeAllOf handler doesn't handle this case.

This might be a little trickier to implement, given each oneOf child would result in a top level polymorphic item, and you could have multiple oneOf children which would result in all combinations of polymorphic options.

@corneliu-petrescu
Copy link
Author

We have 2 or 3 APIs that use the above approach. What would be the impact of it at this moment?
Is it just a warning?

@niclim
Copy link
Contributor

niclim commented Apr 16, 2024

I think right now it'll exclude values in oneOf blocks that are nested inside of an allOf block. This would affect the diff that's generated and rules run against it.

@corneliu-petrescu
Copy link
Author

For now I'm investigating rewriting some of the schemas using

oneOf
 - allOf
     prop1
     prop2
 - allOf
     prop1
     prop3
     ```
 This does not give any warnings
     

@checkin247
Copy link

I think I just came across the same ...

optic diff reference\Configuration.yaml --last-change 
  1. invalid allOf variant at reference\Configuration.yaml:103:3535
    this is a model with a allOf of two models, where the second model has a oneOf (many)
  2. Operations: No operations changed
    where I have remove the required attribute of a property in a Model listed in the oneOf

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

3 participants