From 3fd2ca2d29304e383fe686500ad445afb1d2bbbe Mon Sep 17 00:00:00 2001 From: Reuven Harrison Date: Wed, 17 Jul 2024 12:47:56 +0300 Subject: [PATCH] get levels from the rules table (#582) --- .github/workflows/lint.yml | 2 +- checker/api_change.go | 4 +- checker/check_added_required_request_body.go | 4 +- checker/check_api_added.go | 2 +- checker/check_api_deprecation.go | 10 ++-- checker/check_api_operation_id_updated.go | 2 +- checker/check_api_removed.go | 16 +++---- checker/check_api_security_updated.go | 8 ++-- checker/check_api_sunset_changed.go | 12 ++--- checker/check_api_tag_updated.go | 4 +- ..._new_request_non_path_default_parameter.go | 4 +- .../check_new_request_non_path_parameter.go | 4 +- ...ck_new_requried_request_header_property.go | 2 +- checker/check_request_body_became_enum.go | 2 +- checker/check_request_body_enum_deleted.go | 2 +- .../check_request_body_mediatype_updated.go | 4 +- ...eck_request_body_required_value_updated.go | 4 +- .../check_request_discriminator_updated.go | 2 +- ...eck_request_header_property_became_enum.go | 4 +- ...request_header_property_became_required.go | 4 +- .../check_request_parameter_became_enum.go | 2 +- ...ck_request_parameter_enum_value_updated.go | 4 +- ...uest_parameter_pattern_added_or_changed.go | 8 ++-- checker/check_request_parameter_removed.go | 2 +- ...equest_parameter_required_value_updated.go | 4 +- ...rameter_x_extensible_enum_value_removed.go | 2 +- ...equest_parameters_default_value_changed.go | 2 +- ...ck_request_parameters_max_items_updated.go | 4 +- ...check_request_parameters_max_length_set.go | 2 +- ...k_request_parameters_max_length_updated.go | 4 +- checker/check_request_parameters_max_set.go | 2 +- .../check_request_parameters_max_updated.go | 4 +- .../check_request_parameters_min_items_set.go | 2 +- ...ck_request_parameters_min_items_updated.go | 4 +- ...k_request_parameters_min_length_updated.go | 4 +- checker/check_request_parameters_min_set.go | 2 +- .../check_request_parameters_min_updated.go | 4 +- .../check_request_parameters_type_changed.go | 8 ++-- checker/check_request_path_parameter_added.go | 2 +- .../check_request_property_all_of_updated.go | 8 ++-- .../check_request_property_any_of_updated.go | 8 ++-- checker/check_request_property_became_enum.go | 2 +- ...k_request_property_became_not_nuallable.go | 8 ++-- ..._request_property_default_value_changed.go | 2 +- ...eck_request_property_enum_value_updated.go | 6 +-- .../check_request_property_max_length_set.go | 4 +- ...eck_request_property_max_length_updated.go | 10 ++-- checker/check_request_property_max_set.go | 4 +- checker/check_request_property_max_updated.go | 24 ++++++---- ...check_request_property_max_updated_test.go | 27 +++++++++++ ...ck_request_property_min_items_increased.go | 4 +- ...quest_property_min_items_increased_test.go | 47 +++++++++++++++++++ .../check_request_property_min_items_set.go | 4 +- ...eck_request_property_min_length_updated.go | 8 ++-- checker/check_request_property_min_set.go | 4 +- checker/check_request_property_min_updated.go | 10 ++-- .../check_request_property_one_of_updated.go | 8 ++-- ...quest_property_pattern_added_or_changed.go | 8 ++-- ...check_request_property_required_updated.go | 6 +-- .../check_request_property_type_changed.go | 8 +--- checker/check_request_property_updated.go | 8 ++-- ...k_request_property_write_only_read_only.go | 8 ++-- ...roperty_x_extensible_enum_value_removed.go | 2 +- .../check_response_discriminator_updated.go | 2 +- .../check_response_header_became_optional.go | 2 +- checker/check_response_header_removed.go | 4 +- ...k_response_mediatype_enum_value_removed.go | 2 +- checker/check_response_mediatype_updated.go | 4 +- ...heck_response_optional_property_updated.go | 6 +-- ..._optional_property_write_only_read_only.go | 4 +- ...check_response_pattern_added_or_changed.go | 2 +- .../check_response_property_all_of_updated.go | 8 ++-- .../check_response_property_any_of_updated.go | 8 ++-- ...heck_response_property_became_nuallable.go | 4 +- ...check_response_property_became_optional.go | 19 ++++---- ...check_response_property_became_required.go | 4 +- ...response_property_default_value_changed.go | 2 +- ...heck_response_property_enum_value_added.go | 4 +- ...ck_response_property_enum_value_removed.go | 2 +- .../check_response_property_max_increased.go | 4 +- ..._response_property_max_length_increased.go | 4 +- ...heck_response_property_max_length_unset.go | 4 +- .../check_response_property_min_decreased.go | 4 +- ...k_response_property_min_items_decreased.go | 4 +- ...check_response_property_min_items_unset.go | 4 +- ..._response_property_min_length_decreased.go | 4 +- .../check_response_property_one_of_updated.go | 8 ++-- .../check_response_property_type_changed.go | 4 +- ...heck_response_required_property_updated.go | 6 +-- ..._required_property_write_only_read_only.go | 8 +--- checker/check_response_status_updated.go | 4 +- checker/check_types.go | 8 ++-- checker/checker.go | 14 +++--- checker/config_test.go | 2 +- checker/level.go | 8 ---- checker/localizations/localizations.go | 5 +- checker/localizations_src/en/messages.yaml | 2 + checker/localizations_src/ru/messages.yaml | 1 + checker/rules.go | 3 +- ...est_property_min_items_increased_base.yaml | 21 +++++++++ ...property_min_items_increased_revision.yaml | 21 +++++++++ docs/BREAKING-CHANGES-EXAMPLES.md | 9 ++-- 102 files changed, 347 insertions(+), 272 deletions(-) create mode 100644 checker/check_request_property_min_items_increased_test.go create mode 100644 data/checker/request_property_min_items_increased_base.yaml create mode 100644 data/checker/request_property_min_items_increased_revision.yaml diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 58ceaf41..cba0b938 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -17,7 +17,7 @@ jobs: go-version: '1.22' cache: false - name: Run golangci-lint - uses: golangci/golangci-lint-action@v3 + uses: golangci/golangci-lint-action@v6 with: # Require: The version of golangci-lint to use. # When `install-mode` is `binary` (default) the value can be v1.2 or v1.2.3 or `latest` to use the latest version. diff --git a/checker/api_change.go b/checker/api_change.go index 50035e8c..f1f58866 100644 --- a/checker/api_change.go +++ b/checker/api_change.go @@ -28,10 +28,10 @@ type ApiChange struct { SourceColumnEnd int } -func NewApiChange(id string, level Level, args []any, comment string, operationsSources *diff.OperationsSourcesMap, operation *openapi3.Operation, method, path string) ApiChange { +func NewApiChange(id string, config *Config, args []any, comment string, operationsSources *diff.OperationsSourcesMap, operation *openapi3.Operation, method, path string) ApiChange { return ApiChange{ Id: id, - Level: level, + Level: config.getLogLevel(id), Args: args, Comment: comment, OperationId: operation.OperationID, diff --git a/checker/check_added_required_request_body.go b/checker/check_added_required_request_body.go index 447facb4..14e23aa9 100644 --- a/checker/check_added_required_request_body.go +++ b/checker/check_added_required_request_body.go @@ -24,16 +24,14 @@ func AddedRequestBodyCheck(diffReport *diff.Diff, operationsSources *diff.Operat } if operationItem.RequestBodyDiff.Added { id := AddedOptionalRequestBodyId - logLevel := INFO if operationItem.Revision.RequestBody.Value.Required { id = AddedRequiredRequestBodyId - logLevel = ERR } result = append(result, NewApiChange( id, - logLevel, + config, nil, "", operationsSources, diff --git a/checker/check_api_added.go b/checker/check_api_added.go index efebb391..ae513a98 100644 --- a/checker/check_api_added.go +++ b/checker/check_api_added.go @@ -18,7 +18,7 @@ func APIAddedCheck(diffReport *diff.Diff, operationsSources *diff.OperationsSour appendErr := func(path, method string, operation *openapi3.Operation) { result = append(result, NewApiChange( EndpointAddedId, - INFO, + config, nil, "", operationsSources, diff --git a/checker/check_api_deprecation.go b/checker/check_api_deprecation.go index ca82b81b..0d5b428a 100644 --- a/checker/check_api_deprecation.go +++ b/checker/check_api_deprecation.go @@ -37,7 +37,7 @@ func APIDeprecationCheck(diffReport *diff.Diff, operationsSources *diff.Operatio // not breaking changes result = append(result, NewApiChange( EndpointReactivatedId, - INFO, + config, nil, "", operationsSources, @@ -60,7 +60,7 @@ func APIDeprecationCheck(diffReport *diff.Diff, operationsSources *diff.Operatio if !ok { // if deprecation policy is defined and sunset is missing, it's a breaking change if deprecationDays > 0 { - result = append(result, getAPIDeprecatedSunsetMissing(op, operationsSources, path, operation)) + result = append(result, getAPIDeprecatedSunsetMissing(config, op, operationsSources, path, operation)) } continue } @@ -69,7 +69,7 @@ func APIDeprecationCheck(diffReport *diff.Diff, operationsSources *diff.Operatio if err != nil { result = append(result, NewApiChange( APIDeprecatedSunsetParseId, - ERR, + config, []any{err}, "", operationsSources, @@ -85,7 +85,7 @@ func APIDeprecationCheck(diffReport *diff.Diff, operationsSources *diff.Operatio if days < int(deprecationDays) { result = append(result, NewApiChange( APISunsetDateTooSmallId, - ERR, + config, []any{date, deprecationDays}, "", operationsSources, @@ -99,7 +99,7 @@ func APIDeprecationCheck(diffReport *diff.Diff, operationsSources *diff.Operatio // not breaking changes result = append(result, NewApiChange( EndpointDeprecatedId, - INFO, + config, nil, "", operationsSources, diff --git a/checker/check_api_operation_id_updated.go b/checker/check_api_operation_id_updated.go index 503cba31..df92a0d0 100644 --- a/checker/check_api_operation_id_updated.go +++ b/checker/check_api_operation_id_updated.go @@ -36,7 +36,7 @@ func APIOperationIdUpdatedCheck(diffReport *diff.Diff, operationsSources *diff.O result = append(result, NewApiChange( id, - config.getLogLevel(id), + config, args, "", operationsSources, diff --git a/checker/check_api_removed.go b/checker/check_api_removed.go index 67a3913c..422bf118 100644 --- a/checker/check_api_removed.go +++ b/checker/check_api_removed.go @@ -29,7 +29,7 @@ func APIRemovedCheck(diffReport *diff.Diff, operationsSources *diff.OperationsSo for operation := range diffReport.PathsDiff.Base.Value(path).Operations() { op := diffReport.PathsDiff.Base.Value(path).GetOperation(operation) - if change := checkAPIRemoval(APIPathRemovedWithoutDeprecationId, APIPathRemovedBeforeSunsetId, op, operationsSources, operation, path); change != nil { + if change := checkAPIRemoval(config, APIPathRemovedWithoutDeprecationId, APIPathRemovedBeforeSunsetId, op, operationsSources, operation, path); change != nil { result = append(result, change) } } @@ -41,7 +41,7 @@ func APIRemovedCheck(diffReport *diff.Diff, operationsSources *diff.OperationsSo } for _, operation := range pathItem.OperationsDiff.Deleted { op := pathItem.Base.GetOperation(operation) - if change := checkAPIRemoval(APIRemovedWithoutDeprecationId, APIRemovedBeforeSunsetId, op, operationsSources, operation, path); change != nil { + if change := checkAPIRemoval(config, APIRemovedWithoutDeprecationId, APIRemovedBeforeSunsetId, op, operationsSources, operation, path); change != nil { result = append(result, change) } } @@ -50,11 +50,11 @@ func APIRemovedCheck(diffReport *diff.Diff, operationsSources *diff.OperationsSo return result } -func checkAPIRemoval(deprecationId, sunsetId string, op *openapi3.Operation, operationsSources *diff.OperationsSourcesMap, method, path string) Change { +func checkAPIRemoval(config *Config, deprecationId, sunsetId string, op *openapi3.Operation, operationsSources *diff.OperationsSourcesMap, method, path string) Change { if !op.Deprecated { return NewApiChange( deprecationId, - ERR, + config, nil, "", operationsSources, @@ -71,13 +71,13 @@ func checkAPIRemoval(deprecationId, sunsetId string, op *openapi3.Operation, ope date, err := getSunsetDate(sunset) if err != nil { - return getAPIPathSunsetParse(op, operationsSources, method, path, err) + return getAPIPathSunsetParse(config, op, operationsSources, method, path, err) } if civil.DateOf(time.Now()).Before(date) { return NewApiChange( sunsetId, - ERR, + config, []any{date}, "", operationsSources, @@ -89,10 +89,10 @@ func checkAPIRemoval(deprecationId, sunsetId string, op *openapi3.Operation, ope return nil } -func getAPIPathSunsetParse(operation *openapi3.Operation, operationsSources *diff.OperationsSourcesMap, method string, path string, err error) Change { +func getAPIPathSunsetParse(config *Config, operation *openapi3.Operation, operationsSources *diff.OperationsSourcesMap, method string, path string, err error) Change { return NewApiChange( APIPathSunsetParseId, - ERR, + config, []any{err}, "", operationsSources, diff --git a/checker/check_api_security_updated.go b/checker/check_api_security_updated.go index 24b2ff6c..8ae4a131 100644 --- a/checker/check_api_security_updated.go +++ b/checker/check_api_security_updated.go @@ -86,7 +86,7 @@ func APISecurityUpdatedCheck(diffReport *diff.Diff, operationsSources *diff.Oper result = append(result, NewApiChange( APISecurityAddedCheckId, - INFO, + config, []any{addedSecurity}, "", operationsSources, @@ -103,7 +103,7 @@ func APISecurityUpdatedCheck(diffReport *diff.Diff, operationsSources *diff.Oper result = append(result, NewApiChange( APISecurityRemovedCheckId, - INFO, + config, []any{deletedSecurity}, "", operationsSources, @@ -121,7 +121,7 @@ func APISecurityUpdatedCheck(diffReport *diff.Diff, operationsSources *diff.Oper for _, addedScope := range updatedSecuritySchemeScopes.Added { result = append(result, NewApiChange( APISecurityScopeAddedId, - INFO, + config, []any{addedScope, securitySchemeName}, "", operationsSources, @@ -133,7 +133,7 @@ func APISecurityUpdatedCheck(diffReport *diff.Diff, operationsSources *diff.Oper for _, deletedScope := range updatedSecuritySchemeScopes.Deleted { result = append(result, NewApiChange( APISecurityScopeRemovedId, - INFO, + config, []any{deletedScope, securitySchemeName}, "", operationsSources, diff --git a/checker/check_api_sunset_changed.go b/checker/check_api_sunset_changed.go index 3a96d862..06838a34 100644 --- a/checker/check_api_sunset_changed.go +++ b/checker/check_api_sunset_changed.go @@ -38,7 +38,7 @@ func APISunsetChangedCheck(diffReport *diff.Diff, operationsSources *diff.Operat if operationDiff.ExtensionsDiff.Deleted.Contains(diff.SunsetExtension) { result = append(result, NewApiChange( APISunsetDeletedId, - ERR, + config, nil, "", operationsSources, @@ -55,13 +55,13 @@ func APISunsetChangedCheck(diffReport *diff.Diff, operationsSources *diff.Operat date, err := getSunsetDate(opRevision.Extensions[diff.SunsetExtension]) if err != nil { - result = append(result, getAPIPathSunsetParse(opRevision, operationsSources, path, operation, err)) + result = append(result, getAPIPathSunsetParse(config, opRevision, operationsSources, path, operation, err)) continue } baseDate, err := getSunsetDate(opBase.Extensions[diff.SunsetExtension]) if err != nil { - result = append(result, getAPIPathSunsetParse(opBase, operationsSources, path, operation, err)) + result = append(result, getAPIPathSunsetParse(config, opBase, operationsSources, path, operation, err)) continue } @@ -78,7 +78,7 @@ func APISunsetChangedCheck(diffReport *diff.Diff, operationsSources *diff.Operat if baseDate.After(date) && days < int(deprecationDays) { result = append(result, NewApiChange( APISunsetDateChangedTooSmallId, - ERR, + config, []any{baseDate, date, baseDate, deprecationDays}, "", operationsSources, @@ -115,10 +115,10 @@ func getDeprecationDays(config *Config, stability string) uint { } } -func getAPIDeprecatedSunsetMissing(operation *openapi3.Operation, operationsSources *diff.OperationsSourcesMap, method string, path string) Change { +func getAPIDeprecatedSunsetMissing(config *Config, operation *openapi3.Operation, operationsSources *diff.OperationsSourcesMap, method string, path string) Change { return NewApiChange( APIDeprecatedSunsetMissingId, - ERR, + config, nil, "", operationsSources, diff --git a/checker/check_api_tag_updated.go b/checker/check_api_tag_updated.go index 41cfdd20..3e58801a 100644 --- a/checker/check_api_tag_updated.go +++ b/checker/check_api_tag_updated.go @@ -30,7 +30,7 @@ func APITagUpdatedCheck(diffReport *diff.Diff, operationsSources *diff.Operation for _, tag := range operationItem.TagsDiff.Deleted { result = append(result, NewApiChange( APITagRemovedId, - config.getLogLevel(APITagRemovedId), + config, []any{tag}, "", operationsSources, @@ -43,7 +43,7 @@ func APITagUpdatedCheck(diffReport *diff.Diff, operationsSources *diff.Operation for _, tag := range operationItem.TagsDiff.Added { result = append(result, NewApiChange( APITagAddedId, - config.getLogLevel(APITagAddedId), + config, []any{tag}, "", operationsSources, diff --git a/checker/check_new_request_non_path_default_parameter.go b/checker/check_new_request_non_path_default_parameter.go index 61842085..65d9bb23 100644 --- a/checker/check_new_request_non_path_default_parameter.go +++ b/checker/check_new_request_non_path_default_parameter.go @@ -29,10 +29,8 @@ func NewRequestNonPathDefaultParameterCheck(diffReport *diff.Diff, operationsSou continue } id := NewRequiredRequestDefaultParameterToExistingPathId - level := ERR if !param.Value.Required { id = NewOptionalRequestDefaultParameterToExistingPathId - level = INFO } for operation, operationItem := range pathItem.Revision.Operations() { @@ -41,7 +39,7 @@ func NewRequestNonPathDefaultParameterCheck(diffReport *diff.Diff, operationsSou result = append(result, NewApiChange( id, - level, + config, []any{paramLoc, param.Value.Name}, "", operationsSources, diff --git a/checker/check_new_request_non_path_parameter.go b/checker/check_new_request_non_path_parameter.go index f7823de9..f559a66f 100644 --- a/checker/check_new_request_non_path_parameter.go +++ b/checker/check_new_request_non_path_parameter.go @@ -32,14 +32,12 @@ func NewRequestNonPathParameterCheck(diffReport *diff.Diff, operationsSources *d for _, param := range operationItem.Revision.Parameters { if param.Value.Name == paramName { id := NewRequiredRequestParameterId - level := ERR if !param.Value.Required { id = NewOptionalRequestParameterId - level = INFO } result = append(result, NewApiChange( id, - level, + config, []any{paramLocation, paramName}, "", operationsSources, diff --git a/checker/check_new_requried_request_header_property.go b/checker/check_new_requried_request_header_property.go index 467aedb4..338204e9 100644 --- a/checker/check_new_requried_request_header_property.go +++ b/checker/check_new_requried_request_header_property.go @@ -44,7 +44,7 @@ func NewRequiredRequestHeaderPropertyCheck(diffReport *diff.Diff, operationsSour result = append(result, NewApiChange( NewRequiredRequestHeaderPropertyId, - ERR, + config, []any{paramName, propertyFullName(propertyPath, newPropertyName)}, "", operationsSources, diff --git a/checker/check_request_body_became_enum.go b/checker/check_request_body_became_enum.go index c18ef2fd..c438187f 100644 --- a/checker/check_request_body_became_enum.go +++ b/checker/check_request_body_became_enum.go @@ -36,7 +36,7 @@ func RequestBodyBecameEnumCheck(diffReport *diff.Diff, operationsSources *diff.O } result = append(result, NewApiChange( RequestBodyBecameEnumId, - ERR, + config, nil, "", operationsSources, diff --git a/checker/check_request_body_enum_deleted.go b/checker/check_request_body_enum_deleted.go index bcf810fd..f5734389 100644 --- a/checker/check_request_body_enum_deleted.go +++ b/checker/check_request_body_enum_deleted.go @@ -42,7 +42,7 @@ func RequestBodyEnumValueRemovedCheck(diffReport *diff.Diff, operationsSources * for _, enumVal := range enumDiff.Deleted { result = append(result, NewApiChange( RequestBodyEnumValueRemovedId, - config.getLogLevel(RequestBodyEnumValueRemovedId), + config, []any{enumVal}, "", operationsSources, diff --git a/checker/check_request_body_mediatype_updated.go b/checker/check_request_body_mediatype_updated.go index 7c277312..0276c8ce 100644 --- a/checker/check_request_body_mediatype_updated.go +++ b/checker/check_request_body_mediatype_updated.go @@ -29,7 +29,7 @@ func RequestBodyMediaTypeChangedCheck(diffReport *diff.Diff, operationsSources * for _, mediaType := range addedMediaTypes { result = append(result, NewApiChange( RequestBodyMediaTypeAddedId, - INFO, + config, []any{mediaType}, "", operationsSources, @@ -43,7 +43,7 @@ func RequestBodyMediaTypeChangedCheck(diffReport *diff.Diff, operationsSources * for _, mediaType := range removedMediaTypes { result = append(result, NewApiChange( RequestBodyMediaTypeRemovedId, - ERR, + config, []any{mediaType}, "", operationsSources, diff --git a/checker/check_request_body_required_value_updated.go b/checker/check_request_body_required_value_updated.go index 380c0f35..7f1b037b 100644 --- a/checker/check_request_body_required_value_updated.go +++ b/checker/check_request_body_required_value_updated.go @@ -28,15 +28,13 @@ func RequestBodyRequiredUpdatedCheck(diffReport *diff.Diff, operationsSources *d } id := RequestBodyBecameOptionalId - logLevel := INFO if operationItem.RequestBodyDiff.RequiredDiff.To == true { id = RequestBodyBecameRequiredId - logLevel = ERR } result = append(result, NewApiChange( id, - logLevel, + config, nil, "", operationsSources, diff --git a/checker/check_request_discriminator_updated.go b/checker/check_request_discriminator_updated.go index b09483d7..bd011871 100644 --- a/checker/check_request_discriminator_updated.go +++ b/checker/check_request_discriminator_updated.go @@ -40,7 +40,7 @@ func RequestDiscriminatorUpdatedCheck(diffReport *diff.Diff, operationsSources * appendResultItem := func(messageId string, a ...any) { result = append(result, NewApiChange( messageId, - INFO, + config, a, "", operationsSources, diff --git a/checker/check_request_header_property_became_enum.go b/checker/check_request_header_property_became_enum.go index 529caaa0..5551e2c3 100644 --- a/checker/check_request_header_property_became_enum.go +++ b/checker/check_request_header_property_became_enum.go @@ -37,7 +37,7 @@ func RequestHeaderPropertyBecameEnumCheck(diffReport *diff.Diff, operationsSourc if paramDiff.SchemaDiff.EnumDiff != nil && paramDiff.SchemaDiff.EnumDiff.EnumAdded { result = append(result, NewApiChange( RequestHeaderPropertyBecameEnumId, - ERR, + config, []any{paramName}, "", operationsSources, @@ -57,7 +57,7 @@ func RequestHeaderPropertyBecameEnumCheck(diffReport *diff.Diff, operationsSourc result = append(result, NewApiChange( RequestHeaderPropertyBecameEnumId, - ERR, + config, []any{paramName, propertyFullName(propertyPath, propertyName)}, "", operationsSources, diff --git a/checker/check_request_header_property_became_required.go b/checker/check_request_header_property_became_required.go index 30e6d511..d00edbdb 100644 --- a/checker/check_request_header_property_became_required.go +++ b/checker/check_request_header_property_became_required.go @@ -50,7 +50,7 @@ func RequestHeaderPropertyBecameRequiredCheck(diffReport *diff.Diff, operationsS result = append(result, NewApiChange( RequestHeaderPropertyBecameRequiredId, - ERR, + config, []any{paramName, changedRequiredPropertyName}, "", operationsSources, @@ -77,7 +77,7 @@ func RequestHeaderPropertyBecameRequiredCheck(diffReport *diff.Diff, operationsS } result = append(result, NewApiChange( RequestHeaderPropertyBecameRequiredId, - ERR, + config, []any{paramName, propertyFullName(propertyPath, propertyFullName(propertyName, changedRequiredPropertyName))}, "", operationsSources, diff --git a/checker/check_request_parameter_became_enum.go b/checker/check_request_parameter_became_enum.go index d1fa9c63..86b536f3 100644 --- a/checker/check_request_parameter_became_enum.go +++ b/checker/check_request_parameter_became_enum.go @@ -36,7 +36,7 @@ func RequestParameterBecameEnumCheck(diffReport *diff.Diff, operationsSources *d result = append(result, NewApiChange( RequestParameterBecameEnumId, - ERR, + config, []any{paramLocation, paramName}, "", operationsSources, diff --git a/checker/check_request_parameter_enum_value_updated.go b/checker/check_request_parameter_enum_value_updated.go index 0f1257f0..9e2cf6fc 100644 --- a/checker/check_request_parameter_enum_value_updated.go +++ b/checker/check_request_parameter_enum_value_updated.go @@ -37,7 +37,7 @@ func RequestParameterEnumValueUpdatedCheck(diffReport *diff.Diff, operationsSour for _, enumVal := range enumDiff.Deleted { result = append(result, NewApiChange( RequestParameterEnumValueRemovedId, - ERR, + config, []any{enumVal, paramLocation, paramName}, "", operationsSources, @@ -49,7 +49,7 @@ func RequestParameterEnumValueUpdatedCheck(diffReport *diff.Diff, operationsSour for _, enumVal := range enumDiff.Added { result = append(result, NewApiChange( RequestParameterEnumValueAddedId, - INFO, + config, []any{enumVal, paramLocation, paramName}, "", operationsSources, diff --git a/checker/check_request_parameter_pattern_added_or_changed.go b/checker/check_request_parameter_pattern_added_or_changed.go index 0fb5a6b8..81cdba13 100644 --- a/checker/check_request_parameter_pattern_added_or_changed.go +++ b/checker/check_request_parameter_pattern_added_or_changed.go @@ -41,7 +41,7 @@ func RequestParameterPatternAddedOrChangedCheck(diffReport *diff.Diff, operation if patternDiff.From == "" { result = append(result, NewApiChange( RequestParameterPatternAddedId, - WARN, + config, []any{patternDiff.To, paramLocation, paramName}, PatternChangedCommentId, operationsSources, @@ -52,7 +52,7 @@ func RequestParameterPatternAddedOrChangedCheck(diffReport *diff.Diff, operation } else if patternDiff.To == "" { result = append(result, NewApiChange( RequestParameterPatternRemovedId, - INFO, + config, []any{patternDiff.From, paramLocation, paramName}, "", operationsSources, @@ -62,18 +62,16 @@ func RequestParameterPatternAddedOrChangedCheck(diffReport *diff.Diff, operation )) } else { id := RequestParameterPatternChangedId - level := WARN comment := PatternChangedCommentId if patternDiff.To == ".*" { id = RequestParameterPatternGeneralizedId - level = INFO comment = "" } result = append(result, NewApiChange( id, - level, + config, []any{paramLocation, paramName, patternDiff.From, patternDiff.To}, comment, operationsSources, diff --git a/checker/check_request_parameter_removed.go b/checker/check_request_parameter_removed.go index a8199614..1569ef72 100644 --- a/checker/check_request_parameter_removed.go +++ b/checker/check_request_parameter_removed.go @@ -25,7 +25,7 @@ func RequestParameterRemovedCheck(diffReport *diff.Diff, operationsSources *diff for _, paramName := range paramItems { result = append(result, NewApiChange( RequestParameterRemovedId, - WARN, + config, []any{paramLocation, paramName}, "", operationsSources, diff --git a/checker/check_request_parameter_required_value_updated.go b/checker/check_request_parameter_required_value_updated.go index d98db2ab..f7a18f7d 100644 --- a/checker/check_request_parameter_required_value_updated.go +++ b/checker/check_request_parameter_required_value_updated.go @@ -33,16 +33,14 @@ func RequestParameterRequiredValueUpdatedCheck(diffReport *diff.Diff, operations } id := RequestParameterBecomeRequiredId - level := ERR if requiredDiff.To != true { id = RequestParameterBecomeOptionalId - level = INFO } result = append(result, NewApiChange( id, - level, + config, []any{paramLocation, paramName}, "", operationsSources, diff --git a/checker/check_request_parameter_x_extensible_enum_value_removed.go b/checker/check_request_parameter_x_extensible_enum_value_removed.go index 718f2dfe..880fee51 100644 --- a/checker/check_request_parameter_x_extensible_enum_value_removed.go +++ b/checker/check_request_parameter_x_extensible_enum_value_removed.go @@ -68,7 +68,7 @@ func RequestParameterXExtensibleEnumValueRemovedCheck(diffReport *diff.Diff, ope for _, enumVal := range deletedVals { result = append(result, NewApiChange( RequestParameterXExtensibleEnumValueRemovedId, - ERR, + config, []any{enumVal, paramLocation, paramName}, "", operationsSources, diff --git a/checker/check_request_parameters_default_value_changed.go b/checker/check_request_parameters_default_value_changed.go index 050eacb3..4b9b87e1 100644 --- a/checker/check_request_parameters_default_value_changed.go +++ b/checker/check_request_parameters_default_value_changed.go @@ -26,7 +26,7 @@ func RequestParameterDefaultValueChangedCheck(diffReport *diff.Diff, operationsS appendResultItem := func(messageId string, a ...any) { result = append(result, NewApiChange( messageId, - ERR, + config, a, "", operationsSources, diff --git a/checker/check_request_parameters_max_items_updated.go b/checker/check_request_parameters_max_items_updated.go index 3c402ad6..28a418ed 100644 --- a/checker/check_request_parameters_max_items_updated.go +++ b/checker/check_request_parameters_max_items_updated.go @@ -37,15 +37,13 @@ func RequestParameterMaxItemsUpdatedCheck(diffReport *diff.Diff, operationsSourc } id := RequestParameterMaxItemsDecreasedId - level := ERR if IsIncreasedValue(maxItemsDiff) { id = RequestParameterMaxItemsIncreasedId - level = INFO } result = append(result, NewApiChange( id, - level, + config, []any{paramLocation, paramName, maxItemsDiff.From, maxItemsDiff.To}, "", operationsSources, diff --git a/checker/check_request_parameters_max_length_set.go b/checker/check_request_parameters_max_length_set.go index 5184a005..80256067 100644 --- a/checker/check_request_parameters_max_length_set.go +++ b/checker/check_request_parameters_max_length_set.go @@ -37,7 +37,7 @@ func RequestParameterMaxLengthSetCheck(diffReport *diff.Diff, operationsSources result = append(result, NewApiChange( RequestParameterMaxLengthSetId, - WARN, + config, []any{paramLocation, paramName, maxLengthDiff.To}, commentId(RequestParameterMaxLengthSetId), operationsSources, diff --git a/checker/check_request_parameters_max_length_updated.go b/checker/check_request_parameters_max_length_updated.go index 5aa709ec..26894256 100644 --- a/checker/check_request_parameters_max_length_updated.go +++ b/checker/check_request_parameters_max_length_updated.go @@ -37,15 +37,13 @@ func RequestParameterMaxLengthUpdatedCheck(diffReport *diff.Diff, operationsSour } id := RequestParameterMaxLengthDecreasedId - level := ERR if !IsDecreasedValue(maxLengthDiff) { id = RequestParameterMaxLengthIncreasedId - level = INFO } result = append(result, NewApiChange( id, - level, + config, []any{paramLocation, paramName, maxLengthDiff.From, maxLengthDiff.To}, "", operationsSources, diff --git a/checker/check_request_parameters_max_set.go b/checker/check_request_parameters_max_set.go index 348f8448..d0591035 100644 --- a/checker/check_request_parameters_max_set.go +++ b/checker/check_request_parameters_max_set.go @@ -37,7 +37,7 @@ func RequestParameterMaxSetCheck(diffReport *diff.Diff, operationsSources *diff. result = append(result, NewApiChange( RequestParameterMaxSetId, - WARN, + config, []any{paramLocation, paramName, maxDiff.To}, commentId(RequestParameterMaxSetId), operationsSources, diff --git a/checker/check_request_parameters_max_updated.go b/checker/check_request_parameters_max_updated.go index 4ea28fd6..9f9bba27 100644 --- a/checker/check_request_parameters_max_updated.go +++ b/checker/check_request_parameters_max_updated.go @@ -37,16 +37,14 @@ func RequestParameterMaxUpdatedCheck(diffReport *diff.Diff, operationsSources *d } id := RequestParameterMaxDecreasedId - level := ERR if !IsDecreasedValue(maxDiff) { id = RequestParameterMaxIncreasedId - level = INFO } result = append(result, NewApiChange( id, - level, + config, []any{paramLocation, paramName, maxDiff.From, maxDiff.To}, "", operationsSources, diff --git a/checker/check_request_parameters_min_items_set.go b/checker/check_request_parameters_min_items_set.go index b12cb3d8..c370630a 100644 --- a/checker/check_request_parameters_min_items_set.go +++ b/checker/check_request_parameters_min_items_set.go @@ -37,7 +37,7 @@ func RequestParameterMinItemsSetCheck(diffReport *diff.Diff, operationsSources * result = append(result, NewApiChange( RequestParameterMinItemsSetId, - WARN, + config, []any{paramLocation, paramName, minItemsDiff.To}, commentId(RequestParameterMinItemsSetId), operationsSources, diff --git a/checker/check_request_parameters_min_items_updated.go b/checker/check_request_parameters_min_items_updated.go index ca7de392..1500bad3 100644 --- a/checker/check_request_parameters_min_items_updated.go +++ b/checker/check_request_parameters_min_items_updated.go @@ -37,15 +37,13 @@ func RequestParameterMinItemsUpdatedCheck(diffReport *diff.Diff, operationsSourc } id := RequestParameterMinItemsIncreasedId - level := ERR if !IsIncreasedValue(minItemsDiff) { id = RequestParameterMinItemsDecreasedId - level = INFO } result = append(result, NewApiChange( id, - level, + config, []any{paramLocation, paramName, minItemsDiff.From, minItemsDiff.To}, "", operationsSources, diff --git a/checker/check_request_parameters_min_length_updated.go b/checker/check_request_parameters_min_length_updated.go index 3677eec8..973ee2fd 100644 --- a/checker/check_request_parameters_min_length_updated.go +++ b/checker/check_request_parameters_min_length_updated.go @@ -37,15 +37,13 @@ func RequestParameterMinLengthUpdatedCheck(diffReport *diff.Diff, operationsSour } id := RequestParameterMinLengthIncreasedId - level := ERR if IsDecreasedValue(minLengthDiff) { id = RequestParameterMinLengthDecreasedId - level = INFO } result = append(result, NewApiChange( id, - level, + config, []any{paramLocation, paramName, minLengthDiff.From, minLengthDiff.To}, "", operationsSources, diff --git a/checker/check_request_parameters_min_set.go b/checker/check_request_parameters_min_set.go index 193364b0..c7ea6472 100644 --- a/checker/check_request_parameters_min_set.go +++ b/checker/check_request_parameters_min_set.go @@ -37,7 +37,7 @@ func RequestParameterMinSetCheck(diffReport *diff.Diff, operationsSources *diff. result = append(result, NewApiChange( RequestParameterMinSetId, - WARN, + config, []any{paramLocation, paramName, minDiff.To}, commentId(RequestParameterMinSetId), operationsSources, diff --git a/checker/check_request_parameters_min_updated.go b/checker/check_request_parameters_min_updated.go index 4b93923f..69203c03 100644 --- a/checker/check_request_parameters_min_updated.go +++ b/checker/check_request_parameters_min_updated.go @@ -37,15 +37,13 @@ func RequestParameterMinUpdatedCheck(diffReport *diff.Diff, operationsSources *d } id := RequestParameterMinIncreasedId - level := ERR if !IsIncreasedValue(minDiff) { id = RequestParameterMinDecreasedId - level = INFO } result = append(result, NewApiChange( id, - level, + config, []any{paramLocation, paramName, minDiff.From, minDiff.To}, "", operationsSources, diff --git a/checker/check_request_parameters_type_changed.go b/checker/check_request_parameters_type_changed.go index da256267..4f558571 100644 --- a/checker/check_request_parameters_type_changed.go +++ b/checker/check_request_parameters_type_changed.go @@ -40,16 +40,14 @@ func RequestParameterTypeChangedCheck(diffReport *diff.Diff, operationsSources * if !typeDiff.Empty() || !formatDiff.Empty() { id := RequestParameterTypeGeneralizedId - level := INFO if breakingTypeFormatChangedInRequest(typeDiff, formatDiff, false, schemaDiff) { id = RequestParameterTypeChangedId - level = ERR } result = append(result, NewApiChange( id, - level, + config, []any{paramLocation, paramName, getBaseType(schemaDiff), getBaseFormat(schemaDiff), getRevisionType(schemaDiff), getRevisionFormat(schemaDiff)}, "", operationsSources, @@ -69,11 +67,11 @@ func RequestParameterTypeChangedCheck(diffReport *diff.Diff, operationsSources * if !typeDiff.Empty() || !formatDiff.Empty() { - id, level, comment := checkRequestParameterPropertyTypeChanged(typeDiff, formatDiff, schemaDiff) + id, comment := checkRequestParameterPropertyTypeChanged(typeDiff, formatDiff, schemaDiff) result = append(result, NewApiChange( id, - level, + config, []any{paramLocation, paramName, propertyFullName(propertyPath, propertyName), getBaseType(schemaDiff), getBaseFormat(schemaDiff), getRevisionType(schemaDiff), getRevisionFormat(schemaDiff)}, comment, operationsSources, diff --git a/checker/check_request_path_parameter_added.go b/checker/check_request_path_parameter_added.go index 85939d4f..7af00382 100644 --- a/checker/check_request_path_parameter_added.go +++ b/checker/check_request_path_parameter_added.go @@ -29,7 +29,7 @@ func NewRequestPathParameterCheck(diffReport *diff.Diff, operationsSources *diff for _, paramName := range paramItems { result = append(result, NewApiChange( NewRequestPathParameterId, - ERR, + config, []any{paramName}, "", operationsSources, diff --git a/checker/check_request_property_all_of_updated.go b/checker/check_request_property_all_of_updated.go index 39e7f5d0..b352078a 100644 --- a/checker/check_request_property_all_of_updated.go +++ b/checker/check_request_property_all_of_updated.go @@ -38,7 +38,7 @@ func RequestPropertyAllOfUpdatedCheck(diffReport *diff.Diff, operationsSources * if mediaTypeDiff.SchemaDiff.AllOfDiff != nil && len(mediaTypeDiff.SchemaDiff.AllOfDiff.Added) > 0 { result = append(result, NewApiChange( RequestBodyAllOfAddedId, - ERR, + config, []any{mediaTypeDiff.SchemaDiff.AllOfDiff.Added.String()}, "", operationsSources, @@ -51,7 +51,7 @@ func RequestPropertyAllOfUpdatedCheck(diffReport *diff.Diff, operationsSources * if mediaTypeDiff.SchemaDiff.AllOfDiff != nil && len(mediaTypeDiff.SchemaDiff.AllOfDiff.Deleted) > 0 { result = append(result, NewApiChange( RequestBodyAllOfRemovedId, - WARN, + config, []any{mediaTypeDiff.SchemaDiff.AllOfDiff.Deleted.String()}, "", operationsSources, @@ -73,7 +73,7 @@ func RequestPropertyAllOfUpdatedCheck(diffReport *diff.Diff, operationsSources * if len(propertyDiff.AllOfDiff.Added) > 0 { result = append(result, NewApiChange( RequestPropertyAllOfAddedId, - ERR, + config, []any{propertyDiff.AllOfDiff.Added.String(), propName}, "", operationsSources, @@ -86,7 +86,7 @@ func RequestPropertyAllOfUpdatedCheck(diffReport *diff.Diff, operationsSources * if len(propertyDiff.AllOfDiff.Deleted) > 0 { result = append(result, NewApiChange( RequestPropertyAllOfRemovedId, - WARN, + config, []any{propertyDiff.AllOfDiff.Deleted.String(), propName}, "", operationsSources, diff --git a/checker/check_request_property_any_of_updated.go b/checker/check_request_property_any_of_updated.go index 53ab510a..3c7a41f3 100644 --- a/checker/check_request_property_any_of_updated.go +++ b/checker/check_request_property_any_of_updated.go @@ -38,7 +38,7 @@ func RequestPropertyAnyOfUpdatedCheck(diffReport *diff.Diff, operationsSources * if mediaTypeDiff.SchemaDiff.AnyOfDiff != nil && len(mediaTypeDiff.SchemaDiff.AnyOfDiff.Added) > 0 { result = append(result, NewApiChange( RequestBodyAnyOfAddedId, - INFO, + config, []any{mediaTypeDiff.SchemaDiff.AnyOfDiff.Added.String()}, "", operationsSources, @@ -51,7 +51,7 @@ func RequestPropertyAnyOfUpdatedCheck(diffReport *diff.Diff, operationsSources * if mediaTypeDiff.SchemaDiff.AnyOfDiff != nil && len(mediaTypeDiff.SchemaDiff.AnyOfDiff.Deleted) > 0 { result = append(result, NewApiChange( RequestBodyAnyOfRemovedId, - ERR, + config, []any{mediaTypeDiff.SchemaDiff.AnyOfDiff.Deleted.String()}, "", operationsSources, @@ -73,7 +73,7 @@ func RequestPropertyAnyOfUpdatedCheck(diffReport *diff.Diff, operationsSources * if len(propertyDiff.AnyOfDiff.Added) > 0 { result = append(result, NewApiChange( RequestPropertyAnyOfAddedId, - INFO, + config, []any{propertyDiff.AnyOfDiff.Added.String(), propName}, "", operationsSources, @@ -86,7 +86,7 @@ func RequestPropertyAnyOfUpdatedCheck(diffReport *diff.Diff, operationsSources * if len(propertyDiff.AnyOfDiff.Deleted) > 0 { result = append(result, NewApiChange( RequestPropertyAnyOfRemovedId, - ERR, + config, []any{propertyDiff.AnyOfDiff.Deleted.String(), propName}, "", operationsSources, diff --git a/checker/check_request_property_became_enum.go b/checker/check_request_property_became_enum.go index 98f5f945..d866d1d9 100644 --- a/checker/check_request_property_became_enum.go +++ b/checker/check_request_property_became_enum.go @@ -40,7 +40,7 @@ func RequestPropertyBecameEnumCheck(diffReport *diff.Diff, operationsSources *di result = append(result, NewApiChange( RequestPropertyBecameEnumId, - ERR, + config, []any{propertyFullName(propertyPath, propertyName)}, "", operationsSources, diff --git a/checker/check_request_property_became_not_nuallable.go b/checker/check_request_property_became_not_nuallable.go index 05cea28e..8cbccb7d 100644 --- a/checker/check_request_property_became_not_nuallable.go +++ b/checker/check_request_property_became_not_nuallable.go @@ -37,7 +37,7 @@ func RequestPropertyBecameNotNullableCheck(diffReport *diff.Diff, operationsSour if mediaTypeDiff.SchemaDiff.NullableDiff.From == true { result = append(result, NewApiChange( RequestBodyBecomeNotNullableId, - ERR, + config, nil, "", operationsSources, @@ -48,7 +48,7 @@ func RequestPropertyBecameNotNullableCheck(diffReport *diff.Diff, operationsSour } else if mediaTypeDiff.SchemaDiff.NullableDiff.To == true { result = append(result, NewApiChange( RequestBodyBecomeNullableId, - INFO, + config, nil, "", operationsSources, @@ -72,7 +72,7 @@ func RequestPropertyBecameNotNullableCheck(diffReport *diff.Diff, operationsSour if nullableDiff.From == true { result = append(result, NewApiChange( RequestPropertyBecomeNotNullableId, - ERR, + config, []any{propName}, "", operationsSources, @@ -83,7 +83,7 @@ func RequestPropertyBecameNotNullableCheck(diffReport *diff.Diff, operationsSour } else if nullableDiff.To == true { result = append(result, NewApiChange( RequestPropertyBecomeNullableId, - INFO, + config, []any{propName}, "", operationsSources, diff --git a/checker/check_request_property_default_value_changed.go b/checker/check_request_property_default_value_changed.go index 91e208a3..e331a99f 100644 --- a/checker/check_request_property_default_value_changed.go +++ b/checker/check_request_property_default_value_changed.go @@ -32,7 +32,7 @@ func RequestPropertyDefaultValueChangedCheck(diffReport *diff.Diff, operationsSo appendResultItem := func(messageId string, a ...any) { result = append(result, NewApiChange( messageId, - INFO, + config, a, "", operationsSources, diff --git a/checker/check_request_property_enum_value_updated.go b/checker/check_request_property_enum_value_updated.go index 466046a1..09b0b365 100644 --- a/checker/check_request_property_enum_value_updated.go +++ b/checker/check_request_property_enum_value_updated.go @@ -41,15 +41,13 @@ func RequestPropertyEnumValueUpdatedCheck(diffReport *diff.Diff, operationsSourc for _, enumVal := range enumDiff.Deleted { id := RequestPropertyEnumValueRemovedId - level := ERR if propertyDiff.Revision.ReadOnly { id = RequestReadOnlyPropertyEnumValueRemovedId - level = INFO } result = append(result, NewApiChange( id, - level, + config, []any{enumVal, propName}, "", operationsSources, @@ -62,7 +60,7 @@ func RequestPropertyEnumValueUpdatedCheck(diffReport *diff.Diff, operationsSourc for _, enumVal := range enumDiff.Added { result = append(result, NewApiChange( RequestPropertyEnumValueAddedId, - INFO, + config, []any{enumVal, propName}, "", operationsSources, diff --git a/checker/check_request_property_max_length_set.go b/checker/check_request_property_max_length_set.go index a8577b9d..d0f5987b 100644 --- a/checker/check_request_property_max_length_set.go +++ b/checker/check_request_property_max_length_set.go @@ -33,7 +33,7 @@ func RequestPropertyMaxLengthSetCheck(diffReport *diff.Diff, operationsSources * maxLengthDiff.To != nil { result = append(result, NewApiChange( RequestBodyMaxLengthSetId, - WARN, + config, []any{maxLengthDiff.To}, commentId(RequestBodyMaxLengthSetId), operationsSources, @@ -61,7 +61,7 @@ func RequestPropertyMaxLengthSetCheck(diffReport *diff.Diff, operationsSources * result = append(result, NewApiChange( RequestPropertyMaxLengthSetId, - WARN, + config, []any{propertyFullName(propertyPath, propertyName), maxLengthDiff.To}, commentId(RequestPropertyMaxLengthSetId), operationsSources, diff --git a/checker/check_request_property_max_length_updated.go b/checker/check_request_property_max_length_updated.go index fe013c28..87ecad27 100644 --- a/checker/check_request_property_max_length_updated.go +++ b/checker/check_request_property_max_length_updated.go @@ -37,7 +37,7 @@ func RequestPropertyMaxLengthUpdatedCheck(diffReport *diff.Diff, operationsSourc if IsDecreasedValue(maxLengthDiff) { result = append(result, NewApiChange( RequestBodyMaxLengthDecreasedId, - ERR, + config, []any{maxLengthDiff.To}, "", operationsSources, @@ -48,7 +48,7 @@ func RequestPropertyMaxLengthUpdatedCheck(diffReport *diff.Diff, operationsSourc } else { result = append(result, NewApiChange( RequestBodyMaxLengthIncreasedId, - INFO, + config, []any{maxLengthDiff.From, maxLengthDiff.To}, "", operationsSources, @@ -77,16 +77,14 @@ func RequestPropertyMaxLengthUpdatedCheck(diffReport *diff.Diff, operationsSourc if IsDecreasedValue(maxLengthDiff) { id := RequestPropertyMaxLengthDecreasedId - level := ERR if propertyDiff.Revision.ReadOnly { id = RequestReadOnlyPropertyMaxLengthDecreasedId - level = INFO } result = append(result, NewApiChange( id, - level, + config, []any{propName, maxLengthDiff.To}, "", operationsSources, @@ -97,7 +95,7 @@ func RequestPropertyMaxLengthUpdatedCheck(diffReport *diff.Diff, operationsSourc } else { result = append(result, NewApiChange( RequestPropertyMaxLengthIncreasedId, - INFO, + config, []any{propName, maxLengthDiff.From, maxLengthDiff.To}, "", operationsSources, diff --git a/checker/check_request_property_max_set.go b/checker/check_request_property_max_set.go index 6f91c6d3..9326bb46 100644 --- a/checker/check_request_property_max_set.go +++ b/checker/check_request_property_max_set.go @@ -33,7 +33,7 @@ func RequestPropertyMaxSetCheck(diffReport *diff.Diff, operationsSources *diff.O maxDiff.To != nil { result = append(result, NewApiChange( RequestBodyMaxSetId, - WARN, + config, []any{maxDiff.To}, commentId(RequestBodyMaxSetId), operationsSources, @@ -61,7 +61,7 @@ func RequestPropertyMaxSetCheck(diffReport *diff.Diff, operationsSources *diff.O result = append(result, NewApiChange( RequestPropertyMaxSetId, - WARN, + config, []any{propertyFullName(propertyPath, propertyName), maxDiff.To}, commentId(RequestPropertyMaxSetId), operationsSources, diff --git a/checker/check_request_property_max_updated.go b/checker/check_request_property_max_updated.go index 0ba417f5..56b5f58b 100644 --- a/checker/check_request_property_max_updated.go +++ b/checker/check_request_property_max_updated.go @@ -5,10 +5,11 @@ import ( ) const ( - RequestBodyMaxDecreasedId = "request-body-max-decreased" - RequestBodyMaxIncreasedId = "request-body-max-increased" - RequestPropertyMaxDecreasedId = "request-property-max-decreased" - RequestPropertyMaxIncreasedId = "request-property-max-increased" + RequestBodyMaxDecreasedId = "request-body-max-decreased" + RequestBodyMaxIncreasedId = "request-body-max-increased" + RequestPropertyMaxDecreasedId = "request-property-max-decreased" + RequestReadOnlyPropertyMaxDecreasedId = "request-read-only-property-max-decreased" + RequestPropertyMaxIncreasedId = "request-property-max-increased" ) func RequestPropertyMaxDecreasedCheck(diffReport *diff.Diff, operationsSources *diff.OperationsSourcesMap, config *Config) Changes { @@ -36,7 +37,7 @@ func RequestPropertyMaxDecreasedCheck(diffReport *diff.Diff, operationsSources * if IsDecreasedValue(maxDiff) { result = append(result, NewApiChange( RequestBodyMaxDecreasedId, - ERR, + config, []any{maxDiff.To}, "", operationsSources, @@ -47,7 +48,7 @@ func RequestPropertyMaxDecreasedCheck(diffReport *diff.Diff, operationsSources * } else { result = append(result, NewApiChange( RequestBodyMaxIncreasedId, - INFO, + config, []any{maxDiff.From, maxDiff.To}, "", operationsSources, @@ -73,10 +74,15 @@ func RequestPropertyMaxDecreasedCheck(diffReport *diff.Diff, operationsSources * propName := propertyFullName(propertyPath, propertyName) + id := RequestPropertyMaxDecreasedId + if propertyDiff.Revision.ReadOnly { + id = RequestReadOnlyPropertyMaxDecreasedId + } + if IsDecreasedValue(maxDiff) { result = append(result, NewApiChange( - RequestPropertyMaxDecreasedId, - conditionalError(!propertyDiff.Revision.ReadOnly, INFO), + id, + config, []any{propName, maxDiff.To}, "", operationsSources, @@ -87,7 +93,7 @@ func RequestPropertyMaxDecreasedCheck(diffReport *diff.Diff, operationsSources * } else { result = append(result, NewApiChange( RequestPropertyMaxIncreasedId, - INFO, + config, []any{propName, maxDiff.From, maxDiff.To}, "", operationsSources, diff --git a/checker/check_request_property_max_updated_test.go b/checker/check_request_property_max_updated_test.go index f09e6713..6d6e60a6 100644 --- a/checker/check_request_property_max_updated_test.go +++ b/checker/check_request_property_max_updated_test.go @@ -35,6 +35,33 @@ func TestRequestPropertyMaxDecreasedCheck(t *testing.T) { }, errs[0]) } +// CL: decreasing request read-only property maximum value +func TestRequestReadOnlyPropertyMaxDecreasedCheck(t *testing.T) { + s1, err := open("../data/checker/request_property_max_decreased_base.yaml") + require.NoError(t, err) + s2, err := open("../data/checker/request_property_max_decreased_base.yaml") + require.NoError(t, err) + + max := float64(10) + s2.Spec.Paths.Value("/pets").Post.RequestBody.Value.Content["application/json"].Schema.Value.Properties["name"].Value.Max = &max + s2.Spec.Paths.Value("/pets").Post.RequestBody.Value.Content["application/json"].Schema.Value.Properties["name"].Value.ReadOnly = true + + d, osm, err := diff.GetWithOperationsSourcesMap(diff.NewConfig(), s1, s2) + require.NoError(t, err) + + errs := checker.CheckBackwardCompatibilityUntilLevel(singleCheckConfig(checker.RequestPropertyMaxDecreasedCheck), d, osm, checker.INFO) + require.Len(t, errs, 1) + require.Equal(t, checker.ApiChange{ + Id: checker.RequestReadOnlyPropertyMaxDecreasedId, + Level: checker.INFO, + Args: []any{"name", 10.0}, + Operation: "POST", + Path: "/pets", + Source: load.NewSource("../data/checker/request_property_max_decreased_base.yaml"), + OperationId: "addPet", + }, errs[0]) +} + // CL: increasing request property maximum value func TestRequestPropertyMaxIncreasingCheck(t *testing.T) { s1, err := open("../data/checker/request_property_max_decreased_base.yaml") diff --git a/checker/check_request_property_min_items_increased.go b/checker/check_request_property_min_items_increased.go index 411e9830..87d05c25 100644 --- a/checker/check_request_property_min_items_increased.go +++ b/checker/check_request_property_min_items_increased.go @@ -34,7 +34,7 @@ func RequestPropertyMinItemsIncreasedCheck(diffReport *diff.Diff, operationsSour if IsIncreasedValue(minItemsDiff) { result = append(result, NewApiChange( RequestBodyMinItemsIncreasedId, - ERR, + config, []any{minItemsDiff.To}, "", operationsSources, @@ -66,7 +66,7 @@ func RequestPropertyMinItemsIncreasedCheck(diffReport *diff.Diff, operationsSour result = append(result, NewApiChange( RequestPropertyMinItemsIncreasedId, - ERR, + config, []any{propertyFullName(propertyPath, propertyName), minItemsDiff.To}, "", operationsSources, diff --git a/checker/check_request_property_min_items_increased_test.go b/checker/check_request_property_min_items_increased_test.go new file mode 100644 index 00000000..d3839d26 --- /dev/null +++ b/checker/check_request_property_min_items_increased_test.go @@ -0,0 +1,47 @@ +package checker_test + +import ( + "testing" + + "github.com/stretchr/testify/require" + "github.com/tufin/oasdiff/checker" + "github.com/tufin/oasdiff/diff" + "github.com/tufin/oasdiff/load" +) + +// BC: inclreasing request body min items is breaking +func TestRequestBodyMinItemsIncreased(t *testing.T) { + s1, err := open("../data/checker/request_property_min_items_increased_base.yaml") + require.NoError(t, err) + s2, err := open("../data/checker/request_property_min_items_increased_revision.yaml") + require.NoError(t, err) + + d, osm, err := diff.GetWithOperationsSourcesMap(diff.NewConfig(), s1, s2) + require.NoError(t, err) + + errs := checker.CheckBackwardCompatibilityUntilLevel(singleCheckConfig(checker.RequestPropertyMinItemsIncreasedCheck), d, osm, checker.INFO) + require.Len(t, errs, 1) + require.Equal(t, checker.ApiChange{ + Id: checker.RequestBodyMinItemsIncreasedId, + Level: checker.ERR, + Args: []any{uint64(20)}, + Operation: "POST", + Path: "/products", + Source: load.NewSource("../data/checker/request_property_min_items_increased_revision.yaml"), + OperationId: "addProduct", + }, errs[0]) +} + +// BC: descreasing request body min items is not breaking +func TestRequestBodyMinItemsDecreased(t *testing.T) { + s1, err := open("../data/checker/request_property_min_items_increased_revision.yaml") + require.NoError(t, err) + s2, err := open("../data/checker/request_property_min_items_increased_base.yaml") + require.NoError(t, err) + + d, osm, err := diff.GetWithOperationsSourcesMap(diff.NewConfig(), s1, s2) + require.NoError(t, err) + + errs := checker.CheckBackwardCompatibilityUntilLevel(singleCheckConfig(checker.RequestPropertyMinItemsIncreasedCheck), d, osm, checker.INFO) + require.Empty(t, errs) +} diff --git a/checker/check_request_property_min_items_set.go b/checker/check_request_property_min_items_set.go index c9acabd6..be1807d9 100644 --- a/checker/check_request_property_min_items_set.go +++ b/checker/check_request_property_min_items_set.go @@ -33,7 +33,7 @@ func RequestPropertyMinItemsSetCheck(diffReport *diff.Diff, operationsSources *d minItemsDiff.To != nil { result = append(result, NewApiChange( RequestBodyMinItemsSetId, - WARN, + config, []any{minItemsDiff.To}, commentId(RequestBodyMinItemsSetId), operationsSources, @@ -61,7 +61,7 @@ func RequestPropertyMinItemsSetCheck(diffReport *diff.Diff, operationsSources *d result = append(result, NewApiChange( RequestPropertyMinItemsSetId, - WARN, + config, []any{propertyFullName(propertyPath, propertyName), minItemsDiff.To}, commentId(RequestPropertyMinItemsSetId), operationsSources, diff --git a/checker/check_request_property_min_length_updated.go b/checker/check_request_property_min_length_updated.go index 7ec7566f..edd846aa 100644 --- a/checker/check_request_property_min_length_updated.go +++ b/checker/check_request_property_min_length_updated.go @@ -36,7 +36,7 @@ func RequestPropertyMinLengthUpdatedCheck(diffReport *diff.Diff, operationsSourc if IsIncreasedValue(minLengthDiff) { result = append(result, NewApiChange( RequestBodyMinLengthIncreasedId, - ERR, + config, []any{minLengthDiff.From, minLengthDiff.To}, "", operationsSources, @@ -47,7 +47,7 @@ func RequestPropertyMinLengthUpdatedCheck(diffReport *diff.Diff, operationsSourc } else { result = append(result, NewApiChange( RequestBodyMinLengthDecreasedId, - INFO, + config, []any{minLengthDiff.From, minLengthDiff.To}, "", operationsSources, @@ -76,7 +76,7 @@ func RequestPropertyMinLengthUpdatedCheck(diffReport *diff.Diff, operationsSourc if IsDecreasedValue(minLengthDiff) { result = append(result, NewApiChange( RequestPropertyMinLengthDecreasedId, - INFO, + config, []any{propName, minLengthDiff.From, minLengthDiff.To}, "", operationsSources, @@ -87,7 +87,7 @@ func RequestPropertyMinLengthUpdatedCheck(diffReport *diff.Diff, operationsSourc } else { result = append(result, NewApiChange( RequestPropertyMinLengthIncreasedId, - ERR, + config, []any{propName, minLengthDiff.From, minLengthDiff.To}, "", operationsSources, diff --git a/checker/check_request_property_min_set.go b/checker/check_request_property_min_set.go index ef7829aa..3800a149 100644 --- a/checker/check_request_property_min_set.go +++ b/checker/check_request_property_min_set.go @@ -33,7 +33,7 @@ func RequestPropertyMinSetCheck(diffReport *diff.Diff, operationsSources *diff.O minDiff.To != nil { result = append(result, NewApiChange( RequestBodyMinSetId, - WARN, + config, []any{minDiff.To}, commentId(RequestBodyMinSetId), operationsSources, @@ -61,7 +61,7 @@ func RequestPropertyMinSetCheck(diffReport *diff.Diff, operationsSources *diff.O result = append(result, NewApiChange( RequestPropertyMinSetId, - WARN, + config, []any{propertyFullName(propertyPath, propertyName), minDiff.To}, commentId(RequestPropertyMinSetId), operationsSources, diff --git a/checker/check_request_property_min_updated.go b/checker/check_request_property_min_updated.go index 3d2fe044..f538bc68 100644 --- a/checker/check_request_property_min_updated.go +++ b/checker/check_request_property_min_updated.go @@ -37,7 +37,7 @@ func RequestPropertyMinIncreasedCheck(diffReport *diff.Diff, operationsSources * if IsIncreasedValue(minDiff) { result = append(result, NewApiChange( RequestBodyMinIncreasedId, - ERR, + config, []any{minDiff.To}, "", operationsSources, @@ -48,7 +48,7 @@ func RequestPropertyMinIncreasedCheck(diffReport *diff.Diff, operationsSources * } else { result = append(result, NewApiChange( RequestBodyMinDecreasedId, - INFO, + config, []any{minDiff.From, minDiff.To}, "", operationsSources, @@ -77,16 +77,14 @@ func RequestPropertyMinIncreasedCheck(diffReport *diff.Diff, operationsSources * if IsIncreasedValue(minDiff) { id := RequestPropertyMinIncreasedId - level := ERR if propertyDiff.Revision.ReadOnly { id = RequestReadOnlyPropertyMinIncreasedId - level = INFO } result = append(result, NewApiChange( id, - level, + config, []any{propName, minDiff.To}, "", operationsSources, @@ -97,7 +95,7 @@ func RequestPropertyMinIncreasedCheck(diffReport *diff.Diff, operationsSources * } else { result = append(result, NewApiChange( RequestPropertyMinDecreasedId, - INFO, + config, []any{propName, minDiff.From, minDiff.To}, "", operationsSources, diff --git a/checker/check_request_property_one_of_updated.go b/checker/check_request_property_one_of_updated.go index f2e61538..bcc182d8 100644 --- a/checker/check_request_property_one_of_updated.go +++ b/checker/check_request_property_one_of_updated.go @@ -38,7 +38,7 @@ func RequestPropertyOneOfUpdatedCheck(diffReport *diff.Diff, operationsSources * if mediaTypeDiff.SchemaDiff.OneOfDiff != nil && len(mediaTypeDiff.SchemaDiff.OneOfDiff.Added) > 0 { result = append(result, NewApiChange( RequestBodyOneOfAddedId, - INFO, + config, []any{mediaTypeDiff.SchemaDiff.OneOfDiff.Added.String()}, "", operationsSources, @@ -51,7 +51,7 @@ func RequestPropertyOneOfUpdatedCheck(diffReport *diff.Diff, operationsSources * if mediaTypeDiff.SchemaDiff.OneOfDiff != nil && len(mediaTypeDiff.SchemaDiff.OneOfDiff.Deleted) > 0 { result = append(result, NewApiChange( RequestBodyOneOfRemovedId, - ERR, + config, []any{mediaTypeDiff.SchemaDiff.OneOfDiff.Deleted.String()}, "", operationsSources, @@ -73,7 +73,7 @@ func RequestPropertyOneOfUpdatedCheck(diffReport *diff.Diff, operationsSources * if len(propertyDiff.OneOfDiff.Added) > 0 { result = append(result, NewApiChange( RequestPropertyOneOfAddedId, - INFO, + config, []any{propertyDiff.OneOfDiff.Added.String(), propName}, "", operationsSources, @@ -86,7 +86,7 @@ func RequestPropertyOneOfUpdatedCheck(diffReport *diff.Diff, operationsSources * if len(propertyDiff.OneOfDiff.Deleted) > 0 { result = append(result, NewApiChange( RequestPropertyOneOfRemovedId, - ERR, + config, []any{propertyDiff.OneOfDiff.Deleted.String(), propName}, "", operationsSources, diff --git a/checker/check_request_property_pattern_added_or_changed.go b/checker/check_request_property_pattern_added_or_changed.go index fdace200..3ac2396b 100644 --- a/checker/check_request_property_pattern_added_or_changed.go +++ b/checker/check_request_property_pattern_added_or_changed.go @@ -41,7 +41,7 @@ func RequestPropertyPatternUpdatedCheck(diffReport *diff.Diff, operationsSources if patternDiff.To == "" { result = append(result, NewApiChange( RequestPropertyPatternRemovedId, - INFO, + config, []any{patternDiff.From, propName}, "", operationsSources, @@ -52,7 +52,7 @@ func RequestPropertyPatternUpdatedCheck(diffReport *diff.Diff, operationsSources } else if patternDiff.From == "" { result = append(result, NewApiChange( RequestPropertyPatternAddedId, - WARN, + config, []any{patternDiff.To, propName}, PatternChangedCommentId, operationsSources, @@ -63,18 +63,16 @@ func RequestPropertyPatternUpdatedCheck(diffReport *diff.Diff, operationsSources } else { id := RequestPropertyPatternChangedId - level := WARN comment := PatternChangedCommentId if patternDiff.To == ".*" { id = RequestPropertyPatternGeneralizedId - level = INFO comment = "" } result = append(result, NewApiChange( id, - level, + config, []any{propName, patternDiff.From, patternDiff.To}, comment, operationsSources, diff --git a/checker/check_request_property_required_updated.go b/checker/check_request_property_required_updated.go index fa6d1294..ebf7fdb2 100644 --- a/checker/check_request_property_required_updated.go +++ b/checker/check_request_property_required_updated.go @@ -42,7 +42,7 @@ func RequestPropertyRequiredUpdatedCheck(diffReport *diff.Diff, operationsSource if schemaDiff.Revision.Properties[changedRequiredPropertyName].Value.Default == nil { result = append(result, NewApiChange( RequestPropertyBecameRequiredId, - ERR, + config, []any{propertyFullName(propertyPath, propertyFullName(propertyName, changedRequiredPropertyName))}, "", operationsSources, @@ -54,7 +54,7 @@ func RequestPropertyRequiredUpdatedCheck(diffReport *diff.Diff, operationsSource // property has a default value, so making it required is not a breaking change result = append(result, NewApiChange( RequestPropertyBecameRequiredWithDefaultId, - INFO, + config, []any{propertyFullName(propertyPath, propertyFullName(propertyName, changedRequiredPropertyName))}, "", operationsSources, @@ -71,7 +71,7 @@ func RequestPropertyRequiredUpdatedCheck(diffReport *diff.Diff, operationsSource result = append(result, NewApiChange( RequestPropertyBecameOptionalId, - INFO, + config, []any{propertyFullName(propertyPath, propertyFullName(propertyName, changedRequiredPropertyName))}, "", operationsSources, diff --git a/checker/check_request_property_type_changed.go b/checker/check_request_property_type_changed.go index 3b4a3f72..ed41fc9f 100644 --- a/checker/check_request_property_type_changed.go +++ b/checker/check_request_property_type_changed.go @@ -40,16 +40,14 @@ func RequestPropertyTypeChangedCheck(diffReport *diff.Diff, operationsSources *d if !typeDiff.Empty() || !formatDiff.Empty() { id := RequestBodyTypeGeneralizedId - level := INFO if breakingTypeFormatChangedInRequestProperty(typeDiff, formatDiff, mediaType, schemaDiff) { id = RequestBodyTypeChangedId - level = ERR } result = append(result, NewApiChange( id, - level, + config, []any{getBaseType(schemaDiff), getBaseFormat(schemaDiff), getRevisionType(schemaDiff), getRevisionFormat(schemaDiff)}, "", operationsSources, @@ -75,16 +73,14 @@ func RequestPropertyTypeChangedCheck(diffReport *diff.Diff, operationsSources *d if !typeDiff.Empty() || !formatDiff.Empty() { id := RequestPropertyTypeGeneralizedId - level := INFO if breakingTypeFormatChangedInRequestProperty(typeDiff, formatDiff, mediaType, schemaDiff) { id = RequestPropertyTypeChangedId - level = ERR } result = append(result, NewApiChange( id, - level, + config, []any{propertyFullName(propertyPath, propertyName), getBaseType(schemaDiff), getBaseFormat(schemaDiff), getRevisionType(schemaDiff), getRevisionFormat(schemaDiff)}, "", operationsSources, diff --git a/checker/check_request_property_updated.go b/checker/check_request_property_updated.go index 91d194a2..73f6f27e 100644 --- a/checker/check_request_property_updated.go +++ b/checker/check_request_property_updated.go @@ -37,7 +37,7 @@ func RequestPropertyUpdatedCheck(diffReport *diff.Diff, operationsSources *diff. result = append(result, NewApiChange( RequestPropertyRemovedId, - WARN, + config, []any{propertyFullName(propertyPath, propertyName)}, "", operationsSources, @@ -60,7 +60,7 @@ func RequestPropertyUpdatedCheck(diffReport *diff.Diff, operationsSources *diff. if propertyItem.Default == nil { result = append(result, NewApiChange( NewRequiredRequestPropertyId, - ERR, + config, []any{propName}, "", operationsSources, @@ -71,7 +71,7 @@ func RequestPropertyUpdatedCheck(diffReport *diff.Diff, operationsSources *diff. } else { result = append(result, NewApiChange( NewRequiredRequestPropertyWithDefaultId, - INFO, + config, []any{propName}, "", operationsSources, @@ -83,7 +83,7 @@ func RequestPropertyUpdatedCheck(diffReport *diff.Diff, operationsSources *diff. } else { result = append(result, NewApiChange( NewOptionalRequestPropertyId, - INFO, + config, []any{propName}, "", operationsSources, diff --git a/checker/check_request_property_write_only_read_only.go b/checker/check_request_property_write_only_read_only.go index cdbc343a..4d767ade 100644 --- a/checker/check_request_property_write_only_read_only.go +++ b/checker/check_request_property_write_only_read_only.go @@ -60,7 +60,7 @@ func RequestPropertyWriteOnlyReadOnlyCheck(diffReport *diff.Diff, operationsSour result = append(result, NewApiChange( id, - INFO, + config, []any{propName}, "", operationsSources, @@ -77,7 +77,7 @@ func RequestPropertyWriteOnlyReadOnlyCheck(diffReport *diff.Diff, operationsSour } result = append(result, NewApiChange( id, - INFO, + config, []any{propName}, "", operationsSources, @@ -108,7 +108,7 @@ func RequestPropertyWriteOnlyReadOnlyCheck(diffReport *diff.Diff, operationsSour } result = append(result, NewApiChange( id, - INFO, + config, []any{propName}, "", operationsSources, @@ -125,7 +125,7 @@ func RequestPropertyWriteOnlyReadOnlyCheck(diffReport *diff.Diff, operationsSour } result = append(result, NewApiChange( id, - INFO, + config, []any{propName}, "", operationsSources, diff --git a/checker/check_request_property_x_extensible_enum_value_removed.go b/checker/check_request_property_x_extensible_enum_value_removed.go index 6a726957..0a2959d4 100644 --- a/checker/check_request_property_x_extensible_enum_value_removed.go +++ b/checker/check_request_property_x_extensible_enum_value_removed.go @@ -71,7 +71,7 @@ func RequestPropertyXExtensibleEnumValueRemovedCheck(diffReport *diff.Diff, oper for _, enumVal := range deletedVals { result = append(result, NewApiChange( RequestPropertyXExtensibleEnumValueRemovedId, - ERR, + config, []any{enumVal, propertyFullName(propertyPath, propertyName)}, "", operationsSources, diff --git a/checker/check_response_discriminator_updated.go b/checker/check_response_discriminator_updated.go index 302d61ee..1016b261 100644 --- a/checker/check_response_discriminator_updated.go +++ b/checker/check_response_discriminator_updated.go @@ -38,7 +38,7 @@ func ResponseDiscriminatorUpdatedCheck(diffReport *diff.Diff, operationsSources appendResultItem := func(messageId string, a ...any) { result = append(result, NewApiChange( messageId, - INFO, + config, a, "", operationsSources, diff --git a/checker/check_response_header_became_optional.go b/checker/check_response_header_became_optional.go index 66044ece..f0108aed 100644 --- a/checker/check_response_header_became_optional.go +++ b/checker/check_response_header_became_optional.go @@ -40,7 +40,7 @@ func ResponseHeaderBecameOptionalCheck(diffReport *diff.Diff, operationsSources result = append(result, NewApiChange( ResponseHeaderBecameOptionalId, - ERR, + config, []any{headerName, responseStatus}, "", operationsSources, diff --git a/checker/check_response_header_removed.go b/checker/check_response_header_removed.go index ce78f51f..764d8af8 100644 --- a/checker/check_response_header_removed.go +++ b/checker/check_response_header_removed.go @@ -38,7 +38,7 @@ func ResponseHeaderRemovedCheck(diffReport *diff.Diff, operationsSources *diff.O if required { result = append(result, NewApiChange( RequiredResponseHeaderRemovedId, - ERR, + config, []any{headerName, responseStatus}, "", operationsSources, @@ -49,7 +49,7 @@ func ResponseHeaderRemovedCheck(diffReport *diff.Diff, operationsSources *diff.O } else { result = append(result, NewApiChange( OptionalResponseHeaderRemovedId, - WARN, + config, []any{headerName, responseStatus}, "", operationsSources, diff --git a/checker/check_response_mediatype_enum_value_removed.go b/checker/check_response_mediatype_enum_value_removed.go index 8de8338b..7e821157 100644 --- a/checker/check_response_mediatype_enum_value_removed.go +++ b/checker/check_response_mediatype_enum_value_removed.go @@ -45,7 +45,7 @@ func ResponseMediaTypeEnumValueRemovedCheck(diffReport *diff.Diff, operationsSou for _, enumVal := range enumDiff.Deleted { result = append(result, NewApiChange( ResponseMediaTypeEnumValueRemovedId, - config.getLogLevel(ResponseMediaTypeEnumValueRemovedId), + config, []any{mediaType, enumVal}, "", operationsSources, diff --git a/checker/check_response_mediatype_updated.go b/checker/check_response_mediatype_updated.go index 1114c005..9c6ac95c 100644 --- a/checker/check_response_mediatype_updated.go +++ b/checker/check_response_mediatype_updated.go @@ -35,7 +35,7 @@ func ResponseMediaTypeUpdatedCheck(diffReport *diff.Diff, operationsSources *dif for _, mediaType := range responsesDiff.ContentDiff.MediaTypeDeleted { result = append(result, NewApiChange( ResponseMediaTypeRemovedId, - ERR, + config, []any{mediaType, responseStatus}, "", operationsSources, @@ -47,7 +47,7 @@ func ResponseMediaTypeUpdatedCheck(diffReport *diff.Diff, operationsSources *dif for _, mediaType := range responsesDiff.ContentDiff.MediaTypeAdded { result = append(result, NewApiChange( ResponseMediaTypeAddedId, - INFO, + config, []any{mediaType, responseStatus}, "", operationsSources, diff --git a/checker/check_response_optional_property_updated.go b/checker/check_response_optional_property_updated.go index f94a1707..7bc8e5fb 100644 --- a/checker/check_response_optional_property_updated.go +++ b/checker/check_response_optional_property_updated.go @@ -39,10 +39,8 @@ func ResponseOptionalPropertyUpdatedCheck(diffReport *diff.Diff, operationsSourc CheckDeletedPropertiesDiff( mediaTypeDiff.SchemaDiff, func(propertyPath string, propertyName string, propertyItem *openapi3.Schema, parent *diff.SchemaDiff) { - level := WARN id := ResponseOptionalPropertyRemovedId if propertyItem.WriteOnly { - level = INFO id = ResponseOptionalWriteOnlyPropertyRemovedId } if slices.Contains(parent.Base.Required, propertyName) { @@ -52,7 +50,7 @@ func ResponseOptionalPropertyUpdatedCheck(diffReport *diff.Diff, operationsSourc result = append(result, NewApiChange( id, - level, + config, []any{propertyFullName(propertyPath, propertyName), responseStatus}, "", operationsSources, @@ -76,7 +74,7 @@ func ResponseOptionalPropertyUpdatedCheck(diffReport *diff.Diff, operationsSourc result = append(result, NewApiChange( id, - INFO, + config, []any{propertyFullName(propertyPath, propertyName), responseStatus}, "", operationsSources, diff --git a/checker/check_response_optional_property_write_only_read_only.go b/checker/check_response_optional_property_write_only_read_only.go index d7547bb7..f2d38c05 100644 --- a/checker/check_response_optional_property_write_only_read_only.go +++ b/checker/check_response_optional_property_write_only_read_only.go @@ -63,7 +63,7 @@ func ResponseOptionalPropertyWriteOnlyReadOnlyCheck(diffReport *diff.Diff, opera result = append(result, NewApiChange( id, - INFO, + config, []any{propertyFullName(propertyPath, propertyName), responseStatus}, "", operationsSources, @@ -97,7 +97,7 @@ func ResponseOptionalPropertyWriteOnlyReadOnlyCheck(diffReport *diff.Diff, opera result = append(result, NewApiChange( id, - INFO, + config, []any{propertyFullName(propertyPath, propertyName), responseStatus}, "", operationsSources, diff --git a/checker/check_response_pattern_added_or_changed.go b/checker/check_response_pattern_added_or_changed.go index 00293760..00850aae 100644 --- a/checker/check_response_pattern_added_or_changed.go +++ b/checker/check_response_pattern_added_or_changed.go @@ -59,7 +59,7 @@ func ResponsePatternAddedOrChangedCheck(diffReport *diff.Diff, operationsSources result = append(result, NewApiChange( id, - INFO, + config, args, "", operationsSources, diff --git a/checker/check_response_property_all_of_updated.go b/checker/check_response_property_all_of_updated.go index 117a02a7..1d95d3ae 100644 --- a/checker/check_response_property_all_of_updated.go +++ b/checker/check_response_property_all_of_updated.go @@ -41,7 +41,7 @@ func ResponsePropertyAllOfUpdatedCheck(diffReport *diff.Diff, operationsSources if mediaTypeDiff.SchemaDiff.AllOfDiff != nil && len(mediaTypeDiff.SchemaDiff.AllOfDiff.Added) > 0 { result = append(result, NewApiChange( ResponseBodyAllOfAddedId, - INFO, + config, []any{mediaTypeDiff.SchemaDiff.AllOfDiff.Added.String(), responseStatus}, "", operationsSources, @@ -54,7 +54,7 @@ func ResponsePropertyAllOfUpdatedCheck(diffReport *diff.Diff, operationsSources if mediaTypeDiff.SchemaDiff.AllOfDiff != nil && len(mediaTypeDiff.SchemaDiff.AllOfDiff.Deleted) > 0 { result = append(result, NewApiChange( ResponseBodyAllOfRemovedId, - INFO, + config, []any{mediaTypeDiff.SchemaDiff.AllOfDiff.Deleted.String(), responseStatus}, "", operationsSources, @@ -75,7 +75,7 @@ func ResponsePropertyAllOfUpdatedCheck(diffReport *diff.Diff, operationsSources result = append(result, NewApiChange( ResponsePropertyAllOfAddedId, - INFO, + config, []any{propertyDiff.AllOfDiff.Added.String(), propertyFullName(propertyPath, propertyName), responseStatus}, "", operationsSources, @@ -89,7 +89,7 @@ func ResponsePropertyAllOfUpdatedCheck(diffReport *diff.Diff, operationsSources result = append(result, NewApiChange( ResponsePropertyAllOfRemovedId, - INFO, + config, []any{propertyDiff.AllOfDiff.Deleted.String(), propertyFullName(propertyPath, propertyName), responseStatus}, "", operationsSources, diff --git a/checker/check_response_property_any_of_updated.go b/checker/check_response_property_any_of_updated.go index 6bf8bb36..46eb0d6f 100644 --- a/checker/check_response_property_any_of_updated.go +++ b/checker/check_response_property_any_of_updated.go @@ -42,7 +42,7 @@ func ResponsePropertyAnyOfUpdatedCheck(diffReport *diff.Diff, operationsSources result = append(result, NewApiChange( ResponseBodyAnyOfAddedId, - INFO, + config, []any{mediaTypeDiff.SchemaDiff.AnyOfDiff.Added.String(), responseStatus}, "", operationsSources, @@ -55,7 +55,7 @@ func ResponsePropertyAnyOfUpdatedCheck(diffReport *diff.Diff, operationsSources if mediaTypeDiff.SchemaDiff.AnyOfDiff != nil && len(mediaTypeDiff.SchemaDiff.AnyOfDiff.Deleted) > 0 { result = append(result, NewApiChange( ResponseBodyAnyOfRemovedId, - INFO, + config, []any{mediaTypeDiff.SchemaDiff.AnyOfDiff.Deleted.String(), responseStatus}, "", operationsSources, @@ -76,7 +76,7 @@ func ResponsePropertyAnyOfUpdatedCheck(diffReport *diff.Diff, operationsSources result = append(result, NewApiChange( ResponsePropertyAnyOfAddedId, - INFO, + config, []any{propertyDiff.AnyOfDiff.Added.String(), propertyFullName(propertyPath, propertyName), responseStatus}, "", operationsSources, @@ -90,7 +90,7 @@ func ResponsePropertyAnyOfUpdatedCheck(diffReport *diff.Diff, operationsSources result = append(result, NewApiChange( ResponsePropertyAnyOfRemovedId, - INFO, + config, []any{propertyDiff.AnyOfDiff.Deleted.String(), propertyFullName(propertyPath, propertyName), responseStatus}, "", operationsSources, diff --git a/checker/check_response_property_became_nuallable.go b/checker/check_response_property_became_nuallable.go index 71be93bf..b6121a96 100644 --- a/checker/check_response_property_became_nuallable.go +++ b/checker/check_response_property_became_nuallable.go @@ -39,7 +39,7 @@ func ResponsePropertyBecameNullableCheck(diffReport *diff.Diff, operationsSource if mediaTypeDiff.SchemaDiff.NullableDiff != nil && mediaTypeDiff.SchemaDiff.NullableDiff.To == true { result = append(result, NewApiChange( ResponseBodyBecameNullableId, - ERR, + config, nil, "", operationsSources, @@ -62,7 +62,7 @@ func ResponsePropertyBecameNullableCheck(diffReport *diff.Diff, operationsSource result = append(result, NewApiChange( ResponsePropertyBecameNullableId, - ERR, + config, []any{propertyFullName(propertyPath, propertyName), responseStatus}, "", operationsSources, diff --git a/checker/check_response_property_became_optional.go b/checker/check_response_property_became_optional.go index 0a3fd8d6..e4701fbd 100644 --- a/checker/check_response_property_became_optional.go +++ b/checker/check_response_property_became_optional.go @@ -39,19 +39,17 @@ func ResponsePropertyBecameOptionalCheck(diffReport *diff.Diff, operationsSource if mediaTypeDiff.SchemaDiff.RequiredDiff != nil { for _, changedRequiredPropertyName := range mediaTypeDiff.SchemaDiff.RequiredDiff.Deleted { id := ResponsePropertyBecameOptionalId - level := ERR if mediaTypeDiff.SchemaDiff.Revision.Properties[changedRequiredPropertyName] == nil { // removed properties processed by the ResponseRequiredPropertyUpdatedCheck check continue } if mediaTypeDiff.SchemaDiff.Revision.Properties[changedRequiredPropertyName].Value.WriteOnly { id = ResponseWriteOnlyPropertyBecameOptionalId - level = INFO } result = append(result, NewApiChange( id, - level, + config, []any{changedRequiredPropertyName, responseStatus}, "", operationsSources, @@ -70,24 +68,25 @@ func ResponsePropertyBecameOptionalCheck(diffReport *diff.Diff, operationsSource return } for _, changedRequiredPropertyName := range requiredDiff.Deleted { - level := ERR - id := ResponsePropertyBecameOptionalId if propertyDiff.Base.Properties[changedRequiredPropertyName] == nil { continue } - if propertyDiff.Base.Properties[changedRequiredPropertyName].Value.WriteOnly { - level = INFO - id = ResponseWriteOnlyPropertyBecameOptionalId - } + if propertyDiff.Revision.Properties[changedRequiredPropertyName] == nil { // removed properties processed by the ResponseRequiredPropertyUpdatedCheck check continue } + id := ResponsePropertyBecameOptionalId + + if propertyDiff.Base.Properties[changedRequiredPropertyName].Value.WriteOnly { + id = ResponseWriteOnlyPropertyBecameOptionalId + } + result = append(result, NewApiChange( id, - level, + config, []any{propertyFullName(propertyPath, propertyFullName(propertyName, changedRequiredPropertyName)), responseStatus}, "", operationsSources, diff --git a/checker/check_response_property_became_required.go b/checker/check_response_property_became_required.go index 12f9e906..8bdd2140 100644 --- a/checker/check_response_property_became_required.go +++ b/checker/check_response_property_became_required.go @@ -53,7 +53,7 @@ func ResponsePropertyBecameRequiredCheck(diffReport *diff.Diff, operationsSource result = append(result, NewApiChange( id, - INFO, + config, []any{propertyFullName("", changedRequiredPropertyName), responseStatus}, "", operationsSources, @@ -87,7 +87,7 @@ func ResponsePropertyBecameRequiredCheck(diffReport *diff.Diff, operationsSource result = append(result, NewApiChange( id, - INFO, + config, []any{propertyFullName(propertyPath, propertyFullName(propertyName, changedRequiredPropertyName)), responseStatus}, "", operationsSources, diff --git a/checker/check_response_property_default_value_changed.go b/checker/check_response_property_default_value_changed.go index e671161a..8fe3fba4 100644 --- a/checker/check_response_property_default_value_changed.go +++ b/checker/check_response_property_default_value_changed.go @@ -30,7 +30,7 @@ func ResponsePropertyDefaultValueChangedCheck(diffReport *diff.Diff, operationsS appendResultItem := func(messageId string, a ...any) { result = append(result, NewApiChange( messageId, - INFO, + config, a, "", operationsSources, diff --git a/checker/check_response_property_enum_value_added.go b/checker/check_response_property_enum_value_added.go index 30f5a263..ee88a99f 100644 --- a/checker/check_response_property_enum_value_added.go +++ b/checker/check_response_property_enum_value_added.go @@ -39,20 +39,18 @@ func ResponsePropertyEnumValueAddedCheck(diffReport *diff.Diff, operationsSource } id := ResponsePropertyEnumValueAddedId - level := WARN comment := commentId(ResponsePropertyEnumValueAddedId) if propertyDiff.Revision.WriteOnly { // Document write-only enum update id = ResponseWriteOnlyPropertyEnumValueAddedId - level = INFO comment = "" } for _, enumVal := range enumDiff.Added { result = append(result, NewApiChange( id, - level, + config, []any{enumVal, propertyFullName(propertyPath, propertyName), responseStatus}, comment, operationsSources, diff --git a/checker/check_response_property_enum_value_removed.go b/checker/check_response_property_enum_value_removed.go index bcc23c1c..a6351b8e 100644 --- a/checker/check_response_property_enum_value_removed.go +++ b/checker/check_response_property_enum_value_removed.go @@ -40,7 +40,7 @@ func ResponseParameterEnumValueRemovedCheck(diffReport *diff.Diff, operationsSou for _, enumVal := range enumDiff.Deleted { result = append(result, NewApiChange( ResponsePropertyEnumValueRemovedId, - config.getLogLevel(ResponsePropertyEnumValueRemovedId), + config, []any{enumVal, propertyFullName(propertyPath, propertyName), responseStatus}, "", operationsSources, diff --git a/checker/check_response_property_max_increased.go b/checker/check_response_property_max_increased.go index 8afb5098..553deccd 100644 --- a/checker/check_response_property_max_increased.go +++ b/checker/check_response_property_max_increased.go @@ -37,7 +37,7 @@ func ResponsePropertyMaxIncreasedCheck(diffReport *diff.Diff, operationsSources if IsIncreasedValue(maxDiff) { result = append(result, NewApiChange( ResponseBodyMaxIncreasedId, - ERR, + config, []any{maxDiff.From, maxDiff.To}, "", operationsSources, @@ -70,7 +70,7 @@ func ResponsePropertyMaxIncreasedCheck(diffReport *diff.Diff, operationsSources result = append(result, NewApiChange( ResponsePropertyMaxIncreasedId, - ERR, + config, []any{propertyFullName(propertyPath, propertyName), maxDiff.From, maxDiff.To, responseStatus}, "", operationsSources, diff --git a/checker/check_response_property_max_length_increased.go b/checker/check_response_property_max_length_increased.go index ce5e9dc6..26189ddf 100644 --- a/checker/check_response_property_max_length_increased.go +++ b/checker/check_response_property_max_length_increased.go @@ -37,7 +37,7 @@ func ResponsePropertyMaxLengthIncreasedCheck(diffReport *diff.Diff, operationsSo if IsIncreasedValue(maxLengthDiff) { result = append(result, NewApiChange( ResponseBodyMaxLengthIncreasedId, - ERR, + config, []any{maxLengthDiff.From, maxLengthDiff.To}, "", operationsSources, @@ -70,7 +70,7 @@ func ResponsePropertyMaxLengthIncreasedCheck(diffReport *diff.Diff, operationsSo result = append(result, NewApiChange( ResponsePropertyMaxLengthIncreasedId, - ERR, + config, []any{propertyFullName(propertyPath, propertyName), maxLengthDiff.From, maxLengthDiff.To, responseStatus}, "", operationsSources, diff --git a/checker/check_response_property_max_length_unset.go b/checker/check_response_property_max_length_unset.go index b2b4feea..f9eb77a3 100644 --- a/checker/check_response_property_max_length_unset.go +++ b/checker/check_response_property_max_length_unset.go @@ -36,7 +36,7 @@ func ResponsePropertyMaxLengthUnsetCheck(diffReport *diff.Diff, operationsSource maxLengthDiff.To == nil { result = append(result, NewApiChange( ResponseBodyMaxLengthUnsetId, - ERR, + config, []any{maxLengthDiff.From}, "", operationsSources, @@ -64,7 +64,7 @@ func ResponsePropertyMaxLengthUnsetCheck(diffReport *diff.Diff, operationsSource result = append(result, NewApiChange( ResponsePropertyMaxLengthUnsetId, - ERR, + config, []any{propertyFullName(propertyPath, propertyName), maxLengthDiff.From, responseStatus}, "", operationsSources, diff --git a/checker/check_response_property_min_decreased.go b/checker/check_response_property_min_decreased.go index cff0b317..fa92599f 100644 --- a/checker/check_response_property_min_decreased.go +++ b/checker/check_response_property_min_decreased.go @@ -37,7 +37,7 @@ func ResponsePropertyMinDecreasedCheck(diffReport *diff.Diff, operationsSources if IsDecreasedValue(minDiff) { result = append(result, NewApiChange( ResponseBodyMinDecreasedId, - ERR, + config, []any{minDiff.From, minDiff.To}, "", operationsSources, @@ -70,7 +70,7 @@ func ResponsePropertyMinDecreasedCheck(diffReport *diff.Diff, operationsSources result = append(result, NewApiChange( ResponsePropertyMinDecreasedId, - ERR, + config, []any{propertyFullName(propertyPath, propertyName), minDiff.From, minDiff.To, responseStatus}, "", operationsSources, diff --git a/checker/check_response_property_min_items_decreased.go b/checker/check_response_property_min_items_decreased.go index 682f4774..7a04d7e2 100644 --- a/checker/check_response_property_min_items_decreased.go +++ b/checker/check_response_property_min_items_decreased.go @@ -37,7 +37,7 @@ func ResponsePropertyMinItemsDecreasedCheck(diffReport *diff.Diff, operationsSou if IsDecreasedValue(minItemsDiff) { result = append(result, NewApiChange( ResponseBodyMinItemsDecreasedId, - ERR, + config, []any{minItemsDiff.From, minItemsDiff.To}, "", operationsSources, @@ -70,7 +70,7 @@ func ResponsePropertyMinItemsDecreasedCheck(diffReport *diff.Diff, operationsSou result = append(result, NewApiChange( ResponsePropertyMinItemsDecreasedId, - ERR, + config, []any{propertyFullName(propertyPath, propertyName), minItemsDiff.From, minItemsDiff.To, responseStatus}, "", operationsSources, diff --git a/checker/check_response_property_min_items_unset.go b/checker/check_response_property_min_items_unset.go index af7d8b37..f94939d5 100644 --- a/checker/check_response_property_min_items_unset.go +++ b/checker/check_response_property_min_items_unset.go @@ -36,7 +36,7 @@ func ResponsePropertyMinItemsUnsetCheck(diffReport *diff.Diff, operationsSources minItemsDiff.To == nil { result = append(result, NewApiChange( ResponseBodyMinItemsUnsetId, - ERR, + config, []any{minItemsDiff.From}, "", operationsSources, @@ -64,7 +64,7 @@ func ResponsePropertyMinItemsUnsetCheck(diffReport *diff.Diff, operationsSources result = append(result, NewApiChange( ResponsePropertyMinItemsUnsetId, - ERR, + config, []any{propertyFullName(propertyPath, propertyName), minItemsDiff.From, responseStatus}, "", operationsSources, diff --git a/checker/check_response_property_min_length_decreased.go b/checker/check_response_property_min_length_decreased.go index faf59808..f394d5dc 100644 --- a/checker/check_response_property_min_length_decreased.go +++ b/checker/check_response_property_min_length_decreased.go @@ -37,7 +37,7 @@ func ResponsePropertyMinLengthDecreasedCheck(diffReport *diff.Diff, operationsSo if IsDecreasedValue(minLengthDiff) { result = append(result, NewApiChange( ResponseBodyMinLengthDecreasedId, - ERR, + config, []any{minLengthDiff.From, minLengthDiff.To}, "", operationsSources, @@ -70,7 +70,7 @@ func ResponsePropertyMinLengthDecreasedCheck(diffReport *diff.Diff, operationsSo result = append(result, NewApiChange( ResponsePropertyMinLengthDecreasedId, - ERR, + config, []any{propertyFullName(propertyPath, propertyName), minLengthDiff.From, minLengthDiff.To, responseStatus}, "", operationsSources, diff --git a/checker/check_response_property_one_of_updated.go b/checker/check_response_property_one_of_updated.go index 4540deca..98987a62 100644 --- a/checker/check_response_property_one_of_updated.go +++ b/checker/check_response_property_one_of_updated.go @@ -41,7 +41,7 @@ func ResponsePropertyOneOfUpdated(diffReport *diff.Diff, operationsSources *diff if mediaTypeDiff.SchemaDiff.OneOfDiff != nil && len(mediaTypeDiff.SchemaDiff.OneOfDiff.Added) > 0 { result = append(result, NewApiChange( ResponseBodyOneOfAddedId, - INFO, + config, []any{mediaTypeDiff.SchemaDiff.OneOfDiff.Added.String(), responseStatus}, "", operationsSources, @@ -54,7 +54,7 @@ func ResponsePropertyOneOfUpdated(diffReport *diff.Diff, operationsSources *diff if mediaTypeDiff.SchemaDiff.OneOfDiff != nil && len(mediaTypeDiff.SchemaDiff.OneOfDiff.Deleted) > 0 { result = append(result, NewApiChange( ResponseBodyOneOfRemovedId, - INFO, + config, []any{mediaTypeDiff.SchemaDiff.OneOfDiff.Deleted.String(), responseStatus}, "", operationsSources, @@ -76,7 +76,7 @@ func ResponsePropertyOneOfUpdated(diffReport *diff.Diff, operationsSources *diff if len(propertyDiff.OneOfDiff.Added) > 0 { result = append(result, NewApiChange( ResponsePropertyOneOfAddedId, - INFO, + config, []any{propertyDiff.OneOfDiff.Added.String(), propName, responseStatus}, "", operationsSources, @@ -89,7 +89,7 @@ func ResponsePropertyOneOfUpdated(diffReport *diff.Diff, operationsSources *diff if len(propertyDiff.OneOfDiff.Deleted) > 0 { result = append(result, NewApiChange( ResponsePropertyOneOfRemovedId, - INFO, + config, []any{propertyDiff.OneOfDiff.Deleted.String(), propName, responseStatus}, "", operationsSources, diff --git a/checker/check_response_property_type_changed.go b/checker/check_response_property_type_changed.go index 8c1374a7..9d60d97c 100644 --- a/checker/check_response_property_type_changed.go +++ b/checker/check_response_property_type_changed.go @@ -39,7 +39,7 @@ func ResponsePropertyTypeChangedCheck(diffReport *diff.Diff, operationsSources * result = append(result, NewApiChange( ResponseBodyTypeChangedId, - ERR, + config, []any{getBaseType(schemaDiff), getBaseFormat(schemaDiff), getRevisionType(schemaDiff), getRevisionFormat(schemaDiff), responseStatus}, "", operationsSources, @@ -65,7 +65,7 @@ func ResponsePropertyTypeChangedCheck(diffReport *diff.Diff, operationsSources * result = append(result, NewApiChange( ResponsePropertyTypeChangedId, - ERR, + config, []any{propertyFullName(propertyPath, propertyName), getBaseType(schemaDiff), getBaseFormat(schemaDiff), getRevisionType(schemaDiff), getRevisionFormat(schemaDiff), responseStatus}, "", operationsSources, diff --git a/checker/check_response_required_property_updated.go b/checker/check_response_required_property_updated.go index 13a1c50f..8766c565 100644 --- a/checker/check_response_required_property_updated.go +++ b/checker/check_response_required_property_updated.go @@ -39,10 +39,8 @@ func ResponseRequiredPropertyUpdatedCheck(diffReport *diff.Diff, operationsSourc CheckDeletedPropertiesDiff( mediaTypeDiff.SchemaDiff, func(propertyPath string, propertyName string, propertyItem *openapi3.Schema, parent *diff.SchemaDiff) { - level := ERR id := ResponseRequiredPropertyRemovedId if propertyItem.WriteOnly { - level = INFO id = ResponseRequiredWriteOnlyPropertyRemovedId } if !slices.Contains(parent.Base.Required, propertyName) { @@ -52,7 +50,7 @@ func ResponseRequiredPropertyUpdatedCheck(diffReport *diff.Diff, operationsSourc result = append(result, NewApiChange( id, - level, + config, []any{propertyFullName(propertyPath, propertyName), responseStatus}, "", operationsSources, @@ -75,7 +73,7 @@ func ResponseRequiredPropertyUpdatedCheck(diffReport *diff.Diff, operationsSourc result = append(result, NewApiChange( id, - INFO, + config, []any{propertyFullName(propertyPath, propertyName), responseStatus}, "", operationsSources, diff --git a/checker/check_response_required_property_write_only_read_only.go b/checker/check_response_required_property_write_only_read_only.go index b1a33349..64966b9d 100644 --- a/checker/check_response_required_property_write_only_read_only.go +++ b/checker/check_response_required_property_write_only_read_only.go @@ -56,18 +56,16 @@ func ResponseRequiredPropertyWriteOnlyReadOnlyCheck(diffReport *diff.Diff, opera } id := ResponseRequiredPropertyBecameNonWriteOnlyId - level := WARN comment := commentId(ResponseRequiredPropertyBecameNonWriteOnlyId) if writeOnlyDiff.To == true { id = ResponseRequiredPropertyBecameWriteOnlyId - level = INFO comment = "" } result = append(result, NewApiChange( id, - level, + config, []any{propertyFullName(propertyPath, propertyName), responseStatus}, comment, operationsSources, @@ -94,16 +92,14 @@ func ResponseRequiredPropertyWriteOnlyReadOnlyCheck(diffReport *diff.Diff, opera } id := ResponseRequiredPropertyBecameNonReadOnlyId - level := INFO if readOnlyDiff.To == true { id = ResponseRequiredPropertyBecameReadOnlyId - level = INFO } result = append(result, NewApiChange( id, - level, + config, []any{propertyFullName(propertyPath, propertyName), responseStatus}, "", operationsSources, diff --git a/checker/check_response_status_updated.go b/checker/check_response_status_updated.go index 56ef7002..ff98a583 100644 --- a/checker/check_response_status_updated.go +++ b/checker/check_response_status_updated.go @@ -55,7 +55,7 @@ func responseStatusUpdated(diffReport *diff.Diff, operationsSources *diff.Operat if filter(status) { result = append(result, NewApiChange( id, - config.getLogLevel(id), + config, []any{responseStatus}, "", operationsSources, @@ -76,7 +76,7 @@ func responseStatusUpdated(diffReport *diff.Diff, operationsSources *diff.Operat if filter(status) { result = append(result, NewApiChange( addedId, - config.getLogLevel(addedId), + config, []any{responseStatus}, "", operationsSources, diff --git a/checker/check_types.go b/checker/check_types.go index c30092f0..f0e69070 100644 --- a/checker/check_types.go +++ b/checker/check_types.go @@ -77,7 +77,7 @@ Imagine that the OpenAPI type of property "id" was changed from "number" to "str In the first example, the change is non-breaking, because the PHP format for numbers and strings is the same: we refer to this as non-strongly-typed. But in the second example, the change is breaking, because the JSON format requires quotes for strings: we refer to this as strongly-typed. */ -func checkRequestParameterPropertyTypeChanged(typeDiff *diff.StringsDiff, formatDiff *diff.ValueDiff, schemaDiff *diff.SchemaDiff) (string, Level, string) { +func checkRequestParameterPropertyTypeChanged(typeDiff *diff.StringsDiff, formatDiff *diff.ValueDiff, schemaDiff *diff.SchemaDiff) (string, string) { // since we don't know if the object is strogly-typed or not, we check both stronglyTyped := breakingTypeFormatChangedInRequest(typeDiff, formatDiff, true, schemaDiff) @@ -85,16 +85,16 @@ func checkRequestParameterPropertyTypeChanged(typeDiff *diff.StringsDiff, format // if strongly-typed and non-strongly-typed don't agree, it's a warning since we can't be sure that it's breaking if stronglyTyped != nonStronglyTyped { - return RequestParameterPropertyTypeChangedId, WARN, RequestParameterPropertyTypeChangedCommentId + return RequestParameterPropertyTypeChangedId, RequestParameterPropertyTypeChangedCommentId } // if both are breaking it's an error if stronglyTyped { - return RequestParameterPropertyTypeSpecializedId, ERR, "" + return RequestParameterPropertyTypeSpecializedId, "" } // if neither are breaking it's an informational change - return RequestParameterPropertyTypeGeneralizedId, INFO, "" + return RequestParameterPropertyTypeGeneralizedId, "" } /* diff --git a/checker/checker.go b/checker/checker.go index 89166f9f..b22fc500 100644 --- a/checker/checker.go +++ b/checker/checker.go @@ -58,7 +58,7 @@ func removeDraftAndAlphaOperationsDiffs(config *Config, diffReport *diff.Diff, r for operation, operationItem := range pathDiff.Base.Value(path).Operations() { baseStability, err := getStabilityLevel(pathDiff.Base.Value(path).GetOperation(operation).Extensions) if err != nil { - result = append(result, getAPIInvalidStabilityLevel(operationItem, operationsSources, operation, path, err)) + result = append(result, getAPIInvalidStabilityLevel(config, operationItem, operationsSources, operation, path, err)) continue } if !(baseStability == STABILITY_DRAFT || baseStability == STABILITY_ALPHA) { @@ -84,7 +84,7 @@ func removeDraftAndAlphaOperationsDiffs(config *Config, diffReport *diff.Diff, r operationItem := pathDiff.Base.GetOperation(operation) baseStability, err := getStabilityLevel(operationItem.Extensions) if err != nil { - result = append(result, getAPIInvalidStabilityLevel(operationItem, operationsSources, operation, path, err)) + result = append(result, getAPIInvalidStabilityLevel(config, operationItem, operationsSources, operation, path, err)) continue } if !(baseStability == STABILITY_DRAFT || baseStability == STABILITY_ALPHA) { @@ -98,12 +98,12 @@ func removeDraftAndAlphaOperationsDiffs(config *Config, diffReport *diff.Diff, r for operation, operationItem := range pathDiff.OperationsDiff.Modified { baseStability, err := getStabilityLevel(pathDiff.Base.GetOperation(operation).Extensions) if err != nil { - result = append(result, getAPIInvalidStabilityLevel(operationItem.Base, operationsSources, operation, path, err)) + result = append(result, getAPIInvalidStabilityLevel(config, operationItem.Base, operationsSources, operation, path, err)) continue } revisionStability, err := getStabilityLevel(pathDiff.Revision.GetOperation(operation).Extensions) if err != nil { - result = append(result, getAPIInvalidStabilityLevel(operationItem.Revision, operationsSources, operation, path, err)) + result = append(result, getAPIInvalidStabilityLevel(config, operationItem.Revision, operationsSources, operation, path, err)) continue } if baseStability == STABILITY_STABLE && revisionStability != STABILITY_STABLE || @@ -112,7 +112,7 @@ func removeDraftAndAlphaOperationsDiffs(config *Config, diffReport *diff.Diff, r revisionStability == "" && baseStability != "" { result = append(result, NewApiChange( APIStabilityDecreasedId, - ERR, + config, []any{baseStability, revisionStability}, "", operationsSources, @@ -131,10 +131,10 @@ func removeDraftAndAlphaOperationsDiffs(config *Config, diffReport *diff.Diff, r return result } -func getAPIInvalidStabilityLevel(operation *openapi3.Operation, operationsSources *diff.OperationsSourcesMap, method string, path string, err error) Change { +func getAPIInvalidStabilityLevel(config *Config, operation *openapi3.Operation, operationsSources *diff.OperationsSourcesMap, method string, path string, err error) Change { return NewApiChange( APIInvalidStabilityLevelId, - ERR, + config, []any{err}, "", operationsSources, diff --git a/checker/config_test.go b/checker/config_test.go index 96a3b449..e4d3c93a 100644 --- a/checker/config_test.go +++ b/checker/config_test.go @@ -9,7 +9,7 @@ import ( const ( numOfChecks = 91 - numOfIds = 261 + numOfIds = 262 ) func TestNewConfig(t *testing.T) { diff --git a/checker/level.go b/checker/level.go index a80ecd69..1d2258c4 100644 --- a/checker/level.go +++ b/checker/level.go @@ -63,11 +63,3 @@ func (level Level) PrettyString() string { func (level Level) IsBreaking() bool { return level == ERR || level == WARN } - -func conditionalError(isConditionSatisfied bool, defaultLevel Level) Level { - if isConditionSatisfied { - return ERR - } - - return defaultLevel -} diff --git a/checker/localizations/localizations.go b/checker/localizations/localizations.go index d9796ecf..9dbb9d5f 100644 --- a/checker/localizations/localizations.go +++ b/checker/localizations/localizations.go @@ -1,6 +1,6 @@ // Code generated by go-localize; DO NOT EDIT. // This file was generated by robots at -// 2024-07-14 20:48:26.041399 +0300 IDT m=+0.012226395 +// 2024-07-17 10:54:08.151759 +0300 IDT m=+0.013463284 package localizations @@ -373,6 +373,8 @@ var localizations = map[string]string{ "en.messages.request-property-x-extensible-enum-value-removed-description": "request property x-extensible-enum value removed", "en.messages.request-read-only-property-enum-value-removed": "removed the enum value %s of the request read-only property %s", "en.messages.request-read-only-property-enum-value-removed-description": "request read-only property enum value removed", + "en.messages.request-read-only-property-max-decreased": "the %s request read-only property's max was decreased to %s", + "en.messages.request-read-only-property-max-decreased-description": "request read-only property max decreased", "en.messages.request-read-only-property-max-length-decreased": "the %s request read-only property's maxLength was decreased to %s", "en.messages.request-read-only-property-max-length-decreased-description": "request read-only property max length decreased", "en.messages.request-read-only-property-min-increased": "the %s request read-only property's min was increased to %s", @@ -747,6 +749,7 @@ var localizations = map[string]string{ "ru.messages.request-property-type-generalized": "Тип/формат поля запроса %s был обобщен с %s/%s на %s/%s.", "ru.messages.request-property-x-extensible-enum-value-removed": "удалено значение x-extensible-enum %s в поле запроса %s", "ru.messages.request-read-only-property-enum-value-removed": "удалено enum значение %s из поля запроса только для чтения %s", + "ru.messages.request-read-only-property-max-decreased": "максимальное значение поля запроса только для чтения %s уменьшено до %s", "ru.messages.request-read-only-property-max-length-decreased": "значение maxLength поля запроса только для чтения %s уменьшено до %s", "ru.messages.request-read-only-property-min-increased": "для поля запроса только для чтения %s минимальное значение увеличено до %s", "ru.messages.request-required-property-became-not-read-only": "обязательное поле запроса %s перестало быть только для чтения", diff --git a/checker/localizations_src/en/messages.yaml b/checker/localizations_src/en/messages.yaml index 7f9a32ea..804b7ec1 100644 --- a/checker/localizations_src/en/messages.yaml +++ b/checker/localizations_src/en/messages.yaml @@ -96,6 +96,7 @@ request-read-only-property-enum-value-removed: removed the enum value %s of the request-property-enum-value-added: added the new %s enum value to the request property %s request-body-max-decreased: the request's body max was decreased to %s request-property-max-decreased: the %s request property's max was decreased to %s +request-read-only-property-max-decreased: the %s request read-only property's max was decreased to %s request-body-max-length-decreased: the request's body maxLength was decreased to %s request-property-max-length-decreased: the %s request property's maxLength was decreased to %s request-read-only-property-max-length-decreased: the %s request read-only property's maxLength was decreased to %s @@ -432,6 +433,7 @@ request-property-enum-value-added-description: request property enum value added request-property-enum-value-removed-description: request property enum value removed request-read-only-property-enum-value-removed-description: request read-only property enum value removed request-property-max-decreased-description: request property max decreased +request-read-only-property-max-decreased-description: request read-only property max decreased request-property-max-increased-description: request property max increased request-property-max-length-decreased-description: request property max length decreased request-read-only-property-max-length-decreased-description: request read-only property max length decreased diff --git a/checker/localizations_src/ru/messages.yaml b/checker/localizations_src/ru/messages.yaml index b0760e75..33f1756b 100644 --- a/checker/localizations_src/ru/messages.yaml +++ b/checker/localizations_src/ru/messages.yaml @@ -104,6 +104,7 @@ request-body-max-length-increased: максимальная длина тела request-property-max-length-increased: максимальная длина свойства запроса %s была увеличена с %s до %s request-body-max-decreased: значение max у тела запроса уменьшено до %s request-property-max-decreased: значение max у поля запроса %s уменьшено до %s +request-read-only-property-max-decreased: максимальное значение поля запроса только для чтения %s уменьшено до %s request-body-max-length-decreased: значение maxLength у тела запроса уменьшено до %s request-property-max-length-decreased: значение maxLength у поля запроса %s уменьшено до %s request-read-only-property-max-length-decreased: значение maxLength поля запроса только для чтения %s уменьшено до %s diff --git a/checker/rules.go b/checker/rules.go index 5cdfdd36..c837e731 100644 --- a/checker/rules.go +++ b/checker/rules.go @@ -189,6 +189,7 @@ func GetAllRules() BackwardCompatibilityRules { newBackwardCompatibilityRule(RequestBodyMaxDecreasedId, ERR, true, RequestPropertyMaxDecreasedCheck), newBackwardCompatibilityRule(RequestBodyMaxIncreasedId, INFO, true, RequestPropertyMaxDecreasedCheck), newBackwardCompatibilityRule(RequestPropertyMaxDecreasedId, ERR, true, RequestPropertyMaxDecreasedCheck), + newBackwardCompatibilityRule(RequestReadOnlyPropertyMaxDecreasedId, INFO, true, RequestPropertyMaxDecreasedCheck), newBackwardCompatibilityRule(RequestPropertyMaxIncreasedId, INFO, true, RequestPropertyMaxDecreasedCheck), // RequestPropertyMaxLengthSetCheck newBackwardCompatibilityRule(RequestBodyMaxLengthSetId, WARN, true, RequestPropertyMaxLengthSetCheck), @@ -207,7 +208,7 @@ func GetAllRules() BackwardCompatibilityRules { newBackwardCompatibilityRule(RequestBodyMinDecreasedId, INFO, true, RequestPropertyMinIncreasedCheck), newBackwardCompatibilityRule(RequestPropertyMinIncreasedId, ERR, true, RequestPropertyMinIncreasedCheck), newBackwardCompatibilityRule(RequestReadOnlyPropertyMinIncreasedId, INFO, true, RequestPropertyMinIncreasedCheck), - newBackwardCompatibilityRule(RequestPropertyMinDecreasedId, ERR, true, RequestPropertyMinIncreasedCheck), + newBackwardCompatibilityRule(RequestPropertyMinDecreasedId, INFO, true, RequestPropertyMinIncreasedCheck), // RequestPropertyMinItemsIncreasedCheck newBackwardCompatibilityRule(RequestBodyMinItemsIncreasedId, ERR, true, RequestPropertyMinItemsIncreasedCheck), newBackwardCompatibilityRule(RequestPropertyMinItemsIncreasedId, ERR, true, RequestPropertyMinItemsIncreasedCheck), diff --git a/data/checker/request_property_min_items_increased_base.yaml b/data/checker/request_property_min_items_increased_base.yaml new file mode 100644 index 00000000..873e4eeb --- /dev/null +++ b/data/checker/request_property_min_items_increased_base.yaml @@ -0,0 +1,21 @@ +openapi: 3.0.1 +info: + title: Product API + version: "1.0" +servers: + - url: https://api.example.com/v1 +paths: + /products: + post: + operationId: addProduct + requestBody: + content: + application/json: + schema: + type: array + items: + type: string + minItems: 10 + responses: + "200": + description: OK diff --git a/data/checker/request_property_min_items_increased_revision.yaml b/data/checker/request_property_min_items_increased_revision.yaml new file mode 100644 index 00000000..29278139 --- /dev/null +++ b/data/checker/request_property_min_items_increased_revision.yaml @@ -0,0 +1,21 @@ +openapi: 3.0.1 +info: + title: Product API + version: "1.0" +servers: + - url: https://api.example.com/v1 +paths: + /products: + post: + operationId: addProduct + requestBody: + content: + application/json: + schema: + type: array + items: + type: string + minItems: 20 + responses: + "200": + description: OK diff --git a/docs/BREAKING-CHANGES-EXAMPLES.md b/docs/BREAKING-CHANGES-EXAMPLES.md index 0ce5898a..314d103e 100644 --- a/docs/BREAKING-CHANGES-EXAMPLES.md +++ b/docs/BREAKING-CHANGES-EXAMPLES.md @@ -60,6 +60,7 @@ These examples are automatically generated from unit tests. [deprecating an operation with a deprecation policy and an invalid sunset date is breaking](../checker/check_api_deprecation_test.go?plain=1#L44) [deprecating an operation with a deprecation policy and sunset date before required deprecation period is breaking](../checker/check_api_deprecation_test.go?plain=1#L210) [deprecating an operation with a deprecation policy but without specifying sunset date is breaking](../checker/check_api_deprecation_test.go?plain=1#L99) +[inclreasing request body min items is breaking](../checker/check_request_property_min_items_increased_test.go?plain=1#L12) [increasing max length in response is breaking](../checker/check_breaking_min_max_test.go?plain=1#L93) [increasing min items in request is breaking](../checker/check_breaking_min_max_test.go?plain=1#L236) [modifying a pattern in a schema is breaking](../checker/check_breaking_test.go?plain=1#L507) @@ -143,6 +144,7 @@ These examples are automatically generated from unit tests. [deprecating an operation without a deprecation policy and without specifying sunset date is not breaking for alpha level](../checker/check_api_deprecation_test.go?plain=1#L133) [deprecating an operation without a deprecation policy and without specifying sunset date is not breaking for draft level](../checker/check_api_deprecation_test.go?plain=1#L167) [deprecating an operation without a deprecation policy but without specifying sunset date is not breaking](../checker/check_api_deprecation_test.go?plain=1#L83) +[descreasing request body min items is not breaking](../checker/check_request_property_min_items_increased_test.go?plain=1#L35) [increasing max length in request is not breaking](../checker/check_breaking_min_max_test.go?plain=1#L76) [increasing min items in response is not breaking](../checker/check_breaking_min_max_test.go?plain=1#L250) [increasing stability level is not breaking](../checker/checker_test.go?plain=1#L33) @@ -279,8 +281,9 @@ These examples are automatically generated from unit tests. [decreasing minLength value of request parameter](../checker/check_request_parameters_min_length_updated_test.go?plain=1#L35) [decreasing minimum value of request parameter](../checker/check_request_parameters_min_updated_test.go?plain=1#L34) [decreasing minimum value of request property](../checker/check_request_property_min_updated_test.go?plain=1#L60) -[decreasing request body maximum value](../checker/check_request_property_max_updated_test.go?plain=1#L92) +[decreasing request body maximum value](../checker/check_request_property_max_updated_test.go?plain=1#L119) [decreasing request property maximum value](../checker/check_request_property_max_updated_test.go?plain=1#L12) +[decreasing request read-only property maximum value](../checker/check_request_property_max_updated_test.go?plain=1#L38) [deprecating an operation with sunset greater than min](../checker/check_not_breaking_test.go?plain=1#L198) [generalizing pattern of request parameters](../checker/check_request_parameter_pattern_added_or_changed_test.go?plain=1#L37) [generalizing request property format](../checker/check_request_property_type_changed_test.go?plain=1#L176) @@ -298,8 +301,8 @@ These examples are automatically generated from unit tests. [increasing minimum value of request parameter](../checker/check_request_parameters_min_updated_test.go?plain=1#L12) [increasing minimum value of request property](../checker/check_request_property_min_updated_test.go?plain=1#L12) [increasing minimum value of request read-only property](../checker/check_request_property_min_updated_test.go?plain=1#L35) -[increasing request body maximum value](../checker/check_request_property_max_updated_test.go?plain=1#L64) -[increasing request property maximum value](../checker/check_request_property_max_updated_test.go?plain=1#L38) +[increasing request body maximum value](../checker/check_request_property_max_updated_test.go?plain=1#L91) +[increasing request property maximum value](../checker/check_request_property_max_updated_test.go?plain=1#L65) [making request property required, while also giving it a default value](../checker/check_request_property_required_updated_test.go?plain=1#L58) [new header, query and cookie request params](../checker/check_new_request_non_path_parameter_test.go?plain=1#L11) [new paths or path operations](../checker/check_api_added_test.go?plain=1#L11)