From c3648a5c765819bdf2696e1592c1e23642b4f87f Mon Sep 17 00:00:00 2001 From: Ulli Hafner Date: Thu, 30 Jun 2022 18:02:28 +0200 Subject: [PATCH 1/2] Remove duplicate coverage column. --- plugin/pom.xml | 18 +++ .../plugins/coverage/CoverageColumn.java | 103 ------------------ .../plugins/coverage/model/JobDslITest.java | 49 +++++++++ .../plugins/coverage/model/column-dsl.yaml | 19 ++++ 4 files changed, 86 insertions(+), 103 deletions(-) delete mode 100644 plugin/src/main/java/io/jenkins/plugins/coverage/CoverageColumn.java create mode 100644 plugin/src/test/java/io/jenkins/plugins/coverage/model/JobDslITest.java create mode 100644 plugin/src/test/resources/io/jenkins/plugins/coverage/model/column-dsl.yaml diff --git a/plugin/pom.xml b/plugin/pom.xml index a7e753a6c..4355d413a 100644 --- a/plugin/pom.xml +++ b/plugin/pom.xml @@ -34,6 +34,7 @@ 1.28.0-2 1.11 1.17.2 + 1.79 @@ -273,6 +274,23 @@ ${testcontainers.version} test + + io.jenkins + configuration-as-code + test + + + org.jenkins-ci.plugins + job-dsl + ${job-dsl.version} + test + + + xmlunit + xmlunit + + + diff --git a/plugin/src/main/java/io/jenkins/plugins/coverage/CoverageColumn.java b/plugin/src/main/java/io/jenkins/plugins/coverage/CoverageColumn.java deleted file mode 100644 index 0b4207c85..000000000 --- a/plugin/src/main/java/io/jenkins/plugins/coverage/CoverageColumn.java +++ /dev/null @@ -1,103 +0,0 @@ -package io.jenkins.plugins.coverage; - - -import edu.umd.cs.findbugs.annotations.NonNull; -import hudson.Extension; -import hudson.model.Job; -import hudson.views.ListViewColumn; -import hudson.views.ListViewColumnDescriptor; -import io.jenkins.plugins.coverage.targets.CoverageElement; -import io.jenkins.plugins.coverage.targets.CoverageResult; -import io.jenkins.plugins.coverage.targets.Ratio; -import org.apache.commons.lang.StringUtils; -import org.kohsuke.stapler.DataBoundConstructor; - -/** - * Column that shows coverage of a job. - */ -public class CoverageColumn extends ListViewColumn { - - @DataBoundConstructor - public CoverageColumn() { - } - - @Override - public String getColumnCaption() { - return Messages.CoverageColumn_Caption(); - } - - public String getUrl(final Job project) { - CoverageAction action = getAction(project); - if (action == null) { - return null; - } - - return project.getUrl() + action.getUrlName(); - } - - /** - * Get the CoverageAction of last successful build of this project. - * - * @param project the selected project - * @return CoverageAction of last successful build - */ - public CoverageAction getAction(final Job project) { - CoverageProjectAction action = project.getAction(CoverageProjectAction.class); - - if (action != null) { - return action.getLastResult(); - } - - return null; - } - - /** - * Returns whether a link can be shown that shows the results of the referenced project action for the selected job. - * - * @param project the selected project - * @return the URL of the project action - */ - public boolean hasUrl(final Job project) { - return getAction(project) != null; - } - - - public String getCoverage(final Job project) { - CoverageAction action = getAction(project); - if (action == null || action.getResult() == null) { - return Messages.CoverageColumn_CoverageEmpty(); - } - - CoverageResult result = action.getResult(); - Ratio coverageRatio = result.getCoverage(CoverageElement.LINE); - if (coverageRatio == null) { - return Messages.CoverageColumn_CoverageEmpty(); - } - - String coveragePercentage = coverageRatio.getPercentageString(); - coveragePercentage = StringUtils.stripStart(coveragePercentage, "0"); - coveragePercentage = StringUtils.stripEnd(coveragePercentage, "0"); - if (coveragePercentage.equals("0") || coveragePercentage.equals("")) { - return "0%"; - } - - return coveragePercentage + "%"; - } - - /** - * Descriptor for the column. - */ - @Extension - public static class ColumnDescriptor extends ListViewColumnDescriptor { - @Override - public boolean shownByDefault() { - return false; - } - - @NonNull - @Override - public String getDisplayName() { - return Messages.CoverageColumn_ColumnName(); - } - } -} diff --git a/plugin/src/test/java/io/jenkins/plugins/coverage/model/JobDslITest.java b/plugin/src/test/java/io/jenkins/plugins/coverage/model/JobDslITest.java new file mode 100644 index 000000000..a9db065bd --- /dev/null +++ b/plugin/src/test/java/io/jenkins/plugins/coverage/model/JobDslITest.java @@ -0,0 +1,49 @@ +package io.jenkins.plugins.coverage.model; + +import org.junit.jupiter.api.Test; + +import hudson.model.View; +import hudson.views.ListViewColumn; + +import io.jenkins.plugins.casc.ConfigurationAsCode; +import io.jenkins.plugins.casc.ConfiguratorException; +import io.jenkins.plugins.coverage.model.visualization.dashboard.CoverageColumn; +import io.jenkins.plugins.util.IntegrationTestWithJenkinsPerTest; + +import static org.assertj.core.api.Assertions.*; + +/** + * Tests the Job DSL Plugin. + * + * @author Ullrich Hafner + */ +class JobDslITest extends IntegrationTestWithJenkinsPerTest { + /** + * Creates a freestyle job from a YAML file and verifies that issue recorder finds warnings. + */ + @Test + void shouldCreateFreestyleJobUsingJobDslAndVerifyIssueRecorderWithDefaultConfiguration() { + configureJenkins("column-dsl.yaml"); + + View view = getJenkins().getInstance().getView("dsl-view"); + + assertThat(view).isNotNull(); + + assertThat(view.getColumns()).extracting(ListViewColumn::getColumnCaption).contains(new CoverageColumn().getColumnCaption()); + } + + /** + * Helper method to get jenkins configuration file. + * + * @param fileName + * file with configuration. + */ + private void configureJenkins(final String fileName) { + try { + ConfigurationAsCode.get().configure(getResourceAsFile(fileName).toUri().toString()); + } + catch (ConfiguratorException e) { + throw new AssertionError(e); + } + } +} diff --git a/plugin/src/test/resources/io/jenkins/plugins/coverage/model/column-dsl.yaml b/plugin/src/test/resources/io/jenkins/plugins/coverage/model/column-dsl.yaml new file mode 100644 index 000000000..f99841f39 --- /dev/null +++ b/plugin/src/test/resources/io/jenkins/plugins/coverage/model/column-dsl.yaml @@ -0,0 +1,19 @@ +jobs: + - script: > + listView("dsl-view") { + jobs { + regex("^bar") + } + recurse(true) + columns { + status() + weather() + name() + lastSuccess() + lastFailure() + lastDuration() + testResult(1) + coverageColumn() + buildButton() + } + } From 0fe002523ba392d7713b2aa57f16632c804fd705 Mon Sep 17 00:00:00 2001 From: Ulli Hafner Date: Thu, 30 Jun 2022 21:25:17 +0200 Subject: [PATCH 2/2] Improve test case of coverage column. --- .../visualization/dashboard/CoverageColumnType.java | 1 + .../jenkins/plugins/coverage/model/JobDslITest.java | 13 +++++++++++-- .../jenkins/plugins/coverage/model/column-dsl.yaml | 2 +- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/plugin/src/main/java/io/jenkins/plugins/coverage/model/visualization/dashboard/CoverageColumnType.java b/plugin/src/main/java/io/jenkins/plugins/coverage/model/visualization/dashboard/CoverageColumnType.java index 8cca7b944..86bb41d38 100644 --- a/plugin/src/main/java/io/jenkins/plugins/coverage/model/visualization/dashboard/CoverageColumnType.java +++ b/plugin/src/main/java/io/jenkins/plugins/coverage/model/visualization/dashboard/CoverageColumnType.java @@ -85,6 +85,7 @@ protected ColorProvider getColorProvider() { * * @return the display names */ + // FIXME: these texts should not be used as IDs public static List getAvailableCoverageTypeNames() { return Arrays.asList( Messages.Project_Coverage_Type(), diff --git a/plugin/src/test/java/io/jenkins/plugins/coverage/model/JobDslITest.java b/plugin/src/test/java/io/jenkins/plugins/coverage/model/JobDslITest.java index a9db065bd..1f812e94b 100644 --- a/plugin/src/test/java/io/jenkins/plugins/coverage/model/JobDslITest.java +++ b/plugin/src/test/java/io/jenkins/plugins/coverage/model/JobDslITest.java @@ -10,7 +10,7 @@ import io.jenkins.plugins.coverage.model.visualization.dashboard.CoverageColumn; import io.jenkins.plugins.util.IntegrationTestWithJenkinsPerTest; -import static org.assertj.core.api.Assertions.*; +import static io.jenkins.plugins.coverage.model.Assertions.*; /** * Tests the Job DSL Plugin. @@ -29,7 +29,16 @@ void shouldCreateFreestyleJobUsingJobDslAndVerifyIssueRecorderWithDefaultConfigu assertThat(view).isNotNull(); - assertThat(view.getColumns()).extracting(ListViewColumn::getColumnCaption).contains(new CoverageColumn().getColumnCaption()); + assertThat(view.getColumns()) + .extracting(ListViewColumn::getColumnCaption) + .contains(new CoverageColumn().getColumnCaption()); + + assertThat(view.getColumns()).first() + .isInstanceOfSatisfying(CoverageColumn.class, + c -> { + assertThat(c).hasColumnCaption(Messages.Coverage_Column()) + .hasCoverageMetric(CoverageMetric.LINE.getName()); + }); } /** diff --git a/plugin/src/test/resources/io/jenkins/plugins/coverage/model/column-dsl.yaml b/plugin/src/test/resources/io/jenkins/plugins/coverage/model/column-dsl.yaml index f99841f39..a74a6a992 100644 --- a/plugin/src/test/resources/io/jenkins/plugins/coverage/model/column-dsl.yaml +++ b/plugin/src/test/resources/io/jenkins/plugins/coverage/model/column-dsl.yaml @@ -6,6 +6,7 @@ jobs: } recurse(true) columns { + coverageColumn() status() weather() name() @@ -13,7 +14,6 @@ jobs: lastFailure() lastDuration() testResult(1) - coverageColumn() buildButton() } }