public void increaseCategories(final TestResult result) { result.<List<Category>>getExtraBlock("categories", new ArrayList<>()).stream() .map(Category::getName) .forEach(this::increaseCategories); }
@Override public void update(final TestResult testResult) { if (testResult.isRetry()) { return; } testResult.<List<Category>>getExtraBlock("categories", new ArrayList<>()).stream() .map(Category::getName) .forEach(categoryName -> values.computeIfAbsent(categoryName, s -> new AtomicLong()).incrementAndGet()); }
protected static List<TreeLayer> groupByCategories(final TestResult testResult) { final Set<String> categories = testResult .<List<Category>>getExtraBlock(CATEGORIES, new ArrayList<>()) .stream() .map(Category::getName) .collect(Collectors.toSet()); final TreeLayer categoriesLayer = new DefaultTreeLayer(categories); final TreeLayer messageLayer = new DefaultTreeLayer(testResult.getStatusMessage()); return Arrays.asList(categoriesLayer, messageLayer); }
@SuppressWarnings("PMD.DefaultPackage") /* default */ static void addCategoriesForResults(final List<LaunchResults> launchesResults) { launchesResults.forEach(launch -> { final List<Category> categories = launch.getExtra(CATEGORIES, Collections::emptyList); launch.getResults().forEach(result -> { final List<Category> resultCategories = result.getExtraBlock(CATEGORIES, new ArrayList<>()); categories.forEach(category -> { if (matches(result, category)) { resultCategories.add(category); } }); if (resultCategories.isEmpty() && Status.FAILED.equals(result.getStatus())) { result.getExtraBlock(CATEGORIES, new ArrayList<Category>()).add(FAILED_TESTS); } if (resultCategories.isEmpty() && Status.BROKEN.equals(result.getStatus())) { result.getExtraBlock(CATEGORIES, new ArrayList<Category>()).add(BROKEN_TESTS); } }); }); }
@Test public void shouldNotMergeOtherTestResults() throws IOException { String firstHistoryId = UUID.randomUUID().toString(); String secondHistoryId = UUID.randomUUID().toString(); List<LaunchResults> launchResultsList = createSingleLaunchResults( createTestResult(FIRST_RESULT, firstHistoryId, 1L, 9L), createTestResult(SECOND_RESULT, secondHistoryId, 11L, 19L) ); retryPlugin.aggregate(null, launchResultsList, null); Set<TestResult> results = launchResultsList.get(0).getAllResults(); assertThat(results).as("test results") .filteredOn(TestResult::isHidden) .hasSize(0); assertThat(results).as("test results with retries block") .flatExtracting(result -> result.getExtraBlock(RETRY_BLOCK_NAME)) .hasSize(0); }
@Test public void shouldWork() throws IOException { Category category = new Category() .setName(CATEGORY_NAME) .setMessageRegex(".*") .setMatchedStatuses(singletonList(Status.BROKEN)); Map<String, Object> meta = new HashMap<>(); meta.put("categories", singletonList(category)); List<LaunchResults> launchResultsList = createSingleLaunchResults( meta, createTestResult("asd\n", Status.BROKEN) ); CategoriesPlugin plugin = new CategoriesPlugin(); plugin.aggregate(configuration, launchResultsList, reportPath); Set<TestResult> results = launchResultsList.get(0).getAllResults(); List<Category> categories = results.toArray(new TestResult[]{})[0] .getExtraBlock("categories"); assertThat(categories).as("test categories") .extracting(Category::getName) .containsExactly(category.getName()); assertThat(reportPath.resolve("data").resolve(JSON_FILE_NAME)) .exists(); assertThat(reportPath.resolve("data").resolve(CSV_FILE_NAME)) .exists(); }
private SeverityData createData(final TestResult result) { return new SeverityData() .setUid(result.getUid()) .setName(result.getName()) .setStatus(result.getStatus()) .setTime(result.getTime()) .setSeverity(result.getExtraBlock(SEVERITY_BLOCK_NAME)); } }
private StatusChartData createData(final TestResult result) { return new StatusChartData() .setUid(result.getUid()) .setName(result.getName()) .setStatus(result.getStatus()) .setTime(result.getTime()) .setSeverity(result.getExtraBlock(SeverityPlugin.SEVERITY_BLOCK_NAME)); } }
private DurationData createData(final TestResult result) { return new DurationData() .setUid(result.getUid()) .setName(result.getName()) .setStatus(result.getStatus()) .setTime(result.getTime()) .setSeverity(result.getExtraBlock(SeverityPlugin.SEVERITY_BLOCK_NAME)); } }
@Test public void flakyTestsCanBeAddedToCategory() throws IOException { Category category = new Category() .setName(CATEGORY_NAME) .setMatchedStatuses(singletonList(Status.FAILED)) .setFlaky(true); Map<String, Object> meta = new HashMap<>(); meta.put("categories", singletonList(category)); List<LaunchResults> launchResultsList = createSingleLaunchResults( meta, createTestResult("asd\n", Status.FAILED, true) ); CategoriesPlugin plugin = new CategoriesPlugin(); plugin.aggregate(configuration, launchResultsList, reportPath); Set<TestResult> results = launchResultsList.get(0).getAllResults(); List<Category> categories = results.toArray(new TestResult[]{})[0] .getExtraBlock("categories"); assertThat(categories).as("test categories") .extracting(Category::getName) .containsExactly(category.getName()); assertThat(reportPath.resolve("data").resolve(JSON_FILE_NAME)) .exists(); }
@Test public void shouldDefaultCategoriesToResults() throws Exception { final CategoriesPlugin categoriesPlugin = new CategoriesPlugin(); final TestResult first = new TestResult() .setName("first") .setStatus(Status.FAILED) .setStatusMessage("A"); final TestResult second = new TestResult() .setName("second") .setStatus(Status.BROKEN) .setStatusMessage("B"); categoriesPlugin.addCategoriesForResults(createSingleLaunchResults(first, second)); assertThat(first.getExtraBlock(CATEGORIES, new ArrayList<Category>())) .hasSize(1) .extracting(Category::getName) .containsExactlyInAnyOrder(FAILED_TESTS.getName()); assertThat(second.getExtraBlock(CATEGORIES, new ArrayList<Category>())) .hasSize(1) .extracting(Category::getName) .containsExactlyInAnyOrder(BROKEN_TESTS.getName()); }
@Test public void shouldSetCustomCategoriesToResults() throws Exception { final String categoryName = "Some category"; Category category = new Category() .setName(categoryName) .setMessageRegex(".*") .setMatchedStatuses(singletonList(Status.BROKEN)); Map<String, Object> meta = new HashMap<>(); meta.put("categories", singletonList(category)); final CategoriesPlugin categoriesPlugin = new CategoriesPlugin(); final TestResult first = new TestResult() .setName("first") .setStatus(Status.FAILED) .setStatusMessage("B"); final TestResult second = new TestResult() .setName("second") .setStatus(Status.BROKEN) .setStatusMessage("B"); categoriesPlugin.addCategoriesForResults(createSingleLaunchResults(meta, first, second)); assertThat(first.getExtraBlock(CATEGORIES, new ArrayList<Category>())) .hasSize(1) .extracting(Category::getName) .containsExactlyInAnyOrder(FAILED_TESTS.getName()); assertThat(second.getExtraBlock(CATEGORIES, new ArrayList<Category>())) .hasSize(1) .extracting(Category::getName) .containsExactlyInAnyOrder(categoryName); }
@Test public void shouldMergeRetriesTestResults() throws IOException { String historyId = UUID.randomUUID().toString(); List<LaunchResults> launchResultsList = createSingleLaunchResults( createTestResult(FIRST_RESULT, historyId, 1L, 9L), createTestResult(SECOND_RESULT, historyId, 11L, 19L), createTestResult(LAST_RESULT, historyId, 21L, 29L) ); retryPlugin.aggregate(null, launchResultsList, null); Set<TestResult> results = launchResultsList.get(0).getAllResults(); assertThat(results).as("test retries") .filteredOn(TestResult::isHidden) .extracting(TestResult::getName) .containsExactlyInAnyOrder(FIRST_RESULT, SECOND_RESULT); TestResult lastResult = results.stream() .filter(r -> !r.isHidden()).findFirst().orElseGet(null); assertThat(Collections.singletonList(lastResult)) .as("latest test result") .extracting(TestResult::getName, TestResult::isHidden, TestResult::isFlaky) .containsExactlyInAnyOrder(tuple(LAST_RESULT, false, true)); assertThat(results).as("test results with retries block") .filteredOn(result -> result.hasExtraBlock(RETRY_BLOCK_NAME)) .hasSize(1); List<RetryItem> retries = lastResult.getExtraBlock(RETRY_BLOCK_NAME); assertThat(retries).as("test results retries block") .isNotNull() .hasSize(2); }
public void increaseCategories(final TestResult result) { result.<List<Category>>getExtraBlock("categories", new ArrayList<>()).stream() .map(Category::getName) .forEach(this::increaseCategories); }
@Override public void update(final TestResult testResult) { if (testResult.isRetry()) { return; } testResult.<List<Category>>getExtraBlock("categories", new ArrayList<>()).stream() .map(Category::getName) .forEach(categoryName -> values.computeIfAbsent(categoryName, s -> new AtomicLong()).incrementAndGet()); }
protected static List<TreeLayer> groupByCategories(final TestResult testResult) { final Set<String> categories = testResult .<List<Category>>getExtraBlock(CATEGORIES, new ArrayList<>()) .stream() .map(Category::getName) .collect(Collectors.toSet()); final TreeLayer categoriesLayer = new DefaultTreeLayer(categories); final TreeLayer messageLayer = new DefaultTreeLayer(testResult.getStatusMessage()); return Arrays.asList(categoriesLayer, messageLayer); }
@SuppressWarnings("PMD.DefaultPackage") /* default */ static void addCategoriesForResults(final List<LaunchResults> launchesResults) { launchesResults.forEach(launch -> { final List<Category> categories = launch.getExtra(CATEGORIES, Collections::emptyList); launch.getResults().forEach(result -> { final List<Category> resultCategories = result.getExtraBlock(CATEGORIES, new ArrayList<>()); categories.forEach(category -> { if (matches(result, category)) { resultCategories.add(category); } }); if (resultCategories.isEmpty() && Status.FAILED.equals(result.getStatus())) { result.getExtraBlock(CATEGORIES, new ArrayList<Category>()).add(FAILED_TESTS); } if (resultCategories.isEmpty() && Status.BROKEN.equals(result.getStatus())) { result.getExtraBlock(CATEGORIES, new ArrayList<Category>()).add(BROKEN_TESTS); } }); }); }
private SeverityData createData(final TestResult result) { return new SeverityData() .setUid(result.getUid()) .setName(result.getName()) .setStatus(result.getStatus()) .setTime(result.getTime()) .setSeverity(result.getExtraBlock(SEVERITY_BLOCK_NAME)); } }
private StatusChartData createData(final TestResult result) { return new StatusChartData() .setUid(result.getUid()) .setName(result.getName()) .setStatus(result.getStatus()) .setTime(result.getTime()) .setSeverity(result.getExtraBlock(SeverityPlugin.SEVERITY_BLOCK_NAME)); } }
private DurationData createData(final TestResult result) { return new DurationData() .setUid(result.getUid()) .setName(result.getName()) .setStatus(result.getStatus()) .setTime(result.getTime()) .setSeverity(result.getExtraBlock(SeverityPlugin.SEVERITY_BLOCK_NAME)); } }