tags;
+ /**
+ * Determines which statuses should be imported.
+ *
+ * Only artifacts with statuses that match the specified statuses will be
+ * imported. Artifacts without an explicit status are considered
+ * {@code APPROVED}.
+ *
+ * Default: {@code APPROVED}
+ *
+ * Valid values: {@code APPROVED}, {@code PROPOSED}, {@code DRAFT},
+ * {@code REJECTED}.
+ */
+ @Parameter(property = "openfasttrace.statuses", defaultValue = "APPROVED")
+ Set statuses;
+
/**
* Skip running OFT.
*
@@ -203,6 +218,8 @@ private static String formatFilterSettings(final FilterSettings settings)
", artifact types: " + settings.getArtifactTypes()
+ ", tag criteria set: " + settings.isTagCriteriaSet()
+ ", tags: " + settings.getTags() +
+ ", status criteria set: " + settings.isStatusCriteriaSet() +
+ ", statuses: " + settings.getWantedStatuses() +
", without tags: " + settings.withoutTags() + "]";
}
@@ -279,6 +296,7 @@ ImportSettings createImportSettings()
final FilterSettings filterSettings = FilterSettings.builder()
.artifactTypes(getFilteredArtifactTypes())
.tags(getFilteredTags())
+ .wantedStatuses(getFilteredStatuses())
.withoutTags(isFilterWithoutTags())
.build();
settings.filter(filterSettings);
@@ -290,6 +308,11 @@ private Set getFilteredArtifactTypes()
return artifactTypes == null ? emptySet() : artifactTypes;
}
+ private Set getFilteredStatuses()
+ {
+ return statuses == null ? emptySet() : statuses;
+ }
+
private Set getFilteredTags()
{
if (tags == null)
diff --git a/src/test/java/org/itsallcode/openfasttrace/maven/TraceMojoIT.java b/src/test/java/org/itsallcode/openfasttrace/maven/TraceMojoIT.java
index 4a83b99..3f0664a 100644
--- a/src/test/java/org/itsallcode/openfasttrace/maven/TraceMojoIT.java
+++ b/src/test/java/org/itsallcode/openfasttrace/maven/TraceMojoIT.java
@@ -47,6 +47,7 @@ class TraceMojoIT
.resolve("html-report");
public static final Path PARTIAL_ARTIFACT_COVERAGE_PROJECT = BASE_TEST_DIR
.resolve("project-with-partial-artifact-coverage");
+ private static final Path PROJECT_WITH_STATUSES = BASE_TEST_DIR.resolve("project-with-statuses");
private static MavenIntegrationTestEnvironment mvnITEnv;
@BeforeAll
@@ -152,7 +153,7 @@ void testTracingFindsDefects() throws Exception
runTracingMojo(TRACING_DEFECTS);
assertThat(fileContent(TRACING_DEFECTS.resolve("target/tracing-report.txt")),
- containsString("not ok - 2 total, 1 defect"));
+ containsString("not ok - 2 total, 1 direct, 0 transitive defects"));
}
@Test
@@ -177,7 +178,7 @@ void testTracingFindsDefectsFailBuild()
() -> runTracingMojo(TRACING_DEFECTS_FAIL_BUILD));
assertAll(() -> assertThat(exception.getMessage(), containsString("Tracing found 1 defects out of 2 items")),
() -> assertThat(fileContent(TRACING_DEFECTS_FAIL_BUILD.resolve("target/tracing-report.txt")),
- containsString("not ok - 2 total, 1 defect")));
+ containsString("not ok - 2 total, 1 direct, 0 transitive defects")));
}
@Test
@@ -194,7 +195,7 @@ void testHtmlReport() throws Exception
void testHtmlReportWithExpandedDetails() throws Exception
{
final Verifier verifier = mvnITEnv.getVerifier(HTML_REPORT_PROJECT);
- verifier.addCliOption("-DdetailsSectionDisplay=EXPAND");
+ verifier.addCliOption("-Dopenfasttrace.detailsSectionDisplay=EXPAND");
verifier.executeGoal(OFT_GOAL);
verifier.verifyErrorFreeLog();
@@ -206,7 +207,7 @@ void testHtmlReportWithExpandedDetails() throws Exception
void testTracingSelectedArtifactTypes() throws Exception
{
final Verifier verifier = mvnITEnv.getVerifier(PARTIAL_ARTIFACT_COVERAGE_PROJECT);
- verifier.addCliOption("-DartifactTypes=one,two");
+ verifier.addCliOption("-Dopenfasttrace.artifactTypes=one,two");
verifier.executeGoal(OFT_GOAL);
verifier.verifyErrorFreeLog();
assertThat(fileContent(PARTIAL_ARTIFACT_COVERAGE_PROJECT.resolve("target/tracing-report.txt")),
@@ -222,17 +223,17 @@ void testTracingSelectedArtifactTypes() throws Exception
void testTracingSelectedTags(final String tags, final int expectedItemCount) throws Exception
{
final Verifier verifier = mvnITEnv.getVerifier(PROJECT_WITH_TAGS);
- verifier.addCliOption("-DfailBuild=false");
+ verifier.addCliOption("-Dopenfasttrace.failBuild=false");
if (tags != null)
{
- verifier.addCliOption("-Dtags=" + tags);
+ verifier.addCliOption("-Dopenfasttrace.tags=" + tags);
}
verifier.executeGoal(OFT_GOAL);
verifier.verifyErrorFreeLog();
final String expectedResult;
if (expectedItemCount > 0)
{
- expectedResult = "not ok - %1$d total, %1$d defect".formatted(expectedItemCount);
+ expectedResult = "not ok - %1$d total, %1$d direct, 0 transitive defects".formatted(expectedItemCount);
}
else
{
@@ -242,6 +243,32 @@ void testTracingSelectedTags(final String tags, final int expectedItemCount) thr
containsString(expectedResult));
}
+ @ParameterizedTest(name = "wanted statuses {0} finds {1} items")
+ @CsvSource(delimiter = ';', nullValues = "NULL", value =
+ { "NULL; 2", "APPROVED; 2", "PROPOSED; 1", "APPROVED,PROPOSED; 3", "DRAFT; 0" })
+ void testTracingSelectedStatuses(final String statuses, final int expectedItemCount) throws Exception
+ {
+ final Verifier verifier = mvnITEnv.getVerifier(PROJECT_WITH_STATUSES);
+ verifier.addCliOption("-Dopenfasttrace.failBuild=false");
+ if (statuses != null)
+ {
+ verifier.addCliOption("-Dopenfasttrace.statuses=" + statuses);
+ }
+ verifier.executeGoal(OFT_GOAL);
+ verifier.verifyErrorFreeLog();
+ final String expectedResult;
+ if (expectedItemCount > 0)
+ {
+ expectedResult = "not ok - %1$d total".formatted(expectedItemCount);
+ }
+ else
+ {
+ expectedResult = "ok - 0 total";
+ }
+ assertThat(fileContent(PROJECT_WITH_STATUSES.resolve("target/tracing-report.txt")),
+ containsString(expectedResult));
+ }
+
private static void runTracingMojo(final Path projectDir) throws Exception
{
LOG.info("Running tracing in " + projectDir + "...");
diff --git a/src/test/java/org/itsallcode/openfasttrace/maven/TraceMojoTest.java b/src/test/java/org/itsallcode/openfasttrace/maven/TraceMojoTest.java
index 8e006ce..041ad76 100644
--- a/src/test/java/org/itsallcode/openfasttrace/maven/TraceMojoTest.java
+++ b/src/test/java/org/itsallcode/openfasttrace/maven/TraceMojoTest.java
@@ -15,6 +15,7 @@
import org.apache.maven.project.ProjectBuilder;
import org.itsallcode.matcher.auto.AutoMatcher;
import org.itsallcode.openfasttrace.api.FilterSettings;
+import org.itsallcode.openfasttrace.api.core.ItemStatus;
import org.itsallcode.openfasttrace.api.importer.ImportSettings;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
@@ -149,6 +150,27 @@ void createImportSettingsWithOnlyWildcardTag()
assertFilterSettings(FilterSettings.builder().tags(emptySet()).withoutTags(true));
}
+ @Test
+ void createImportSettingsWithNullStatuses()
+ {
+ testee.statuses = null;
+ assertFilterSettings(FilterSettings.builder());
+ }
+
+ @Test
+ void createImportSettingsWithEmptyStatuses()
+ {
+ testee.statuses = emptySet();
+ assertFilterSettings(FilterSettings.builder());
+ }
+
+ @Test
+ void createImportSettingsWithStatuses()
+ {
+ testee.statuses = Set.of(ItemStatus.APPROVED, ItemStatus.DRAFT);
+ assertFilterSettings(FilterSettings.builder().wantedStatuses(Set.of(ItemStatus.APPROVED, ItemStatus.DRAFT)));
+ }
+
private void assertImportSettings(final ImportSettings.Builder importSettingsBuilder)
{
assertThat(testee.createImportSettings(), AutoMatcher.equalTo(importSettingsBuilder.build()));
diff --git a/src/test/resources/project-with-plugins/pom.xml b/src/test/resources/project-with-plugins/pom.xml
index fb39da8..912edbf 100644
--- a/src/test/resources/project-with-plugins/pom.xml
+++ b/src/test/resources/project-with-plugins/pom.xml
@@ -27,7 +27,7 @@
org.itsallcode
openfasttrace-asciidoc-plugin
- 0.2.0
+ 0.3.0