diff --git a/.gitignore b/.gitignore index de935cb..516039f 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ mydbflute/ bin/ .project .classpath +.idea/ \ No newline at end of file diff --git a/src/main/java/net/marevol/redmine/impasse/cmd/Report.java b/src/main/java/net/marevol/redmine/impasse/cmd/Report.java index 1df50f4..be91c6f 100644 --- a/src/main/java/net/marevol/redmine/impasse/cmd/Report.java +++ b/src/main/java/net/marevol/redmine/impasse/cmd/Report.java @@ -38,6 +38,9 @@ protected static class Options { @Option(name = "-r", aliases = "--include-result", usage = "") protected boolean includeResult; + @Option(name = "-s", aliases = "--skip-empty-testsuite", usage = "") + protected boolean skipEmptyTestsuite; + @Option(name = "-o", aliases = "--out", metaVar = "OutputFile", usage = "Output File", required = true) protected File outputFile; } @@ -77,7 +80,9 @@ private static void execute(final Options options) { reporter.projectName(options.projectName) .planName(options.planName).outputFile(options.outputFile) - .includeResults(options.includeResult).execute(); + .includeResults(options.includeResult) + .skipEmptyTestsuite(options.skipEmptyTestsuite) + .execute(); } catch (final Exception e) { throw new ImpasseSystemException(e); diff --git a/src/main/java/net/marevol/redmine/impasse/report/HtmlReporter.java b/src/main/java/net/marevol/redmine/impasse/report/HtmlReporter.java index 3b7ea18..d2a8fc8 100644 --- a/src/main/java/net/marevol/redmine/impasse/report/HtmlReporter.java +++ b/src/main/java/net/marevol/redmine/impasse/report/HtmlReporter.java @@ -62,6 +62,8 @@ public class HtmlReporter implements Reporter { private boolean includeResults; + private boolean skipEmptyTestsuite; + private String planName; @Resource @@ -217,6 +219,9 @@ protected void parseTitle(final ImpasseNodes parentNode, for (final ImpasseNodes node : nodesList) { if (nodeTypeMap.get("testsuite").intValue() == node.getNodeTypeId() .intValue()) { + if (skipEmptyTestsuite && !hasTestCaseChild(node)) { + continue; + } number++; // testsuite @@ -281,6 +286,10 @@ protected void parseContent(final VelocityContext baseContext, for (final ImpasseNodes node : nodesList) { if (nodeTypeMap.get("testsuite").intValue() == node.getNodeTypeId() .intValue()) { + if (skipEmptyTestsuite && !hasTestCaseChild(node)) { + continue; + } + number++; // testsuite @@ -376,6 +385,42 @@ protected void parseContent(final VelocityContext baseContext, } } + private boolean hasTestCaseChild(final ImpasseNodes parentNode) { + final ImpasseNodesCB cb1 = new ImpasseNodesCB(); + cb1.query().setParentId_Equal(parentNode.getId()); + cb1.query().addOrderBy_NodeOrder_Asc(); + final ListResultBean nodesList = impasseNodesBhv + .selectList(cb1); + for (final ImpasseNodes node : nodesList) { + if (nodeTypeMap.get("testsuite").intValue() == node.getNodeTypeId() + .intValue()) { + if (hasTestCaseChild(node)) { + return true; + } + } else if (nodeTypeMap.get("testcase").intValue() == node.getNodeTypeId() + .intValue()) { + if (isTestPlanCase(node)) { + return true; + } + } + } + return false; + } + + private boolean isTestPlanCase(final ImpasseNodes testCaseNode) { + final ImpasseTestCasesCB cb2 = new ImpasseTestCasesCB(); + cb2.query().setId_Equal(testCaseNode.getId()); + final ImpasseTestCases testCase = impasseTestCasesBhv + .selectEntity(cb2); + final ImpasseTestPlanCasesCB cb4 = new ImpasseTestPlanCasesCB(); + cb4.query().setTestPlanId_Equal(testPlan.getId()); + cb4.query().setTestCaseId_Equal(testCase.getId()); + cb4.query().addOrderBy_NodeOrder_Asc(); + final ImpasseTestPlanCases testPlanCase = impasseTestPlanCasesBhv + .selectEntity(cb4); + return testPlanCase != null; + } + public String getCurrentNumber() { final StringBuilder buf = new StringBuilder(); for (final Integer num : numberList) { @@ -405,6 +450,12 @@ public Reporter includeResults(final boolean includeResults) { return this; } + @Override + public Reporter skipEmptyTestsuite(boolean skipEmptyTestsite) { + this.skipEmptyTestsuite = skipEmptyTestsite; + return this; + } + @Override public Reporter planName(final String planName) { this.planName = planName; diff --git a/src/main/java/net/marevol/redmine/impasse/report/Reporter.java b/src/main/java/net/marevol/redmine/impasse/report/Reporter.java index dc7ee4a..92df16b 100644 --- a/src/main/java/net/marevol/redmine/impasse/report/Reporter.java +++ b/src/main/java/net/marevol/redmine/impasse/report/Reporter.java @@ -10,6 +10,8 @@ public interface Reporter { Reporter includeResults(boolean includeResults); + Reporter skipEmptyTestsuite(boolean skipEmptyTestsite); + Reporter planName(String planName); void execute();