private static CategoriesTrendItem createCurrent(final List<LaunchResults> launchesResults) { final CategoriesTrendItem item = new CategoriesTrendItem(); extractLatestExecutor(launchesResults).ifPresent(info -> { item.setBuildOrder(info.getBuildOrder()); item.setReportName(info.getReportName()); item.setReportUrl(info.getReportUrl()); }); launchesResults.stream() .flatMap(launch -> launch.getAllResults().stream()) .forEach(item::increaseCategories); return item; }
@Test public void shouldExportTestRunToXray() { final LaunchResults launchResults = mock(LaunchResults.class); final TestResult testResult = createTestResult(Status.FAILED) .setLinks(Collections.singletonList(new Link().setName(TESTRUN_KEY).setType("tms"))); final Set<TestResult> results = new HashSet<>(Collections.singletonList(testResult)); when(launchResults.getAllResults()).thenReturn(results); final ExecutorInfo executorInfo = new ExecutorInfo() .setBuildName(RandomStringUtils.random(10)) .setReportUrl(RandomStringUtils.random(10)); when(launchResults.getExtra("executor")).thenReturn(Optional.of(executorInfo)); final JiraService service = mock(JiraService.class); when(service.getTestRunsForTestExecution(EXECUTION_ISSUES)).thenReturn( Collections.singletonList(new XrayTestRun().setId(TESTRUN_ID).setKey(TESTRUN_KEY).setStatus("TODO")) ); final XrayTestRunExportPlugin xrayTestRunExportPlugin = new XrayTestRunExportPlugin(); xrayTestRunExportPlugin.setJiraService(service); xrayTestRunExportPlugin.aggregate( mock(Configuration.class), Collections.singletonList(launchResults), Paths.get("/") ); final String reportLink = String.format("[%s|%s]", executorInfo.getBuildName(), executorInfo.getReportUrl()); verify(service, times(1)).createIssueComment( argThat(issue -> issue.equals(EXECUTION_ISSUES)), argThat(comment -> comment.getBody().contains(reportLink) )); verify(service, times(1)).updateTestRunStatus(TESTRUN_ID, "FAIL"); }
@Test public void shouldFindLatestExecutor() throws Exception { final Configuration configuration = mock(Configuration.class); final Map<String, Object> extra1 = new HashMap<>(); final List<HistoryTrendItem> history1 = randomHistoryTrendItems(); extra1.put(HISTORY_TREND_BLOCK_NAME, history1); extra1.put(EXECUTORS_BLOCK_NAME, new ExecutorInfo().setBuildOrder(1L)); final Map<String, Object> extra2 = new HashMap<>(); final List<HistoryTrendItem> history2 = randomHistoryTrendItems(); extra2.put(HISTORY_TREND_BLOCK_NAME, history2); extra2.put(EXECUTORS_BLOCK_NAME, new ExecutorInfo().setBuildOrder(7L)); final List<LaunchResults> launchResults = Arrays.asList( createLaunchResults(extra1, randomTestResult().setStatus(Status.PASSED), randomTestResult().setStatus(Status.FAILED), randomTestResult().setStatus(Status.FAILED) ), createLaunchResults(extra2, randomTestResult().setStatus(Status.PASSED), randomTestResult().setStatus(Status.FAILED), randomTestResult().setStatus(Status.FAILED) ) ); final List<HistoryTrendItem> data = new HistoryTrendPlugin().getData(launchResults); assertThat(data) .hasSize(1 + history1.size() + history2.size()); final HistoryTrendItem historyTrendItem = data.get(0); assertThat(historyTrendItem) .hasFieldOrPropertyWithValue("buildOrder", 7L); }
private void updateHistory(final Map<String, HistoryData> history, final TestResult result, final ExecutorInfo info) { //@formatter:off final HistoryData data = history.computeIfAbsent( result.getHistoryId(), id -> new HistoryData().setStatistic(new Statistic()) ); //@formatter:on data.getStatistic().update(result); if (!data.getItems().isEmpty()) { result.addExtraBlock(HISTORY_BLOCK_NAME, copy(data)); } final HistoryItem newItem = new HistoryItem() .setUid(result.getUid()) .setStatus(result.getStatus()) .setStatusDetails(result.getStatusMessage()) .setTime(result.getTime()); if (Objects.nonNull(info.getReportUrl())) { newItem.setReportUrl(createReportUrl(info.getReportUrl(), result.getUid())); } final List<HistoryItem> newItems = Stream.concat(Stream.of(newItem), data.getItems().stream()) .limit(5) .collect(Collectors.toList()); data.setItems(newItems); }
when(launchResults.getAllResults()).thenReturn(results); final ExecutorInfo executorInfo = new ExecutorInfo() .setBuildName(RandomStringUtils.random(10)) .setReportUrl(RandomStringUtils.random(10)); when(launchResults.getExtra("executor")).thenReturn(Optional.of(executorInfo)); ); verify(service, times(1)).createJiraLaunch(any(JiraLaunch.class)); verify(service).createJiraLaunch(argThat(launch -> executorInfo.getBuildName().equals(launch.getName()))); verify(service).createJiraLaunch(argThat(launch -> executorInfo.getReportUrl().equals(launch.getUrl())));
@Test public void shouldProcessNullBuildOrder() throws Exception { final Configuration configuration = mock(Configuration.class); final List<HistoryTrendItem> history = randomHistoryTrendItems(); final Map<String, Object> extra = new HashMap<>(); extra.put(HISTORY_TREND_BLOCK_NAME, history); extra.put(EXECUTORS_BLOCK_NAME, new ExecutorInfo().setBuildOrder(null)); final List<LaunchResults> launchResults = Arrays.asList( createLaunchResults(extra, randomTestResult().setStatus(Status.PASSED), randomTestResult().setStatus(Status.FAILED), randomTestResult().setStatus(Status.FAILED) ), createLaunchResults(extra, randomTestResult().setStatus(Status.PASSED), randomTestResult().setStatus(Status.FAILED), randomTestResult().setStatus(Status.FAILED) ) ); final List<HistoryTrendItem> data = new HistoryTrendPlugin().getData(launchResults); assertThat(data) .hasSize(1 + 2 * history.size()); } }
private void updateHistory(final Map<String, HistoryData> history, final TestResult result, final ExecutorInfo info) { //@formatter:off final HistoryData data = history.computeIfAbsent( result.getHistoryId(), id -> new HistoryData().setStatistic(new Statistic()) ); //@formatter:on data.getStatistic().update(result); if (!data.getItems().isEmpty()) { result.addExtraBlock(HISTORY_BLOCK_NAME, copy(data)); } final HistoryItem newItem = new HistoryItem() .setUid(result.getUid()) .setStatus(result.getStatus()) .setStatusDetails(result.getStatusMessage()) .setTime(result.getTime()); if (Objects.nonNull(info.getReportUrl())) { newItem.setReportUrl(createReportUrl(info.getReportUrl(), result.getUid())); } final List<HistoryItem> newItems = Stream.concat(Stream.of(newItem), data.getItems().stream()) .limit(5) .collect(Collectors.toList()); data.setItems(newItems); }
private static DurationTrendItem createCurrent(final List<LaunchResults> launchesResults) { final DurationTrendItem item = new DurationTrendItem(); extractLatestExecutor(launchesResults).ifPresent(info -> { item.setBuildOrder(info.getBuildOrder()); item.setReportName(info.getReportName()); item.setReportUrl(info.getReportUrl()); }); launchesResults.stream() .flatMap(launch -> launch.getResults().stream()) .forEach(item::updateTime); return item; }
when(launchResults.getAllResults()).thenReturn(results); final ExecutorInfo executorInfo = new ExecutorInfo() .setBuildName(RandomStringUtils.random(10)) .setReportUrl(RandomStringUtils.random(10)); when(launchResults.getExtra("executor")).thenReturn(Optional.of(executorInfo)); verify(service).createJiraLaunch(argThat(launch -> ISSUES.equals(launch.getIssueKeys()))); verify(service).createJiraLaunch(argThat(launch -> executorInfo.getBuildName().equals(launch.getName()))); verify(service).createJiraLaunch(argThat(launch -> executorInfo.getReportUrl().equals(launch.getUrl())));
private static RetryTrendItem createCurrent(final List<LaunchResults> launchesResults) { final RetryTrendItem item = new RetryTrendItem(); extractLatestExecutor(launchesResults).ifPresent(info -> { item.setBuildOrder(info.getBuildOrder()); item.setReportName(info.getReportName()); item.setReportUrl(info.getReportUrl()); }); launchesResults.stream() .flatMap(launch -> launch.getAllResults().stream()) .forEach(item::update); return item; }
private static HistoryTrendItem createCurrent(final List<LaunchResults> launchesResults) { final Statistic statistic = launchesResults.stream() .flatMap(results -> results.getResults().stream()) .map(TestResult::getStatus) .collect(Statistic::new, Statistic::update, Statistic::merge); final HistoryTrendItem item = new HistoryTrendItem() .setStatistic(statistic); extractLatestExecutor(launchesResults).ifPresent(info -> { item.setBuildOrder(info.getBuildOrder()); item.setReportName(info.getReportName()); item.setReportUrl(info.getReportUrl()); }); return item; }
private static CategoriesTrendItem createCurrent(final List<LaunchResults> launchesResults) { final CategoriesTrendItem item = new CategoriesTrendItem(); extractLatestExecutor(launchesResults).ifPresent(info -> { item.setBuildOrder(info.getBuildOrder()); item.setReportName(info.getReportName()); item.setReportUrl(info.getReportUrl()); }); launchesResults.stream() .flatMap(launch -> launch.getAllResults().stream()) .forEach(item::increaseCategories); return item; }
private static DurationTrendItem createCurrent(final List<LaunchResults> launchesResults) { final DurationTrendItem item = new DurationTrendItem(); extractLatestExecutor(launchesResults).ifPresent(info -> { item.setBuildOrder(info.getBuildOrder()); item.setReportName(info.getReportName()); item.setReportUrl(info.getReportUrl()); }); launchesResults.stream() .flatMap(launch -> launch.getResults().stream()) .forEach(item::updateTime); return item; }
private static RetryTrendItem createCurrent(final List<LaunchResults> launchesResults) { final RetryTrendItem item = new RetryTrendItem(); extractLatestExecutor(launchesResults).ifPresent(info -> { item.setBuildOrder(info.getBuildOrder()); item.setReportName(info.getReportName()); item.setReportUrl(info.getReportUrl()); }); launchesResults.stream() .flatMap(launch -> launch.getAllResults().stream()) .forEach(item::update); return item; }
private static HistoryTrendItem createCurrent(final List<LaunchResults> launchesResults) { final Statistic statistic = launchesResults.stream() .flatMap(results -> results.getResults().stream()) .map(TestResult::getStatus) .collect(Statistic::new, Statistic::update, Statistic::merge); final HistoryTrendItem item = new HistoryTrendItem() .setStatistic(statistic); extractLatestExecutor(launchesResults).ifPresent(info -> { item.setBuildOrder(info.getBuildOrder()); item.setReportName(info.getReportName()); item.setReportUrl(info.getReportUrl()); }); return item; }