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

Library does not support 'oneOf', 'anyOf', 'allOf' and 'not' #51

Open
domiTEN opened this issue Apr 22, 2020 · 24 comments
Open

Library does not support 'oneOf', 'anyOf', 'allOf' and 'not' #51

domiTEN opened this issue Apr 22, 2020 · 24 comments
Assignees

Comments

@domiTEN
Copy link

domiTEN commented Apr 22, 2020

Just to let you know that your library does not support oneOf, anyOf, allOf and not tags.

More information: https://swagger.io/docs/specification/data-models/oneof-anyof-allof-not/

byjg referenced this issue in plusForta/php-swagger-test Apr 22, 2020
@iskrenvankov
Copy link

iskrenvankov commented Sep 11, 2020

Hi, I saw there's a (partial) fix for this in the plusForta/php-swagger-test fork.
Can we expect those changes to be merged back in the main project here?

Edit: that patch is a very naive implementation that doesn't actually work for nested references.
So I'm changing my original question to: Can we expect full support for the oneOf, anyOf, allOf, and not tags?

@byjg
Copy link
Owner

byjg commented Sep 11, 2020

I am planning moving on this until the end of the month. But any help is appreciate. Another interesting point: if we see some fork with a cool feature anyone can suggest a PR and we'll analyse with care 👍

@iskrenvankov
Copy link

Sounds great! At this point I can't offer code assistance but once it's out on some dev branch I can test it against my codebase since I have already incorporated the library and I have particular test cases that fail now and should pass when it works.

@JohnRoux
Copy link

Just encountered this issue today as well.
I applied the fix from that commit and it works 100% for my usecase if that helps.

I'm very in favour of getting that PR'd in otherwise I won't be able to use the assertRequest for any of my Schema's 😭

@byjg
Copy link
Owner

byjg commented Sep 14, 2020

I sent a message since april to the PR owner and I didn't get any answer yet. So, I'll implement by myself then.

@byjg
Copy link
Owner

byjg commented Sep 14, 2020

I merged his PR. I still have to add unit test before integrate to the main branch. If you can produce any swagger.json with these use cases I'd appreaciate and will make it faster.

Here the instructions to use the dev branch:
#57 (comment)

@JohnRoux
Copy link

I'm actually using this via a laravel wrapper
Probably want to write my own wrapper though as had to pull a lot of stuff out of that one

https://dev.saythanks.app/api/documentation
https://dev.saythanks.app/docs/api-docs.json

I forked the wrapper and pushed through the 3.1.1.x-dev version. All my auth tests are working 🚀
(See the JWT Schema, it uses AllOf and then 4 props)

@JohnRoux
Copy link

https://gist.github.com/JohnRoux/9a85c2b7a98d4e5bc1a3a6a45434f244

That's how I'm using it at the moment.
Want to pull a large chunk of the helper code out into a laravel package for it though

@byjg
Copy link
Owner

byjg commented Sep 15, 2020

Awesome! This will help a lot.

@byjg byjg self-assigned this Sep 15, 2020
@JohnRoux
Copy link

For sure, scream if I can help at all 👍

@byjg
Copy link
Owner

byjg commented Sep 15, 2020

Can I add your swagger implementation into the project?

@JohnRoux
Copy link

Ummm, it is a private project still, let me rather generate a fresh example doc for you with some of the specifics taken out.

@JohnRoux
Copy link

I can't promise that this is great or even good 😅
But it's technically allowed by the spec and seems to work well for my usecase.

https://gist.github.com/JohnRoux/d2e3963e29c040b3b503675ea95d89af

@byjg
Copy link
Owner

byjg commented Sep 16, 2020

I'll use this to create the unit tests. Thanks :)

@JohnRoux
Copy link

Bearer of bad news :(
That PR didn't actually fix things entirely for allOf.

Context:
I use an Item schema which my models "extend" in their own schema's like this

When running the response validation, I get this error:
ByJG\ApiTools\Exception\NotMatchedException: The property(ies) 'name, email, type, roles_id, companies_id, created_at, updated_at' has not defined in '#/components/schemas/Item'

So it's clearly found the deepest "allOf" and is trying to match the whole object against that. :(

I think the allOfmatching needs to amalgamate an array all the properties from it's children shema/properties and then match against that single array

@pionl
Copy link

pionl commented Nov 2, 2020

hi, in our use cases our implementation of allOf works (mentioned in laravel-wrapper), did not have the time to make PR - should i make the time?

@JohnRoux
Copy link

JohnRoux commented Nov 4, 2020

Yeah please!

@iskrenvankov
Copy link

P.S. a note that enums fall under the same error ByJG\ApiTools\Exception\GenericSwaggerException: Not all cases are defined. Please open an issue about this.

For example:

@OA\Property(
    property="my_enum_property",
    enum={"foo", "bar"}
)

@pionl
Copy link

pionl commented Nov 11, 2020

Ok, I'try to make the time today and send PR 👍

@kachar
Copy link

kachar commented Jun 10, 2021

Any update on this topic?

@byjg
Copy link
Owner

byjg commented Jun 10, 2021

The implementation was complete, but still some fixes to do.

I have this PR: #67 to test. I would be glad if you could help me to test it.

@kachar
Copy link

kachar commented Jun 11, 2021

@byjg @ODAEL Just tested the PR and it seems it includes only the allOf case and not oneOf scenario so even if that works it still errors with Not all cases are defined

I don't have test setup for allOf so I can't validate that right now.

@ODAEL
Copy link
Contributor

ODAEL commented Jun 11, 2021

@kachar Could you please provide more details or some examples? As I know, oneOf case should work properly, and your Not all cases are defined may be caused by other problems.

@kachar
Copy link

kachar commented Jun 11, 2021

I'll try to setup a testcase, thanks for the update

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

7 participants