From aa6b264e54a4a30512ebf48b7c2047d8b25e78d8 Mon Sep 17 00:00:00 2001 From: Yeliz Henden Date: Fri, 3 Jan 2025 15:53:38 +0000 Subject: [PATCH 1/3] CLOUDP-291457: IPA-123 ArraySchema fix --- .../eachEnumValueMustBeUpperSnakeCase.test.js | 50 ++++++++++++++++++- .../eachEnumValueMustBeUpperSnakeCase.js | 5 +- 2 files changed, 53 insertions(+), 2 deletions(-) diff --git a/tools/spectral/ipa/__tests__/eachEnumValueMustBeUpperSnakeCase.test.js b/tools/spectral/ipa/__tests__/eachEnumValueMustBeUpperSnakeCase.test.js index 290efd35a7..2d87e38974 100644 --- a/tools/spectral/ipa/__tests__/eachEnumValueMustBeUpperSnakeCase.test.js +++ b/tools/spectral/ipa/__tests__/eachEnumValueMustBeUpperSnakeCase.test.js @@ -7,7 +7,7 @@ testRule('xgen-IPA-123-enum-values-must-be-upper-snake-case', [ document: { components: { schemas: { - SchemaName: { + SchemaName1: { properties: { exampleProperty: { enum: ['EXAMPLE_A', 'EXAMPLE_B'], @@ -15,6 +15,17 @@ testRule('xgen-IPA-123-enum-values-must-be-upper-snake-case', [ }, }, }, + SchemaName2: { + properties: { + exampleProperty: { + type: 'array', + items: { + type: 'string', + enum: ['EXAMPLE_A', 'EXAMPLE_B'], + } + }, + }, + }, }, }, }, @@ -36,6 +47,20 @@ testRule('xgen-IPA-123-enum-values-must-be-upper-snake-case', [ }, }, }, + SchemaName2: { + properties: { + exampleProperty: { + type: 'array', + items: { + type: 'string', + enum: ['exampleA', 'exampleB'], + }, + 'x-xgen-IPA-exception': { + 'xgen-IPA-123-enum-values-must-be-upper-snake-case': 'reason', + }, + }, + }, + }, }, }, }, @@ -54,6 +79,17 @@ testRule('xgen-IPA-123-enum-values-must-be-upper-snake-case', [ }, }, }, + SchemaName2: { + properties: { + exampleProperty: { + type: 'array', + items: { + type: 'string', + enum: ['exampleA', 'exampleB'], + }, + }, + }, + }, }, }, }, @@ -70,6 +106,18 @@ testRule('xgen-IPA-123-enum-values-must-be-upper-snake-case', [ path: ['components', 'schemas', 'SchemaName', 'properties', 'exampleProperty'], severity: DiagnosticSeverity.Warning, }, + { + code: 'xgen-IPA-123-enum-values-must-be-upper-snake-case', + message: 'enum[0]:exampleA enum value must be UPPER_SNAKE_CASE. http://go/ipa/123', + path: ['components', 'schemas', 'SchemaName2', 'properties', 'exampleProperty'], + severity: DiagnosticSeverity.Warning, + }, + { + code: 'xgen-IPA-123-enum-values-must-be-upper-snake-case', + message: 'enum[1]:exampleB enum value must be UPPER_SNAKE_CASE. http://go/ipa/123', + path: ['components', 'schemas', 'SchemaName2', 'properties', 'exampleProperty'], + severity: DiagnosticSeverity.Warning, + }, ], }, { diff --git a/tools/spectral/ipa/rulesets/functions/eachEnumValueMustBeUpperSnakeCase.js b/tools/spectral/ipa/rulesets/functions/eachEnumValueMustBeUpperSnakeCase.js index ece14ffb3f..7dcd67bb61 100644 --- a/tools/spectral/ipa/rulesets/functions/eachEnumValueMustBeUpperSnakeCase.js +++ b/tools/spectral/ipa/rulesets/functions/eachEnumValueMustBeUpperSnakeCase.js @@ -6,7 +6,10 @@ const RULE_NAME = 'xgen-IPA-123-enum-values-must-be-upper-snake-case'; const ERROR_MESSAGE = 'enum value must be UPPER_SNAKE_CASE.'; export function getSchemaPathFromEnumPath(path) { - return path.slice(0, path.length - 1); + if(path.includes('items')) { + path = path.slice(0, - 1); + } + return path.slice(0, - 1); } export default (input, _, { path, documentInventory }) => { From dfd791f304ab61c87953b4a03b5945a39483cdb6 Mon Sep 17 00:00:00 2001 From: Yeliz Henden Date: Fri, 3 Jan 2025 17:09:32 +0000 Subject: [PATCH 2/3] prettier fix --- .../ipa/__tests__/eachEnumValueMustBeUpperSnakeCase.test.js | 2 +- .../rulesets/functions/eachEnumValueMustBeUpperSnakeCase.js | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/tools/spectral/ipa/__tests__/eachEnumValueMustBeUpperSnakeCase.test.js b/tools/spectral/ipa/__tests__/eachEnumValueMustBeUpperSnakeCase.test.js index 2d87e38974..83043ba49a 100644 --- a/tools/spectral/ipa/__tests__/eachEnumValueMustBeUpperSnakeCase.test.js +++ b/tools/spectral/ipa/__tests__/eachEnumValueMustBeUpperSnakeCase.test.js @@ -22,7 +22,7 @@ testRule('xgen-IPA-123-enum-values-must-be-upper-snake-case', [ items: { type: 'string', enum: ['EXAMPLE_A', 'EXAMPLE_B'], - } + }, }, }, }, diff --git a/tools/spectral/ipa/rulesets/functions/eachEnumValueMustBeUpperSnakeCase.js b/tools/spectral/ipa/rulesets/functions/eachEnumValueMustBeUpperSnakeCase.js index 7dcd67bb61..c345e9707c 100644 --- a/tools/spectral/ipa/rulesets/functions/eachEnumValueMustBeUpperSnakeCase.js +++ b/tools/spectral/ipa/rulesets/functions/eachEnumValueMustBeUpperSnakeCase.js @@ -6,10 +6,10 @@ const RULE_NAME = 'xgen-IPA-123-enum-values-must-be-upper-snake-case'; const ERROR_MESSAGE = 'enum value must be UPPER_SNAKE_CASE.'; export function getSchemaPathFromEnumPath(path) { - if(path.includes('items')) { - path = path.slice(0, - 1); + if (path.includes('items')) { + path = path.slice(0, -1); } - return path.slice(0, - 1); + return path.slice(0, -1); } export default (input, _, { path, documentInventory }) => { From f2d9ca76e8c2c6192fe31d6cae2e4c8daa1c3e18 Mon Sep 17 00:00:00 2001 From: Yeliz Henden Date: Fri, 3 Jan 2025 17:52:51 +0000 Subject: [PATCH 3/3] fix --- .../functions/eachEnumValueMustBeUpperSnakeCase.js | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/tools/spectral/ipa/rulesets/functions/eachEnumValueMustBeUpperSnakeCase.js b/tools/spectral/ipa/rulesets/functions/eachEnumValueMustBeUpperSnakeCase.js index c345e9707c..39c05ae5d0 100644 --- a/tools/spectral/ipa/rulesets/functions/eachEnumValueMustBeUpperSnakeCase.js +++ b/tools/spectral/ipa/rulesets/functions/eachEnumValueMustBeUpperSnakeCase.js @@ -5,11 +5,12 @@ import { casing } from '@stoplight/spectral-functions'; const RULE_NAME = 'xgen-IPA-123-enum-values-must-be-upper-snake-case'; const ERROR_MESSAGE = 'enum value must be UPPER_SNAKE_CASE.'; -export function getSchemaPathFromEnumPath(path) { - if (path.includes('items')) { - path = path.slice(0, -1); +function getSchemaPathFromEnumPath(path) { + const enumIndex = path.lastIndexOf('enum'); + if (path[enumIndex - 1] === 'items') { + return path.slice(0, enumIndex - 1); } - return path.slice(0, -1); + return path.slice(0, enumIndex); } export default (input, _, { path, documentInventory }) => {