Skip to content

Commit 1fc6d41

Browse files
fix panics (#658)
1 parent 569582a commit 1fc6d41

9 files changed

+220
-11
lines changed

checker/check_request_parameter_sunset_changed.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,8 @@ func RequestParameterSunsetChangedCheck(diffReport *diff.Diff, operationsSources
3333
for paramLocation, paramItems := range operationDiff.ParametersDiff.Modified {
3434
for paramName, paramItem := range paramItems {
3535

36-
paramBase := opBase.Parameters.GetByInAndName(paramLocation, paramName)
37-
paramRevision := opRevision.Parameters.GetByInAndName(paramLocation, paramName)
36+
paramBase := paramItem.Base
37+
paramRevision := paramItem.Revision
3838

3939
if !paramRevision.Deprecated {
4040
continue

checker/check_request_parameter_sunset_changed_test.go

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,24 @@ func TestBreaking_SunsetDeletedForDeprecatedParameter(t *testing.T) {
2626
require.Equal(t, "'query' request parameter 'id' sunset date deleted, but deprecated=true kept", errs[0].GetUncolorizedText(checker.NewDefaultLocalizer()))
2727
}
2828

29+
// BC: deleting sunset header for a deprecated parameter is breaking even if the parameter is renamed
30+
func TestBreaking_SunsetDeletedForDeprecatedAndRenamedParameter(t *testing.T) {
31+
32+
s1, err := open(getParameterDeprecationFile("deprecated-with-sunset-path.yaml"))
33+
require.NoError(t, err)
34+
35+
s2, err := open(getParameterDeprecationFile("deprecated-no-sunset-path-renamed.yaml"))
36+
require.NoError(t, err)
37+
38+
d, osm, err := diff.GetWithOperationsSourcesMap(diff.NewConfig(), s1, s2)
39+
require.NoError(t, err)
40+
errs := checker.CheckBackwardCompatibility(singleCheckConfig(checker.RequestParameterSunsetChangedCheck), d, osm)
41+
require.NotEmpty(t, errs)
42+
require.Len(t, errs, 1)
43+
require.Equal(t, checker.RequestParameterSunsetDeletedId, errs[0].GetId())
44+
require.Equal(t, "'path' request parameter 'id' sunset date deleted, but deprecated=true kept", errs[0].GetUncolorizedText(checker.NewDefaultLocalizer()))
45+
}
46+
2947
// BC: changing sunset to an earlier date for a deprecated parameter with a deprecation policy is breaking
3048
func TestBreaking_SunsetModifiedForDeprecatedParameter(t *testing.T) {
3149

checker/check_request_parameters_default_value_changed.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,12 +38,12 @@ func RequestParameterDefaultValueChangedCheck(diffReport *diff.Diff, operationsS
3838
for paramLocation, paramDiffs := range operationItem.ParametersDiff.Modified {
3939
for paramName, paramDiff := range paramDiffs {
4040

41-
baseParam := operationItem.Base.Parameters.GetByInAndName(paramLocation, paramName)
41+
baseParam := paramDiff.Base
4242
if baseParam == nil || baseParam.Required {
4343
continue
4444
}
4545

46-
revisionParam := operationItem.Revision.Parameters.GetByInAndName(paramLocation, paramName)
46+
revisionParam := paramDiff.Revision
4747
if revisionParam == nil || revisionParam.Required {
4848
continue
4949
}

checker/check_request_parameters_default_value_changed_test.go

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,28 @@ func TestRequestParameterDefaultValueChanged(t *testing.T) {
3131
}, errs[0])
3232
}
3333

34+
// CL: changing request parameter default value, while the param is also renamed
35+
func TestRequestParameterDefaultValueChangedAndRenamedParameter(t *testing.T) {
36+
s1, err := open("../data/checker/request_parameter_default_value_changed_base_renamed.yaml")
37+
require.NoError(t, err)
38+
s2, err := open("../data/checker/request_parameter_default_value_changed_revision_renamed.yaml")
39+
require.NoError(t, err)
40+
41+
d, osm, err := diff.GetWithOperationsSourcesMap(diff.NewConfig(), s1, s2)
42+
require.NoError(t, err)
43+
errs := checker.CheckBackwardCompatibilityUntilLevel(singleCheckConfig(checker.RequestParameterDefaultValueChangedCheck), d, osm, checker.ERR)
44+
require.Len(t, errs, 1)
45+
require.Equal(t, checker.ApiChange{
46+
Id: checker.RequestParameterDefaultValueChangedId,
47+
Args: []any{"path", "group_id", "2", "1"},
48+
Level: checker.ERR,
49+
Operation: "POST",
50+
Path: "/api/v1.0/groups/{group_id}",
51+
Source: load.NewSource("../data/checker/request_parameter_default_value_changed_revision_renamed.yaml"),
52+
OperationId: "createOneGroup",
53+
}, errs[0])
54+
}
55+
3456
// CL: adding request parameter default value
3557
func TestRequestParameterDefaultValueAdded(t *testing.T) {
3658
s1, err := open("../data/checker/request_parameter_default_value_changed_base.yaml")
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
openapi: 3.0.1
2+
info:
3+
title: Tufin
4+
version: "2.0"
5+
servers:
6+
- url: https://localhost:9080
7+
paths:
8+
/api/v1.0/groups/{group_id}:
9+
post:
10+
operationId: createOneGroup
11+
requestBody:
12+
content:
13+
application/json:
14+
schema:
15+
$ref: '#/components/schemas/GroupView'
16+
description: Creates one project.
17+
required: true
18+
parameters:
19+
- in: path
20+
name: group_id
21+
schema:
22+
type: string
23+
default: "2"
24+
- in: query
25+
name: category
26+
schema:
27+
type: string
28+
responses:
29+
"200":
30+
content:
31+
application/json:
32+
schema:
33+
$ref: '#/components/schemas/GroupView'
34+
description: OK
35+
"409":
36+
content:
37+
application/json:
38+
schema:
39+
$ref: '#/components/schemas/GroupView'
40+
description: Conflict
41+
summary: Create One Project
42+
components:
43+
schemas:
44+
GroupView:
45+
type: object
46+
properties:
47+
data:
48+
type: object
49+
properties:
50+
created:
51+
type: string
52+
format: date-time
53+
readOnly: true
54+
pattern: "^[a-z]+$"
55+
id:
56+
type: string
57+
readOnly: true
58+
name:
59+
type: string
60+
required:
61+
- name
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
openapi: 3.0.1
2+
info:
3+
title: Tufin
4+
version: "2.0"
5+
servers:
6+
- url: https://localhost:9080
7+
paths:
8+
/api/v1.0/groups/{groupId}:
9+
post:
10+
operationId: createOneGroup
11+
requestBody:
12+
content:
13+
application/json:
14+
schema:
15+
$ref: '#/components/schemas/GroupView'
16+
description: Creates one project.
17+
required: true
18+
parameters:
19+
- in: path
20+
name: groupId
21+
schema:
22+
type: string
23+
default: "1"
24+
- in: query
25+
name: category
26+
schema:
27+
type: string
28+
responses:
29+
"200":
30+
content:
31+
application/json:
32+
schema:
33+
$ref: '#/components/schemas/GroupView'
34+
description: OK
35+
"409":
36+
content:
37+
application/json:
38+
schema:
39+
$ref: '#/components/schemas/GroupView'
40+
description: Conflict
41+
summary: Create One Project
42+
components:
43+
schemas:
44+
GroupView:
45+
type: object
46+
properties:
47+
data:
48+
type: object
49+
properties:
50+
created:
51+
type: string
52+
format: date-time
53+
readOnly: true
54+
pattern: "^[a-z]+$"
55+
id:
56+
type: string
57+
readOnly: true
58+
name:
59+
type: string
60+
required:
61+
- name
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
info:
2+
title: Tufin
3+
version: 1.0.0
4+
openapi: 3.0.3
5+
paths:
6+
/api/test/{ParamID}:
7+
get:
8+
parameters:
9+
- $ref: '#/components/parameters/id'
10+
responses:
11+
200:
12+
description: OK
13+
components:
14+
parameters:
15+
id:
16+
name: ParamID
17+
in: path
18+
required: true
19+
schema:
20+
type: string
21+
description: 'The ID'
22+
deprecated: true
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
info:
2+
title: Tufin
3+
version: 1.0.0
4+
openapi: 3.0.3
5+
paths:
6+
/api/test/{id}:
7+
get:
8+
parameters:
9+
- $ref: '#/components/parameters/id'
10+
responses:
11+
200:
12+
description: OK
13+
components:
14+
parameters:
15+
id:
16+
name: id
17+
in: path
18+
required: true
19+
schema:
20+
type: string
21+
description: 'The ID'
22+
deprecated: true
23+
x-sunset: "2023-08-02"

docs/BREAKING-CHANGES-EXAMPLES.md

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -44,11 +44,11 @@ These examples are automatically generated from unit tests.
4444
[changing response's body schema type from string to number is breaking](../checker/check_breaking_response_type_changed_test.go?plain=1#L12)
4545
[changing response's embedded property schema type from string/none to integer/int32 is breaking](../checker/check_breaking_response_type_changed_test.go?plain=1#L109)
4646
[changing sunset from an invalid date for a deprecated endpoint is breaking](../checker/check_api_sunset_changed_test.go?plain=1#L65)
47-
[changing sunset from an invalid date for a deprecated parameter is breaking](../checker/check_request_parameter_sunset_changed_test.go?plain=1#L66)
47+
[changing sunset from an invalid date for a deprecated parameter is breaking](../checker/check_request_parameter_sunset_changed_test.go?plain=1#L84)
4848
[changing sunset to an earlier date for a deprecated endpoint with a deprecation policy is breaking](../checker/check_api_sunset_changed_test.go?plain=1#L29)
49-
[changing sunset to an earlier date for a deprecated parameter with a deprecation policy is breaking](../checker/check_request_parameter_sunset_changed_test.go?plain=1#L29)
49+
[changing sunset to an earlier date for a deprecated parameter with a deprecation policy is breaking](../checker/check_request_parameter_sunset_changed_test.go?plain=1#L47)
5050
[changing sunset to an invalid date for a deprecated endpoint is breaking](../checker/check_api_sunset_changed_test.go?plain=1#L47)
51-
[changing sunset to an invalid date for a deprecated parameter is breaking](../checker/check_request_parameter_sunset_changed_test.go?plain=1#L47)
51+
[changing sunset to an invalid date for a deprecated parameter is breaking](../checker/check_request_parameter_sunset_changed_test.go?plain=1#L65)
5252
[decreasing maxItems of common request parameters with --flatten-params is breaking](../checker/check_request_parameters_max_items_updated_test.go?plain=1#L72)
5353
[decreasing stability level is breaking](../checker/checker_test.go?plain=1#L11)
5454
[deleting a media-type from response is breaking](../checker/check_breaking_test.go?plain=1#L418)
@@ -65,6 +65,7 @@ These examples are automatically generated from unit tests.
6565
[deleting an operation before sunset date is breaking](../checker/check_api_removed_test.go?plain=1#L51)
6666
[deleting an operation without deprecation is breaking](../checker/check_api_removed_test.go?plain=1#L20)
6767
[deleting sunset header for a deprecated endpoint is breaking](../checker/check_api_sunset_changed_test.go?plain=1#L11)
68+
[deleting sunset header for a deprecated parameter is breaking even if the parameter is renamed](../checker/check_request_parameter_sunset_changed_test.go?plain=1#L29)
6869
[deleting sunset header for a deprecated parameter is breaking](../checker/check_request_parameter_sunset_changed_test.go?plain=1#L11)
6970
[deprecating a parameter with a deprecation policy and an invalid sunset date is breaking](../checker/check_request_parameter_deprecation_test.go?plain=1#L18)
7071
[deprecating a parameter with a deprecation policy and sunset date before required deprecation period is breaking](../checker/check_request_parameter_deprecation_test.go?plain=1#L102)
@@ -153,7 +154,7 @@ These examples are automatically generated from unit tests.
153154
[deleting a tag is not breaking](../checker/check_not_breaking_test.go?plain=1#L71)
154155
[deleting an operation after sunset date is not breaking](../checker/check_api_removed_test.go?plain=1#L36)
155156
[deleting other extension (not sunset) header for a deprecated endpoint is not breaking](../checker/check_api_sunset_changed_test.go?plain=1#L84)
156-
[deleting other extension (not sunset) header for a deprecated parameter is not breaking](../checker/check_request_parameter_sunset_changed_test.go?plain=1#L85)
157+
[deleting other extension (not sunset) header for a deprecated parameter is not breaking](../checker/check_request_parameter_sunset_changed_test.go?plain=1#L103)
157158
[deprecating a header is not breaking](../checker/check_not_breaking_test.go?plain=1#L226)
158159
[deprecating a parameter is not breaking](../checker/check_not_breaking_test.go?plain=1#L213)
159160
[deprecating a parameter with a default deprecation policy but without specifying sunset date is not breaking](../checker/check_request_parameter_deprecation_test.go?plain=1#L71)
@@ -177,7 +178,7 @@ These examples are automatically generated from unit tests.
177178
[new required response header param is not breaking](../checker/check_not_breaking_test.go?plain=1#L152)
178179
[no change is not breaking](../checker/check_not_breaking_test.go?plain=1#L27)
179180
[no change to headers for a deprecated endpoint is not breaking](../checker/check_api_sunset_changed_test.go?plain=1#L99)
180-
[no change to headers for a deprecated parameter is not breaking](../checker/check_request_parameter_sunset_changed_test.go?plain=1#L100)
181+
[no change to headers for a deprecated parameter is not breaking](../checker/check_request_parameter_sunset_changed_test.go?plain=1#L118)
181182
[reducing max in response is not breaking](../checker/check_breaking_min_max_test.go?plain=1#L281)
182183
[reducing max length in response is not breaking](../checker/check_breaking_min_max_test.go?plain=1#L31)
183184
[reducing min items in request is not breaking](../checker/check_breaking_min_max_test.go?plain=1#L206)
@@ -220,7 +221,7 @@ These examples are automatically generated from unit tests.
220221
[adding discriminator to the response body or response property](../checker/check_response_discriminator_updated_test.go?plain=1#L13)
221222
[adding pattern to request parameters](../checker/check_request_parameter_pattern_added_or_changed_test.go?plain=1#L60)
222223
[adding request body default value or request property default value](../checker/check_request_property_default_value_changed_test.go?plain=1#L58)
223-
[adding request parameter default value](../checker/check_request_parameters_default_value_changed_test.go?plain=1#L34)
224+
[adding request parameter default value](../checker/check_request_parameters_default_value_changed_test.go?plain=1#L56)
224225
[adding request property enum values](../checker/check_request_property_enum_value_updated_test.go?plain=1#L67)
225226
[adding request property pattern](../checker/check_request_property_pattern_added_or_changed_test.go?plain=1#L60)
226227
[adding response body default value or response body property default value](../checker/check_response_property_default_value_changed_test.go?plain=1#L64)
@@ -257,6 +258,7 @@ These examples are automatically generated from unit tests.
257258
[changing request body type](../checker/check_request_property_type_changed_test.go?plain=1#L14)
258259
[changing request header parameter format](../checker/check_request_parameters_type_changed_test.go?plain=1#L134)
259260
[changing request header parameter type](../checker/check_request_parameters_type_changed_test.go?plain=1#L62)
261+
[changing request parameter default value, while the param is also renamed](../checker/check_request_parameters_default_value_changed_test.go?plain=1#L34)
260262
[changing request parameter default value](../checker/check_request_parameters_default_value_changed_test.go?plain=1#L12)
261263
[changing request parameter type to enum](../checker/check_request_parameter_became_enum_test.go?plain=1#L12)
262264
[changing request path parameter format](../checker/check_request_parameters_type_changed_test.go?plain=1#L86)
@@ -360,7 +362,7 @@ These examples are automatically generated from unit tests.
360362
[removing media type from request body](../checker/check_request_body_mediatype_updated_test.go?plain=1#L34)
361363
[removing pattern from request parameters](../checker/check_request_parameter_pattern_added_or_changed_test.go?plain=1#L83)
362364
[removing request body default value or request property default value](../checker/check_request_property_default_value_changed_test.go?plain=1#L91)
363-
[removing request parameter default value](../checker/check_request_parameters_default_value_changed_test.go?plain=1#L58)
365+
[removing request parameter default value](../checker/check_request_parameters_default_value_changed_test.go?plain=1#L80)
364366
[removing request property enum values](../checker/check_request_property_enum_value_updated_test.go?plain=1#L12)
365367
[removing request property pattern](../checker/check_request_property_pattern_added_or_changed_test.go?plain=1#L83)
366368
[removing request read-only property enum values](../checker/check_request_property_enum_value_updated_test.go?plain=1#L39)

0 commit comments

Comments
 (0)