diff --git a/src/components/staging-parser.ts b/src/components/staging-parser.ts index 400f919..f1d25ac 100644 --- a/src/components/staging-parser.ts +++ b/src/components/staging-parser.ts @@ -19,16 +19,32 @@ const addResolutionDateToClosedStage = (issue: JiraApiIssue, stageMap, stageBins return stageBins; }; +const caseInsensetiveGet = (map: Map<string, any>, keyToGet: string) => { + const lowerCaseKeyToGet = keyToGet.toLowerCase() + const entries = [...map.entries()] + const found = entries.find(entry => entry[0].toLowerCase() === lowerCaseKeyToGet) + return found !== undefined ? found[1] : undefined +} + +const caseInsensetiveHas = (map: Map<string, any>, keyToCheck: string) => { + return caseInsensetiveGet(map, keyToCheck) !== undefined +} + + const populateStages = (issue: JiraApiIssue, stageMap, stageBins, unusedStages = new Map<string, number>()) => { // sort status changes into stage bins issue.changelog.histories.forEach(history => { history.items.forEach(historyItem => { + const stageName: string = historyItem.toString; + const stageDate: string = history['created']; + if (historyItem['field'] === 'status') { - const stageName: string = historyItem.toString; if (stageMap.has(stageName)) { const stageIndex: number = stageMap.get(stageName); - const stageDate: string = history['created']; stageBins[stageIndex].push(stageDate); + } else if (caseInsensetiveHas(stageMap, stageName)) { + const stageIndex: number = caseInsensetiveGet(stageMap, stageName); + stageBins[stageIndex].push(stageDate); } else { const count: number = unusedStages.has(stageName) ? unusedStages.get(stageName) : 0; unusedStages.set(stageName, count + 1); @@ -41,9 +57,11 @@ const populateStages = (issue: JiraApiIssue, stageMap, stageBins, unusedStages = const stageName: string = historyItem.toString; if (stageMap.has(stageName)) { const stageIndex: number = stageMap.get(stageName); - const stageDate: string = history['created']; stageBins[stageIndex].push(stageDate); - } else { + } else if (caseInsensetiveHas(stageMap, stageName)) { + const stageIndex: number = caseInsensetiveGet(stageMap, stageName); + stageBins[stageIndex].push(stageDate); + } else { const count: number = unusedStages.has(stageName) ? unusedStages.get(stageName) : 0; unusedStages.set(stageName, count + 1); } @@ -64,7 +82,7 @@ const filterAndFlattenStagingDates = (stageBins: string[][]) => { validStageDates.sort(); latestValidIssueDateSoFar = validStageDates[validStageDates.length - 1]; const earliestStageDate = validStageDates[0]; - return earliestStageDate.split('T')[0]; + return earliestStageDate.split('T')[0]; } else { return ''; }