diff --git a/common/src/main/java/com/publicissapient/kpidashboard/common/constant/CommonConstant.java b/common/src/main/java/com/publicissapient/kpidashboard/common/constant/CommonConstant.java index 97aeefbf2e..7577418b8b 100644 --- a/common/src/main/java/com/publicissapient/kpidashboard/common/constant/CommonConstant.java +++ b/common/src/main/java/com/publicissapient/kpidashboard/common/constant/CommonConstant.java @@ -40,6 +40,7 @@ public final class CommonConstant { public static final String CACHE_BOARD_META_DATA_MAP = "boardMetaDataMap"; public static final String CACHE_PROJECT_CONFIG_MAP = "projectConfigMap"; public static final String CACHE_PROJECT_TOOL_CONFIG_MAP = "projectToolConfigMap"; + public static final String CACHE_PROJECT_KPI_DATA = "project_kpi_data_cache"; public static final String PARAM1 = "param1"; public static final String PARAM2 = "param2"; diff --git a/customapi/src/main/java/com/publicissapient/kpidashboard/apis/common/service/KpiDataCacheService.java b/customapi/src/main/java/com/publicissapient/kpidashboard/apis/common/service/KpiDataCacheService.java index cfc26e4a93..a002143ed2 100644 --- a/customapi/src/main/java/com/publicissapient/kpidashboard/apis/common/service/KpiDataCacheService.java +++ b/customapi/src/main/java/com/publicissapient/kpidashboard/apis/common/service/KpiDataCacheService.java @@ -21,9 +21,11 @@ import java.util.List; import java.util.Map; +import com.publicissapient.kpidashboard.apis.constant.Constant; import com.publicissapient.kpidashboard.apis.model.KpiRequest; import com.publicissapient.kpidashboard.common.model.application.Build; import org.bson.types.ObjectId; +import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Component; /** @@ -133,4 +135,7 @@ Map fetchScopeChurnData(KpiRequest kpiRequest, ObjectId basicPro */ Map fetchCommitmentReliabilityData(KpiRequest kpiRequest, ObjectId basicProjectConfigId, List sprintList, String kpiId); + + @Cacheable(value = Constant.CACHE_PROJECT_KPI_DATA, key = "#basicProjectConfigId.toString().concat('_').concat(#kpiId)") + Map fetchCostOfDelayData(ObjectId basicProjectConfigId, String kpiId); } diff --git a/customapi/src/main/java/com/publicissapient/kpidashboard/apis/common/service/impl/KpiDataCacheServiceImpl.java b/customapi/src/main/java/com/publicissapient/kpidashboard/apis/common/service/impl/KpiDataCacheServiceImpl.java index eae7d12565..b46b44835e 100644 --- a/customapi/src/main/java/com/publicissapient/kpidashboard/apis/common/service/impl/KpiDataCacheServiceImpl.java +++ b/customapi/src/main/java/com/publicissapient/kpidashboard/apis/common/service/impl/KpiDataCacheServiceImpl.java @@ -102,7 +102,8 @@ public List getKpiBasedOnSource(String source) { Map> kpiMap = new HashMap<>(); kpiMap.put(KPISource.JIRA.name(), List.of(KPICode.ISSUE_COUNT.getKpiId(), KPICode.COMMITMENT_RELIABILITY.getKpiId(), - KPICode.SPRINT_CAPACITY_UTILIZATION.getKpiId(), KPICode.SCOPE_CHURN.getKpiId())); + KPICode.SPRINT_CAPACITY_UTILIZATION.getKpiId(), KPICode.SCOPE_CHURN.getKpiId(), + KPICode.COST_OF_DELAY.getKpiId())); kpiMap.put(KPISource.JIRAKANBAN.name(), new ArrayList<>()); kpiMap.put(KPISource.SONAR.name(), new ArrayList<>()); kpiMap.put(KPISource.SONARKANBAN.name(), new ArrayList<>()); @@ -158,4 +159,11 @@ public Map fetchCommitmentReliabilityData(KpiRequest kpiRequest, return kpiDataProvider.fetchCommitmentReliabilityData(kpiRequest, basicProjectConfigId, sprintList); } + @Cacheable(value = Constant.CACHE_PROJECT_KPI_DATA, key = "#basicProjectConfigId.toString().concat('_').concat(#kpiId)") + @Override + public Map fetchCostOfDelayData(ObjectId basicProjectConfigId, String kpiId) { + log.info("Fetching Cost of Delay KPI Data for Project {} and KPI {}", basicProjectConfigId.toString(), kpiId); + return kpiDataProvider.fetchCostOfDelayData(basicProjectConfigId); + } + } \ No newline at end of file diff --git a/customapi/src/main/java/com/publicissapient/kpidashboard/apis/common/service/impl/KpiDataProvider.java b/customapi/src/main/java/com/publicissapient/kpidashboard/apis/common/service/impl/KpiDataProvider.java index c7f3bdf583..e4577b2a6e 100644 --- a/customapi/src/main/java/com/publicissapient/kpidashboard/apis/common/service/impl/KpiDataProvider.java +++ b/customapi/src/main/java/com/publicissapient/kpidashboard/apis/common/service/impl/KpiDataProvider.java @@ -5,7 +5,6 @@ import java.util.function.Function; import java.util.stream.Collectors; -import com.publicissapient.kpidashboard.apis.enums.KPISource; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.MapUtils; import org.bson.types.ObjectId; @@ -47,6 +46,9 @@ public class KpiDataProvider { public static final String SPRINT_DETAILS = "sprintDetails"; public static final String SCOPE_CHANGE_ISSUE_HISTORY = "scopeChangeIssuesHistories"; private static final String PROJECT_WISE_TOTAL_ISSUE = "projectWiseTotalIssues"; + private static final String COD_DATA = "costOfDelayData"; + private static final String COD_DATA_HISTORY = "costOfDelayDataHistory"; + private static final String FIELD_MAPPING = "fieldMapping"; @Autowired private ConfigHelperService configHelperService; @@ -369,4 +371,40 @@ public Map fetchCommitmentReliabilityData(KpiRequest kpiRequest, } return resultListMap; } + + public Map fetchCostOfDelayData(ObjectId basicProjectConfigId) { + Map resultListMap = new HashMap<>(); + Map> uniqueProjectMap = new HashMap<>(); + Map fieldMappingMap = configHelperService.getFieldMappingMap(); + Map> closedStatusMap = new HashMap<>(); + Map mapOfFilters = new LinkedHashMap<>(); + List basicProjectConfigIds = List.of(basicProjectConfigId.toString()); + + FieldMapping fieldMapping = fieldMappingMap.get(basicProjectConfigId); + List jiraCloseStatuses = new ArrayList<>(); + if(CollectionUtils.isNotEmpty(fieldMapping.getClosedIssueStatusToConsiderKpi113())) { + jiraCloseStatuses.addAll(fieldMapping.getClosedIssueStatusToConsiderKpi113()); + } + List jiraIssueType = new ArrayList<>(); + if(CollectionUtils.isNotEmpty(fieldMapping.getIssueTypesToConsiderKpi113())) { + jiraIssueType.addAll(fieldMapping.getIssueTypesToConsiderKpi113()); + } + closedStatusMap.put(basicProjectConfigId.toString(), + jiraCloseStatuses.stream().map(String::toLowerCase).toList()); + mapOfFilters.put(JiraFeature.ISSUE_TYPE.getFieldValueInFeature(),jiraIssueType); + mapOfFilters.put(JiraFeature.STATUS.getFieldValueInFeature(), jiraCloseStatuses); + mapOfFilters.put(JiraFeature.BASIC_PROJECT_CONFIG_ID.getFieldValueInFeature(), + basicProjectConfigIds.stream().distinct().toList()); + uniqueProjectMap.put(basicProjectConfigId.toString(), mapOfFilters); + + List codList = jiraIssueRepository.findIssuesByFilterAndProjectMapFilter(new HashMap<>(), uniqueProjectMap); + List codHistory = jiraIssueCustomHistoryRepository + .findByStoryIDInAndBasicProjectConfigIdIn( + codList.stream().map(JiraIssue::getNumber).toList(), new ArrayList<>(uniqueProjectMap.keySet())); + resultListMap.put(COD_DATA, codList); + resultListMap.put(COD_DATA_HISTORY, codHistory); + resultListMap.put(FIELD_MAPPING, closedStatusMap); + + return resultListMap; + } } diff --git a/customapi/src/main/java/com/publicissapient/kpidashboard/apis/config/WebSecurityConfig.java b/customapi/src/main/java/com/publicissapient/kpidashboard/apis/config/WebSecurityConfig.java index 97036e0ee9..c0550e24f7 100644 --- a/customapi/src/main/java/com/publicissapient/kpidashboard/apis/config/WebSecurityConfig.java +++ b/customapi/src/main/java/com/publicissapient/kpidashboard/apis/config/WebSecurityConfig.java @@ -129,7 +129,7 @@ protected SecurityFilterChain filterChain(HttpSecurity http) throws Exception { .requestMatchers("/actuator**").permitAll().requestMatchers("/forgotPassword").permitAll() .requestMatchers("/validateEmailToken**").permitAll().requestMatchers("/resetPassword").permitAll() .requestMatchers("/cache/clearAllCache").permitAll() - .requestMatchers(HttpMethod.GET, "/cache/clearCache/**").permitAll() + .requestMatchers(HttpMethod.GET, "/cache/**").permitAll() .requestMatchers(HttpMethod.OPTIONS, "/**").permitAll() .requestMatchers(HttpMethod.GET, "/analytics/switch").permitAll() .requestMatchers("/stringShortener/shorten").permitAll() diff --git a/customapi/src/main/java/com/publicissapient/kpidashboard/apis/jira/scrum/service/CostOfDelayServiceImpl.java b/customapi/src/main/java/com/publicissapient/kpidashboard/apis/jira/scrum/service/CostOfDelayServiceImpl.java index 3874582b1d..b08a9d75af 100644 --- a/customapi/src/main/java/com/publicissapient/kpidashboard/apis/jira/scrum/service/CostOfDelayServiceImpl.java +++ b/customapi/src/main/java/com/publicissapient/kpidashboard/apis/jira/scrum/service/CostOfDelayServiceImpl.java @@ -32,6 +32,7 @@ import com.publicissapient.kpidashboard.apis.appsetting.service.ConfigHelperService; import com.publicissapient.kpidashboard.apis.common.service.CacheService; +import com.publicissapient.kpidashboard.apis.common.service.KpiDataCacheService; import com.publicissapient.kpidashboard.apis.filter.service.FilterHelperService; import com.publicissapient.kpidashboard.common.model.jira.JiraIssueCustomHistory; import com.publicissapient.kpidashboard.common.repository.jira.JiraIssueCustomHistoryRepository; @@ -72,8 +73,7 @@ public class CostOfDelayServiceImpl extends JiraKPIService, private static final String COD_DATA = "costOfDelayData"; private static final String COD_DATA_HISTORY = "costOfDelayDataHistory"; private static final String FIELD_MAPPING = "fieldMapping"; - @Autowired - private JiraIssueRepository jiraIssueRepository; + @Autowired private CustomApiConfig customApiConfig; @Autowired @@ -81,9 +81,7 @@ public class CostOfDelayServiceImpl extends JiraKPIService, @Autowired private CacheService cacheService; @Autowired - private JiraIssueCustomHistoryRepository jiraIssueCustomHistoryRepository; - @Autowired - private ConfigHelperService configHelperService; + private KpiDataCacheService kpiDataCacheService; @Override public Double calculateKPIMetrics(Map subCategoryMap) { @@ -132,39 +130,24 @@ public Map fetchKPIDataFromDb(List leafNodeList, String st KpiRequest kpiRequest) { Map resultListMap = new HashMap<>(); - Map> uniqueProjectMap = new HashMap<>(); - Map fieldMappingMap = configHelperService.getFieldMappingMap(); - Map> closedStatusMap = new HashMap<>(); + List basicProjectConfigIds = new ArrayList<>(); if (CollectionUtils.isNotEmpty(leafNodeList)) { - leafNodeList.forEach(leaf -> { - List basicProjectConfigIds = new ArrayList<>(); - Map mapOfFilters = new LinkedHashMap<>(); ObjectId basicProjectConfigId = leaf.getProjectFilter().getBasicProjectConfigId(); - basicProjectConfigIds.add(leaf.getProjectFilter().getBasicProjectConfigId().toString()); - FieldMapping fieldMapping = fieldMappingMap.get(basicProjectConfigId); - List jiraCloseStatuses = new ArrayList<>(); - if(CollectionUtils.isNotEmpty(fieldMapping.getClosedIssueStatusToConsiderKpi113())) { - jiraCloseStatuses.addAll(fieldMapping.getClosedIssueStatusToConsiderKpi113()); - } - List jiraIssueType = new ArrayList<>(); - if(CollectionUtils.isNotEmpty(fieldMapping.getIssueTypesToConsiderKpi113())) { - jiraIssueType.addAll(fieldMapping.getIssueTypesToConsiderKpi113()); - } - closedStatusMap.put(basicProjectConfigId.toString(), - jiraCloseStatuses.stream().map(String::toLowerCase).toList()); - mapOfFilters.put(JiraFeature.ISSUE_TYPE.getFieldValueInFeature(),jiraIssueType); - mapOfFilters.put(JiraFeature.STATUS.getFieldValueInFeature(), jiraCloseStatuses); - mapOfFilters.put(JiraFeature.BASIC_PROJECT_CONFIG_ID.getFieldValueInFeature(), - basicProjectConfigIds.stream().distinct().toList()); - uniqueProjectMap.put(basicProjectConfigId.toString(), mapOfFilters); + basicProjectConfigIds.add(basicProjectConfigId); }); } - List codList = jiraIssueRepository.findIssuesByFilterAndProjectMapFilter(new HashMap<>(), uniqueProjectMap); - List codHistory = jiraIssueCustomHistoryRepository - .findByStoryIDInAndBasicProjectConfigIdIn( - codList.stream().map(JiraIssue::getNumber).toList(), new ArrayList<>(uniqueProjectMap.keySet())); + List codList = new ArrayList<>(); + List codHistory = new ArrayList<>(); + Map> closedStatusMap = new HashMap<>(); + basicProjectConfigIds.forEach(basicProjectConfigId -> { + Map result = kpiDataCacheService.fetchCostOfDelayData(basicProjectConfigId, + KPICode.COST_OF_DELAY.getKpiId()); + codList.addAll((List) result.get(COD_DATA)); + codHistory.addAll((List) result.get(COD_DATA_HISTORY)); + closedStatusMap.putAll((Map>) result.get(FIELD_MAPPING)); + }); resultListMap.put(COD_DATA, codList); resultListMap.put(COD_DATA_HISTORY, codHistory); resultListMap.put(FIELD_MAPPING, closedStatusMap); diff --git a/customapi/src/test/java/com/publicissapient/kpidashboard/apis/common/service/KpiDataProviderTest.java b/customapi/src/test/java/com/publicissapient/kpidashboard/apis/common/service/KpiDataProviderTest.java index d7eabcf7ed..b51e400a35 100644 --- a/customapi/src/test/java/com/publicissapient/kpidashboard/apis/common/service/KpiDataProviderTest.java +++ b/customapi/src/test/java/com/publicissapient/kpidashboard/apis/common/service/KpiDataProviderTest.java @@ -17,6 +17,7 @@ import com.publicissapient.kpidashboard.common.model.application.FieldMapping; import com.publicissapient.kpidashboard.common.model.application.ProjectBasicConfig; import com.publicissapient.kpidashboard.common.model.jira.JiraIssue; +import com.publicissapient.kpidashboard.common.model.jira.JiraIssueCustomHistory; import com.publicissapient.kpidashboard.common.model.jira.SprintDetails; import com.publicissapient.kpidashboard.common.repository.application.BuildRepository; import com.publicissapient.kpidashboard.common.repository.excel.CapacityKpiDataRepository; @@ -33,6 +34,7 @@ import org.mockito.Mockito; import org.mockito.junit.MockitoJUnitRunner; +import java.time.LocalDateTime; import java.util.*; import static org.hamcrest.MatcherAssert.assertThat; @@ -231,4 +233,44 @@ public void testFetchCommitmentReliabilityData() { assertNotNull(result); } + @Test + public void testFetchCostOfDelayData() { + JiraIssueDataFactory jiraIssueDataFactory = JiraIssueDataFactory.newInstance(); + JiraIssueHistoryDataFactory jiraIssueHistoryDataFactory = JiraIssueHistoryDataFactory.newInstance(); + List codList = jiraIssueDataFactory.getJiraIssues(); + List codHistoryList = jiraIssueHistoryDataFactory.getJiraIssueCustomHistory(); + codHistoryList.stream().map(JiraIssueCustomHistory::getStatusUpdationLog).forEach(f -> { + f.forEach(g -> g.setUpdatedOn(LocalDateTime.now().minusDays(2))); + }); + + when(jiraIssueRepository.findIssuesByFilterAndProjectMapFilter(Mockito.any(), Mockito.any())).thenReturn(codList); + when(jiraIssueCustomHistoryRepository.findByStoryIDInAndBasicProjectConfigIdIn(Mockito.any(), Mockito.any())) + .thenReturn(codHistoryList); + + Map result = kpiDataProvider.fetchCostOfDelayData(new ObjectId("6335363749794a18e8a4479b")); + assertThat("Data : ", result.size(), equalTo(3)); + } + + @Test + public void testFetchCostOfDelayData2() { + JiraIssueDataFactory jiraIssueDataFactory = JiraIssueDataFactory.newInstance(); + JiraIssueHistoryDataFactory jiraIssueHistoryDataFactory = JiraIssueHistoryDataFactory.newInstance(); + List codList = jiraIssueDataFactory.getJiraIssues(); + List codHistoryList = jiraIssueHistoryDataFactory.getJiraIssueCustomHistory(); + codHistoryList.stream().map(JiraIssueCustomHistory::getStatusUpdationLog).forEach(f -> { + f.forEach(g -> g.setUpdatedOn(LocalDateTime.now().minusDays(2))); + }); + fieldMappingMap.forEach((key, value) -> { + value.setClosedIssueStatusToConsiderKpi113(List.of("Closed")); + value.setIssueTypesToConsiderKpi113(List.of("Story")); + }); + + when(jiraIssueRepository.findIssuesByFilterAndProjectMapFilter(Mockito.any(), Mockito.any())).thenReturn(codList); + when(jiraIssueCustomHistoryRepository.findByStoryIDInAndBasicProjectConfigIdIn(Mockito.any(), Mockito.any())) + .thenReturn(codHistoryList); + + Map result = kpiDataProvider.fetchCostOfDelayData(new ObjectId("6335363749794a18e8a4479b")); + assertThat("Data : ", result.size(), equalTo(3)); + } + } diff --git a/customapi/src/test/java/com/publicissapient/kpidashboard/apis/common/service/impl/KpiDataCacheServiceImplTest.java b/customapi/src/test/java/com/publicissapient/kpidashboard/apis/common/service/impl/KpiDataCacheServiceImplTest.java index 87e8d611ad..9194752088 100644 --- a/customapi/src/test/java/com/publicissapient/kpidashboard/apis/common/service/impl/KpiDataCacheServiceImplTest.java +++ b/customapi/src/test/java/com/publicissapient/kpidashboard/apis/common/service/impl/KpiDataCacheServiceImplTest.java @@ -143,4 +143,10 @@ public void testFetchCommitmentReliabilityData() { assertNotNull(kpiDataCacheService.fetchCommitmentReliabilityData(new KpiRequest(), new ObjectId(), new ArrayList<>(), "kpi1")); } + @Test + public void testFetchCostOfDelayData() { + when(kpiDataProvider.fetchCostOfDelayData(any())).thenReturn(new HashMap<>()); + assertNotNull(kpiDataCacheService.fetchCostOfDelayData(new ObjectId(), KPICode.COST_OF_DELAY.getKpiId())); + } + } \ No newline at end of file diff --git a/customapi/src/test/java/com/publicissapient/kpidashboard/apis/jira/scrum/service/CostOfDelayServiceImplTest.java b/customapi/src/test/java/com/publicissapient/kpidashboard/apis/jira/scrum/service/CostOfDelayServiceImplTest.java index 59ee1ee0d7..3611e05463 100644 --- a/customapi/src/test/java/com/publicissapient/kpidashboard/apis/jira/scrum/service/CostOfDelayServiceImplTest.java +++ b/customapi/src/test/java/com/publicissapient/kpidashboard/apis/jira/scrum/service/CostOfDelayServiceImplTest.java @@ -29,6 +29,7 @@ import java.util.List; import java.util.Map; +import com.publicissapient.kpidashboard.apis.common.service.KpiDataCacheService; import com.publicissapient.kpidashboard.apis.data.JiraIssueHistoryDataFactory; import com.publicissapient.kpidashboard.apis.filter.service.FilterHelperService; import com.publicissapient.kpidashboard.common.model.jira.JiraIssueCustomHistory; @@ -76,8 +77,6 @@ public class CostOfDelayServiceImplTest { public Map projectConfigMap = new HashMap<>(); public Map fieldMappingMap = new HashMap<>(); @Mock - JiraIssueRepository jiraIssueRepository; - @Mock CacheService cacheService; @Mock ConfigHelperService configHelperService; @@ -94,7 +93,8 @@ public class CostOfDelayServiceImplTest { @Mock FilterHelperService filterHelperService; @Mock - JiraIssueCustomHistoryRepository jiraIssueCustomHistoryRepository; + private KpiDataCacheService kpiDataCacheService; + private Map filterLevelMap; private List codList = new ArrayList<>(); private List codHistoryList = new ArrayList<>(); @@ -102,6 +102,10 @@ public class CostOfDelayServiceImplTest { private KpiRequest kpiRequest; private List accountHierarchyDataList = new ArrayList<>(); + private static final String COD_DATA = "costOfDelayData"; + private static final String COD_DATA_HISTORY = "costOfDelayDataHistory"; + private static final String FIELD_MAPPING = "fieldMapping"; + @Before public void setup() { KpiRequestFactory kpiRequestFactory = KpiRequestFactory.newInstance(""); @@ -141,7 +145,6 @@ public void setup() { @After public void cleanup() { - jiraIssueRepository.deleteAll(); } @@ -154,6 +157,12 @@ public void testFetchKPIDataFromDbData() throws ApplicationException { String startDate = leafNodeList.get(0).getSprintFilter().getStartDate(); String endDate = leafNodeList.get(leafNodeList.size() - 1).getSprintFilter().getEndDate(); + Map resultListMap = new HashMap<>(); + resultListMap.put(COD_DATA, codList); + resultListMap.put(COD_DATA_HISTORY, codHistoryList); + resultListMap.put(FIELD_MAPPING, new HashMap<>()); + when(kpiDataCacheService.fetchCostOfDelayData(Mockito.any(), Mockito.any())).thenReturn(resultListMap); + Map dataList = costOfDelayServiceImpl.fetchKPIDataFromDb(leafNodeList, startDate, endDate, kpiRequest); assertThat("Total Release : ", dataList.size(), equalTo(3)); @@ -164,14 +173,19 @@ public void testGetKPIList() throws ApplicationException { TreeAggregatorDetail treeAggregatorDetail = KPIHelperUtil.getTreeLeafNodesGroupedByFilter(kpiRequest, accountHierarchyDataList, new ArrayList<>(), "hierarchyLevelOne", 5); - when(jiraIssueRepository.findIssuesByFilterAndProjectMapFilter(Mockito.any(), Mockito.any())).thenReturn(codList); String kpiRequestTrackerId = "Excel-Jira-5be544de025de212549176a9"; when(cacheService.getFromApplicationCache(Constant.KPI_REQUEST_TRACKER_ID_KEY + KPISource.JIRA.name())) .thenReturn(kpiRequestTrackerId); when(customApiSetting.getJiraXaxisMonthCount()).thenReturn(5); when(costOfDelayServiceImpl.getRequestTrackerId()).thenReturn(kpiRequestTrackerId); - when(jiraIssueCustomHistoryRepository.findByStoryIDInAndBasicProjectConfigIdIn(Mockito.any(), Mockito.any())) - .thenReturn(codHistoryList); + + Map> closedStatusMap = new HashMap<>(); + closedStatusMap.put("6335363749794a18e8a4479b", List.of("closed")); + Map resultListMap = new HashMap<>(); + resultListMap.put(COD_DATA, codList); + resultListMap.put(COD_DATA_HISTORY, codHistoryList); + resultListMap.put(FIELD_MAPPING, closedStatusMap); + when(kpiDataCacheService.fetchCostOfDelayData(Mockito.any(), Mockito.any())).thenReturn(resultListMap); try { KpiElement kpiElement = costOfDelayServiceImpl.getKpiData(kpiRequest, kpiRequest.getKpiList().get(0), @@ -193,6 +207,15 @@ public void testGetStoryList() throws ApplicationException { when(cacheService.getFromApplicationCache(Constant.KPI_REQUEST_TRACKER_ID_KEY + KPISource.JIRA.name())) .thenReturn(kpiRequestTrackerId); when(costOfDelayServiceImpl.getRequestTrackerId()).thenReturn(kpiRequestTrackerId); + + Map> closedStatusMap = new HashMap<>(); + closedStatusMap.put("6335363749794a18e8a4479b", List.of("closed")); + Map resultListMap = new HashMap<>(); + resultListMap.put(COD_DATA, codList); + resultListMap.put(COD_DATA_HISTORY, codHistoryList); + resultListMap.put(FIELD_MAPPING, closedStatusMap); + when(kpiDataCacheService.fetchCostOfDelayData(Mockito.any(), Mockito.any())).thenReturn(resultListMap); + try { KpiElement kpiElement = costOfDelayServiceImpl.getKpiData(kpiRequest, kpiRequest.getKpiList().get(0), treeAggregatorDetail); diff --git a/processors/azure-boards/src/main/java/com/publicissapient/kpidashboard/azure/processor/AzureProcessorJobExecutor.java b/processors/azure-boards/src/main/java/com/publicissapient/kpidashboard/azure/processor/AzureProcessorJobExecutor.java index e57ac3ffb7..4cef060113 100644 --- a/processors/azure-boards/src/main/java/com/publicissapient/kpidashboard/azure/processor/AzureProcessorJobExecutor.java +++ b/processors/azure-boards/src/main/java/com/publicissapient/kpidashboard/azure/processor/AzureProcessorJobExecutor.java @@ -151,8 +151,7 @@ private boolean fetchIssueDetail(boolean executionStatus, List 0) { azureRestClientFactory.cacheRestClient(CommonConstant.CACHE_CLEAR_ENDPOINT, diff --git a/processors/jira/src/main/java/com/publicissapient/kpidashboard/jira/listener/JiraIssueSprintJobListener.java b/processors/jira/src/main/java/com/publicissapient/kpidashboard/jira/listener/JiraIssueSprintJobListener.java index 1d9b694527..8abcaf697e 100644 --- a/processors/jira/src/main/java/com/publicissapient/kpidashboard/jira/listener/JiraIssueSprintJobListener.java +++ b/processors/jira/src/main/java/com/publicissapient/kpidashboard/jira/listener/JiraIssueSprintJobListener.java @@ -79,7 +79,8 @@ public void afterJob(JobExecution jobExecution) { processorCacheEvictor.evictCache(CommonConstant.CACHE_CLEAR_ENDPOINT, CommonConstant.JIRA_KPI_CACHE); processorCacheEvictor.evictCache(CommonConstant.CACHE_CLEAR_ENDPOINT, CommonConstant.CACHE_PROJECT_TOOL_CONFIG); - processorCacheEvictor.evictCache(CommonConstant.CACHE_CLEAR_SOURCE_ENDPOINT, CommonConstant.JIRA_KPI, ""); + processorCacheEvictor.evictCache(CommonConstant.CACHE_CLEAR_ENDPOINT, + CommonConstant.CACHE_PROJECT_KPI_DATA); } else { sprintTrace.setErrorInFetch(true); diff --git a/processors/jira/src/test/java/com/publicissapient/kpidashboard/jira/listener/JiraIssueSprintJobListenerTest.java b/processors/jira/src/test/java/com/publicissapient/kpidashboard/jira/listener/JiraIssueSprintJobListenerTest.java index 97f39c2ae0..5f8cb7063f 100644 --- a/processors/jira/src/test/java/com/publicissapient/kpidashboard/jira/listener/JiraIssueSprintJobListenerTest.java +++ b/processors/jira/src/test/java/com/publicissapient/kpidashboard/jira/listener/JiraIssueSprintJobListenerTest.java @@ -95,7 +95,7 @@ public void testAfterJob_SuccessfulJobExecution() { assertTrue(fetchDetails.isFetchSuccessful()); // Verify that the cache is cleared - verify(processorCacheEvictor, times(2)).evictCache(anyString(), anyString()); + verify(processorCacheEvictor, times(3)).evictCache(anyString(), anyString()); // Verify that the sprint trace log is saved verify(sprintTraceLogRepository, times(1)).save(fetchDetails);