From 6b0e0eb7a003897bdfab83eb9bd99a6abfe90e46 Mon Sep 17 00:00:00 2001 From: Ulli Hafner Date: Sun, 5 Dec 2021 23:03:01 +0100 Subject: [PATCH] Add unit tests that show how to verify the source code view model. --- .../coverage/model/CoverageBuildAction.java | 2 +- .../coverage/model/CoverageViewModel.java | 2 +- .../model/CoverageBuildActionTest.java | 30 +++++++++++++++++++ .../coverage/model/CoverageViewModelTest.java | 18 ++++++++++- 4 files changed, 49 insertions(+), 3 deletions(-) create mode 100644 src/test/java/io/jenkins/plugins/coverage/model/CoverageBuildActionTest.java diff --git a/src/main/java/io/jenkins/plugins/coverage/model/CoverageBuildAction.java b/src/main/java/io/jenkins/plugins/coverage/model/CoverageBuildAction.java index f4799cb3a..e31f9a96e 100644 --- a/src/main/java/io/jenkins/plugins/coverage/model/CoverageBuildAction.java +++ b/src/main/java/io/jenkins/plugins/coverage/model/CoverageBuildAction.java @@ -182,7 +182,7 @@ public HealthReport getBuildHealth() { } @Override - public Object getTarget() { + public CoverageViewModel getTarget() { return new CoverageViewModel(getOwner(), getResult()); } diff --git a/src/main/java/io/jenkins/plugins/coverage/model/CoverageViewModel.java b/src/main/java/io/jenkins/plugins/coverage/model/CoverageViewModel.java index d110883dc..07875ca95 100644 --- a/src/main/java/io/jenkins/plugins/coverage/model/CoverageViewModel.java +++ b/src/main/java/io/jenkins/plugins/coverage/model/CoverageViewModel.java @@ -164,7 +164,7 @@ public String getUrlForBuild(final String selectedBuildDisplayName, final String * @return the new sub-page */ @SuppressWarnings("unused") // Called by jelly view - public Object getDynamic(final String link, final StaplerRequest request, final StaplerResponse response) { + public SourceViewModel getDynamic(final String link, final StaplerRequest request, final StaplerResponse response) { if (StringUtils.isNotEmpty(link)) { try { Optional targetResult = getNode().findByHashCode(CoverageMetric.FILE, Integer.parseInt(link)); diff --git a/src/test/java/io/jenkins/plugins/coverage/model/CoverageBuildActionTest.java b/src/test/java/io/jenkins/plugins/coverage/model/CoverageBuildActionTest.java new file mode 100644 index 000000000..c7d1c1854 --- /dev/null +++ b/src/test/java/io/jenkins/plugins/coverage/model/CoverageBuildActionTest.java @@ -0,0 +1,30 @@ +package io.jenkins.plugins.coverage.model; + +import java.util.SortedMap; +import java.util.TreeMap; + +import org.junit.jupiter.api.Test; + +import hudson.model.Run; + +import static org.assertj.core.api.Assertions.*; +import static org.mockito.Mockito.*; + +/** + * Tests the class {@link CoverageBuildAction}. + * + * @author Ullrich Hafner + */ +class CoverageBuildActionTest { + @Test + void shouldCreateViewModel() { + Run build = mock(Run.class); + CoverageNode root = new CoverageNode(CoverageMetric.MODULE, "top-level"); + SortedMap metrics = new TreeMap<>(); + + CoverageBuildAction action = new CoverageBuildAction(build, root, "-", metrics, false); + + assertThat(action.getTarget()).extracting(CoverageViewModel::getNode).isEqualTo(root); + assertThat(action.getTarget()).extracting(CoverageViewModel::getOwner).isEqualTo(build); + } +} diff --git a/src/test/java/io/jenkins/plugins/coverage/model/CoverageViewModelTest.java b/src/test/java/io/jenkins/plugins/coverage/model/CoverageViewModelTest.java index 0b028eee5..3eb7d6e09 100644 --- a/src/test/java/io/jenkins/plugins/coverage/model/CoverageViewModelTest.java +++ b/src/test/java/io/jenkins/plugins/coverage/model/CoverageViewModelTest.java @@ -18,7 +18,7 @@ class CoverageViewModelTest extends AbstractCoverageTest { @Test void shouldReportOverview() { - CoverageViewModel model = new CoverageViewModel(mock(Run.class), readNode("jacoco-codingstyle.xml")); + CoverageViewModel model = createModel(); assertThat(model.getDisplayName()).contains("Java coding style: jacoco-codingstyle.xml"); @@ -32,5 +32,21 @@ void shouldReportOverview() { assertThatJson(overview).node("missed").isArray().containsExactly( 0, 3, 3, 5, 29, 90, 7 ); + + assertThat(model.getDynamic("unknown", null, null)) + .isNull(); + } + + @Test + void shouldReturnEmptySourceViewForExistingLinkButMissingSourceFile() { + CoverageViewModel model = createModel(); + + String link = String.valueOf("PathUtil.java".hashCode()); + assertThat(model.getDynamic(link, null, null)) + .extracting(SourceViewModel::getSourceFileContent).isEqualTo("n/a"); + } + + private CoverageViewModel createModel() { + return new CoverageViewModel(mock(Run.class), readNode("jacoco-codingstyle.xml")); } }