From ce91d00dd2c1b9dfac43c695710e5be84c9eaf5e Mon Sep 17 00:00:00 2001 From: Frederic BIDON Date: Tue, 25 Aug 2026 15:00:32 +0200 Subject: [PATCH 1/4] test(messages): halt on the first failing fixture only in dev mode Both Test_MessageQuality*_Issue44 passed haltOnErrors=true, while testWalkSpecs runs every fixture with t.Parallel(). checkMustHalt therefore stopped the run on whichever fixture lost the race and the rest were never reported, so the fixture named in the failure changed from run to run. haltOnErrors now follows DebugTest, which already decides whether the fixtures run serially. A normal run reports every failing fixture; a run with SWAGGER_DEBUG_TEST=1 still stops at the first one, serially, which is what that mode is for. Co-Authored-By: Claude Opus 5 (1M context) Signed-off-by: Frederic BIDON --- messages_test.go | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/messages_test.go b/messages_test.go index ceb6f91..29c56dc 100644 --- a/messages_test.go +++ b/messages_test.go @@ -57,7 +57,7 @@ func Test_MessageQualityContinueOnErrors_Issue44(t *testing.T) { skipNotify(t) t.SkipNow() } - errs := testMessageQuality(t, true, true) /* set haltOnErrors=true to iterate spec by spec */ + errs := testMessageQuality(t, DebugTest, true) /* halts on the first failing fixture in dev mode, to iterate spec by spec */ assert.Zero(t, errs, "Message testing didn't match expectations") } @@ -67,7 +67,7 @@ func Test_MessageQualityStopOnErrors_Issue44(t *testing.T) { skipNotify(t) t.SkipNow() } - errs := testMessageQuality(t, true, false) /* set haltOnErrors=true to iterate spec by spec */ + errs := testMessageQuality(t, DebugTest, false) /* halts on the first failing fixture in dev mode, to iterate spec by spec */ assert.Zero(t, errs, "Message testing didn't match expectations") } @@ -96,7 +96,9 @@ func testMessageQuality(t *testing.T, haltOnErrors bool, continueOnErrors bool) // - messages are stable // - validation continues as much as possible, even in presence of many errors // - // haltOnErrors is used in dev mode to study and fix testcases step by step (output is pretty verbose) + // haltOnErrors is used in dev mode to study and fix testcases step by step (output is pretty verbose). + // It is tied to dev mode because halting is only meaningful while the fixtures run serially: + // with t.Parallel() below, the fixture named in the failure is whichever one lost the race. // // set SWAGGER_DEBUG_TEST=1 env to get a report of messages at the end of each test. // expectedMessage{"", false, false}, From e83999eade63ea6227dd7a2313f68809a00991dc Mon Sep 17 00:00:00 2001 From: Frederic BIDON Date: Tue, 25 Aug 2026 15:00:32 +0200 Subject: [PATCH 2/4] test(messages): add TestGenExpectations to rebuild the expectations file expected_messages.yaml pins some 700 messages over 50 fixtures and had no way to be re-derived, so it drifted: the -enable-long lane has been red since v0.23.0, growing from 7 failing fixtures to 17. TestGenExpectations runs every fixture through the validator in both modes and rewrites the file. It edits the yaml.Node tree rather than re-marshalling the document, so the 48 comments in the file survive: an expectation that still matches keeps its node and its spelling, one that matches nothing is deleted, an actual message nothing covers is appended, and withContinueOnErrors is set from whether the message also appears in the stop-on-errors run. It skips unless SWAGGER_GEN is set, and running it twice changes nothing. Co-Authored-By: Claude Opus 5 (1M context) Signed-off-by: Frederic BIDON --- gen_expectations_test.go | 206 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 206 insertions(+) create mode 100644 gen_expectations_test.go diff --git a/gen_expectations_test.go b/gen_expectations_test.go new file mode 100644 index 0000000..9f1382b --- /dev/null +++ b/gen_expectations_test.go @@ -0,0 +1,206 @@ +// SPDX-FileCopyrightText: Copyright 2015-2025 go-swagger maintainers +// SPDX-License-Identifier: Apache-2.0 + +package validate + +import ( + "os" + "path/filepath" + "regexp" + "strings" + "testing" + + "github.com/go-openapi/loads" + "github.com/go-openapi/strfmt" + "github.com/go-openapi/testify/v2/require" + yaml "go.yaml.in/yaml/v3" +) + +// TestGenExpectations rewrites testdata/validation/expected_messages.yaml from what the +// validators actually produce. +// +// It edits the yaml tree in place rather than re-marshalling it, so the comments the file +// carries survive: an expectation that still matches keeps its node, its spelling and its +// comment, one that matches nothing is deleted, and an actual message nothing covers is +// appended. +// +// Run it with: +// +// SWAGGER_GEN=1 go test -run TestGenExpectations . -args -enable-long +// +// then read the diff: a message that changed is a change in what a user is told, and each one +// needs a look before it is committed. +func TestGenExpectations(t *testing.T) { + if os.Getenv("SWAGGER_GEN") == "" { + t.Skip("set SWAGGER_GEN=1 to rewrite the expectations") + } + + cfg := filepath.Join("testdata", "validation", "expected_messages.yaml") + tested := loadTestConfig(t, cfg) + + raw, err := os.ReadFile(cfg) + require.NoError(t, err) + var doc yaml.Node + require.NoError(t, yaml.Unmarshal(raw, &doc)) + root := doc.Content[0] + + err = filepath.Walk(filepath.Join("testdata", "validation"), func(path string, info os.FileInfo, _ error) error { + if info.IsDir() { + return nil + } + fixture, found := tested.Get(info.Name()) + if !found || fixture.ExpectedLoadError { + return nil + } + + spec, err := loads.Spec(path) + if err != nil { + t.Logf("SKIP (load error) %s: %v", path, err) + return nil + } + + errsStop, warnStop := runValidator(spec, false) + errsCont, warnCont := runValidator(spec, true) + + node := fixtureNode(root, info.Name()) + require.NotNil(t, node, "no node for %s", info.Name()) + patch(t, node, "expectedMessages", fixture.ExpectedMessages, errsStop, errsCont) + patch(t, node, "expectedWarnings", fixture.ExpectedWarnings, warnStop, warnCont) + + return nil + }) + require.NoError(t, err) + + var out strings.Builder + enc := yaml.NewEncoder(&out) + enc.SetIndent(2) + require.NoError(t, enc.Encode(&doc)) + require.NoError(t, enc.Close()) + require.NoError(t, os.WriteFile(cfg, []byte(out.String()), 0o600)) + t.Logf("rewrote %s", cfg) +} + +func fixtureNode(root *yaml.Node, name string) *yaml.Node { + for i := 0; i+1 < len(root.Content); i += 2 { + if root.Content[i].Value == name { + return root.Content[i+1] + } + } + + return nil +} + +func runValidator(doc *loads.Document, continueOnErrors bool) ([]string, []string) { + v := NewSpecValidator(doc.Schema(), strfmt.Default) + v.SetContinueOnErrors(continueOnErrors) + res, warn := v.Validate(doc) + + msgs := func(r *Result) []string { + out := make([]string, 0, len(r.Errors)) + for _, e := range r.Errors { + out = append(out, e.Error()) + } + + return out + } + + return msgs(res), msgs(warn) +} + +// patch rewrites one expectation list of one fixture. +func patch(t *testing.T, fixture *yaml.Node, key string, expected []ExpectedMessage, stop, cont []string) { + t.Helper() + + var seq *yaml.Node + for i := 0; i+1 < len(fixture.Content); i += 2 { + if fixture.Content[i].Value == key { + seq = fixture.Content[i+1] + } + } + require.NotNil(t, seq, "no %s in fixture", key) + require.EqualT(t, len(expected), len(seq.Content), key+": node count and decoded count disagree") + + covered := make(map[string]bool, len(cont)) + kept := make([]*yaml.Node, 0, len(expected)) + + for i, e := range expected { + var hitsStop, hitsCont bool + for _, a := range stop { + if matches(e, a) { + hitsStop = true + } + } + for _, a := range cont { + if matches(e, a) { + hitsCont = true + covered[a] = true + } + } + if !hitsStop && !hitsCont { + continue // stale: matches nothing any more + } + setBool(seq.Content[i], "withContinueOnErrors", !hitsStop) + kept = append(kept, seq.Content[i]) + } + + inStop := make(map[string]bool, len(stop)) + for _, s := range stop { + inStop[s] = true + } + for _, a := range cont { + if covered[a] { + continue + } + kept = append(kept, messageNode(a, !inStop[a])) + } + + seq.Content = kept + if len(kept) == 0 { + seq.Style = yaml.FlowStyle + } +} + +func setBool(item *yaml.Node, key string, value bool) { + for i := 0; i+1 < len(item.Content); i += 2 { + if item.Content[i].Value == key { + item.Content[i+1].Value = boolString(value) + item.Content[i+1].Tag = "!!bool" + + return + } + } +} + +func boolString(value bool) string { + if value { + return "true" + } + + return "false" +} + +func messageNode(message string, withContinueOnErrors bool) *yaml.Node { + scalar := func(value, tag string, style yaml.Style) *yaml.Node { + return &yaml.Node{Kind: yaml.ScalarNode, Tag: tag, Value: value, Style: style} + } + + return &yaml.Node{ + Kind: yaml.MappingNode, + Tag: "!!map", + Content: []*yaml.Node{ + scalar("message", "!!str", 0), scalar(message, "!!str", yaml.SingleQuotedStyle), + scalar("withContinueOnErrors", "!!str", 0), scalar(boolString(withContinueOnErrors), "!!bool", 0), + scalar("isRegexp", "!!str", 0), scalar("false", "!!bool", 0), + }, + } +} + +func matches(e ExpectedMessage, actual string) bool { + if e.IsRegexp { + ok, _ := regexp.MatchString(e.Message, actual) + + return ok + } + + return strings.Contains(actual, e.Message) +} From da10635277a5488b391e24521bf7140072d48c6b Mon Sep 17 00:00:00 2001 From: Frederic BIDON Date: Tue, 25 Aug 2026 15:00:50 +0200 Subject: [PATCH 3/4] test(messages): refresh expected_messages.yaml from the validators The messages now name the parameter they are about - "parameters.0.in" in the stop-on-errors run and "parameters.myid.in" in the continue-on-errors one, where the file still expected "parameters.in" - and example validation reports warnings that did not exist when the file was written. Regenerated with TestGenExpectations. The two "could not resolve reference" expectations were widened by hand for the "cannot load spec:" prefix loads now adds, rather than replaced by a literal carrying an absolute path. Three fixtures record a defect instead of a message, each with a todo saying so: - fixture-581.yaml and fixture-additional-items-3.yaml no longer load at all, and have not since v0.23.0, so both now expect a load error. The first spells "maximum: 18446744073709551615", a YAML integer beyond int64, which the conversion refuses; the second spells "properties: {v: string}", which is not a schema and spec.Schema refuses. Both were written to exercise validation and reach no validator today. What fixture-581.yaml now demonstrates is the unmarshalling error itself, which names the offending value but not the field it came from. - fixture-constraints-on-numbers.yaml does not report "param3 in query should be a multiple of 10", though the fixture's own comment says it should. MultipleOf compares data/factor through conv.IsFloat64AJSONInteger, whose tolerance is relative: at a quotient of 2.1e8 it accepts a remainder up to 0.2, and 2147483648/10 = 214748364.8 falls inside that. MultipleOfInt and MultipleOfUint decide the same numbers correctly, so only a value arriving as a float64 is affected. The todo says why this is not a tolerance to retune: multipleOf is only decidable with decimal arithmetic. The -enable-long lane is green. Co-Authored-By: Claude Opus 5 (1M context) Signed-off-by: Frederic BIDON --- testdata/validation/expected_messages.yaml | 2333 ++++++++++---------- 1 file changed, 1209 insertions(+), 1124 deletions(-) diff --git a/testdata/validation/expected_messages.yaml b/testdata/validation/expected_messages.yaml index 73f39db..baeb33e 100644 --- a/testdata/validation/expected_messages.yaml +++ b/testdata/validation/expected_messages.yaml @@ -8,9 +8,9 @@ fixture-items-items.yaml: expectedValid: true expectedMessages: [] expectedWarnings: - - message: 'soSimple in path has a default value and is required as parameter' - withContinueOnErrors: false - isRegexp: false + - message: 'soSimple in path has a default value and is required as parameter' + withContinueOnErrors: false + isRegexp: false valid-referenced.yml: comment: todo: @@ -24,225 +24,213 @@ valid-referenced-variants.yaml: expectedLoadError: false expectedValid: false expectedMessages: - - message: 'definitions.lotOfErrors.patternProperties in body is a forbidden property' - withContinueOnErrors: false - isRegexp: false - - message: '"definitions.lotOfErrors.additionalProperties" must validate at least one schema (anyOf)' - withContinueOnErrors: false - isRegexp: false - - message: 'definitions.lotOfErrors.additionalProperties.patternProperties in body is a forbidden property' - withContinueOnErrors: false - isRegexp: false - - message: 'definitions.lotOfErrors2.patternProperties in body is a forbidden property' - withContinueOnErrors: false - isRegexp: false - - message: 'pattern "^)b-InvalidRegexp1.(*$" is invalid in lotOfErrors' - withContinueOnErrors: true - isRegexp: false - - message: '"bug" is present in required but not defined as property in definition "lotOfErrors"' - withContinueOnErrors: true - isRegexp: false - - message: 'pattern "^)b-InvalidRegexp2.(*$" is invalid in lotOfErrors2' - withContinueOnErrors: true - isRegexp: false + - message: 'definitions.lotOfErrors.patternProperties in body is a forbidden property' + withContinueOnErrors: false + isRegexp: false + - message: '"definitions.lotOfErrors.additionalProperties" must validate at least one schema (anyOf)' + withContinueOnErrors: false + isRegexp: false + - message: 'definitions.lotOfErrors.additionalProperties.patternProperties in body is a forbidden property' + withContinueOnErrors: false + isRegexp: false + - message: 'definitions.lotOfErrors2.patternProperties in body is a forbidden property' + withContinueOnErrors: false + isRegexp: false + - message: 'pattern "^)b-InvalidRegexp1.(*$" is invalid in lotOfErrors' + withContinueOnErrors: true + isRegexp: false + - message: '"bug" is present in required but not defined as property in definition "lotOfErrors"' + withContinueOnErrors: true + isRegexp: false + - message: 'pattern "^)b-InvalidRegexp2.(*$" is invalid in lotOfErrors2' + withContinueOnErrors: true + isRegexp: false + - message: '"paths./greatAgain.get.parameters.badPatternInItems" must validate one and only one schema (oneOf). Found none valid' + withContinueOnErrors: true + isRegexp: false + - message: '"paths./greatAgain.get.parameters.badPatternInItems.schema.items" must validate at least one schema (anyOf)' + withContinueOnErrors: true + isRegexp: false + - message: 'paths./greatAgain.get.parameters.badPatternInItems.schema.items.patternProperties in body is a forbidden property' + withContinueOnErrors: true + isRegexp: false expectedWarnings: - - message: 'Required property a in "lotOfErrors" should not be marked as both required and readOnly' - withContinueOnErrors: true - isRegexp: false - - message: 'Required property z-1 in "lotOfErrors" should not be marked as both required and readOnly' - withContinueOnErrors: true - isRegexp: false - - message: 'Required property b-8 in "lotOfErrors2" should not be marked as both required and readOnly' - withContinueOnErrors: true - isRegexp: false + - message: 'Required property a in "lotOfErrors" should not be marked as both required and readOnly' + withContinueOnErrors: true + isRegexp: false + - message: 'Required property z-1 in "lotOfErrors" should not be marked as both required and readOnly' + withContinueOnErrors: true + isRegexp: false + - message: 'Required property b-8 in "lotOfErrors2" should not be marked as both required and readOnly' + withContinueOnErrors: true + isRegexp: false fixture-additional-items.yaml: comment: - todo: unsupported keyword such as additionnalItems should be better reported + todo: unsupported keyword such as additionnalItems should be better reported expectedLoadError: false expectedValid: true expectedMessages: [] expectedWarnings: [] fixture-additional-items-2.yaml: comment: - todo: unsupported keyword such as additionnalItems should be better reported + todo: unsupported keyword such as additionnalItems should be better reported expectedLoadError: false expectedValid: false expectedMessages: - - message: '"paths./servers/getGood.get.parameters" must validate one and only one schema (oneOf). Found none valid' - withContinueOnErrors: false - isRegexp: false - - message: 'paths./servers/getGood.get.parameters.schema.additionalItems in body is a forbidden property' - withContinueOnErrors: false - isRegexp: false + - message: '"paths./servers/getGood.get.parameters.0" must validate one and only one schema (oneOf). Found none valid' + withContinueOnErrors: false + isRegexp: false + - message: 'paths./servers/getGood.get.parameters.0.schema.additionalItems in body is a forbidden property' + withContinueOnErrors: false + isRegexp: false + - message: '"paths./servers/getGood.get.parameters.addItems" must validate one and only one schema (oneOf). Found none valid' + withContinueOnErrors: true + isRegexp: false + - message: 'paths./servers/getGood.get.parameters.addItems.schema.additionalItems in body is a forbidden property' + withContinueOnErrors: true + isRegexp: false expectedWarnings: [] fixture-additional-items-3.yaml: comment: - todo: unsupported keyword such as additionnalItems should be better reported - expectedLoadError: false + todo: 'this spec spells "properties: {v: string}", which is not a schema, and spec.Schema refuses it at load, so the spec never reaches validation. It was written to check how the unsupported additionalItems keyword is reported. Set expectedLoadError back to false once the fixture spells that property as a schema, or once loading tolerates it.' + expectedLoadError: true expectedValid: false expectedMessages: - - message: '"paths./servers/edgeCase.get.responses.200" must validate one and only one schema (oneOf). Found none valid' - withContinueOnErrors: false - isRegexp: false - - message: '"paths./servers/edgeCase.get.responses.200.schema" must validate one and only one schema (oneOf). Found none valid' - withContinueOnErrors: false - isRegexp: false - - message: 'paths./servers/edgeCase.get.responses.200.schema.additionalItems in body is a forbidden property' - withContinueOnErrors: false - isRegexp: false - - message: '"paths./servers/edgeCase.get.responses.200.schema.items" must validate at least one schema (anyOf)' - withContinueOnErrors: false - isRegexp: false - - message: 'paths./servers/edgeCase.get.responses.200.schema.items.additionalItems in body is a forbidden property' - withContinueOnErrors: false - isRegexp: false - - message: '"paths./servers/getGood.get.responses.200" must validate one and only one schema (oneOf). Found none valid' - withContinueOnErrors: false - isRegexp: false - - message: '"paths./servers/getGood.get.responses.200.schema" must validate one and only one schema (oneOf). Found none valid' - withContinueOnErrors: false - isRegexp: false - - message: 'paths./servers/getGood.get.responses.200.schema.additionalItems in body is a forbidden property' - withContinueOnErrors: false - isRegexp: false - expectedWarnings: - - message: 'definition "#/definitions/itemsSchema0" is not used anywhere' - withContinueOnErrors: true - isRegexp: false - - message: 'definition "#/definitions/itemsSchema1" is not used anywhere' - withContinueOnErrors: true - isRegexp: false - - message: 'definition "#/definitions/itemsSchema2" is not used anywhere' - withContinueOnErrors: true - isRegexp: false - - message: 'definition "#/definitions/itemsSchema3" is not used anywhere' - withContinueOnErrors: true - isRegexp: false + - message: 'cannot unmarshal string into Go value of type struct { spec.SchemaProps; spec.SwaggerSchemaProps }' + withContinueOnErrors: false + isRegexp: false + expectedWarnings: [] fixture-no-json-example.yaml: comment: a response example for a mime type other than application/json - todo: not supported. atm, this is just a warning + todo: not supported. atm, this is just a warning expectedLoadError: false expectedValid: true expectedMessages: [] expectedWarnings: - - message: 'No validation attempt for examples for media types other than application/json, in operation "getGoodOp", default response' - withContinueOnErrors: false - isRegexp: false - - message: 'Examples provided without schema in operation "getGoodOp", response 200' - withContinueOnErrors: false - isRegexp: false + - message: 'No validation attempt for examples for media types other than application/json, in operation "getGoodOp", default response' + withContinueOnErrors: false + isRegexp: false + - message: 'Examples provided without schema in operation "getGoodOp", response 200' + withContinueOnErrors: false + isRegexp: false fixture-additional-items-invalid-values.yaml: comment: additional testing scenario for default and example values todo: expectedLoadError: false expectedValid: false expectedMessages: - - message: '"paths./servers/getBad1.get.responses.default" must validate one and only one schema (oneOf). Found none valid' - withContinueOnErrors: false - isRegexp: false - - message: 'paths./servers/getBad1.get.responses.default.description in body is required' - withContinueOnErrors: false - isRegexp: false - - message: 'default value for addItems in body does not validate its schema' - withContinueOnErrors: true - isRegexp: false - - message: 'addItems.default.0.first in body must be of type string: "array"' - withContinueOnErrors: true - isRegexp: false - - message: 'addItems.default.2.c in body must be of type number: "string"' - withContinueOnErrors: true - isRegexp: false - - message: 'addItems.default.2.x in body must be of type string: "number"' - withContinueOnErrors: true - isRegexp: false - - message: 'addItems.default.2.x in body should be one of [a b c]' - withContinueOnErrors: true - isRegexp: false - - message: 'addItems.default.3.z in body must be of type number: "string"' - withContinueOnErrors: true - isRegexp: false - - message: 'in operation "getGoodOp", default value in default response does not validate its schema' - withContinueOnErrors: true - isRegexp: false - - message: 'default.default.0.first in body must be of type string: "array"' - withContinueOnErrors: true - isRegexp: false - - message: 'default.default.2.x in body must be of type string: "number"' - withContinueOnErrors: true - isRegexp: false - - message: 'default.default.2.x in body should be one of [a b c]' - withContinueOnErrors: true - isRegexp: false - - message: 'default.default.2.c in body must be of type number: "string"' - withContinueOnErrors: true - isRegexp: false - - message: 'default.default.3.z in body must be of type number: "string"' - withContinueOnErrors: true - isRegexp: false - - message: 'in operation "getGoodOp", default value in response 200 does not validate its schema' - withContinueOnErrors: true - isRegexp: false - - message: '200.default.0.first in body must be of type string: "array"' - withContinueOnErrors: true - isRegexp: false - - message: '200.default.2.c in body must be of type number: "string"' - withContinueOnErrors: true - isRegexp: false - - message: '200.default.2.x in body must be of type string: "number"' - withContinueOnErrors: true - isRegexp: false - - message: '200.default.2.x in body should be one of [a b c]' - withContinueOnErrors: true - isRegexp: false - - message: '200.default.3.z in body must be of type number: "string"' - withContinueOnErrors: true - isRegexp: false + - message: '"paths./servers/getBad1.get.responses.default" must validate one and only one schema (oneOf). Found none valid' + withContinueOnErrors: false + isRegexp: false + - message: 'paths./servers/getBad1.get.responses.default.description in body is required' + withContinueOnErrors: false + isRegexp: false + - message: 'default value for addItems in body does not validate its schema' + withContinueOnErrors: true + isRegexp: false + - message: 'addItems.default.0.first in body must be of type string: "array"' + withContinueOnErrors: true + isRegexp: false + - message: 'addItems.default.2.c in body must be of type number: "string"' + withContinueOnErrors: true + isRegexp: false + - message: 'addItems.default.2.x in body must be of type string: "number"' + withContinueOnErrors: true + isRegexp: false + - message: 'addItems.default.2.x in body should be one of [a b c]' + withContinueOnErrors: true + isRegexp: false + - message: 'addItems.default.3.z in body must be of type number: "string"' + withContinueOnErrors: true + isRegexp: false + - message: 'in operation "getGoodOp", default value in default response does not validate its schema' + withContinueOnErrors: true + isRegexp: false + - message: 'default.default.0.first in body must be of type string: "array"' + withContinueOnErrors: true + isRegexp: false + - message: 'default.default.2.x in body must be of type string: "number"' + withContinueOnErrors: true + isRegexp: false + - message: 'default.default.2.x in body should be one of [a b c]' + withContinueOnErrors: true + isRegexp: false + - message: 'default.default.2.c in body must be of type number: "string"' + withContinueOnErrors: true + isRegexp: false + - message: 'default.default.3.z in body must be of type number: "string"' + withContinueOnErrors: true + isRegexp: false + - message: 'in operation "getGoodOp", default value in response 200 does not validate its schema' + withContinueOnErrors: true + isRegexp: false + - message: '200.default.0.first in body must be of type string: "array"' + withContinueOnErrors: true + isRegexp: false + - message: '200.default.2.c in body must be of type number: "string"' + withContinueOnErrors: true + isRegexp: false + - message: '200.default.2.x in body must be of type string: "number"' + withContinueOnErrors: true + isRegexp: false + - message: '200.default.2.x in body should be one of [a b c]' + withContinueOnErrors: true + isRegexp: false + - message: '200.default.3.z in body must be of type number: "string"' + withContinueOnErrors: true + isRegexp: false expectedWarnings: - - message: 'in operation "getGoodOp", example value in response 200 does not validate its schema' - withContinueOnErrors: true - isRegexp: false - - message: '/servers/getBad1.examples.0.first in body must be of type string: "number"' - withContinueOnErrors: true - isRegexp: false - - message: '/servers/getBad1.examples.3.z in body must be of type number: "boolean"' - withContinueOnErrors: true - isRegexp: false - - message: '200.example.0.first in body must be of type string: "number"' - withContinueOnErrors: true - isRegexp: false - - message: '200.example.3.z in body must be of type number: "boolean"' - withContinueOnErrors: true - isRegexp: false - - message: 'example value for addItems in body does not validate its schema' - withContinueOnErrors: true - isRegexp: false - - message: 'addItems.example.0.first in body must be of type string: "number"' - withContinueOnErrors: true - isRegexp: false - - message: 'addItems.example.3.z in body must be of type number: "boolean"' - withContinueOnErrors: true - isRegexp: false - - message: 'in operation "getGoodOp", example value in default response does not validate its schema' - withContinueOnErrors: true - isRegexp: false - - message: 'default.example.0.first in body must be of type string: "number"' - withContinueOnErrors: true - isRegexp: false - - message: 'default.example.3.z in body must be of type number: "boolean"' - withContinueOnErrors: true - isRegexp: false + - message: 'in operation "getGoodOp", example value in response 200 does not validate its schema' + withContinueOnErrors: true + isRegexp: false + - message: '200.example.0.first in body must be of type string: "number"' + withContinueOnErrors: true + isRegexp: false + - message: '200.example.3.z in body must be of type number: "boolean"' + withContinueOnErrors: true + isRegexp: false + - message: 'example value for addItems in body does not validate its schema' + withContinueOnErrors: true + isRegexp: false + - message: 'addItems.example.0.first in body must be of type string: "number"' + withContinueOnErrors: true + isRegexp: false + - message: 'addItems.example.3.z in body must be of type number: "boolean"' + withContinueOnErrors: true + isRegexp: false + - message: 'in operation "getGoodOp", example value in default response does not validate its schema' + withContinueOnErrors: true + isRegexp: false + - message: 'default.example.0.first in body must be of type string: "number"' + withContinueOnErrors: true + isRegexp: false + - message: 'default.example.3.z in body must be of type number: "boolean"' + withContinueOnErrors: true + isRegexp: false + - message: 'paths./servers/getBad1.get.responses.default.examples.0.first in body must be of type string: "number"' + withContinueOnErrors: true + isRegexp: false + - message: 'paths./servers/getBad1.get.responses.default.examples.3.z in body must be of type number: "boolean"' + withContinueOnErrors: true + isRegexp: false + - message: 'paths./servers/getBad1.get.responses.200.examples.0.first in body must be of type string: "number"' + withContinueOnErrors: true + isRegexp: false + - message: 'paths./servers/getBad1.get.responses.200.examples.3.z in body must be of type number: "boolean"' + withContinueOnErrors: true + isRegexp: false fixture-no-response.yaml: comment: todo: expectedLoadError: false expectedValid: false expectedMessages: - - message: 'operation "ListBackendSets" has no valid response' - withContinueOnErrors: true - isRegexp: false - - message: 'paths./loadBalancers/{loadBalancerId}/backendSets.get.responses in body must be of type object: "null"' - withContinueOnErrors: false - isRegexp: false + - message: 'operation "ListBackendSets" has no valid response' + withContinueOnErrors: true + isRegexp: false + - message: 'paths./loadBalancers/{loadBalancerId}/backendSets.get.responses in body must be of type object: "null"' + withContinueOnErrors: false + isRegexp: false expectedWarnings: [] fixture-empty-paths.json: comment: @@ -251,50 +239,49 @@ fixture-empty-paths.json: expectedValid: true expectedMessages: [] expectedWarnings: - - message: spec has no valid path defined - withContinueOnErrors: false - isRegexp: false + - message: spec has no valid path defined + withContinueOnErrors: false + isRegexp: false fixture-patternProperties.json: comment: Exercise pattern properties (for default values), with an invalid pattern todo: expectedLoadError: false expectedValid: false expectedMessages: - - message: definitions.Tag.patternProperties in body is a forbidden property - withContinueOnErrors: false - isRegexp: false - - message: definitions.TagInvalidDefault.patternProperties in body is a forbidden property - withContinueOnErrors: false - isRegexp: false - - message: definitions.TagWrong.patternProperties in body is a forbidden property - withContinueOnErrors: false - isRegeexp: false - - message: 'definitions.TagInvalidDefault.default.id in body must be of type integer: "string"' - withContinueOnErrors: true - isRegexp: false - - message: 'definitions.TagInvalidDefault.default.nb-1 in body must be of type integer: "string"' - withContinueOnErrors: true - isRegexp: false - - message: 'definitions.TagInvalidDefault.default.nb-2 in body must be of type integer: "string"' - withContinueOnErrors: true - isRegexp: false - # with systematic response expansion we get more messages - - message: '200.items.default.invalidDefault.default.id in body must be of type integer: "string"' - withContinueOnErrors: true - isRegexp: false - - message: '200.items.default.invalidDefault.default.nb-1 in body must be of type integer: "string"' - withContinueOnErrors: true - isRegexp: false - - message: '200.items.default.invalidDefault.default.nb-2 in body must be of type integer: "string"' - withContinueOnErrors: true - isRegexp: false - - message: 'in operation "getPets", default value in response 200 does not validate its schema' - withContinueOnErrors: true - isRegexp: false + - message: definitions.Tag.patternProperties in body is a forbidden property + withContinueOnErrors: false + isRegexp: false + - message: definitions.TagInvalidDefault.patternProperties in body is a forbidden property + withContinueOnErrors: false + isRegexp: false + - message: definitions.TagWrong.patternProperties in body is a forbidden property + withContinueOnErrors: false + isRegeexp: false + - message: 'definitions.TagInvalidDefault.default.id in body must be of type integer: "string"' + withContinueOnErrors: true + isRegexp: false + - message: 'definitions.TagInvalidDefault.default.nb-1 in body must be of type integer: "string"' + withContinueOnErrors: true + isRegexp: false + - message: 'definitions.TagInvalidDefault.default.nb-2 in body must be of type integer: "string"' + withContinueOnErrors: true + isRegexp: false + - message: 'in operation "getPets", default value in response 200 does not validate its schema' + withContinueOnErrors: true + isRegexp: false + - message: 'paths./pets.get.responses.200.items.invalidDefault.default.nb-1 in body must be of type integer: "string"' + withContinueOnErrors: true + isRegexp: false + - message: 'paths./pets.get.responses.200.items.invalidDefault.default.nb-2 in body must be of type integer: "string"' + withContinueOnErrors: true + isRegexp: false + - message: 'paths./pets.get.responses.200.items.invalidDefault.default.id in body must be of type integer: "string"' + withContinueOnErrors: true + isRegexp: false expectedWarnings: - - message: 'definition "#/definitions/Parent" is not used anywhere' - withContinueOnErrors: true - isRegexp: false + - message: 'definition "#/definitions/Parent" is not used anywhere' + withContinueOnErrors: true + isRegexp: false bitbucket.json: comment: Path differing by only a trailing "/" are not considered duplicates todo: @@ -306,24 +293,23 @@ fixture-161-2.json: comment: | Variant of Issue#161: this is a partially fixed spec. In this version, the name param type is fixed, but the default value remains wrongly typed' - todo: expectedLoadError: false expectedValid: false expectedMessages: - - message: default value for requestBody in body does not validate its schema - withContinueOnErrors: false - isRegexp: false - - message: 'requestBody.default in body must be of type object: "string"' - withContinueOnErrors: false - isRegexp: false + - message: default value for requestBody in body does not validate its schema + withContinueOnErrors: false + isRegexp: false + - message: 'requestBody.default in body must be of type object: "string"' + withContinueOnErrors: false + isRegexp: false expectedWarnings: - - message: 'example value for requestBody in body does not validate its schema' - withContinueOnErrors: false - isRegexp: false - - message: 'requestBody.example.parent.id in body must be of type number: "string"' - withContinueOnErrors: false - isRegexp: false + - message: 'example value for requestBody in body does not validate its schema' + withContinueOnErrors: false + isRegexp: false + - message: 'requestBody.example.parent.id in body must be of type number: "string"' + withContinueOnErrors: false + isRegexp: false fixture-161-good.json: comment: 'Issue#161: this is the corresponding corrected spec which should be valid. Ah! But now examples are invalid...' todo: @@ -331,44 +317,44 @@ fixture-161-good.json: expectedValid: true expectedMessages: [] expectedWarnings: - - message: 'example value for requestBody in body does not validate its schema' - withContinueOnErrors: false - isRegexp: false - - message: 'requestBody.example.parent.id in body must be of type number: "string"' - withContinueOnErrors: false - isRegexp: false + - message: 'example value for requestBody in body does not validate its schema' + withContinueOnErrors: false + isRegexp: false + - message: 'requestBody.example.parent.id in body must be of type number: "string"' + withContinueOnErrors: false + isRegexp: false fixture-161.json: comment: 'Issue#161: default value as object' todo: expectedLoadError: false expectedValid: false expectedMessages: - - message: 'default value for requestBody in body does not validate its schema' - withContinueOnErrors: false - isRegexp: false - - message: 'requestBody.default in body must be of type object: "string"' - withContinueOnErrors: false - isRegexp: false + - message: 'default value for requestBody in body does not validate its schema' + withContinueOnErrors: false + isRegexp: false + - message: 'requestBody.default in body must be of type object: "string"' + withContinueOnErrors: false + isRegexp: false expectedWarnings: - - message: 'requestBody.example.name in body must be of type object: "string"' - withContinueOnErrors: false - isRegexp: false - - message: 'example value for requestBody in body does not validate its schema' - withContinueOnErrors: false - isRegexp: false - - message: 'requestBody.example.parent.id in body must be of type number: "string"' - withContinueOnErrors: false - isRegexp: false + - message: 'requestBody.example.name in body must be of type object: "string"' + withContinueOnErrors: false + isRegexp: false + - message: 'example value for requestBody in body does not validate its schema' + withContinueOnErrors: false + isRegexp: false + - message: 'requestBody.example.parent.id in body must be of type number: "string"' + withContinueOnErrors: false + isRegexp: false fixture-342-2.yaml: comment: Botched correction attempt for fixture-342 todo: expectedLoadError: true expectedValid: false expectedMessages: - # This one is a regexp to avoid being too stringent on expectations from another package (loads or analysis) - - message: '.*cannot unmarshal.*' - withContinueOnErrors: false - isRegexp: true + # This one is a regexp to avoid being too stringent on expectations from another package (loads or analysis) + - message: '.*cannot unmarshal.*' + withContinueOnErrors: false + isRegexp: true expectedWarnings: [] fixture-342.yaml: comment: 'Panic on interface conversion: early stop on error prevents the panic, but continuing it goes in, it goes down' @@ -376,85 +362,124 @@ fixture-342.yaml: expectedLoadError: false expectedValid: false expectedMessages: - - message: 'paths./get_main_object.get.parameters.$ref in body is a forbidden property' - withContinueOnErrors: false - isRegexp: false - - message: 'invalid definition for parameter sid in body in operation ""' - withContinueOnErrors: true - isRegexp: false - - message: 'paths./get_main_object.get.parameters.in in body should be one of [header]' - withContinueOnErrors: false - isRegexp: false - - message: 'paths./get_main_object.get.parameters.type in body is required' - withContinueOnErrors: false - isRegexp: false - - message: '"paths./get_main_object.get.parameters" must validate one and only one schema (oneOf). Found none valid' - withContinueOnErrors: false - isRegexp: false - - message: 'invalid ref "nowhere.yaml#/definitions/sample_info/properties/sid"' - withContinueOnErrors: true - isRegexp: false - - message: 'invalid definition as Schema for parameter in in operation ""' - withContinueOnErrors: true - isRegexp: false - - message: 'invalid definition for parameter in in operation ""' - withContinueOnErrors: true - isRegexp: false - - message: '"parameters.wrong" must validate one and only one schema (oneOf). Found none valid' - withContinueOnErrors: false - isRegexp: false - - message: 'parameters.wrong.theName in body is a forbidden property' - withContinueOnErrors: false - isRegexp: false - - message: 'parameters.wrong.theType in body is a forbidden property' - withContinueOnErrors: false - isRegexp: false - - message: 'parameters.wrong.name in body is required' - withContinueOnErrors: false - isRegexp: false - - message: 'parameters.wrong.in in body is required' - withContinueOnErrors: false - isRegexp: false - - message: 'parameters.wrong.type in body is required' - withContinueOnErrors: false - isRegexp: false - - message: '"parameters.notbetter" must validate one and only one schema (oneOf). Found none valid' - withContinueOnErrors: false - isRegexp: false - - message: 'parameters.notbetter.properties in body is a forbidden property' - withContinueOnErrors: false - isRegexp: false - - message: 'parameters.notbetter.type in body should be one of [string number boolean integer array]' - withContinueOnErrors: false - isRegexp: false - - message: 'parameters.notbetter.name in body is required' - withContinueOnErrors: false - isRegexp: false - - message: 'parameters.notbetter.in in body is required' - withContinueOnErrors: false - isRegexp: false - - message: '"parameters.stillnogood" must validate one and only one schema (oneOf). Found none valid' - withContinueOnErrors: false - isRegexp: false - - message: 'parameters.stillnogood.name in body is required' - withContinueOnErrors: false - isRegexp: false - - message: 'parameters.stillnogood.in in body is required' - withContinueOnErrors: false - isRegexp: false - - message: 'could not resolve reference in "\/get_main_object"\.GET to \$ref nowhere\.yaml#\/definitions\/sample_info\/properties\/sid: open .+nowhere\.yaml:\s.*' - withContinueOnErrors: true - isRegexp: true + - message: 'invalid definition for parameter sid in body in operation ""' + withContinueOnErrors: true + isRegexp: false + - message: 'invalid ref "nowhere.yaml#/definitions/sample_info/properties/sid"' + withContinueOnErrors: true + isRegexp: false + - message: 'invalid definition as Schema for parameter in in operation ""' + withContinueOnErrors: true + isRegexp: false + - message: 'invalid definition for parameter in in operation ""' + withContinueOnErrors: true + isRegexp: false + - message: '"parameters.wrong" must validate one and only one schema (oneOf). Found none valid' + withContinueOnErrors: false + isRegexp: false + - message: 'parameters.wrong.theName in body is a forbidden property' + withContinueOnErrors: false + isRegexp: false + - message: 'parameters.wrong.theType in body is a forbidden property' + withContinueOnErrors: false + isRegexp: false + - message: 'parameters.wrong.name in body is required' + withContinueOnErrors: false + isRegexp: false + - message: 'parameters.wrong.in in body is required' + withContinueOnErrors: false + isRegexp: false + - message: 'parameters.wrong.type in body is required' + withContinueOnErrors: false + isRegexp: false + - message: '"parameters.notbetter" must validate one and only one schema (oneOf). Found none valid' + withContinueOnErrors: false + isRegexp: false + - message: 'parameters.notbetter.properties in body is a forbidden property' + withContinueOnErrors: false + isRegexp: false + - message: 'parameters.notbetter.type in body should be one of [string number boolean integer array]' + withContinueOnErrors: false + isRegexp: false + - message: 'parameters.notbetter.name in body is required' + withContinueOnErrors: false + isRegexp: false + - message: 'parameters.notbetter.in in body is required' + withContinueOnErrors: false + isRegexp: false + - message: '"parameters.stillnogood" must validate one and only one schema (oneOf). Found none valid' + withContinueOnErrors: false + isRegexp: false + - message: 'parameters.stillnogood.name in body is required' + withContinueOnErrors: false + isRegexp: false + - message: 'parameters.stillnogood.in in body is required' + withContinueOnErrors: false + isRegexp: false + - message: 'could not resolve reference in "\/get_main_object"\.GET to \$ref nowhere\.yaml#\/definitions\/sample_info\/properties\/sid: .*open .+nowhere\.yaml:\s.*' + withContinueOnErrors: true + isRegexp: true + - message: '"paths./get_main_object.get.parameters.0" must validate one and only one schema (oneOf). Found none valid' + withContinueOnErrors: false + isRegexp: false + - message: 'paths./get_main_object.get.parameters.0.$ref in body is a forbidden property' + withContinueOnErrors: false + isRegexp: false + - message: 'paths./get_main_object.get.parameters.0.in in body should be one of [header]' + withContinueOnErrors: false + isRegexp: false + - message: 'paths./get_main_object.get.parameters.0.type in body is required' + withContinueOnErrors: false + isRegexp: false + - message: '"paths./get_main_object.get.parameters.4" must validate one and only one schema (oneOf). Found none valid' + withContinueOnErrors: false + isRegexp: false + - message: 'paths./get_main_object.get.parameters.4.$ref in body is a forbidden property' + withContinueOnErrors: false + isRegexp: false + - message: 'paths./get_main_object.get.parameters.4.in in body should be one of [header]' + withContinueOnErrors: false + isRegexp: false + - message: 'paths./get_main_object.get.parameters.4.type in body is required' + withContinueOnErrors: false + isRegexp: false + - message: '"paths./get_main_object.get.parameters.5" must validate one and only one schema (oneOf). Found none valid' + withContinueOnErrors: false + isRegexp: false + - message: 'paths./get_main_object.get.parameters.5.$ref in body is a forbidden property' + withContinueOnErrors: false + isRegexp: false + - message: 'paths./get_main_object.get.parameters.5.in in body should be one of [header]' + withContinueOnErrors: false + isRegexp: false + - message: 'paths./get_main_object.get.parameters.5.type in body is required' + withContinueOnErrors: false + isRegexp: false + - message: '"paths./get_main_object.get.parameters." must validate one and only one schema (oneOf). Found none valid' + withContinueOnErrors: true + isRegexp: false + - message: 'paths./get_main_object.get.parameters..name in body is required' + withContinueOnErrors: true + isRegexp: false + - message: 'paths./get_main_object.get.parameters..in in body is required' + withContinueOnErrors: true + isRegexp: false + - message: '"paths./get_main_object.get.parameters.sid" must validate one and only one schema (oneOf). Found none valid' + withContinueOnErrors: true + isRegexp: false + - message: 'paths./get_main_object.get.parameters.sid.in in body should be one of [header]' + withContinueOnErrors: true + isRegexp: false expectedWarnings: - - message: 'definition "#/definitions/sample_info" is not used anywhere' - withContinueOnErrors: true - isRegexp: false - - message: $ref property should have no sibling in "".sid - withContinueOnErrors: true - isRegexp: false - - message: $ref property should have no sibling in "". - withContinueOnErrors: true - isRegexp: false + - message: 'definition "#/definitions/sample_info" is not used anywhere' + withContinueOnErrors: true + isRegexp: false + - message: $ref property should have no sibling in "".sid + withContinueOnErrors: true + isRegexp: false + - message: $ref property should have no sibling in "". + withContinueOnErrors: true + isRegexp: false fixture-581-good-numbers.yaml: comment: todo: @@ -475,210 +500,227 @@ fixture-581-inline-param-format.yaml: expectedLoadError: false expectedValid: false expectedMessages: - - message: 'paths./fixture.get.parameters.in in body should be one of [body]' - withContinueOnErrors: false - isRegexp: false - - message: 'paths./fixture.get.parameters.in in body should be one of [header]' - withContinueOnErrors: false - isRegexp: false - - message: 'paths./fixture.get.parameters.multipleOf in body should be greater than 0' - withContinueOnErrors: false - isRegexp: false - - message: '"paths./fixture.get.parameters" must validate one and only one schema (oneOf). Found none valid' - withContinueOnErrors: false - isRegexp: false - - message: default value for inlineInfiniteInt in query does not validate its schema - withContinueOnErrors: true - isRegexp: false - - message: default value for inlineInfiniteInt2 in query does not validate its schema - withContinueOnErrors: true - isRegexp: false - - message: default value for inlineMaxInt in query does not validate its schema - withContinueOnErrors: true - isRegexp: false - - message: default value for inlineMinInt in query does not validate its schema - withContinueOnErrors: true - isRegexp: false - - message: default value for negFactor in query does not validate its schema - withContinueOnErrors: true - isRegexp: false - - message: default value for negFactor2 in query does not validate its schema - withContinueOnErrors: true - isRegexp: false - - message: default value for negFactor3 in query does not validate its schema - withContinueOnErrors: true - isRegexp: false - - message: Checked value must be of type integer with format uint32 in inlineInfiniteInt - withContinueOnErrors: true - isRegexp: false - - message: inlineInfiniteInt in query should be greater than or equal to 0 - withContinueOnErrors: true - isRegexp: false - - message: Checked value must be of type integer with format uint32 in negFactor3 - withContinueOnErrors: true - isRegexp: false - - message: 'factor MultipleOf declared for negFactor must be positive: -300' - withContinueOnErrors: true - isRegexp: false - - message: negFactor2 in query should be a multiple of 3 - withContinueOnErrors: true - isRegexp: false - - message: Minimum boundary value must be of type integer with format uint64 in inlineMaxInt - withContinueOnErrors: true - isRegexp: false - - message: Maximum boundary value must be of type integer with format uint64 in inlineMaxInt - withContinueOnErrors: true - isRegexp: false - - message: Minimum boundary value must be of type integer with format uint32 in inlineMinInt - withContinueOnErrors: true - isRegexp: false - - message: Maximum boundary value must be of type integer with format uint32 in inlineMinInt - withContinueOnErrors: true - isRegexp: false - - message: definitions.myId.uint64.default in body should be less than or equal to 0 - withContinueOnErrors: true - isRegexp: false - - message: definitions.myId.uint8.default in body should be less than or equal to 255 - withContinueOnErrors: true - isRegexp: false - - message: Checked value must be of type integer with format uint32 in inlineInfiniteInt2 - withContinueOnErrors: true - isRegexp: false - - message: inlineInfiniteInt2 in query should be greater than or equal to 0 - withContinueOnErrors: true - isRegexp: false - - message: 'default value for myid in query does not validate its schema' - withContinueOnErrors: true - isRegexp: false - - message: 'invalid definition as Schema for parameter myid in query in operation "op1"' - withContinueOnErrors: true - isRegexp: false - - message: myid.uint64.default in body should be less than or equal to 0 - withContinueOnErrors: true - isRegexp: false - - message: myid.uint8.default in body should be less than or equal to 255 - withContinueOnErrors: true - isRegexp: false + - message: default value for inlineInfiniteInt in query does not validate its schema + withContinueOnErrors: true + isRegexp: false + - message: default value for inlineInfiniteInt2 in query does not validate its schema + withContinueOnErrors: true + isRegexp: false + - message: default value for inlineMaxInt in query does not validate its schema + withContinueOnErrors: true + isRegexp: false + - message: default value for inlineMinInt in query does not validate its schema + withContinueOnErrors: true + isRegexp: false + - message: default value for negFactor in query does not validate its schema + withContinueOnErrors: true + isRegexp: false + - message: default value for negFactor2 in query does not validate its schema + withContinueOnErrors: true + isRegexp: false + - message: default value for negFactor3 in query does not validate its schema + withContinueOnErrors: true + isRegexp: false + - message: Checked value must be of type integer with format uint32 in inlineInfiniteInt + withContinueOnErrors: true + isRegexp: false + - message: inlineInfiniteInt in query should be greater than or equal to 0 + withContinueOnErrors: true + isRegexp: false + - message: Checked value must be of type integer with format uint32 in negFactor3 + withContinueOnErrors: true + isRegexp: false + - message: 'factor MultipleOf declared for negFactor must be positive: -300' + withContinueOnErrors: true + isRegexp: false + - message: negFactor2 in query should be a multiple of 3 + withContinueOnErrors: true + isRegexp: false + - message: Minimum boundary value must be of type integer with format uint64 in inlineMaxInt + withContinueOnErrors: true + isRegexp: false + - message: Maximum boundary value must be of type integer with format uint64 in inlineMaxInt + withContinueOnErrors: true + isRegexp: false + - message: Minimum boundary value must be of type integer with format uint32 in inlineMinInt + withContinueOnErrors: true + isRegexp: false + - message: Maximum boundary value must be of type integer with format uint32 in inlineMinInt + withContinueOnErrors: true + isRegexp: false + - message: definitions.myId.uint64.default in body should be less than or equal to 0 + withContinueOnErrors: true + isRegexp: false + - message: definitions.myId.uint8.default in body should be less than or equal to 255 + withContinueOnErrors: true + isRegexp: false + - message: Checked value must be of type integer with format uint32 in inlineInfiniteInt2 + withContinueOnErrors: true + isRegexp: false + - message: inlineInfiniteInt2 in query should be greater than or equal to 0 + withContinueOnErrors: true + isRegexp: false + - message: 'default value for myid in query does not validate its schema' + withContinueOnErrors: true + isRegexp: false + - message: 'invalid definition as Schema for parameter myid in query in operation "op1"' + withContinueOnErrors: true + isRegexp: false + - message: myid.uint64.default in body should be less than or equal to 0 + withContinueOnErrors: true + isRegexp: false + - message: myid.uint8.default in body should be less than or equal to 255 + withContinueOnErrors: true + isRegexp: false + - message: '"paths./fixture.get.parameters.0" must validate one and only one schema (oneOf). Found none valid' + withContinueOnErrors: false + isRegexp: false + - message: 'paths./fixture.get.parameters.0.in in body should be one of [body]' + withContinueOnErrors: false + isRegexp: false + - message: '"paths./fixture.get.parameters.6" must validate one and only one schema (oneOf). Found none valid' + withContinueOnErrors: false + isRegexp: false + - message: 'paths./fixture.get.parameters.6.in in body should be one of [header]' + withContinueOnErrors: false + isRegexp: false + - message: 'paths./fixture.get.parameters.6.multipleOf in body should be greater than 0' + withContinueOnErrors: false + isRegexp: false + - message: '"paths./fixture.get.parameters.myid" must validate one and only one schema (oneOf). Found none valid' + withContinueOnErrors: true + isRegexp: false + - message: 'paths./fixture.get.parameters.myid.in in body should be one of [body]' + withContinueOnErrors: true + isRegexp: false + - message: '"paths./fixture.get.parameters.negFactor" must validate one and only one schema (oneOf). Found none valid' + withContinueOnErrors: true + isRegexp: false + - message: 'paths./fixture.get.parameters.negFactor.in in body should be one of [header]' + withContinueOnErrors: true + isRegexp: false + - message: 'paths./fixture.get.parameters.negFactor.multipleOf in body should be greater than 0' + withContinueOnErrors: true + isRegexp: false expectedWarnings: - - message: definition "#/definitions/myId" is not used anywhere - withContinueOnErrors: true - isRegexp: false + - message: definition "#/definitions/myId" is not used anywhere + withContinueOnErrors: true + isRegexp: false fixture-581-inline-param.yaml: - comment: A variation on the theme of number constraints, inspired by isssue#581. - Focuses on inline params. + comment: A variation on the theme of number constraints, inspired by isssue#581. Focuses on inline params. todo: Still limited by support of default/examples values check expectedLoadError: false expectedValid: false expectedMessages: - - message: '"paths./fixture.get.parameters" must validate one and only one schema (oneOf). Found none valid' - withContinueOnErrors: false - isRegexp: false - - message: 'paths./fixture.get.parameters.in in body should be one of [body]' - withContinueOnErrors: false - isRegexp: false - - message: 'paths./fixture.get.parameters.in in body should be one of [header]' - withContinueOnErrors: false - isRegexp: false - - message: 'paths./fixture.get.parameters.multipleOf in body should be greater than 0' - withContinueOnErrors: false - isRegexp: false - - message: default value for inlineInfiniteInt in query does not validate its schema - withContinueOnErrors: true - isRegexp: false - - message: default value for inlineMaxInt in query does not validate its schema - withContinueOnErrors: true - isRegexp: false - - message: default value for inlineMinInt in query does not validate its schema - withContinueOnErrors: true - isRegexp: false - - message: default value for negFactor in query does not validate its schema - withContinueOnErrors: true - isRegexp: false - - message: Maximum boundary value must be of type integer (default format) in inlineMaxInt - withContinueOnErrors: true - isRegexp: false - - message: Minimum boundary value must be of type integer (default format) in inlineMinInt - withContinueOnErrors: true - isRegexp: false - - message: Minimum boundary value must be of type integer (default format) in inlineInfiniteInt - withContinueOnErrors: true - isRegexp: false - - message: Maximum boundary value must be of type integer (default format) in inlineInfiniteInt - withContinueOnErrors: true - isRegexp: false - - message: 'factor MultipleOf declared for negFactor must be positive: -300' - withContinueOnErrors: true - isRegexp: false - - message: inlineMinInt in query should be less than or equal to 1 - withContinueOnErrors: true - isRegexp: false - - message: definitions.myId.uint64.default in body should be less than or equal to 0 - withContinueOnErrors: true - isRegexp: false - - message: definitions.myId.uint8.default in body should be less than or equal to 255 - withContinueOnErrors: true - isRegexp: false - - message: default value for myid in query does not validate its schema - withContinueOnErrors: true - isRegexp: false - - message: 'invalid definition as Schema for parameter myid in query in operation "op1"' - withContinueOnErrors: true - isRegexp: false - - message: myid.uint64.default in body should be less than or equal to 0 - withContinueOnErrors: true - isRegexp: false - - message: myid.uint8.default in body should be less than or equal to 255 - withContinueOnErrors: true - isRegexp: false + - message: default value for inlineInfiniteInt in query does not validate its schema + withContinueOnErrors: true + isRegexp: false + - message: default value for inlineMaxInt in query does not validate its schema + withContinueOnErrors: true + isRegexp: false + - message: default value for inlineMinInt in query does not validate its schema + withContinueOnErrors: true + isRegexp: false + - message: default value for negFactor in query does not validate its schema + withContinueOnErrors: true + isRegexp: false + - message: Maximum boundary value must be of type integer (default format) in inlineMaxInt + withContinueOnErrors: true + isRegexp: false + - message: Minimum boundary value must be of type integer (default format) in inlineMinInt + withContinueOnErrors: true + isRegexp: false + - message: Minimum boundary value must be of type integer (default format) in inlineInfiniteInt + withContinueOnErrors: true + isRegexp: false + - message: Maximum boundary value must be of type integer (default format) in inlineInfiniteInt + withContinueOnErrors: true + isRegexp: false + - message: 'factor MultipleOf declared for negFactor must be positive: -300' + withContinueOnErrors: true + isRegexp: false + - message: inlineMinInt in query should be less than or equal to 1 + withContinueOnErrors: true + isRegexp: false + - message: definitions.myId.uint64.default in body should be less than or equal to 0 + withContinueOnErrors: true + isRegexp: false + - message: definitions.myId.uint8.default in body should be less than or equal to 255 + withContinueOnErrors: true + isRegexp: false + - message: default value for myid in query does not validate its schema + withContinueOnErrors: true + isRegexp: false + - message: 'invalid definition as Schema for parameter myid in query in operation "op1"' + withContinueOnErrors: true + isRegexp: false + - message: myid.uint64.default in body should be less than or equal to 0 + withContinueOnErrors: true + isRegexp: false + - message: myid.uint8.default in body should be less than or equal to 255 + withContinueOnErrors: true + isRegexp: false + - message: '"paths./fixture.get.parameters.0" must validate one and only one schema (oneOf). Found none valid' + withContinueOnErrors: false + isRegexp: false + - message: 'paths./fixture.get.parameters.0.in in body should be one of [body]' + withContinueOnErrors: false + isRegexp: false + - message: '"paths./fixture.get.parameters.5" must validate one and only one schema (oneOf). Found none valid' + withContinueOnErrors: false + isRegexp: false + - message: 'paths./fixture.get.parameters.5.in in body should be one of [header]' + withContinueOnErrors: false + isRegexp: false + - message: 'paths./fixture.get.parameters.5.multipleOf in body should be greater than 0' + withContinueOnErrors: false + isRegexp: false + - message: '"paths./fixture.get.parameters.myid" must validate one and only one schema (oneOf). Found none valid' + withContinueOnErrors: true + isRegexp: false + - message: 'paths./fixture.get.parameters.myid.in in body should be one of [body]' + withContinueOnErrors: true + isRegexp: false + - message: '"paths./fixture.get.parameters.negFactor" must validate one and only one schema (oneOf). Found none valid' + withContinueOnErrors: true + isRegexp: false + - message: 'paths./fixture.get.parameters.negFactor.in in body should be one of [header]' + withContinueOnErrors: true + isRegexp: false + - message: 'paths./fixture.get.parameters.negFactor.multipleOf in body should be greater than 0' + withContinueOnErrors: true + isRegexp: false expectedWarnings: - - message: definition "#/definitions/myId" is not used anywhere - withContinueOnErrors: true - isRegexp: false + - message: definition "#/definitions/myId" is not used anywhere + withContinueOnErrors: true + isRegexp: false fixture-581.yaml: comment: 'Issue#581 : value and type checking in constraints' - todo: 'issue#581 error reporting solved: not only inline params are subject to this validation' - expectedLoadError: false + todo: 'this fixture puts constraints that overflow Go''s types into a document - "maximum: 9223372036854775807000", "18446744073709551615", "18446744073709551616" - to see what validate makes of them. It no longer gets that far: the YAML conversion refuses an integer beyond int64, so the document never unmarshals and no validator runs. What it demonstrates today is the unmarshalling error, and how little that error says - it names the offending value but not the field it came from, so a reader has to grep the document for it. There is no workaround in the current model, where a value becomes a Go type before anything can look at it. Reaching validation again needs the parser rewrite that drops early conversion to native types; expectedLoadError goes back to false then.' + expectedLoadError: true expectedValid: false expectedMessages: - - message: 'paths./fixture.get.parameters.in in body should be one of [body]' - withContinueOnErrors: false - isRegexp: false - - message: '"paths./fixture.get.parameters" must validate one and only one schema (oneOf). Found none valid' - withContinueOnErrors: false - isRegexp: false - - message: 'definitions.myId.uint8.default in body should be less than or equal to 255' - withContinueOnErrors: true - isRegexp: false - - message: 'default value for myid in query does not validate its schema' - withContinueOnErrors: true - isRegexp: false - - message: 'invalid definition as Schema for parameter myid in query in operation "op1"' - withContinueOnErrors: true - isRegexp: false - - message: 'myid.uint8.default in body should be less than or equal to 255' - withContinueOnErrors: true - isRegexp: false - expectedWarnings: - - message: 'definition "#/definitions/myId" is not used anywhere' - withContinueOnErrors: true - isRegexp: false + - message: 'Expecting integer content: strconv.ParseInt: parsing "18446744073709551615": value out of range' + withContinueOnErrors: false + isRegexp: false + expectedWarnings: [] fixture-859-2.yaml: comment: 'Issue#859: clear message on unresolved $ref. Additional scenario with items' todo: expectedLoadError: false expectedValid: false expectedMessages: - # This one is a regexp since we cannot predict which $ref will fail first - - message: 'some references could not be resolved in spec\. First found: object has no key ".*"' - withContinueOnErrors: false - isRegexp: true - - message: 'could not resolve reference in / to $ref : object has no key "myitem"' - withContinueOnErrors: true - isRegexp: false + # This one is a regexp since we cannot predict which $ref will fail first + - message: 'some references could not be resolved in spec\. First found: object has no key ".*"' + withContinueOnErrors: false + isRegexp: true + - message: 'could not resolve reference in / to $ref : object has no key "myitem"' + withContinueOnErrors: true + isRegexp: false expectedWarnings: - - message: definition "#/definitions/myoutput" is not used anywhere - withContinueOnErrors: true - isRegexp: false + - message: definition "#/definitions/myoutput" is not used anywhere + withContinueOnErrors: true + isRegexp: false fixture-859-good.yaml: comment: 'Issue#859: clear message on unresolved $ref. Valid spec baseline for further scenarios' todo: "" @@ -686,59 +728,58 @@ fixture-859-good.yaml: expectedValid: true expectedMessages: [] expectedWarnings: - - message: definition "#/definitions/myoutput" is not used anywhere - withContinueOnErrors: false - isRegexp: false + - message: definition "#/definitions/myoutput" is not used anywhere + withContinueOnErrors: false + isRegexp: false fixture-859.yaml: - comment: 'Issue#859: clear message on unresolved $ref. First scenario for messages - Supplement for items, arrays and other nested structures in fixture-859-2.yaml' + comment: 'Issue#859: clear message on unresolved $ref. First scenario for messages Supplement for items, arrays and other nested structures in fixture-859-2.yaml' todo: would love to have all missing references in one shot. expectedLoadError: false expectedValid: false expectedMessages: - - message: 'paths./.get.parameters.in in body should be one of [body]' - withContinueOnErrors: false - isRegexp: false - - message: '"paths./.get.parameters" must validate one and only one schema (oneOf). Found none valid' - withContinueOnErrors: false - isRegexp: false - - message: 'some references could not be resolved in spec\. First found: object has no key ".*"' - withContinueOnErrors: true - isRegexp: true - #- message: 'invalid reference: "#/parameters/rateLimit"' - #withContinueOnErrors: true - #isRegexp: true - - message: 'could not resolve reference in "/".GET to $ref #/parameters/rateLimit: object has no key "rateLimit"' - withContinueOnErrors: true - isRegexp: false - - message: 'could not resolve reference in / to $ref : object has no key "record"' - withContinueOnErrors: true - isRegexp: false - #- message: some parameters definitions are broken in "/".POST. Cannot carry on full checks on parameters for operation - #withContinueOnErrors: true - #isRegexp: false - #- message: some parameters definitions are broken in "/".GET. Cannot carry on full checks on parameters for operation - #withContinueOnErrors: true - #isRegexp: false - - message: 'could not resolve reference in "/".POST to $ref #/parameters/rateLimit: object has no key "rateLimit"' - withContinueOnErrors: true - isRegexp: false - - message: 'could not resolve reference in "/".GET to $ref : object has no key "myparam"' - withContinueOnErrors: true - isRegexp: false + - message: 'some references could not be resolved in spec\. First found: object has no key ".*"' + withContinueOnErrors: true + isRegexp: true + #- message: 'invalid reference: "#/parameters/rateLimit"' + #withContinueOnErrors: true + #isRegexp: true + - message: 'could not resolve reference in "/".GET to $ref #/parameters/rateLimit: object has no key "rateLimit"' + withContinueOnErrors: true + isRegexp: false + - message: 'could not resolve reference in / to $ref : object has no key "record"' + withContinueOnErrors: true + isRegexp: false + #- message: some parameters definitions are broken in "/".POST. Cannot carry on full checks on parameters for operation + #withContinueOnErrors: true + #isRegexp: false + #- message: some parameters definitions are broken in "/".GET. Cannot carry on full checks on parameters for operation + #withContinueOnErrors: true + #isRegexp: false + - message: 'could not resolve reference in "/".POST to $ref #/parameters/rateLimit: object has no key "rateLimit"' + withContinueOnErrors: true + isRegexp: false + - message: 'could not resolve reference in "/".GET to $ref : object has no key "myparam"' + withContinueOnErrors: true + isRegexp: false + - message: '"paths./.get.parameters.1" must validate one and only one schema (oneOf). Found none valid' + withContinueOnErrors: false + isRegexp: false + - message: 'paths./.get.parameters.1.in in body should be one of [body]' + withContinueOnErrors: false + isRegexp: false expectedWarnings: - - message: definition "#/definitions/myoutputs" is not used anywhere - withContinueOnErrors: true - isRegexp: false - - message: parameter "#/parameters/rateLimits" is not used anywhere - withContinueOnErrors: true - isRegexp: false - - message: definition "#/definitions/records" is not used anywhere - withContinueOnErrors: true - isRegexp: false - - message: definition "#/definitions/myparams" is not used anywhere - withContinueOnErrors: true - isRegexp: false + - message: definition "#/definitions/myoutputs" is not used anywhere + withContinueOnErrors: true + isRegexp: false + - message: parameter "#/parameters/rateLimits" is not used anywhere + withContinueOnErrors: true + isRegexp: false + - message: definition "#/definitions/records" is not used anywhere + withContinueOnErrors: true + isRegexp: false + - message: definition "#/definitions/myparams" is not used anywhere + withContinueOnErrors: true + isRegexp: false fixture-1050.yaml: comment: 'Valid spec: fix issue#1050 (dot separated path params)' todo: "" @@ -752,83 +793,90 @@ fixture-1171.yaml: expectedLoadError: false expectedValid: false expectedMessages: - - message: 'invalid definition as Schema for parameter other_server_id in path in operation "listZones"' - withContinueOnErrors: true - isRegexp: false - - message: 'invalid definition for parameter in body in operation "getBody"' - withContinueOnErrors: true - isRegexp: false - - message: '"paths./servers/{server_id}/zones.get.parameters" must validate one - and only one schema (oneOf). Found none valid' - withContinueOnErrors: false - isRegexp: false - - message: '"paths./server/getBody.get.parameters" must validate one and only one - schema (oneOf). Found none valid' - withContinueOnErrors: false - isRegexp: false - - message: '"paths./server/getBody.get.responses.200" must validate one and only - one schema (oneOf). Found none valid' - withContinueOnErrors: false - isRegexp: false - - message: '"paths./server/getBody.get.responses.200.schema" must validate one and - only one schema (oneOf). Found none valid' - withContinueOnErrors: false - isRegexp: false - - message: 'paths./server/getBody.get.responses.200.schema.properties.name in body - must be of type object: "string"' - withContinueOnErrors: false - isRegexp: false - - message: 'paths./server/getBody.get.responses.200.schema.properties.$ref in body - must be of type object: "string"' - withContinueOnErrors: false - isRegexp: false - - message: paths./server/getBody.get.responses.200.description in body is required - withContinueOnErrors: false - isRegexp: false - - message: items in definitions.Zones is required - withContinueOnErrors: false - isRegexp: false - - message: '"definitions.InvalidZone.items" must validate at least one schema (anyOf)' - withContinueOnErrors: false - isRegexp: false - - message: definitions.InvalidZone.items.name in body is a forbidden property - withContinueOnErrors: false - isRegexp: false - - message: path param "other_server_id" is not present in path "/servers/{server_id}/zones" - withContinueOnErrors: true - isRegexp: false - - message: 'operation "getBody" has more than 1 body param: ["" "yet_other_server_id"]' - withContinueOnErrors: true - isRegexp: false - - message: body param "yet_other_server_id" for "getBody" is a collection without - an element type (array requires items definition) - withContinueOnErrors: true - isRegexp: false - - message: in operation "listZones",path param "other_server_id" must be declared - as required - withContinueOnErrors: true - isRegexp: false - # TODO name missing in path - - message: 'items in paths./server/getBody.get.parameters.schema is required' - withContinueOnErrors: false - isRegexp: false - # TODO name missing in path - - message: 'items in paths./servers/{server_id}/zones.get.parameters.schema is required' - withContinueOnErrors: false - isRegexp: false - # TODO name missing in path - - message: 'paths./server/getBody.get.parameters.in in body should be one of [header]' - withContinueOnErrors: false - isRegexp: false - - message: 'paths./server/getBody.get.parameters.name in body is required' - withContinueOnErrors: false - isRegexp: false - - message: 'paths./server/getBody.get.parameters.thestreetwithnoname in body is a forbidden property' - withContinueOnErrors: false - isRegexp: false - - message: 'paths./servers/{server_id}/zones.get.parameters.in in body should be one of [body]' - withContinueOnErrors: false - isRegexp: false + - message: 'invalid definition as Schema for parameter other_server_id in path in operation "listZones"' + withContinueOnErrors: true + isRegexp: false + - message: 'invalid definition for parameter in body in operation "getBody"' + withContinueOnErrors: true + isRegexp: false + - message: '"paths./server/getBody.get.responses.200" must validate one and only one schema (oneOf). Found none valid' + withContinueOnErrors: false + isRegexp: false + - message: paths./server/getBody.get.responses.200.description in body is required + withContinueOnErrors: false + isRegexp: false + - message: items in definitions.Zones is required + withContinueOnErrors: false + isRegexp: false + - message: '"definitions.InvalidZone.items" must validate at least one schema (anyOf)' + withContinueOnErrors: false + isRegexp: false + - message: definitions.InvalidZone.items.name in body is a forbidden property + withContinueOnErrors: false + isRegexp: false + - message: path param "other_server_id" is not present in path "/servers/{server_id}/zones" + withContinueOnErrors: true + isRegexp: false + - message: 'operation "getBody" has more than 1 body param: ["" "yet_other_server_id"]' + withContinueOnErrors: true + isRegexp: false + - message: body param "yet_other_server_id" for "getBody" is a collection without an element type (array requires items definition) + withContinueOnErrors: true + isRegexp: false + - message: in operation "listZones",path param "other_server_id" must be declared as required + withContinueOnErrors: true + isRegexp: false + - message: '"paths./server/getBody.get.parameters.0" must validate one and only one schema (oneOf). Found none valid' + withContinueOnErrors: false + isRegexp: false + - message: 'items in paths./server/getBody.get.parameters.0.schema is required' + withContinueOnErrors: false + isRegexp: false + - message: '"paths./server/getBody.get.parameters.1" must validate one and only one schema (oneOf). Found none valid' + withContinueOnErrors: false + isRegexp: false + - message: 'paths./server/getBody.get.parameters.1.thestreetwithnoname in body is a forbidden property' + withContinueOnErrors: false + isRegexp: false + - message: 'paths./server/getBody.get.parameters.1.in in body should be one of [header]' + withContinueOnErrors: false + isRegexp: false + - message: 'paths./server/getBody.get.parameters.1.name in body is required' + withContinueOnErrors: false + isRegexp: false + - message: '"paths./servers/{server_id}/zones.get.parameters.1" must validate one and only one schema (oneOf). Found none valid' + withContinueOnErrors: false + isRegexp: false + - message: 'paths./servers/{server_id}/zones.get.parameters.1.in in body should be one of [body]' + withContinueOnErrors: false + isRegexp: false + - message: 'items in paths./servers/{server_id}/zones.get.parameters.1.schema is required' + withContinueOnErrors: false + isRegexp: false + - message: '"paths./server/getBody.get.parameters." must validate one and only one schema (oneOf). Found none valid' + withContinueOnErrors: true + isRegexp: false + - message: 'paths./server/getBody.get.parameters..in in body should be one of [header]' + withContinueOnErrors: true + isRegexp: false + - message: 'paths./server/getBody.get.parameters..name in body is required' + withContinueOnErrors: true + isRegexp: false + - message: '"paths./server/getBody.get.parameters.yet_other_server_id" must validate one and only one schema (oneOf). Found none valid' + withContinueOnErrors: true + isRegexp: false + - message: 'items in paths./server/getBody.get.parameters.yet_other_server_id.schema is required' + withContinueOnErrors: true + isRegexp: false + - message: '"paths./servers/{server_id}/zones.get.parameters.other_server_id" must validate one and only one schema (oneOf). Found none valid' + withContinueOnErrors: true + isRegexp: false + - message: 'paths./servers/{server_id}/zones.get.parameters.other_server_id.in in body should be one of [body]' + withContinueOnErrors: true + isRegexp: false + - message: 'items in paths./servers/{server_id}/zones.get.parameters.other_server_id.schema is required' + withContinueOnErrors: true + isRegexp: false expectedWarnings: [] fixture-1231.yaml: comment: "" @@ -836,71 +884,97 @@ fixture-1231.yaml: expectedLoadError: false expectedValid: false expectedMessages: - - message: '"parameters.customerIdParam" must validate one and only one schema (oneOf). - Found none valid' - withContinueOnErrors: false - isRegexp: false - - message: 'parameters.customerIdParam.example in body is a forbidden property' - withContinueOnErrors: false - isRegexp: false - - message: 'parameters.customerIdParam.in in body should be one of [header]' - withContinueOnErrors: false - isRegexp: false + - message: '"parameters.customerIdParam" must validate one and only one schema (oneOf). Found none valid' + withContinueOnErrors: false + isRegexp: false + - message: 'parameters.customerIdParam.example in body is a forbidden property' + withContinueOnErrors: false + isRegexp: false + - message: 'parameters.customerIdParam.in in body should be one of [header]' + withContinueOnErrors: false + isRegexp: false + - message: '"paths./v1/broker/{customer_id}.get.parameters.customer_id" must validate one and only one schema (oneOf). Found none valid' + withContinueOnErrors: true + isRegexp: false + - message: 'paths./v1/broker/{customer_id}.get.parameters.customer_id.example in body is a forbidden property' + withContinueOnErrors: true + isRegexp: false + - message: 'paths./v1/broker/{customer_id}.get.parameters.customer_id.in in body should be one of [header]' + withContinueOnErrors: true + isRegexp: false + - message: '"paths./v1/customer/{customer_id}.get.parameters.customer_id" must validate one and only one schema (oneOf). Found none valid' + withContinueOnErrors: true + isRegexp: false + - message: 'paths./v1/customer/{customer_id}.get.parameters.customer_id.example in body is a forbidden property' + withContinueOnErrors: true + isRegexp: false + - message: 'paths./v1/customer/{customer_id}.get.parameters.customer_id.in in body should be one of [header]' + withContinueOnErrors: true + isRegexp: false + - message: '"paths./v1/vendor/{customer_id}.get.parameters.customer_id" must validate one and only one schema (oneOf). Found none valid' + withContinueOnErrors: true + isRegexp: false + - message: 'paths./v1/vendor/{customer_id}.get.parameters.customer_id.example in body is a forbidden property' + withContinueOnErrors: true + isRegexp: false + - message: 'paths./v1/vendor/{customer_id}.get.parameters.customer_id.in in body should be one of [header]' + withContinueOnErrors: true + isRegexp: false expectedWarnings: - - message: 'definitions.customer.create_date.example in body must be of type date-time: "float64"' - withContinueOnErrors: true - isRegexp: false - - message: 'definitions.customer.email.example in body must be of type email: "float64"' - withContinueOnErrors: true - isRegexp: false - - message: 'definitions.customer.id.example in body must be of type uuid: "float64"' - withContinueOnErrors: true - isRegexp: false - - message: 'definitions.customer2.example.create_date in body must be of type date-time: "bad-date"' - withContinueOnErrors: true - isRegexp: false - - message: 'definitions.customer2.example.id in body must be of type uuid: "mycustomer"' - withContinueOnErrors: true - isRegexp: false - - message: 'example value for customer_id in path does not validate its schema' - withContinueOnErrors: true - isRegexp: false - - message: '/v1/broker/{customer_id}.examples.id in body must be of type uuid: "mycustomer"' - withContinueOnErrors: true - isRegexp: false - - message: '/v1/broker/{customer_id}.examples.create_date in body must be of type date-time: "bad-date"' - withContinueOnErrors: true - isRegexp: false - - message: 'customer_id in path must be of type uuid: "xyz"' - withContinueOnErrors: true - isRegexp: false - - message: '200.email.example in body must be of type email: "float64"' - withContinueOnErrors: true - isRegexp: false - - message: '200.example.create_date in body must be of type date-time: "bad-date"' - withContinueOnErrors: true - isRegexp: false - - message: '200.example.id in body must be of type uuid: "mycustomer"' - withContinueOnErrors: true - isRegexp: false - - message: '200.create_date.example in body must be of type date-time: "float64"' - withContinueOnErrors: true - isRegexp: false - - message: '200.id.example in body must be of type uuid: "float64"' - withContinueOnErrors: true - isRegexp: false - - message: 'in operation "", example value in response 200 does not validate its schema' - withContinueOnErrors: true - isRegexp: false + - message: 'definitions.customer.create_date.example in body must be of type date-time: "float64"' + withContinueOnErrors: true + isRegexp: false + - message: 'definitions.customer.email.example in body must be of type email: "float64"' + withContinueOnErrors: true + isRegexp: false + - message: 'definitions.customer.id.example in body must be of type uuid: "float64"' + withContinueOnErrors: true + isRegexp: false + - message: 'definitions.customer2.example.create_date in body must be of type date-time: "bad-date"' + withContinueOnErrors: true + isRegexp: false + - message: 'definitions.customer2.example.id in body must be of type uuid: "mycustomer"' + withContinueOnErrors: true + isRegexp: false + - message: 'example value for customer_id in path does not validate its schema' + withContinueOnErrors: true + isRegexp: false + - message: 'customer_id in path must be of type uuid: "xyz"' + withContinueOnErrors: true + isRegexp: false + - message: '200.email.example in body must be of type email: "float64"' + withContinueOnErrors: true + isRegexp: false + - message: '200.example.create_date in body must be of type date-time: "bad-date"' + withContinueOnErrors: true + isRegexp: false + - message: '200.example.id in body must be of type uuid: "mycustomer"' + withContinueOnErrors: true + isRegexp: false + - message: '200.create_date.example in body must be of type date-time: "float64"' + withContinueOnErrors: true + isRegexp: false + - message: '200.id.example in body must be of type uuid: "float64"' + withContinueOnErrors: true + isRegexp: false + - message: 'in operation "", example value in response 200 does not validate its schema' + withContinueOnErrors: true + isRegexp: false + - message: 'paths./v1/broker/{customer_id}.get.responses.200.examples.create_date in body must be of type date-time: "bad-date"' + withContinueOnErrors: true + isRegexp: false + - message: 'paths./v1/broker/{customer_id}.get.responses.200.examples.id in body must be of type uuid: "mycustomer"' + withContinueOnErrors: true + isRegexp: false fixture-1238.yaml: comment: "" todo: "" expectedLoadError: false expectedValid: false expectedMessages: - - message: definitions.RRSets in body must be of type array - withContinueOnErrors: false - isRegexp: false + - message: definitions.RRSets in body must be of type array + withContinueOnErrors: false + isRegexp: false expectedWarnings: [] fixture-1243-2.yaml: comment: "" @@ -908,9 +982,9 @@ fixture-1243-2.yaml: expectedLoadError: false expectedValid: false expectedMessages: - - message: path param "{loadBalancerId}" has no parameter definition - withContinueOnErrors: false - isRegexp: false + - message: path param "{loadBalancerId}" has no parameter definition + withContinueOnErrors: false + isRegexp: false expectedWarnings: [] fixture-1243-3.yaml: comment: "" @@ -918,17 +992,21 @@ fixture-1243-3.yaml: expectedLoadError: false expectedValid: false expectedMessages: - - message: '"paths./loadBalancers/{loadBalancerId}/backendSets.get.parameters" must - validate one and only one schema (oneOf). Found none valid' - withContinueOnErrors: false - isRegexp: false - - message: 'in operation "ListBackendSets",path param "loadBalancerId" must be declared - as required' - withContinueOnErrors: true - isRegexp: false - - message: 'paths./loadBalancers/{loadBalancerId}/backendSets.get.parameters.in in body should be one of [header]' - withContinueOnErrors: false - isRegexp: false + - message: 'in operation "ListBackendSets",path param "loadBalancerId" must be declared as required' + withContinueOnErrors: true + isRegexp: false + - message: '"paths./loadBalancers/{loadBalancerId}/backendSets.get.parameters.0" must validate one and only one schema (oneOf). Found none valid' + withContinueOnErrors: false + isRegexp: false + - message: 'paths./loadBalancers/{loadBalancerId}/backendSets.get.parameters.0.in in body should be one of [header]' + withContinueOnErrors: false + isRegexp: false + - message: '"paths./loadBalancers/{loadBalancerId}/backendSets.get.parameters.loadBalancerId" must validate one and only one schema (oneOf). Found none valid' + withContinueOnErrors: true + isRegexp: false + - message: 'paths./loadBalancers/{loadBalancerId}/backendSets.get.parameters.loadBalancerId.in in body should be one of [header]' + withContinueOnErrors: true + isRegexp: false expectedWarnings: [] fixture-1243-4.yaml: comment: Check garbled path strings @@ -936,134 +1014,133 @@ fixture-1243-4.yaml: expectedLoadError: false expectedValid: false expectedMessages: - - message: '"paths./loadBalancers/{aLotOfLoadBalancerIds}/backendSets.get.parameters" - must validate one and only one schema (oneOf). Found none valid' - withContinueOnErrors: false - isRegexp: false - - message: 'paths./loadBalancers/{aLotOfLoadBalancerIds}/backendSets.get.parameters.in in body is required' - withContinueOnErrors: false - isRegexp: false - - message: 'paths./loadBalancers/{aLotOfLoadBalancerIds}/backendSets.get.parameters.schema in body is required' - withContinueOnErrors: false - isRegexp: false - - message: 'paths./loadBalancers/{aLotOfLoadBalancerIds}/backendSets.get.parameters.type in body is a forbidden property' - withContinueOnErrors: false - isRegexp: false - - message: path param "{aLotOfLoadBalancerIds}" has no parameter definition - withContinueOnErrors: true - isRegexp: false - - message: path /loadBalancers/{aLotOfLoadBalancerIds}/backendSets overlaps with - /loadBalancers/{loadBalancerId}/backendSets - withContinueOnErrors: true - isRegexp: false - - message: path param "{sid }" has no parameter definition - withContinueOnErrors: true - isRegexp: false - - message: path param "sid" is not present in path "/othercheck/{si/d}warnMe" - withContinueOnErrors: true - isRegexp: false - - message: path param "sid" is not present in path "/othercheck/{sid }/warnMe" - withContinueOnErrors: true - isRegexp: false + - message: path param "{aLotOfLoadBalancerIds}" has no parameter definition + withContinueOnErrors: true + isRegexp: false + - message: path /loadBalancers/{aLotOfLoadBalancerIds}/backendSets overlaps with /loadBalancers/{loadBalancerId}/backendSets + withContinueOnErrors: true + isRegexp: false + - message: path param "{sid }" has no parameter definition + withContinueOnErrors: true + isRegexp: false + - message: path param "sid" is not present in path "/othercheck/{si/d}warnMe" + withContinueOnErrors: true + isRegexp: false + - message: path param "sid" is not present in path "/othercheck/{sid }/warnMe" + withContinueOnErrors: true + isRegexp: false + - message: '"paths./loadBalancers/{aLotOfLoadBalancerIds}/backendSets.get.parameters.0" must validate one and only one schema (oneOf). Found none valid' + withContinueOnErrors: false + isRegexp: false + - message: 'paths./loadBalancers/{aLotOfLoadBalancerIds}/backendSets.get.parameters.0.type in body is a forbidden property' + withContinueOnErrors: false + isRegexp: false + - message: 'paths./loadBalancers/{aLotOfLoadBalancerIds}/backendSets.get.parameters.0.in in body is required' + withContinueOnErrors: false + isRegexp: false + - message: 'paths./loadBalancers/{aLotOfLoadBalancerIds}/backendSets.get.parameters.0.schema in body is required' + withContinueOnErrors: false + isRegexp: false + - message: '"paths./loadBalancers/{aLotOfLoadBalancerIds}/backendSets.get.parameters.aLotOfLoadBalancerId" must validate one and only one schema (oneOf). Found none valid' + withContinueOnErrors: true + isRegexp: false + - message: 'paths./loadBalancers/{aLotOfLoadBalancerIds}/backendSets.get.parameters.aLotOfLoadBalancerId.type in body is a forbidden property' + withContinueOnErrors: true + isRegexp: false + - message: 'paths./loadBalancers/{aLotOfLoadBalancerIds}/backendSets.get.parameters.aLotOfLoadBalancerId.in in body is required' + withContinueOnErrors: true + isRegexp: false + - message: 'paths./loadBalancers/{aLotOfLoadBalancerIds}/backendSets.get.parameters.aLotOfLoadBalancerId.schema in body is required' + withContinueOnErrors: true + isRegexp: false expectedWarnings: - - message: in path "/othercheck/{sid }/warnMe", param "{sid }" contains {,} or white - space. Albeit not stricly illegal, this is probably no what you want - withContinueOnErrors: true - isRegexp: false - - message: path stripped from path parameters /othercheck/{X/warnMe contains {,} - or white space. This is probably no what you want. - withContinueOnErrors: true - isRegexp: false - - message: path stripped from path parameters /othercheck/{si/d}warnMe contains - {,} or white space. This is probably no what you want. - withContinueOnErrors: true - isRegexp: false + - message: in path "/othercheck/{sid }/warnMe", param "{sid }" contains {,} or white space. Albeit not stricly illegal, this is probably no what you want + withContinueOnErrors: true + isRegexp: false + - message: path stripped from path parameters /othercheck/{X/warnMe contains {,} or white space. This is probably no what you want. + withContinueOnErrors: true + isRegexp: false + - message: path stripped from path parameters /othercheck/{si/d}warnMe contains {,} or white space. This is probably no what you want. + withContinueOnErrors: true + isRegexp: false fixture-1243-5.json: comment: "" todo: "" expectedLoadError: false expectedValid: false expectedMessages: - - message: path param "{sid}" has no parameter definition - withContinueOnErrors: false - isRegexp: false - - message: path param "{sid" is not present in path "/othercheck/{{sid}/warnMe" - withContinueOnErrors: false - isRegexp: false - - message: path param "sid" is not present in path "/othercheck/{si/d}warnMe" - withContinueOnErrors: false - isRegexp: false - - message: path /loadBalancers/{aLotOfLoadBalancerIds}/backendSets overlaps with - /loadBalancers/{loadBalancerId}/backendSets - withContinueOnErrors: false - isRegexp: false + - message: path param "{sid}" has no parameter definition + withContinueOnErrors: false + isRegexp: false + - message: path param "{sid" is not present in path "/othercheck/{{sid}/warnMe" + withContinueOnErrors: false + isRegexp: false + - message: path param "sid" is not present in path "/othercheck/{si/d}warnMe" + withContinueOnErrors: false + isRegexp: false + - message: path /loadBalancers/{aLotOfLoadBalancerIds}/backendSets overlaps with /loadBalancers/{loadBalancerId}/backendSets + withContinueOnErrors: false + isRegexp: false expectedWarnings: - - message: in path "/othercheck/{sid }/warnMe", param "{sid }" contains {,} or white - space. Albeit not stricly illegal, this is probably no what you want - withContinueOnErrors: false - isRegexp: false - - message: path stripped from path parameters /othercheck/{X/warnMe contains {,} - or white space. This is probably no what you want. - withContinueOnErrors: false - isRegexp: false - - message: path stripped from path parameters /othercheck/{si/d}warnMe contains - {,} or white space. This is probably no what you want. - withContinueOnErrors: false - isRegexp: false + - message: in path "/othercheck/{sid }/warnMe", param "{sid }" contains {,} or white space. Albeit not stricly illegal, this is probably no what you want + withContinueOnErrors: false + isRegexp: false + - message: path stripped from path parameters /othercheck/{X/warnMe contains {,} or white space. This is probably no what you want. + withContinueOnErrors: false + isRegexp: false + - message: path stripped from path parameters /othercheck/{si/d}warnMe contains {,} or white space. This is probably no what you want. + withContinueOnErrors: false + isRegexp: false fixture-1243-5.yaml: comment: "" todo: "" expectedLoadError: false expectedValid: false expectedMessages: - #- message: '"paths./loadBalancers/{aLotOfLoadBalancerIds}/backendSets.get.parameters" - # must validate one and only one schema (oneOf). Found none valid' - # withContinueOnErrors: false - # isRegexp: false - #- message: '"paths./othercheck/{{sid}/warnMe.get.parameters" must validate one and - # only one schema (oneOf). Found none valid' - # withContinueOnErrors: false - # isRegexp: false - #- message: '"paths./othercheck/{sid }/warnMe.get.parameters" must validate one and - # only one schema (oneOf). Found none valid' - # withContinueOnErrors: false - # isRegexp: false - #- message: '"paths./othercheck/{si/d}warnMe.get.parameters" must validate one and - # only one schema (oneOf). Found none valid' - # withContinueOnErrors: false - # isRegexp: false - - message: 'path param "sid" is not present in path "/othercheck/{si/d}warnMe"' - withContinueOnErrors: false - isRegexp: false - - message: 'path param "{sid" is not present in path "/othercheck/{{sid}/warnMe"' - withContinueOnErrors: false - isRegexp: false - #- message: path param "{aLotOfLoadBalancerIds}" has no parameter definition - # withContinueOnErrors: true - # isRegexp: false - - message: path param "{sid}" has no parameter definition - withContinueOnErrors: false - isRegexp: false - #- message: path param "{sid }" has no parameter definition - # withContinueOnErrors: true - # isRegexp: false - - message: path /loadBalancers/{aLotOfLoadBalancerIds}/backendSets overlaps with - /loadBalancers/{loadBalancerId}/backendSets - withContinueOnErrors: false - isRegexp: false + #- message: '"paths./loadBalancers/{aLotOfLoadBalancerIds}/backendSets.get.parameters" + # must validate one and only one schema (oneOf). Found none valid' + # withContinueOnErrors: false + # isRegexp: false + #- message: '"paths./othercheck/{{sid}/warnMe.get.parameters" must validate one and + # only one schema (oneOf). Found none valid' + # withContinueOnErrors: false + # isRegexp: false + #- message: '"paths./othercheck/{sid }/warnMe.get.parameters" must validate one and + # only one schema (oneOf). Found none valid' + # withContinueOnErrors: false + # isRegexp: false + #- message: '"paths./othercheck/{si/d}warnMe.get.parameters" must validate one and + # only one schema (oneOf). Found none valid' + # withContinueOnErrors: false + # isRegexp: false + - message: 'path param "sid" is not present in path "/othercheck/{si/d}warnMe"' + withContinueOnErrors: false + isRegexp: false + - message: 'path param "{sid" is not present in path "/othercheck/{{sid}/warnMe"' + withContinueOnErrors: false + isRegexp: false + #- message: path param "{aLotOfLoadBalancerIds}" has no parameter definition + # withContinueOnErrors: true + # isRegexp: false + - message: path param "{sid}" has no parameter definition + withContinueOnErrors: false + isRegexp: false + #- message: path param "{sid }" has no parameter definition + # withContinueOnErrors: true + # isRegexp: false + - message: path /loadBalancers/{aLotOfLoadBalancerIds}/backendSets overlaps with /loadBalancers/{loadBalancerId}/backendSets + withContinueOnErrors: false + isRegexp: false expectedWarnings: - - message: in path "/othercheck/{sid }/warnMe", param "{sid }" contains {,} or white - space. Albeit not stricly illegal, this is probably no what you want - withContinueOnErrors: false - isRegexp: false - - message: path stripped from path parameters /othercheck/{X/warnMe contains {,} - or white space. This is probably no what you want. - withContinueOnErrors: false - isRegexp: false - - message: path stripped from path parameters /othercheck/{si/d}warnMe contains - {,} or white space. This is probably no what you want. - withContinueOnErrors: false - isRegexp: false + - message: in path "/othercheck/{sid }/warnMe", param "{sid }" contains {,} or white space. Albeit not stricly illegal, this is probably no what you want + withContinueOnErrors: false + isRegexp: false + - message: path stripped from path parameters /othercheck/{X/warnMe contains {,} or white space. This is probably no what you want. + withContinueOnErrors: false + isRegexp: false + - message: path stripped from path parameters /othercheck/{si/d}warnMe contains {,} or white space. This is probably no what you want. + withContinueOnErrors: false + isRegexp: false fixture-1243-good.yaml: comment: "" todo: "" @@ -1077,26 +1154,21 @@ fixture-1243.yaml: expectedLoadError: false expectedValid: false expectedMessages: - - message: '"paths./loadBalancers/{loadBalancerId}/backendSets.get.responses.200" - must validate one and only one schema (oneOf). Found none valid' - withContinueOnErrors: false - isRegexp: false - - message: paths./loadBalancers/{loadBalancerId}/backendSets.get.responses.200.headers.opc-response-id.$ref - in body is a forbidden property - withContinueOnErrors: false - isRegexp: false - - message: paths./loadBalancers/{loadBalancerId}/backendSets.get.responses.200.headers.opc-response-id.type - in body is required - withContinueOnErrors: false - isRegexp: false - - message: path param "{loadBalancerId}" has no parameter definition - withContinueOnErrors: true - isRegexp: false - - message: 'in "paths./loadBalancers/{loadBalancerId}/backendSets.get.responses.200": - $ref are not allowed in headers. In context for header "opc-response-id", one - may not use $ref=":#/x-descriptions/opc-response-id"' - withContinueOnErrors: false - isRegexp: false + - message: '"paths./loadBalancers/{loadBalancerId}/backendSets.get.responses.200" must validate one and only one schema (oneOf). Found none valid' + withContinueOnErrors: false + isRegexp: false + - message: paths./loadBalancers/{loadBalancerId}/backendSets.get.responses.200.headers.opc-response-id.$ref in body is a forbidden property + withContinueOnErrors: false + isRegexp: false + - message: paths./loadBalancers/{loadBalancerId}/backendSets.get.responses.200.headers.opc-response-id.type in body is required + withContinueOnErrors: false + isRegexp: false + - message: path param "{loadBalancerId}" has no parameter definition + withContinueOnErrors: true + isRegexp: false + - message: 'in "paths./loadBalancers/{loadBalancerId}/backendSets.get.responses.200": $ref are not allowed in headers. In context for header "opc-response-id", one may not use $ref=":#/x-descriptions/opc-response-id"' + withContinueOnErrors: false + isRegexp: false expectedWarnings: [] fixture-1289-donotload.json: comment: "" @@ -1104,9 +1176,9 @@ fixture-1289-donotload.json: expectedLoadError: true expectedValid: false expectedMessages: - - message: .*yaml:.+ - withContinueOnErrors: false - isRegexp: true + - message: .*yaml:.+ + withContinueOnErrors: false + isRegexp: true expectedWarnings: [] fixture-1289-donotload.yaml: comment: "" @@ -1114,9 +1186,9 @@ fixture-1289-donotload.yaml: expectedLoadError: true expectedValid: false expectedMessages: - - message: .*yaml:.+ - withContinueOnErrors: false - isRegexp: true + - message: .*yaml:.+ + withContinueOnErrors: false + isRegexp: true expectedWarnings: [] fixture-1289-good.yaml: comment: "" @@ -1131,9 +1203,9 @@ fixture-1289.yaml: expectedLoadError: false expectedValid: false expectedMessages: - - message: items in definitions.getSomeIds.properties.someIds is required - withContinueOnErrors: false - isRegexp: false + - message: items in definitions.getSomeIds.properties.someIds is required + withContinueOnErrors: false + isRegexp: false expectedWarnings: [] fixture-collisions.yaml: comment: A supplement scenario for uniqueness tests in paths, operations, parameters @@ -1141,118 +1213,132 @@ fixture-collisions.yaml: expectedLoadError: false expectedValid: false expectedMessages: - - message: '"paths./bigbody/get.get.parameters" must validate one and only one schema - (oneOf). Found none valid' - withContinueOnErrors: false - isRegexp: false - - message: paths./dupparam/get.get.parameters in body shouldn't contain duplicates - withContinueOnErrors: false - isRegexp: false - - message: paths./bigbody/get.get.parameters.in in body should be one of [header] - withContinueOnErrors: false - isRegexp: false - - message: 'operation "ope2" has more than 1 body param: ["loadBalancerId2" "loadBalancerId3"]' - withContinueOnErrors: true - isRegexp: false - - message: '"ope6" is defined 2 times' - withContinueOnErrors: true - isRegexp: false - - message: '"ope5" is defined 2 times' - withContinueOnErrors: true - isRegexp: false - - message: path /duplpath/{id1}/get overlaps with /duplpath/{id2}/get - withContinueOnErrors: true - isRegexp: false - - message: duplicate parameter name "id2" for "query" in operation "ope7" - withContinueOnErrors: true - isRegexp: false - - message: 'params in path "/loadBalancers/{loadBalancerId}/backendSets/{loadBalancerId}/get" - must be unique: "{loadBalancerId}" conflicts with "{loadBalancerId}"' - withContinueOnErrors: true - isRegexp: false - # with systematic param resolution, we get more errors like this one (body and type: string) - - message: 'invalid definition for parameter loadBalancerId2 in body in operation "ope2"' - withContinueOnErrors: true - isRegexp: false - - message: 'invalid definition for parameter loadBalancerId3 in body in operation "ope2"' - withContinueOnErrors: true - isRegexp: false + - message: paths./dupparam/get.get.parameters in body shouldn't contain duplicates + withContinueOnErrors: false + isRegexp: false + - message: 'operation "ope2" has more than 1 body param: ["loadBalancerId2" "loadBalancerId3"]' + withContinueOnErrors: true + isRegexp: false + - message: '"ope6" is defined 2 times' + withContinueOnErrors: true + isRegexp: false + - message: '"ope5" is defined 2 times' + withContinueOnErrors: true + isRegexp: false + - message: path /duplpath/{id1}/get overlaps with /duplpath/{id2}/get + withContinueOnErrors: true + isRegexp: false + - message: duplicate parameter name "id2" for "query" in operation "ope7" + withContinueOnErrors: true + isRegexp: false + - message: 'params in path "/loadBalancers/{loadBalancerId}/backendSets/{loadBalancerId}/get" must be unique: "{loadBalancerId}" conflicts with "{loadBalancerId}"' + withContinueOnErrors: true + isRegexp: false + # with systematic param resolution, we get more errors like this one (body and type: string) + - message: 'invalid definition for parameter loadBalancerId2 in body in operation "ope2"' + withContinueOnErrors: true + isRegexp: false + - message: 'invalid definition for parameter loadBalancerId3 in body in operation "ope2"' + withContinueOnErrors: true + isRegexp: false + - message: '"paths./bigbody/get.get.parameters.0" must validate one and only one schema (oneOf). Found none valid' + withContinueOnErrors: false + isRegexp: false + - message: 'paths./bigbody/get.get.parameters.0.in in body should be one of [header]' + withContinueOnErrors: false + isRegexp: false + - message: '"paths./bigbody/get.get.parameters.1" must validate one and only one schema (oneOf). Found none valid' + withContinueOnErrors: false + isRegexp: false + - message: 'paths./bigbody/get.get.parameters.1.in in body should be one of [header]' + withContinueOnErrors: false + isRegexp: false + - message: '"paths./bigbody/get.get.parameters.loadBalancerId2" must validate one and only one schema (oneOf). Found none valid' + withContinueOnErrors: true + isRegexp: false + - message: 'paths./bigbody/get.get.parameters.loadBalancerId2.in in body should be one of [header]' + withContinueOnErrors: true + isRegexp: false + - message: '"paths./bigbody/get.get.parameters.loadBalancerId3" must validate one and only one schema (oneOf). Found none valid' + withContinueOnErrors: true + isRegexp: false + - message: 'paths./bigbody/get.get.parameters.loadBalancerId3.in in body should be one of [header]' + withContinueOnErrors: true + isRegexp: false expectedWarnings: [] fixture-constraints-on-numbers.yaml: - comment: A supplement scenario for native vs float-based constraint verifications - on integers (multipleOf,maximum, minimum). - todo: This scenario supports current checks, that is for constraints on schemas - with a default value only. It should be generalized (issue#581) and also for example - values (issue#1231) + comment: A supplement scenario for native vs float-based constraint verifications on integers (multipleOf,maximum, minimum). + todo: 'This scenario supports current checks, that is for constraints on schemas with a default value only. It should be generalized (issue#581) and also for example values (issue#1231). + + param3 does not report "param3 in query should be a multiple of 10", though the fixture comment says it should. MultipleOf compares data/factor through conv.IsFloat64AJSONInteger, whose tolerance is relative: at a quotient of 2.1e8 it accepts an absolute remainder up to 0.2, and 2147483648/10 = 214748364.8 falls inside that. MultipleOfInt and MultipleOfUint decide the same numbers correctly, so only a value arriving as a float64 is affected. + + This is not a tolerance to retune. A relative error covers the borderline cases a fixed one misses, and any other metric would close this hole and open others: a float64 cannot answer the question in general. multipleOf is only decidable with decimal arithmetic, which is v2 work.' expectedLoadError: false expectedValid: false expectedMessages: - - message: default value for param1 in query does not validate its schema - withContinueOnErrors: false - isRegexp: false - - message: default value for param2 in query does not validate its schema - withContinueOnErrors: false - isRegexp: false - - message: default value for param3 in query does not validate its schema - withContinueOnErrors: false - isRegexp: false - - message: default value for param4 in query does not validate its schema - withContinueOnErrors: false - isRegexp: false - - message: default value for param5 in query does not validate its schema - withContinueOnErrors: false - isRegexp: false - - message: default value for param6 in query does not validate its schema - withContinueOnErrors: false - isRegexp: false - - message: default value for param7 in query does not validate its schema - withContinueOnErrors: false - isRegexp: false - - message: default value for param8 in query does not validate its schema - withContinueOnErrors: false - isRegexp: false - # Note how value has been implicitely converted to fload64 - - message: param1 in query should be a multiple of 2.147483648e+09 - withContinueOnErrors: false - isRegexp: false - - message: MultipleOf value must be of type integer with format int32 in param1 - withContinueOnErrors: false - isRegexp: false - - message: MultipleOf value must be of type integer with format int32 in param2 - withContinueOnErrors: false - isRegexp: false - - message: Checked value must be of type integer with format int32 in param2 - withContinueOnErrors: false - isRegexp: false - - message: Checked value must be of type integer with format int32 in param3 - withContinueOnErrors: false - isRegexp: false - - message: param3 in query should be a multiple of 10 - withContinueOnErrors: false - isRegexp: false - - message: Checked value must be of type integer with format int32 in param4 - withContinueOnErrors: false - isRegexp: false - - message: Checked value must be of type integer with format int32 in param5 - withContinueOnErrors: false - isRegexp: false - # Note how value has been implicitely converted to fload64 - - message: param5 in query should be less than or equal to 2.147483647e+09 - withContinueOnErrors: false - isRegexp: false - - message: Checked value must be of type integer with format uint32 in param6 - withContinueOnErrors: false - isRegexp: false - - message: Checked value must be of type integer with format int32 in param7 - withContinueOnErrors: false - isRegexp: false - - message: Checked value must be of type integer with format uint32 in param8 - withContinueOnErrors: false - isRegexp: false - # Note how value has been implicitely converted to fload64 - - message: param8 in query should be greater than or equal to 2.147483647e+09 - withContinueOnErrors: false - isRegexp: false + - message: default value for param1 in query does not validate its schema + withContinueOnErrors: false + isRegexp: false + - message: default value for param2 in query does not validate its schema + withContinueOnErrors: false + isRegexp: false + - message: default value for param3 in query does not validate its schema + withContinueOnErrors: false + isRegexp: false + - message: default value for param4 in query does not validate its schema + withContinueOnErrors: false + isRegexp: false + - message: default value for param5 in query does not validate its schema + withContinueOnErrors: false + isRegexp: false + - message: default value for param6 in query does not validate its schema + withContinueOnErrors: false + isRegexp: false + - message: default value for param7 in query does not validate its schema + withContinueOnErrors: false + isRegexp: false + - message: default value for param8 in query does not validate its schema + withContinueOnErrors: false + isRegexp: false + # Note how value has been implicitely converted to fload64 + - message: param1 in query should be a multiple of 2.147483648e+09 + withContinueOnErrors: false + isRegexp: false + - message: MultipleOf value must be of type integer with format int32 in param1 + withContinueOnErrors: false + isRegexp: false + - message: MultipleOf value must be of type integer with format int32 in param2 + withContinueOnErrors: false + isRegexp: false + - message: Checked value must be of type integer with format int32 in param2 + withContinueOnErrors: false + isRegexp: false + - message: Checked value must be of type integer with format int32 in param3 + withContinueOnErrors: false + isRegexp: false + - message: Checked value must be of type integer with format int32 in param4 + withContinueOnErrors: false + isRegexp: false + - message: Checked value must be of type integer with format int32 in param5 + withContinueOnErrors: false + isRegexp: false + # Note how value has been implicitely converted to fload64 + - message: param5 in query should be less than or equal to 2.147483647e+09 + withContinueOnErrors: false + isRegexp: false + - message: Checked value must be of type integer with format uint32 in param6 + withContinueOnErrors: false + isRegexp: false + - message: Checked value must be of type integer with format int32 in param7 + withContinueOnErrors: false + isRegexp: false + - message: Checked value must be of type integer with format uint32 in param8 + withContinueOnErrors: false + isRegexp: false + # Note how value has been implicitely converted to fload64 + - message: param8 in query should be greater than or equal to 2.147483647e+09 + withContinueOnErrors: false + isRegexp: false expectedWarnings: #- message: param8 in query has a default but no valid schema # withContinueOnErrors: false @@ -1264,12 +1350,12 @@ fixture-invalid-example-property.yaml: expectedValid: true expectedMessages: [] expectedWarnings: - - message: example value for getSomeIds in body does not validate its schema - withContinueOnErrors: false - isRegexp: false - - message: 'getSomeIds.id.example in body must be of type number: "string"' - withContinueOnErrors: false - isRegexp: false + - message: example value for getSomeIds in body does not validate its schema + withContinueOnErrors: false + isRegexp: false + - message: 'getSomeIds.id.example in body must be of type number: "string"' + withContinueOnErrors: false + isRegexp: false fixture-valid-example-property.yaml: comment: todo: @@ -1283,17 +1369,17 @@ petstore-expanded.json: expectedLoadError: false expectedValid: false expectedMessages: - - message: invalid ref "pet" - withContinueOnErrors: false - isRegexp: false - # this one is a regexp since the full absolute path of the ref is reported - - message: 'could not resolve reference in newPet to \$ref pet: open .*[\/\\]pet:\s.+' - withContinueOnErrors: true - isRegexp: true - # with systematic response expansion, get more errors - - message: 'could not resolve reference in "\/pets".POST to \$ref .*: open .*:\s.+' - withContinueOnErrors: true - isRegexp: true + - message: invalid ref "pet" + withContinueOnErrors: false + isRegexp: false + # this one is a regexp since the full absolute path of the ref is reported + - message: 'could not resolve reference in newPet to \$ref pet: .*open .*[\/\\]pet:\s.+' + withContinueOnErrors: true + isRegexp: true + # with systematic response expansion, get more errors + - message: 'could not resolve reference in "\/pets".POST to \$ref .*: open .*:\s.+' + withContinueOnErrors: true + isRegexp: true expectedWarnings: [] gentest.yaml: comment: many parameters situations @@ -1302,12 +1388,12 @@ gentest.yaml: expectedValid: true expectedMessages: [] expectedWarnings: - - message: deepNested1 in query has a default value and is required as parameter - withContinueOnErrors: false - isRegexp: false - - message: queryParam2 in query has a default value and is required as parameter - withContinueOnErrors: false - isRegexp: false + - message: deepNested1 in query has a default value and is required as parameter + withContinueOnErrors: false + isRegexp: false + - message: queryParam2 in query has a default value and is required as parameter + withContinueOnErrors: false + isRegexp: false gentest2.yaml: comment: many parameters situations with default values todo: @@ -1315,24 +1401,24 @@ gentest2.yaml: expectedValid: true expectedMessages: [] expectedWarnings: - - message: deepNested1 in query has a default value and is required as parameter - withContinueOnErrors: false - isRegexp: false - - message: queryParam2 in query has a default value and is required as parameter - withContinueOnErrors: false - isRegexp: false + - message: deepNested1 in query has a default value and is required as parameter + withContinueOnErrors: false + isRegexp: false + - message: queryParam2 in query has a default value and is required as parameter + withContinueOnErrors: false + isRegexp: false gentest3.yaml: comment: default format in headers todo: expectedLoadError: false expectedValid: false expectedMessages: - - message: 'in operation "gimmeLottaHeaders", default value in header sanity-check-header-2 for response 201 does not validate its schema' - withContinueOnErrors: false - isRegexp: false - - message: 'sanity-check-header-2 in response must be of type date: "x1972-01-01"' - withContinueOnErrors: false - isRegexp: false + - message: 'in operation "gimmeLottaHeaders", default value in header sanity-check-header-2 for response 201 does not validate its schema' + withContinueOnErrors: false + isRegexp: false + - message: 'sanity-check-header-2 in response must be of type date: "x1972-01-01"' + withContinueOnErrors: false + isRegexp: false expectedWarnings: [] fixture-all-formats.yaml: comment: all custom formats as default values @@ -1340,120 +1426,120 @@ fixture-all-formats.yaml: expectedLoadError: false expectedValid: false expectedMessages: - # On parameters: - - message: 'default value for n01 in query does not validate its schema' - - message: 'default value for n03 in query does not validate its schema' - - message: 'default value for n04 in query does not validate its schema' - - message: 'default value for n05 in query does not validate its schema' - - message: 'default value for n06 in query does not validate its schema' - - message: 'default value for p01 in query does not validate its schema' - - message: 'default value for p02 in query does not validate its schema' - - message: 'default value for p03 in query does not validate its schema' - - message: 'default value for p04 in query does not validate its schema' - - message: 'default value for p05 in query does not validate its schema' - - message: 'default value for p06 in query does not validate its schema' - - message: 'default value for p07 in query does not validate its schema' - - message: 'default value for p08 in query does not validate its schema' - - message: 'default value for p09 in query does not validate its schema' - - message: 'default value for p10 in query does not validate its schema' - - message: 'default value for p11 in query does not validate its schema' - - message: 'default value for p12 in query does not validate its schema' - - message: 'default value for p13 in query does not validate its schema' - - message: 'default value for p14 in query does not validate its schema' - - message: 'default value for p15 in query does not validate its schema' - - message: 'default value for p16 in query does not validate its schema' - - message: 'default value for p17 in query does not validate its schema' - - message: 'default value for p18 in query does not validate its schema' - - message: 'default value for p20 in query does not validate its schema' - - message: 'default value for p21 in query does not validate its schema' - - message: 'default value for p22 in query does not validate its schema' - - message: 'default value for p23 in query does not validate its schema' - - message: 'n01 in query must be of type number: "string"' - - message: 'n03 in query must be of type int32: "float64"' - - message: 'n04 in query must be of type int64: "float64"' - - message: 'Checked value must be of type integer with format uint32 in n05' - - message: 'Checked value must be of type integer with format uint64 in n06' - - message: 'p01 in query must be of type byte: "ZWxpemFiZXRocG9zZXk"' - - message: 'p02 in query must be of type creditcard: "4111-1X11-1111-1111"' - - message: 'p03 in query must be of type date: "1970-13-01"' - - message: 'p04 in query must be of type date-time: "1963-13-19T08:30:06.283185Z"' - - message: 'p05 in query must be of type duration: "three weeks"' - - message: 'p06 in query must be of type email: "joe.bloggs-example.com"' - - message: 'p07 in query must be of type hexcolor: "xFFFFFF"' - - message: 'p08 in query must be of type hostname: "not_a_valid_hostname"' - - message: 'p09 in query must be of type ipv4: "192.168.0.256"' - - message: 'p10 in query must be of type ipv6: "o::1"' - - message: 'p11 in query must be of type isbn: "abc-0321751043"' - - message: 'p12 in query must be of type isbn10: "abc-0321751043"' - - message: 'p13 in query must be of type isbn13: "978|3401013190"' - - message: 'p14 in query must be of type mac: "01:02:03:04:05:06:07"' - - message: 'p15 in query must be of type bsonobjectid: "x07f1f77bcf86cd799439011"' - - message: 'p16 in query must be of type password: "float64"' - - message: 'p17 in query must be of type rgbcolor: "rgb(100,100)"' - - message: 'p18 in query must be of type ssn: "111-11111"' - - message: 'p20 in query must be of type uuid: "a8098c1a+f86e+11da+bd1a+00112444be1e"' - - message: 'p21 in query must be of type uuid3: "bcd02e22+68f0+3046+a512+327cca9def8f"' - - message: 'p22 in query must be of type uuid4: "025b0d74+00a2+4048+bf57+227c5111bb34"' - - message: 'p23 in query must be of type uuid5: "886313e1+3b8a+5372+9b90+0c9aee199e5d"' - # On schema: - - message: 'definitions.allformats-bad.prop01.default in body must be of type byte: "ZWxpemFiZXRocG9zZXk"' - - message: 'definitions.allformats-bad.prop02.default in body must be of type creditcard: "4111-1111-1111-111K"' - - message: 'definitions.allformats-bad.prop03.default in body must be of type date: "1970-01-32"' - - message: 'definitions.allformats-bad.prop04.default in body must be of type date-time: "1963-06-19T99:30:06.283185Z"' - - message: 'definitions.allformats-bad.prop05.default in body must be of type duration: "weeks"' - - message: 'definitions.allformats-bad.prop06.default in body must be of type email: "joe.bloggs-example.com"' - - message: 'definitions.allformats-bad.prop07.default in body must be of type hexcolor: "float64"' - - message: 'definitions.allformats-bad.prop08.default in body must be of type hostname: "---invalid-hostname---"' - - message: 'definitions.allformats-bad.prop09.default in body must be of type ipv4: "192.2.0.1.45"' - - message: 'definitions.allformats-bad.prop10.default in body must be of type ipv6: "x::1"' - - message: 'definitions.allformats-bad.prop11.default in body must be of type isbn: "X0321751043"' - - message: 'definitions.allformats-bad.prop12.default in body must be of type isbn10: "X0321751043"' - - message: 'definitions.allformats-bad.prop13.default in body must be of type isbn13: "X978 3401013190"' - - message: 'definitions.allformats-bad.prop14.default in body must be of type mac: "X1:02:03:04:05:06"' - - message: 'definitions.allformats-bad.prop15.default in body must be of type bsonobjectid: "X507f1f77bcf86cd799439011"' - - message: 'definitions.allformats-bad.prop16.default in body must be of type password: "float64"' - - message: 'definitions.allformats-bad.prop17.default in body must be of type rgbcolor: "gb(100,100,100)"' - - message: 'definitions.allformats-bad.prop18.default in body must be of type ssn: "Z111-11-1111"' - - message: 'definitions.allformats-bad.prop20.default in body must be of type uuid: "a8098c1a+f86e+11da+bd1a+00112444be1e"' - - message: 'definitions.allformats-bad.prop21.default in body must be of type uuid3: "bcd02e22+68f0+3046+a512+327cca9def8f"' - - message: 'definitions.allformats-bad.prop22.default in body must be of type uuid4: "025b0d74+00a2+4048+bf57+227c5111bb34"' - - message: 'definitions.allformats-bad.prop23.default in body must be of type uuid5: "886313e1+3b8a+5372+9b90+0c9aee199e5d"' - - message: 'definitions.allformats-bad.propn01.default in body must be of type number: "string"' - - message: 'definitions.allformats-bad.propn02.default in body must be of type number: "string"' - - message: 'definitions.allformats-bad.propn03.default in body must be of type int32: "float64"' - - message: 'definitions.allformats-bad.propn04.default in body must be of type int64: "float64"' - - message: 'definitions.allformats-bad.propn05.default in body must be of type uint32: "float64"' - - message: 'definitions.allformats-bad.propn06.default in body must be of type uint64: "float64"' - # More messages with systematic response expansion - - message: '200.prop01.default in body must be of type byte: "ZWxpemFiZXRocG9zZXk"' - - message: '200.prop02.default in body must be of type creditcard: "4111-1111-1111-111K"' - - message: '200.prop03.default in body must be of type date: "1970-01-32"' - - message: '200.prop04.default in body must be of type date-time: "1963-06-19T99:30:06.283185Z"' - - message: '200.prop05.default in body must be of type duration: "weeks"' - - message: '200.prop06.default in body must be of type email: "joe.bloggs-example.com"' - - message: '200.prop07.default in body must be of type hexcolor: "float64"' - - message: '200.prop08.default in body must be of type hostname: "---invalid-hostname---"' - - message: '200.prop09.default in body must be of type ipv4: "192.2.0.1.45"' - - message: '200.prop10.default in body must be of type ipv6: "x::1"' - - message: '200.prop11.default in body must be of type isbn: "X0321751043"' - - message: '200.prop12.default in body must be of type isbn10: "X0321751043"' - - message: '200.prop13.default in body must be of type isbn13: "X978 3401013190"' - - message: '200.prop14.default in body must be of type mac: "X1:02:03:04:05:06"' - - message: '200.prop15.default in body must be of type bsonobjectid: "X507f1f77bcf86cd799439011"' - - message: '200.prop16.default in body must be of type password: "float64"' - - message: '200.prop17.default in body must be of type rgbcolor: "gb(100,100,100)"' - - message: '200.prop18.default in body must be of type ssn: "Z111-11-1111"' - - message: '200.prop20.default in body must be of type uuid: "a8098c1a+f86e+11da+bd1a+00112444be1e"' - - message: '200.prop21.default in body must be of type uuid3: "bcd02e22+68f0+3046+a512+327cca9def8f"' - - message: '200.prop22.default in body must be of type uuid4: "025b0d74+00a2+4048+bf57+227c5111bb34"' - - message: '200.prop23.default in body must be of type uuid5: "886313e1+3b8a+5372+9b90+0c9aee199e5d"' - - message: '200.propn01.default in body must be of type number: "string"' - - message: '200.propn02.default in body must be of type number: "string"' - - message: '200.propn03.default in body must be of type int32: "float64"' - - message: '200.propn04.default in body must be of type int64: "float64"' - - message: '200.propn05.default in body must be of type uint32: "float64"' - - message: '200.propn06.default in body must be of type uint64: "float64"' - - message: 'in operation "op2", default value in response 200 does not validate its schema' + # On parameters: + - message: 'default value for n01 in query does not validate its schema' + - message: 'default value for n03 in query does not validate its schema' + - message: 'default value for n04 in query does not validate its schema' + - message: 'default value for n05 in query does not validate its schema' + - message: 'default value for n06 in query does not validate its schema' + - message: 'default value for p01 in query does not validate its schema' + - message: 'default value for p02 in query does not validate its schema' + - message: 'default value for p03 in query does not validate its schema' + - message: 'default value for p04 in query does not validate its schema' + - message: 'default value for p05 in query does not validate its schema' + - message: 'default value for p06 in query does not validate its schema' + - message: 'default value for p07 in query does not validate its schema' + - message: 'default value for p08 in query does not validate its schema' + - message: 'default value for p09 in query does not validate its schema' + - message: 'default value for p10 in query does not validate its schema' + - message: 'default value for p11 in query does not validate its schema' + - message: 'default value for p12 in query does not validate its schema' + - message: 'default value for p13 in query does not validate its schema' + - message: 'default value for p14 in query does not validate its schema' + - message: 'default value for p15 in query does not validate its schema' + - message: 'default value for p16 in query does not validate its schema' + - message: 'default value for p17 in query does not validate its schema' + - message: 'default value for p18 in query does not validate its schema' + - message: 'default value for p20 in query does not validate its schema' + - message: 'default value for p21 in query does not validate its schema' + - message: 'default value for p22 in query does not validate its schema' + - message: 'default value for p23 in query does not validate its schema' + - message: 'n01 in query must be of type number: "string"' + - message: 'n03 in query must be of type int32: "float64"' + - message: 'n04 in query must be of type int64: "float64"' + - message: 'Checked value must be of type integer with format uint32 in n05' + - message: 'Checked value must be of type integer with format uint64 in n06' + - message: 'p01 in query must be of type byte: "ZWxpemFiZXRocG9zZXk"' + - message: 'p02 in query must be of type creditcard: "4111-1X11-1111-1111"' + - message: 'p03 in query must be of type date: "1970-13-01"' + - message: 'p04 in query must be of type date-time: "1963-13-19T08:30:06.283185Z"' + - message: 'p05 in query must be of type duration: "three weeks"' + - message: 'p06 in query must be of type email: "joe.bloggs-example.com"' + - message: 'p07 in query must be of type hexcolor: "xFFFFFF"' + - message: 'p08 in query must be of type hostname: "not_a_valid_hostname"' + - message: 'p09 in query must be of type ipv4: "192.168.0.256"' + - message: 'p10 in query must be of type ipv6: "o::1"' + - message: 'p11 in query must be of type isbn: "abc-0321751043"' + - message: 'p12 in query must be of type isbn10: "abc-0321751043"' + - message: 'p13 in query must be of type isbn13: "978|3401013190"' + - message: 'p14 in query must be of type mac: "01:02:03:04:05:06:07"' + - message: 'p15 in query must be of type bsonobjectid: "x07f1f77bcf86cd799439011"' + - message: 'p16 in query must be of type password: "float64"' + - message: 'p17 in query must be of type rgbcolor: "rgb(100,100)"' + - message: 'p18 in query must be of type ssn: "111-11111"' + - message: 'p20 in query must be of type uuid: "a8098c1a+f86e+11da+bd1a+00112444be1e"' + - message: 'p21 in query must be of type uuid3: "bcd02e22+68f0+3046+a512+327cca9def8f"' + - message: 'p22 in query must be of type uuid4: "025b0d74+00a2+4048+bf57+227c5111bb34"' + - message: 'p23 in query must be of type uuid5: "886313e1+3b8a+5372+9b90+0c9aee199e5d"' + # On schema: + - message: 'definitions.allformats-bad.prop01.default in body must be of type byte: "ZWxpemFiZXRocG9zZXk"' + - message: 'definitions.allformats-bad.prop02.default in body must be of type creditcard: "4111-1111-1111-111K"' + - message: 'definitions.allformats-bad.prop03.default in body must be of type date: "1970-01-32"' + - message: 'definitions.allformats-bad.prop04.default in body must be of type date-time: "1963-06-19T99:30:06.283185Z"' + - message: 'definitions.allformats-bad.prop05.default in body must be of type duration: "weeks"' + - message: 'definitions.allformats-bad.prop06.default in body must be of type email: "joe.bloggs-example.com"' + - message: 'definitions.allformats-bad.prop07.default in body must be of type hexcolor: "float64"' + - message: 'definitions.allformats-bad.prop08.default in body must be of type hostname: "---invalid-hostname---"' + - message: 'definitions.allformats-bad.prop09.default in body must be of type ipv4: "192.2.0.1.45"' + - message: 'definitions.allformats-bad.prop10.default in body must be of type ipv6: "x::1"' + - message: 'definitions.allformats-bad.prop11.default in body must be of type isbn: "X0321751043"' + - message: 'definitions.allformats-bad.prop12.default in body must be of type isbn10: "X0321751043"' + - message: 'definitions.allformats-bad.prop13.default in body must be of type isbn13: "X978 3401013190"' + - message: 'definitions.allformats-bad.prop14.default in body must be of type mac: "X1:02:03:04:05:06"' + - message: 'definitions.allformats-bad.prop15.default in body must be of type bsonobjectid: "X507f1f77bcf86cd799439011"' + - message: 'definitions.allformats-bad.prop16.default in body must be of type password: "float64"' + - message: 'definitions.allformats-bad.prop17.default in body must be of type rgbcolor: "gb(100,100,100)"' + - message: 'definitions.allformats-bad.prop18.default in body must be of type ssn: "Z111-11-1111"' + - message: 'definitions.allformats-bad.prop20.default in body must be of type uuid: "a8098c1a+f86e+11da+bd1a+00112444be1e"' + - message: 'definitions.allformats-bad.prop21.default in body must be of type uuid3: "bcd02e22+68f0+3046+a512+327cca9def8f"' + - message: 'definitions.allformats-bad.prop22.default in body must be of type uuid4: "025b0d74+00a2+4048+bf57+227c5111bb34"' + - message: 'definitions.allformats-bad.prop23.default in body must be of type uuid5: "886313e1+3b8a+5372+9b90+0c9aee199e5d"' + - message: 'definitions.allformats-bad.propn01.default in body must be of type number: "string"' + - message: 'definitions.allformats-bad.propn02.default in body must be of type number: "string"' + - message: 'definitions.allformats-bad.propn03.default in body must be of type int32: "float64"' + - message: 'definitions.allformats-bad.propn04.default in body must be of type int64: "float64"' + - message: 'definitions.allformats-bad.propn05.default in body must be of type uint32: "float64"' + - message: 'definitions.allformats-bad.propn06.default in body must be of type uint64: "float64"' + # More messages with systematic response expansion + - message: '200.prop01.default in body must be of type byte: "ZWxpemFiZXRocG9zZXk"' + - message: '200.prop02.default in body must be of type creditcard: "4111-1111-1111-111K"' + - message: '200.prop03.default in body must be of type date: "1970-01-32"' + - message: '200.prop04.default in body must be of type date-time: "1963-06-19T99:30:06.283185Z"' + - message: '200.prop05.default in body must be of type duration: "weeks"' + - message: '200.prop06.default in body must be of type email: "joe.bloggs-example.com"' + - message: '200.prop07.default in body must be of type hexcolor: "float64"' + - message: '200.prop08.default in body must be of type hostname: "---invalid-hostname---"' + - message: '200.prop09.default in body must be of type ipv4: "192.2.0.1.45"' + - message: '200.prop10.default in body must be of type ipv6: "x::1"' + - message: '200.prop11.default in body must be of type isbn: "X0321751043"' + - message: '200.prop12.default in body must be of type isbn10: "X0321751043"' + - message: '200.prop13.default in body must be of type isbn13: "X978 3401013190"' + - message: '200.prop14.default in body must be of type mac: "X1:02:03:04:05:06"' + - message: '200.prop15.default in body must be of type bsonobjectid: "X507f1f77bcf86cd799439011"' + - message: '200.prop16.default in body must be of type password: "float64"' + - message: '200.prop17.default in body must be of type rgbcolor: "gb(100,100,100)"' + - message: '200.prop18.default in body must be of type ssn: "Z111-11-1111"' + - message: '200.prop20.default in body must be of type uuid: "a8098c1a+f86e+11da+bd1a+00112444be1e"' + - message: '200.prop21.default in body must be of type uuid3: "bcd02e22+68f0+3046+a512+327cca9def8f"' + - message: '200.prop22.default in body must be of type uuid4: "025b0d74+00a2+4048+bf57+227c5111bb34"' + - message: '200.prop23.default in body must be of type uuid5: "886313e1+3b8a+5372+9b90+0c9aee199e5d"' + - message: '200.propn01.default in body must be of type number: "string"' + - message: '200.propn02.default in body must be of type number: "string"' + - message: '200.propn03.default in body must be of type int32: "float64"' + - message: '200.propn04.default in body must be of type int64: "float64"' + - message: '200.propn05.default in body must be of type uint32: "float64"' + - message: '200.propn06.default in body must be of type uint64: "float64"' + - message: 'in operation "op2", default value in response 200 does not validate its schema' expectedWarnings: [] fixture-bad-response.yaml: comment: $ref sibling in response @@ -1461,9 +1547,8 @@ fixture-bad-response.yaml: expectedLoadError: false expectedValid: false expectedMessages: - - message: '"paths./fixture.get.responses.200" must validate one and only one schema (oneOf). Found none valid' - - message: 'paths./fixture.get.responses.200.$ref in body is a forbidden property' + - message: '"paths./fixture.get.responses.200" must validate one and only one schema (oneOf). Found none valid' + - message: 'paths./fixture.get.responses.200.$ref in body is a forbidden property' expectedWarnings: - - message: 'definition "#/definitions/someIds" is not used anywhere' - withContinueOnErrors: true - + - message: 'definition "#/definitions/someIds" is not used anywhere' + withContinueOnErrors: true From ab4461e7c4f67ae8b0b1be03f4644aeb6263c845 Mon Sep 17 00:00:00 2001 From: Frederic BIDON Date: Tue, 25 Aug 2026 19:35:15 +0200 Subject: [PATCH 4/4] ci: re-instate error message stability test in ci Signed-off-by: Frederic BIDON --- .github/workflows/error-messages.yml | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 .github/workflows/error-messages.yml diff --git a/.github/workflows/error-messages.yml b/.github/workflows/error-messages.yml new file mode 100644 index 0000000..82f0856 --- /dev/null +++ b/.github/workflows/error-messages.yml @@ -0,0 +1,28 @@ +# test suite to assert error message stability +name: error message + +on: + push: + branches: + - master + pull_request: + +permissions: + contents: read + +jobs: + error-messages: + runs-on: ubuntu-latest + steps: + - + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.0 + - + uses: actions/setup-go@b7ad1dad31e06c5925ef5d2fc7ad053ef454303e # v7.0.0 + with: + go-version: stable + - + name: test + env: + SWAGGER_DEBUG_TEST: 1 # we want full disclosure to understand what's wrong + run: | + go test -v -run Quality -args -enable-long