diff --git a/tools/spectral/ipa/__tests__/eachEnumValueMustBeUpperSnakeCase.test.js b/tools/spectral/ipa/__tests__/eachEnumValueMustBeUpperSnakeCase.test.js index 290efd35a7..83043ba49a 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..39c05ae5d0 100644 --- a/tools/spectral/ipa/rulesets/functions/eachEnumValueMustBeUpperSnakeCase.js +++ b/tools/spectral/ipa/rulesets/functions/eachEnumValueMustBeUpperSnakeCase.js @@ -5,8 +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) { - return path.slice(0, path.length - 1); +function getSchemaPathFromEnumPath(path) { + const enumIndex = path.lastIndexOf('enum'); + if (path[enumIndex - 1] === 'items') { + return path.slice(0, enumIndex - 1); + } + return path.slice(0, enumIndex); } export default (input, _, { path, documentInventory }) => {