diff --git a/tools/spectral/ipa/__tests__/utils/operationIdGeneration.test.js b/tools/spectral/ipa/__tests__/utils/operationIdGeneration.test.js index 185987d00f..7f1f92dafd 100644 --- a/tools/spectral/ipa/__tests__/utils/operationIdGeneration.test.js +++ b/tools/spectral/ipa/__tests__/utils/operationIdGeneration.test.js @@ -28,7 +28,7 @@ describe('tools/spectral/ipa/utils/operationIdGeneration.js', () => { expect(generateOperationID('addNode', '/groups/{groupId}/clusters/{clusterName}')).toEqual('addGroupClusterNode'); expect(generateOperationID('get', '/api/atlas/v2/groups/byName/{groupName}')).toEqual('getGroupByName'); expect(generateOperationID('', '/api/atlas/v2/groups/{groupId}/backup/exportBuckets/{exportBucketId}')).toEqual( - 'exportGroupBackupBucket' + 'exportGroupBackupBuckets' ); }); @@ -36,5 +36,8 @@ describe('tools/spectral/ipa/utils/operationIdGeneration.js', () => { expect(generateOperationID('', '/api/atlas/v2/groups/{groupId}/clusters/{clusterName}/restartPrimaries')).toEqual( 'restartGroupClusterPrimaries' ); + expect(generateOperationID('', '/api/atlas/v2/groups/{groupId}/pipelines/{pipelineName}/pause')).toEqual( + 'pauseGroupPipeline' + ); }); }); diff --git a/tools/spectral/ipa/rulesets/functions/utils/operationIdGeneration.js b/tools/spectral/ipa/rulesets/functions/utils/operationIdGeneration.js index 69921f42db..a3fcda762a 100644 --- a/tools/spectral/ipa/rulesets/functions/utils/operationIdGeneration.js +++ b/tools/spectral/ipa/rulesets/functions/utils/operationIdGeneration.js @@ -24,14 +24,16 @@ export function generateOperationID(method, path) { // legacy custom method - use end of path as custom method name if (!method) { method = nouns.pop(); + resourceIdentifier = resourceIdentifier.slice(0, resourceIdentifier.lastIndexOf('/')); } nouns = nouns.map((noun) => capitalize(noun)); let verb = deriveActionVerb(method); + const camelCaseCustomMethod = method.length > verb.length; // if custom method name is multiple words, add trailing nouns to the operation ID - if (method.length > verb.length) { + if (camelCaseCustomMethod) { nouns.push(method.slice(verb.length)); } @@ -40,10 +42,10 @@ export function generateOperationID(method, path) { opID += inflection.singularize(nouns[i]); } - // singularize final noun, dependent on resource identifier + // singularize final noun, dependent on resource identifier - leave custom nouns alone if ( - isPathParam(resourceIdentifier.split('/').pop()) || - isSingleResourceIdentifier(resourceIdentifier) || + ((isPathParam(resourceIdentifier.split('/').pop()) || isSingleResourceIdentifier(resourceIdentifier)) && + !camelCaseCustomMethod) || verb === 'create' ) { nouns[nouns.length - 1] = inflection.singularize(nouns[nouns.length - 1]);