The chosen parameter must be defined in this operation. By default, $filter
+El parámetro de consulta $filter debe estar presente en las operaciones GET de colección. Se genera un único issue por operación a la que le falta el parámetro $filter.
swagger: "2.0" @@ -7,15 +7,10 @@-Ejemplo de código no compatible (OpenAPI 2)
title: Swagger Petstore paths: /pets: - get: - parameters: - - in: query - name: other - type: array - items: - type: string + get: # Noncompliant {{OAR028: $filter must be defined as a parameter in this operation}} + parameters: - in: query - name: hola + name: other type: array items: type: string @@ -23,7 +18,7 @@Ejemplo de código no compatible (OpenAPI 2)
206: description: Ok
swagger: "2.0" info: @@ -38,16 +33,11 @@-Compliant Solution (OpenAPI 2)
type: array items: type: string - - in: query - name: $filter - type: array - items: - type: string responses: 206: description: Ok
openapi: "3.0.0" info: @@ -55,16 +45,10 @@-Noncompliant Code Example (OpenAPI 3)
title: Swagger Petstore paths: /pets: - get: - parameters: - - in: query - name: other - schema: - type: array - items: - type: string + get: # Noncompliant {{OAR028: $filter must be defined as a parameter in this operation}} + parameters: - in: query - name: select + name: other schema: type: array items: @@ -73,7 +57,7 @@Noncompliant Code Example (OpenAPI 3)
206: description: Ok
openapi: "3.0.0" info: @@ -89,13 +73,7 @@\ No newline at end of file + diff --git a/src/main/resources/org/sonar/l10n/openapi/rules/openapi/parameters/OAR028.html b/src/main/resources/org/sonar/l10n/openapi/rules/openapi/parameters/OAR028.html index 228f3060..d7e0171a 100644 --- a/src/main/resources/org/sonar/l10n/openapi/rules/openapi/parameters/OAR028.html +++ b/src/main/resources/org/sonar/l10n/openapi/rules/openapi/parameters/OAR028.html @@ -1,4 +1,4 @@ -Compliant Solution (OpenAPI 3)
type: array items: type: string - - in: query - name: $filter - schema: - type: array - items: - type: string responses: 206: description: Ok -
The chosen parameter must be defined in this operation. By default, $filter
+The $filter query parameter must be present in GET collection operations. One issue is raised per operation missing the $filter parameter.
swagger: "2.0" @@ -7,15 +7,10 @@\ No newline at end of file + diff --git a/src/test/java/apiaddicts/sonar/openapi/checks/examples/OAR031ExamplesCheckTest.java b/src/test/java/apiaddicts/sonar/openapi/checks/examples/OAR031ExamplesCheckTest.java index 5b1e4ce7..5cea16f8 100644 --- a/src/test/java/apiaddicts/sonar/openapi/checks/examples/OAR031ExamplesCheckTest.java +++ b/src/test/java/apiaddicts/sonar/openapi/checks/examples/OAR031ExamplesCheckTest.java @@ -90,6 +90,23 @@ public void verifyInV32NestedProperties() { verifyV32("nested-properties-examples.yaml"); } + @Test + public void verifyInV2AllOfSchema() { + verifyV2("allof-schema"); + } + @Test + public void verifyInV3AllOfSchema() { + verifyV3("allof-schema"); + } + @Test + public void verifyInV31AllOfSchema() { + verifyV31("allof-schema"); + } + @Test + public void verifyInV32AllOfSchema() { + verifyV32("allof-schema"); + } + @Override public void verifyRule() { assertRuleProperties("OAR031 - Examples - Responses, Request Body, Parameters and Properties must have an example defined", RuleType.BUG, Severity.MAJOR, tags("examples")); diff --git a/src/test/java/apiaddicts/sonar/openapi/checks/format/OAR037StringFormatCheckTest.java b/src/test/java/apiaddicts/sonar/openapi/checks/format/OAR037StringFormatCheckTest.java index ad43517b..ad561e9b 100644 --- a/src/test/java/apiaddicts/sonar/openapi/checks/format/OAR037StringFormatCheckTest.java +++ b/src/test/java/apiaddicts/sonar/openapi/checks/format/OAR037StringFormatCheckTest.java @@ -65,6 +65,11 @@ public void verifyInV32WithNested() { verifyV3("with-$ref"); } + @Test + public void verifyInV2BlankFormat() { + verifyV2("blank-format"); + } + @Override public void verifyParameters() { assertNumberOfParameters(1); diff --git a/src/test/java/apiaddicts/sonar/openapi/checks/parameters/OAR028FilterParameterCheckTest.java b/src/test/java/apiaddicts/sonar/openapi/checks/parameters/OAR028FilterParameterCheckTest.java index c37d4ca8..e2d9350f 100644 --- a/src/test/java/apiaddicts/sonar/openapi/checks/parameters/OAR028FilterParameterCheckTest.java +++ b/src/test/java/apiaddicts/sonar/openapi/checks/parameters/OAR028FilterParameterCheckTest.java @@ -160,9 +160,35 @@ public void verifyInV32HeaderIgnored() { verifyV32("header-ignored"); } + @Test + public void verifyInV2MeHealthPing() { + verifyV2("me-health-ping"); + } + @Test + public void verifyInV3MeHealthPing() { + verifyV3("me-health-ping"); + } + @Test + public void verifyInV31MeHealthPing() { + verifyV31("me-health-ping"); + } + @Test + public void verifyInV32MeHealthPing() { + verifyV32("me-health-ping"); + } + private void setField(String name, String value) { try { - java.lang.reflect.Field f = OAR028FilterParameterCheck.class.getDeclaredField(name); + java.lang.reflect.Field f = null; + Class> clazz = check.getClass(); + while (clazz != null && f == null) { + try { + f = clazz.getDeclaredField(name); + } catch (NoSuchFieldException e) { + clazz = clazz.getSuperclass(); + } + } + if (f == null) throw new NoSuchFieldException(name); f.setAccessible(true); f.set(check, value); } catch (Exception e) { diff --git a/src/test/resources/checks/v2/examples/OAR031/allof-schema.json b/src/test/resources/checks/v2/examples/OAR031/allof-schema.json new file mode 100644 index 00000000..177244f6 --- /dev/null +++ b/src/test/resources/checks/v2/examples/OAR031/allof-schema.json @@ -0,0 +1,48 @@ +{ + "swagger" : "2.0", + "info" : { + "version" : "1.0.0", + "title" : "Swagger Petstore" + }, + "definitions" : { + "BaseEntity" : { + "type" : "object", + "properties" : { + "id" : { + "type" : "integer", + "example" : 1 + } + } + }, + "Pet" : { + "allOf" : [ { + "$ref" : "#/definitions/BaseEntity" + } ], + "properties" : { + "name" : { + "type" : "string", + "example" : "Fluffy" + } + } + } + }, + "paths" : { + "/pets" : { + "get" : { + "responses" : { + "200" : { + "description" : "Ok", + "schema" : { + "$ref" : "#/definitions/Pet" + }, + "examples" : { + "application/json" : { + "name" : "Fluffy" + } + } + } + } + } + } + } +} diff --git a/src/test/resources/checks/v2/examples/OAR031/allof-schema.yaml b/src/test/resources/checks/v2/examples/OAR031/allof-schema.yaml new file mode 100644 index 00000000..fefb074b --- /dev/null +++ b/src/test/resources/checks/v2/examples/OAR031/allof-schema.yaml @@ -0,0 +1,29 @@ +swagger: "2.0" +info: + version: 1.0.0 + title: Swagger Petstore +definitions: + BaseEntity: + type: object + properties: + id: + type: integer + example: 1 + Pet: + allOf: + - $ref: '#/definitions/BaseEntity' + properties: + name: + type: string + example: "Fluffy" +paths: + /pets: + get: + responses: + 200: + description: Ok + schema: + $ref: '#/definitions/Pet' + examples: + application/json: + name: Fluffy diff --git a/src/test/resources/checks/v2/examples/OAR031/valid.yaml b/src/test/resources/checks/v2/examples/OAR031/valid.yaml index 21990b09..abb84e89 100644 --- a/src/test/resources/checks/v2/examples/OAR031/valid.yaml +++ b/src/test/resources/checks/v2/examples/OAR031/valid.yaml @@ -51,7 +51,7 @@ definitions: size: type: integer example: 1 - pets: # Noncompliant {{OAR031: Properties must have an example defined}} + pets: type: array items: $ref: '#/definitions/pet' diff --git a/src/test/resources/checks/v2/examples/OAR031/without-examples.yaml b/src/test/resources/checks/v2/examples/OAR031/without-examples.yaml index b877dfa4..cfb67cc7 100644 --- a/src/test/resources/checks/v2/examples/OAR031/without-examples.yaml +++ b/src/test/resources/checks/v2/examples/OAR031/without-examples.yaml @@ -48,7 +48,7 @@ definitions: properties: size: # Noncompliant {{OAR031: Properties must have an example defined}} type: integer - pets: # Noncompliant {{OAR031: Properties must have an example defined}} + pets: type: array items: $ref: '#/definitions/pet' diff --git a/src/test/resources/checks/v2/format/OAR037/blank-format.json b/src/test/resources/checks/v2/format/OAR037/blank-format.json new file mode 100644 index 00000000..05b6299e --- /dev/null +++ b/src/test/resources/checks/v2/format/OAR037/blank-format.json @@ -0,0 +1,27 @@ +{ + "swagger" : "2.0", + "info" : { + "version" : "1.0.0", + "title" : "Swagger Petstore" + }, + "paths" : { + "/invoices" : { + "get" : { + "responses" : { + "200" : { + "description" : "A invoice.", + "schema" : { + "type" : "object", + "properties" : { + "blank_format" : { + "type" : "string", + "format" : "" + } + } + } + } + } + } + } + } +} diff --git a/src/test/resources/checks/v2/format/OAR037/blank-format.yaml b/src/test/resources/checks/v2/format/OAR037/blank-format.yaml new file mode 100644 index 00000000..00464338 --- /dev/null +++ b/src/test/resources/checks/v2/format/OAR037/blank-format.yaml @@ -0,0 +1,16 @@ +swagger: "2.0" +info: + version: 1.0.0 + title: Swagger Petstore +paths: + /invoices: + get: + responses: + 200: + description: A invoice. + schema: + type: object + properties: + blank_format: + type: string + format: "" diff --git a/src/test/resources/checks/v2/parameters/OAR028/exclude-noncompliant.json b/src/test/resources/checks/v2/parameters/OAR028/exclude-noncompliant.json index 01030ba9..6debb878 100644 --- a/src/test/resources/checks/v2/parameters/OAR028/exclude-noncompliant.json +++ b/src/test/resources/checks/v2/parameters/OAR028/exclude-noncompliant.json @@ -5,18 +5,18 @@ "title" : "Swagger Petstore" }, "paths" : { - "/status" : { - "get" : { + "/orders" : { + "get" : { # Noncompliant {{OAR028: $filter must be defined as a parameter in this operation}} "parameters" : [ { "in" : "query", - "name" : "other", # Noncompliant {{OAR028: $filter must be defined as a parameter in this operation}} + "name" : "other", "type" : "array", "items" : { "type" : "string" } }, { "in" : "query", - "name" : "select", # Noncompliant {{OAR028: $filter must be defined as a parameter in this operation}} + "name" : "select", "type" : "array", "items" : { "type" : "string" diff --git a/src/test/resources/checks/v2/parameters/OAR028/exclude-noncompliant.yaml b/src/test/resources/checks/v2/parameters/OAR028/exclude-noncompliant.yaml index 5b5548d1..9f45515e 100644 --- a/src/test/resources/checks/v2/parameters/OAR028/exclude-noncompliant.yaml +++ b/src/test/resources/checks/v2/parameters/OAR028/exclude-noncompliant.yaml @@ -3,16 +3,16 @@ info: version: 1.0.0 title: Swagger Petstore paths: - /status: - get: + /orders: + get: # Noncompliant {{OAR028: $filter must be defined as a parameter in this operation}} parameters: - in: query - name: other # Noncompliant {{OAR028: $filter must be defined as a parameter in this operation}} + name: other type: array items: type: string - in: query - name: select # Noncompliant {{OAR028: $filter must be defined as a parameter in this operation}} + name: select type: array items: type: string diff --git a/src/test/resources/checks/v2/parameters/OAR028/me-health-ping.json b/src/test/resources/checks/v2/parameters/OAR028/me-health-ping.json new file mode 100644 index 00000000..25e15525 --- /dev/null +++ b/src/test/resources/checks/v2/parameters/OAR028/me-health-ping.json @@ -0,0 +1,63 @@ +{ + "swagger" : "2.0", + "info" : { + "version" : "1.0.0", + "title" : "Swagger Petstore" + }, + "paths" : { + "/examples" : { + "post" : { + "responses" : { + "206" : { + "description" : "Ok" + } + } + } + }, + "/pets/{id}" : { + "get" : { + "responses" : { + "206" : { + "description" : "Ok" + } + } + } + }, + "/users/me" : { + "get" : { + "responses" : { + "206" : { + "description" : "Ok" + } + } + } + }, + "/users/me/settings" : { + "get" : { + "responses" : { + "206" : { + "description" : "Ok" + } + } + } + }, + "/health" : { + "get" : { + "responses" : { + "206" : { + "description" : "Ok" + } + } + } + }, + "/ping" : { + "get" : { + "responses" : { + "206" : { + "description" : "Ok" + } + } + } + } + } +} diff --git a/src/test/resources/checks/v2/parameters/OAR028/me-health-ping.yaml b/src/test/resources/checks/v2/parameters/OAR028/me-health-ping.yaml new file mode 100644 index 00000000..50c39dc6 --- /dev/null +++ b/src/test/resources/checks/v2/parameters/OAR028/me-health-ping.yaml @@ -0,0 +1,35 @@ +swagger: "2.0" +info: + version: 1.0.0 + title: Swagger Petstore +paths: + /examples: + post: + responses: + 206: + description: Ok + /pets/{id}: + get: + responses: + 206: + description: Ok + /users/me: + get: + responses: + 206: + description: Ok + /users/me/settings: + get: + responses: + 206: + description: Ok + /health: + get: + responses: + 206: + description: Ok + /ping: + get: + responses: + 206: + description: Ok diff --git a/src/test/resources/checks/v2/parameters/OAR028/plain-without.json b/src/test/resources/checks/v2/parameters/OAR028/plain-without.json index 79714f09..030fcb40 100644 --- a/src/test/resources/checks/v2/parameters/OAR028/plain-without.json +++ b/src/test/resources/checks/v2/parameters/OAR028/plain-without.json @@ -6,17 +6,17 @@ }, "paths" : { "/examples" : { - "get" : { - "parameters" : [ { + "get" : { # Noncompliant {{OAR028: $filter must be defined as a parameter in this operation}} + "parameters" : [ { "in" : "query", - "name" : "other", # Noncompliant {{OAR028: $filter must be defined as a parameter in this operation}} + "name" : "other", "type" : "array", "items" : { "type" : "string" } }, { "in" : "query", - "name" : "hola", # Noncompliant {{OAR028: $filter must be defined as a parameter in this operation}} + "name" : "hola", "type" : "array", "items" : { "type" : "string" @@ -30,4 +30,4 @@ } } } -} \ No newline at end of file +} diff --git a/src/test/resources/checks/v2/parameters/OAR028/plain-without.yaml b/src/test/resources/checks/v2/parameters/OAR028/plain-without.yaml index 6f972993..80432464 100644 --- a/src/test/resources/checks/v2/parameters/OAR028/plain-without.yaml +++ b/src/test/resources/checks/v2/parameters/OAR028/plain-without.yaml @@ -4,18 +4,18 @@ info: title: Swagger Petstore paths: /examples: - get: - parameters: + get: # Noncompliant {{OAR028: $filter must be defined as a parameter in this operation}} + parameters: - in: query - name: other # Noncompliant {{OAR028: $filter must be defined as a parameter in this operation}} + name: other type: array items: type: string - in: query - name: hola # Noncompliant {{OAR028: $filter must be defined as a parameter in this operation}} + name: hola type: array items: type: string responses: 206: - description: Ok \ No newline at end of file + description: Ok diff --git a/src/test/resources/checks/v3/examples/OAR031/allof-schema.json b/src/test/resources/checks/v3/examples/OAR031/allof-schema.json new file mode 100644 index 00000000..92f78ec7 --- /dev/null +++ b/src/test/resources/checks/v3/examples/OAR031/allof-schema.json @@ -0,0 +1,55 @@ +{ + "openapi" : "3.0.0", + "info" : { + "version" : "1.0.0", + "title" : "Swagger Petstore" + }, + "components" : { + "schemas" : { + "BaseEntity" : { + "type" : "object", + "properties" : { + "id" : { + "type" : "integer", + "example" : 1 + } + } + }, + "Pet" : { + "allOf" : [ { + "$ref" : "#/components/schemas/BaseEntity" + } ], + "properties" : { + "name" : { + "type" : "string", + "example" : "Fluffy" + } + } + } + } + }, + "paths" : { + "/pets" : { + "get" : { + "responses" : { + "200" : { + "description" : "Ok", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/Pet" + }, + "example" : { + "name" : "Fluffy" + } + } + } + }, + "204" : { + "description" : "No content" + } + } + } + } + } +} diff --git a/src/test/resources/checks/v3/examples/OAR031/allof-schema.yaml b/src/test/resources/checks/v3/examples/OAR031/allof-schema.yaml new file mode 100644 index 00000000..d3ebc8df --- /dev/null +++ b/src/test/resources/checks/v3/examples/OAR031/allof-schema.yaml @@ -0,0 +1,33 @@ +openapi: "3.0.0" +info: + version: 1.0.0 + title: Swagger Petstore +components: + schemas: + BaseEntity: + type: object + properties: + id: + type: integer + example: 1 + Pet: + allOf: + - $ref: '#/components/schemas/BaseEntity' + properties: + name: + type: string + example: "Fluffy" +paths: + /pets: + get: + responses: + 200: + description: Ok + content: + application/json: + schema: + $ref: '#/components/schemas/Pet' + example: + name: Fluffy + 204: + description: No content diff --git a/src/test/resources/checks/v3/parameters/OAR028/components-param.json b/src/test/resources/checks/v3/parameters/OAR028/components-param.json index 38b3f30a..8e540684 100644 --- a/src/test/resources/checks/v3/parameters/OAR028/components-param.json +++ b/src/test/resources/checks/v3/parameters/OAR028/components-param.json @@ -8,7 +8,7 @@ "parameters" : { "filterParam" : { "in" : "query", - "name" : "other", + "name" : "$filter", "schema" : { "type" : "string" } @@ -18,6 +18,9 @@ "paths" : { "/examples" : { "get" : { + "parameters" : [ + { "$ref" : "#/components/parameters/filterParam" } + ], "responses" : { "200" : { "description" : "Ok" diff --git a/src/test/resources/checks/v3/parameters/OAR028/components-param.yaml b/src/test/resources/checks/v3/parameters/OAR028/components-param.yaml index 18bc4ac4..a553d250 100644 --- a/src/test/resources/checks/v3/parameters/OAR028/components-param.yaml +++ b/src/test/resources/checks/v3/parameters/OAR028/components-param.yaml @@ -6,12 +6,14 @@ components: parameters: filterParam: in: query - name: other + name: $filter schema: type: string paths: /examples: get: + parameters: + - $ref: '#/components/parameters/filterParam' responses: 200: description: Ok diff --git a/src/test/resources/checks/v3/parameters/OAR028/exclude-noncompliant.json b/src/test/resources/checks/v3/parameters/OAR028/exclude-noncompliant.json index ec73f987..67435d01 100644 --- a/src/test/resources/checks/v3/parameters/OAR028/exclude-noncompliant.json +++ b/src/test/resources/checks/v3/parameters/OAR028/exclude-noncompliant.json @@ -5,11 +5,11 @@ "title" : "Swagger Petstore" }, "paths" : { - "/status" : { - "get" : { + "/orders" : { + "get" : { # Noncompliant {{OAR028: $filter must be defined as a parameter in this operation}} "parameters" : [ { "in" : "query", - "name" : "other", # Noncompliant {{OAR028: $filter must be defined as a parameter in this operation}} + "name" : "other", "schema" : { "type" : "array", "items" : { @@ -18,7 +18,7 @@ } }, { "in" : "query", - "name" : "select", # Noncompliant {{OAR028: $filter must be defined as a parameter in this operation}} + "name" : "select", "schema" : { "type" : "array", "items" : { diff --git a/src/test/resources/checks/v3/parameters/OAR028/exclude-noncompliant.yaml b/src/test/resources/checks/v3/parameters/OAR028/exclude-noncompliant.yaml index bc7139de..0d212700 100644 --- a/src/test/resources/checks/v3/parameters/OAR028/exclude-noncompliant.yaml +++ b/src/test/resources/checks/v3/parameters/OAR028/exclude-noncompliant.yaml @@ -3,17 +3,17 @@ info: version: 1.0.0 title: Swagger Petstore paths: - /status: - get: + /orders: + get: # Noncompliant {{OAR028: $filter must be defined as a parameter in this operation}} parameters: - in: query - name: other # Noncompliant {{OAR028: $filter must be defined as a parameter in this operation}} + name: other schema: type: array items: type: string - in: query - name: select # Noncompliant {{OAR028: $filter must be defined as a parameter in this operation}} + name: select schema: type: array items: diff --git a/src/test/resources/checks/v3/parameters/OAR028/me-health-ping.json b/src/test/resources/checks/v3/parameters/OAR028/me-health-ping.json new file mode 100644 index 00000000..a257ab40 --- /dev/null +++ b/src/test/resources/checks/v3/parameters/OAR028/me-health-ping.json @@ -0,0 +1,63 @@ +{ + "openapi" : "3.0.0", + "info" : { + "version" : "1.0.0", + "title" : "Swagger Petstore" + }, + "paths" : { + "/examples" : { + "post" : { + "responses" : { + "206" : { + "description" : "Ok" + } + } + } + }, + "/pets/{id}" : { + "get" : { + "responses" : { + "206" : { + "description" : "Ok" + } + } + } + }, + "/users/me" : { + "get" : { + "responses" : { + "206" : { + "description" : "Ok" + } + } + } + }, + "/users/me/settings" : { + "get" : { + "responses" : { + "206" : { + "description" : "Ok" + } + } + } + }, + "/health" : { + "get" : { + "responses" : { + "206" : { + "description" : "Ok" + } + } + } + }, + "/ping" : { + "get" : { + "responses" : { + "206" : { + "description" : "Ok" + } + } + } + } + } +} diff --git a/src/test/resources/checks/v3/parameters/OAR028/me-health-ping.yaml b/src/test/resources/checks/v3/parameters/OAR028/me-health-ping.yaml new file mode 100644 index 00000000..495e15e9 --- /dev/null +++ b/src/test/resources/checks/v3/parameters/OAR028/me-health-ping.yaml @@ -0,0 +1,35 @@ +openapi: "3.0.0" +info: + version: 1.0.0 + title: Swagger Petstore +paths: + /examples: + post: + responses: + 206: + description: Ok + /pets/{id}: + get: + responses: + 206: + description: Ok + /users/me: + get: + responses: + 206: + description: Ok + /users/me/settings: + get: + responses: + 206: + description: Ok + /health: + get: + responses: + 206: + description: Ok + /ping: + get: + responses: + 206: + description: Ok diff --git a/src/test/resources/checks/v3/parameters/OAR028/plain-without.json b/src/test/resources/checks/v3/parameters/OAR028/plain-without.json index 56ec4af2..d1b165a9 100644 --- a/src/test/resources/checks/v3/parameters/OAR028/plain-without.json +++ b/src/test/resources/checks/v3/parameters/OAR028/plain-without.json @@ -6,10 +6,10 @@ }, "paths" : { "/examples" : { - "get" : { - "parameters" : [ { + "get" : { # Noncompliant {{OAR028: $filter must be defined as a parameter in this operation}} + "parameters" : [ { "in" : "query", - "name" : "other", # Noncompliant {{OAR028: $filter must be defined as a parameter in this operation}} + "name" : "other", "schema": { "type" : "array", "items" : { @@ -18,7 +18,7 @@ } }, { "in" : "query", - "name" : "select", # Noncompliant {{OAR028: $filter must be defined as a parameter in this operation}} + "name" : "select", "schema": { "type" : "array", "items" : { @@ -34,4 +34,4 @@ } } } -} \ No newline at end of file +} diff --git a/src/test/resources/checks/v3/parameters/OAR028/plain-without.yaml b/src/test/resources/checks/v3/parameters/OAR028/plain-without.yaml index e756f798..ddafd313 100644 --- a/src/test/resources/checks/v3/parameters/OAR028/plain-without.yaml +++ b/src/test/resources/checks/v3/parameters/OAR028/plain-without.yaml @@ -4,20 +4,20 @@ info: title: Swagger Petstore paths: /examples: - get: - parameters: + get: # Noncompliant {{OAR028: $filter must be defined as a parameter in this operation}} + parameters: - in: query - name: other # Noncompliant {{OAR028: $filter must be defined as a parameter in this operation}} + name: other schema: type: array items: type: string - in: query - name: select # Noncompliant {{OAR028: $filter must be defined as a parameter in this operation}} + name: select schema: type: array items: type: string responses: 206: - description: Ok \ No newline at end of file + description: Ok diff --git a/src/test/resources/checks/v31/examples/OAR031/allof-schema.json b/src/test/resources/checks/v31/examples/OAR031/allof-schema.json new file mode 100644 index 00000000..0155d35a --- /dev/null +++ b/src/test/resources/checks/v31/examples/OAR031/allof-schema.json @@ -0,0 +1,55 @@ +{ + "openapi" : "3.1.0", + "info" : { + "version" : "1.0.0", + "title" : "Swagger Petstore" + }, + "components" : { + "schemas" : { + "BaseEntity" : { + "type" : "object", + "properties" : { + "id" : { + "type" : "integer", + "example" : 1 + } + } + }, + "Pet" : { + "allOf" : [ { + "$ref" : "#/components/schemas/BaseEntity" + } ], + "properties" : { + "name" : { + "type" : "string", + "example" : "Fluffy" + } + } + } + } + }, + "paths" : { + "/pets" : { + "get" : { + "responses" : { + "200" : { + "description" : "Ok", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/Pet" + }, + "example" : { + "name" : "Fluffy" + } + } + } + }, + "204" : { + "description" : "No content" + } + } + } + } + } +} diff --git a/src/test/resources/checks/v31/examples/OAR031/allof-schema.yaml b/src/test/resources/checks/v31/examples/OAR031/allof-schema.yaml new file mode 100644 index 00000000..771b7e0d --- /dev/null +++ b/src/test/resources/checks/v31/examples/OAR031/allof-schema.yaml @@ -0,0 +1,33 @@ +openapi: "3.1.0" +info: + version: 1.0.0 + title: Swagger Petstore +components: + schemas: + BaseEntity: + type: object + properties: + id: + type: integer + example: 1 + Pet: + allOf: + - $ref: '#/components/schemas/BaseEntity' + properties: + name: + type: string + example: "Fluffy" +paths: + /pets: + get: + responses: + 200: + description: Ok + content: + application/json: + schema: + $ref: '#/components/schemas/Pet' + example: + name: Fluffy + 204: + description: No content diff --git a/src/test/resources/checks/v31/parameters/OAR028/components-param.json b/src/test/resources/checks/v31/parameters/OAR028/components-param.json index 6c2a7460..e2bdbec7 100644 --- a/src/test/resources/checks/v31/parameters/OAR028/components-param.json +++ b/src/test/resources/checks/v31/parameters/OAR028/components-param.json @@ -8,7 +8,7 @@ "parameters" : { "filterParam" : { "in" : "query", - "name" : "other", + "name" : "$filter", "schema" : { "type" : "string" } @@ -18,6 +18,9 @@ "paths" : { "/examples" : { "get" : { + "parameters" : [ + { "$ref" : "#/components/parameters/filterParam" } + ], "responses" : { "200" : { "description" : "Ok" diff --git a/src/test/resources/checks/v31/parameters/OAR028/components-param.yaml b/src/test/resources/checks/v31/parameters/OAR028/components-param.yaml index f9bd9cd6..bb953926 100644 --- a/src/test/resources/checks/v31/parameters/OAR028/components-param.yaml +++ b/src/test/resources/checks/v31/parameters/OAR028/components-param.yaml @@ -6,12 +6,14 @@ components: parameters: filterParam: in: query - name: other + name: $filter schema: type: string paths: /examples: get: + parameters: + - $ref: '#/components/parameters/filterParam' responses: 200: description: Ok diff --git a/src/test/resources/checks/v31/parameters/OAR028/exclude-noncompliant.json b/src/test/resources/checks/v31/parameters/OAR028/exclude-noncompliant.json index 5fa3e557..8d4f6f29 100644 --- a/src/test/resources/checks/v31/parameters/OAR028/exclude-noncompliant.json +++ b/src/test/resources/checks/v31/parameters/OAR028/exclude-noncompliant.json @@ -5,11 +5,11 @@ "title" : "Swagger Petstore" }, "paths" : { - "/status" : { - "get" : { + "/orders" : { + "get" : { # Noncompliant {{OAR028: $filter must be defined as a parameter in this operation}} "parameters" : [ { "in" : "query", - "name" : "other", # Noncompliant {{OAR028: $filter must be defined as a parameter in this operation}} + "name" : "other", "schema" : { "type" : "array", "items" : { @@ -18,7 +18,7 @@ } }, { "in" : "query", - "name" : "select", # Noncompliant {{OAR028: $filter must be defined as a parameter in this operation}} + "name" : "select", "schema" : { "type" : "array", "items" : { diff --git a/src/test/resources/checks/v31/parameters/OAR028/exclude-noncompliant.yaml b/src/test/resources/checks/v31/parameters/OAR028/exclude-noncompliant.yaml index 3abbe1cf..e52b9300 100644 --- a/src/test/resources/checks/v31/parameters/OAR028/exclude-noncompliant.yaml +++ b/src/test/resources/checks/v31/parameters/OAR028/exclude-noncompliant.yaml @@ -3,17 +3,17 @@ info: version: 1.0.0 title: Swagger Petstore paths: - /status: - get: + /orders: + get: # Noncompliant {{OAR028: $filter must be defined as a parameter in this operation}} parameters: - in: query - name: other # Noncompliant {{OAR028: $filter must be defined as a parameter in this operation}} + name: other schema: type: array items: type: string - in: query - name: select # Noncompliant {{OAR028: $filter must be defined as a parameter in this operation}} + name: select schema: type: array items: diff --git a/src/test/resources/checks/v31/parameters/OAR028/me-health-ping.json b/src/test/resources/checks/v31/parameters/OAR028/me-health-ping.json new file mode 100644 index 00000000..e23d51ba --- /dev/null +++ b/src/test/resources/checks/v31/parameters/OAR028/me-health-ping.json @@ -0,0 +1,63 @@ +{ + "openapi" : "3.1.0", + "info" : { + "version" : "1.0.0", + "title" : "Swagger Petstore" + }, + "paths" : { + "/examples" : { + "post" : { + "responses" : { + "206" : { + "description" : "Ok" + } + } + } + }, + "/pets/{id}" : { + "get" : { + "responses" : { + "206" : { + "description" : "Ok" + } + } + } + }, + "/users/me" : { + "get" : { + "responses" : { + "206" : { + "description" : "Ok" + } + } + } + }, + "/users/me/settings" : { + "get" : { + "responses" : { + "206" : { + "description" : "Ok" + } + } + } + }, + "/health" : { + "get" : { + "responses" : { + "206" : { + "description" : "Ok" + } + } + } + }, + "/ping" : { + "get" : { + "responses" : { + "206" : { + "description" : "Ok" + } + } + } + } + } +} diff --git a/src/test/resources/checks/v31/parameters/OAR028/me-health-ping.yaml b/src/test/resources/checks/v31/parameters/OAR028/me-health-ping.yaml new file mode 100644 index 00000000..927f40dd --- /dev/null +++ b/src/test/resources/checks/v31/parameters/OAR028/me-health-ping.yaml @@ -0,0 +1,35 @@ +openapi: "3.1.0" +info: + version: 1.0.0 + title: Swagger Petstore +paths: + /examples: + post: + responses: + 206: + description: Ok + /pets/{id}: + get: + responses: + 206: + description: Ok + /users/me: + get: + responses: + 206: + description: Ok + /users/me/settings: + get: + responses: + 206: + description: Ok + /health: + get: + responses: + 206: + description: Ok + /ping: + get: + responses: + 206: + description: Ok diff --git a/src/test/resources/checks/v31/parameters/OAR028/plain-without.json b/src/test/resources/checks/v31/parameters/OAR028/plain-without.json index 3fca9b30..f265f5d3 100644 --- a/src/test/resources/checks/v31/parameters/OAR028/plain-without.json +++ b/src/test/resources/checks/v31/parameters/OAR028/plain-without.json @@ -6,10 +6,10 @@ }, "paths" : { "/examples" : { - "get" : { - "parameters" : [ { + "get" : { # Noncompliant {{OAR028: $filter must be defined as a parameter in this operation}} + "parameters" : [ { "in" : "query", - "name" : "other", # Noncompliant {{OAR028: $filter must be defined as a parameter in this operation}} + "name" : "other", "schema": { "type" : "array", "items" : { @@ -18,7 +18,7 @@ } }, { "in" : "query", - "name" : "select", # Noncompliant {{OAR028: $filter must be defined as a parameter in this operation}} + "name" : "select", "schema": { "type" : "array", "items" : { @@ -34,4 +34,4 @@ } } } -} \ No newline at end of file +} diff --git a/src/test/resources/checks/v31/parameters/OAR028/plain-without.yaml b/src/test/resources/checks/v31/parameters/OAR028/plain-without.yaml index 5d404776..ef729a42 100644 --- a/src/test/resources/checks/v31/parameters/OAR028/plain-without.yaml +++ b/src/test/resources/checks/v31/parameters/OAR028/plain-without.yaml @@ -4,20 +4,20 @@ info: title: Swagger Petstore paths: /examples: - get: - parameters: + get: # Noncompliant {{OAR028: $filter must be defined as a parameter in this operation}} + parameters: - in: query - name: other # Noncompliant {{OAR028: $filter must be defined as a parameter in this operation}} + name: other schema: type: array items: type: string - in: query - name: select # Noncompliant {{OAR028: $filter must be defined as a parameter in this operation}} + name: select schema: type: array items: type: string responses: 206: - description: Ok \ No newline at end of file + description: Ok diff --git a/src/test/resources/checks/v32/examples/OAR031/allof-schema.json b/src/test/resources/checks/v32/examples/OAR031/allof-schema.json new file mode 100644 index 00000000..48d27955 --- /dev/null +++ b/src/test/resources/checks/v32/examples/OAR031/allof-schema.json @@ -0,0 +1,55 @@ +{ + "openapi" : "3.2.0", + "info" : { + "version" : "1.0.0", + "title" : "Swagger Petstore" + }, + "components" : { + "schemas" : { + "BaseEntity" : { + "type" : "object", + "properties" : { + "id" : { + "type" : "integer", + "example" : 1 + } + } + }, + "Pet" : { + "allOf" : [ { + "$ref" : "#/components/schemas/BaseEntity" + } ], + "properties" : { + "name" : { + "type" : "string", + "example" : "Fluffy" + } + } + } + } + }, + "paths" : { + "/pets" : { + "get" : { + "responses" : { + "200" : { + "description" : "Ok", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/Pet" + }, + "example" : { + "name" : "Fluffy" + } + } + } + }, + "204" : { + "description" : "No content" + } + } + } + } + } +} diff --git a/src/test/resources/checks/v32/examples/OAR031/allof-schema.yaml b/src/test/resources/checks/v32/examples/OAR031/allof-schema.yaml new file mode 100644 index 00000000..388704e9 --- /dev/null +++ b/src/test/resources/checks/v32/examples/OAR031/allof-schema.yaml @@ -0,0 +1,33 @@ +openapi: "3.2.0" +info: + version: 1.0.0 + title: Swagger Petstore +components: + schemas: + BaseEntity: + type: object + properties: + id: + type: integer + example: 1 + Pet: + allOf: + - $ref: '#/components/schemas/BaseEntity' + properties: + name: + type: string + example: "Fluffy" +paths: + /pets: + get: + responses: + 200: + description: Ok + content: + application/json: + schema: + $ref: '#/components/schemas/Pet' + example: + name: Fluffy + 204: + description: No content diff --git a/src/test/resources/checks/v32/parameters/OAR028/components-param.json b/src/test/resources/checks/v32/parameters/OAR028/components-param.json index c73f7b32..4100117a 100644 --- a/src/test/resources/checks/v32/parameters/OAR028/components-param.json +++ b/src/test/resources/checks/v32/parameters/OAR028/components-param.json @@ -8,7 +8,7 @@ "parameters" : { "filterParam" : { "in" : "query", - "name" : "other", + "name" : "$filter", "schema" : { "type" : "string" } @@ -18,6 +18,9 @@ "paths" : { "/examples" : { "get" : { + "parameters" : [ + { "$ref" : "#/components/parameters/filterParam" } + ], "responses" : { "200" : { "description" : "Ok" diff --git a/src/test/resources/checks/v32/parameters/OAR028/components-param.yaml b/src/test/resources/checks/v32/parameters/OAR028/components-param.yaml index c1e954e8..3c123daa 100644 --- a/src/test/resources/checks/v32/parameters/OAR028/components-param.yaml +++ b/src/test/resources/checks/v32/parameters/OAR028/components-param.yaml @@ -6,12 +6,14 @@ components: parameters: filterParam: in: query - name: other + name: $filter schema: type: string paths: /examples: get: + parameters: + - $ref: '#/components/parameters/filterParam' responses: 200: description: Ok diff --git a/src/test/resources/checks/v32/parameters/OAR028/exclude-noncompliant.json b/src/test/resources/checks/v32/parameters/OAR028/exclude-noncompliant.json index 958ffb1a..dd5444b7 100644 --- a/src/test/resources/checks/v32/parameters/OAR028/exclude-noncompliant.json +++ b/src/test/resources/checks/v32/parameters/OAR028/exclude-noncompliant.json @@ -5,11 +5,11 @@ "title" : "Swagger Petstore" }, "paths" : { - "/status" : { - "get" : { + "/orders" : { + "get" : { # Noncompliant {{OAR028: $filter must be defined as a parameter in this operation}} "parameters" : [ { "in" : "query", - "name" : "other", # Noncompliant {{OAR028: $filter must be defined as a parameter in this operation}} + "name" : "other", "schema" : { "type" : "array", "items" : { @@ -18,7 +18,7 @@ } }, { "in" : "query", - "name" : "select", # Noncompliant {{OAR028: $filter must be defined as a parameter in this operation}} + "name" : "select", "schema" : { "type" : "array", "items" : { diff --git a/src/test/resources/checks/v32/parameters/OAR028/exclude-noncompliant.yaml b/src/test/resources/checks/v32/parameters/OAR028/exclude-noncompliant.yaml index 343b26ef..95435d14 100644 --- a/src/test/resources/checks/v32/parameters/OAR028/exclude-noncompliant.yaml +++ b/src/test/resources/checks/v32/parameters/OAR028/exclude-noncompliant.yaml @@ -3,17 +3,17 @@ info: version: 1.0.0 title: Swagger Petstore paths: - /status: - get: + /orders: + get: # Noncompliant {{OAR028: $filter must be defined as a parameter in this operation}} parameters: - in: query - name: other # Noncompliant {{OAR028: $filter must be defined as a parameter in this operation}} + name: other schema: type: array items: type: string - in: query - name: select # Noncompliant {{OAR028: $filter must be defined as a parameter in this operation}} + name: select schema: type: array items: diff --git a/src/test/resources/checks/v32/parameters/OAR028/me-health-ping.json b/src/test/resources/checks/v32/parameters/OAR028/me-health-ping.json new file mode 100644 index 00000000..400ffab2 --- /dev/null +++ b/src/test/resources/checks/v32/parameters/OAR028/me-health-ping.json @@ -0,0 +1,63 @@ +{ + "openapi" : "3.2.0", + "info" : { + "version" : "1.0.0", + "title" : "Swagger Petstore" + }, + "paths" : { + "/examples" : { + "post" : { + "responses" : { + "206" : { + "description" : "Ok" + } + } + } + }, + "/pets/{id}" : { + "get" : { + "responses" : { + "206" : { + "description" : "Ok" + } + } + } + }, + "/users/me" : { + "get" : { + "responses" : { + "206" : { + "description" : "Ok" + } + } + } + }, + "/users/me/settings" : { + "get" : { + "responses" : { + "206" : { + "description" : "Ok" + } + } + } + }, + "/health" : { + "get" : { + "responses" : { + "206" : { + "description" : "Ok" + } + } + } + }, + "/ping" : { + "get" : { + "responses" : { + "206" : { + "description" : "Ok" + } + } + } + } + } +} diff --git a/src/test/resources/checks/v32/parameters/OAR028/me-health-ping.yaml b/src/test/resources/checks/v32/parameters/OAR028/me-health-ping.yaml new file mode 100644 index 00000000..8b22e1e8 --- /dev/null +++ b/src/test/resources/checks/v32/parameters/OAR028/me-health-ping.yaml @@ -0,0 +1,35 @@ +openapi: "3.2.0" +info: + version: 1.0.0 + title: Swagger Petstore +paths: + /examples: + post: + responses: + 206: + description: Ok + /pets/{id}: + get: + responses: + 206: + description: Ok + /users/me: + get: + responses: + 206: + description: Ok + /users/me/settings: + get: + responses: + 206: + description: Ok + /health: + get: + responses: + 206: + description: Ok + /ping: + get: + responses: + 206: + description: Ok diff --git a/src/test/resources/checks/v32/parameters/OAR028/plain-without.json b/src/test/resources/checks/v32/parameters/OAR028/plain-without.json index 6d78ca42..9936131d 100644 --- a/src/test/resources/checks/v32/parameters/OAR028/plain-without.json +++ b/src/test/resources/checks/v32/parameters/OAR028/plain-without.json @@ -6,10 +6,10 @@ }, "paths" : { "/examples" : { - "get" : { - "parameters" : [ { + "get" : { # Noncompliant {{OAR028: $filter must be defined as a parameter in this operation}} + "parameters" : [ { "in" : "query", - "name" : "other", # Noncompliant {{OAR028: $filter must be defined as a parameter in this operation}} + "name" : "other", "schema": { "type" : "array", "items" : { @@ -18,7 +18,7 @@ } }, { "in" : "query", - "name" : "select", # Noncompliant {{OAR028: $filter must be defined as a parameter in this operation}} + "name" : "select", "schema": { "type" : "array", "items" : { @@ -34,4 +34,4 @@ } } } -} \ No newline at end of file +} diff --git a/src/test/resources/checks/v32/parameters/OAR028/plain-without.yaml b/src/test/resources/checks/v32/parameters/OAR028/plain-without.yaml index 59f530dd..d31d6d18 100644 --- a/src/test/resources/checks/v32/parameters/OAR028/plain-without.yaml +++ b/src/test/resources/checks/v32/parameters/OAR028/plain-without.yaml @@ -4,20 +4,20 @@ info: title: Swagger Petstore paths: /examples: - get: - parameters: + get: # Noncompliant {{OAR028: $filter must be defined as a parameter in this operation}} + parameters: - in: query - name: other # Noncompliant {{OAR028: $filter must be defined as a parameter in this operation}} + name: other schema: type: array items: type: string - in: query - name: select # Noncompliant {{OAR028: $filter must be defined as a parameter in this operation}} + name: select schema: type: array items: type: string responses: 206: - description: Ok \ No newline at end of file + description: OkNoncompliant Code Example (OpenAPI 2)
title: Swagger Petstore paths: /pets: - get: - parameters: - - in: query - name: other # Noncompliant {{OAR028: $filter must be defined as a parameter in this operation}} - type: array - items: - type: string + get: # Noncompliant {{OAR028: $filter must be defined as a parameter in this operation}} + parameters: - in: query - name: hola # Noncompliant {{OAR028: $filter must be defined as a parameter in this operation}} + name: other type: array items: type: string @@ -38,11 +33,6 @@Compliant Solution (OpenAPI 2)
type: array items: type: string - - in: query - name: $filter - type: array - items: - type: string responses: 206: description: Ok @@ -55,16 +45,10 @@Noncompliant Code Example (OpenAPI 3)
title: Swagger Petstore paths: /pets: - get: - parameters: - - in: query - name: other # Noncompliant {{OAR028: $filter must be defined as a parameter in this operation}} - schema: - type: array - items: - type: string + get: # Noncompliant {{OAR028: $filter must be defined as a parameter in this operation}} + parameters: - in: query - name: select # Noncompliant {{OAR028: $filter must be defined as a parameter in this operation}} + name: other schema: type: array items: @@ -89,13 +73,7 @@Compliant Solution (OpenAPI 3)
type: array items: type: string - - in: query - name: $filter - schema: - type: array - items: - type: string responses: 206: description: Ok -