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

bug: anyOf / oneOf with objects and default values #711

Open
kroc702 opened this issue Feb 13, 2024 · 5 comments
Open

bug: anyOf / oneOf with objects and default values #711

kroc702 opened this issue Feb 13, 2024 · 5 comments

Comments

@kroc702
Copy link

kroc702 commented Feb 13, 2024

Hello,
When mixing several objects with anyOf or oneOf, default values may be wrongly applied and interfere the validation.
Cf attached file for a simple use case that where used.
testSchemaValidator.zip

Here a first output example:

input value: {
    "b": 2
}
schema: {
    "anyOf": [
        {
            "required": [
                "a"
            ],
            "properties": {
                "a": {
                    "type": "integer"
                },
                "aDefault": {
                    "type": "integer",
                    "default": 1
                }
            },
            "type": "object",
            "additionalProperties": false
        },
        {
            "required": [
                "b"
            ],
            "properties": {
                "b": {
                    "type": "integer"
                },
                "bDefault": {
                    "type": "integer",
                    "default": 2
                }
            },
            "type": "object",
            "additionalProperties": false
        }
    ]
}
/aThe property a is required
The property b is not defined and the definition does not allow additional properties
The property aDefault is not defined and the definition does not allow additional properties
Failed to match at least one schema
output value: {
    "b": 2,
    "aDefault": 1,
    "bDefault": 2
}

result should be valid and { "b": 2, "bDefault": 2}

@kroc702
Copy link
Author

kroc702 commented Feb 13, 2024

Note that order is important: if input value is 'a', it's working as expected

input value: {
    "a": 1
}
schema: {
    "anyOf": [... same as above ... ]
}
value is valid
output value: {
    "a": 1,
    "aDefault": 1
}

@kroc702
Copy link
Author

kroc702 commented Feb 13, 2024

With oneOf

input value: {
    "a": 1
}
schema: {
    "oneOf": [... same as above ... ]
}
value is valid
output value: {
    "a": 1,
    "aDefault": 1,
    "bDefault": 2
}

valid but "bDefault" shouldn't be populated.

@kroc702
Copy link
Author

kroc702 commented Feb 13, 2024

With oneOf, different order

input value: {
    "b": 2
}
schema: {
    "oneOf": [... same as above ...]
}
The property aDefault is not defined and the definition does not allow additional properties
/aThe property a is required
The property b is not defined and the definition does not allow additional properties
Failed to match exactly one schema
output value: {
    "b": 2,
    "aDefault": 1,
    "bDefault": 2
}

result should be valid and { "b": 2, "bDefault": 2}

@DannyvdSluijs
Copy link

@kroc702 thanks for the extensive information. I’ll see what I can find from te above or did you already did some debugging and perhaps and close to a PR?

One question I still have is which version of this library are you using? As that would be very informative in the context of this bug.

@kroc702
Copy link
Author

kroc702 commented Feb 13, 2024

I forget to mention version:

            "name": "justinrainbow/json-schema",
            "version": "v5.2.13",
            "source": {
                "type": "git",
                "url": "https://github.com/justinrainbow/json-schema.git",
                "reference": "fbbe7e5d79f618997bc3332a6f49246036c45793"
            },

And no I didn't debug this code yet. I'll add info here if I take the time to do it.

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

2 participants