/**
*
* Copyright (C) norad.fr
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package fr.norad.visuwall.providers.hudson;
import java.util.ArrayList;
import java.util.List;
import fr.norad.visuwall.providers.hudson.domain.HudsonTest;
import fr.norad.visuwall.providers.hudson.domain.HudsonTestResult;
import fr.norad.visuwall.providers.hudson.resource.Case;
import fr.norad.visuwall.providers.hudson.resource.ChildReport;
import fr.norad.visuwall.providers.hudson.resource.Result;
import fr.norad.visuwall.providers.hudson.resource.Suite;
import fr.norad.visuwall.providers.hudson.resource.SurefireAggregatedReport;
/**
* TestResultBuilder is used to manipulate Hudson Test data
*/
public class TestResultBuilder {
public HudsonTestResult buildUnitTestResult(SurefireAggregatedReport surefireReport) {
HudsonTestResult unitTestResult = new HudsonTestResult();
List<ChildReport> tests = surefireReport.getChildReports();
countUnitTests(unitTestResult, tests);
return unitTestResult;
}
public HudsonTestResult buildIntegrationTestResult(SurefireAggregatedReport surefireReport) {
HudsonTestResult integrationTestResult = new HudsonTestResult();
List<ChildReport> tests = surefireReport.getChildReports();
countIntegrationTests(integrationTestResult, tests);
return integrationTestResult;
}
private void countUnitTests(HudsonTestResult unitTestsResult, List<ChildReport> testReport) {
List<HudsonTest> tests = createTestsFrom(testReport);
for (HudsonTest test : tests) {
if (test.isUnitTest()) {
updateTestResult(unitTestsResult, test);
}
}
}
private void countIntegrationTests(HudsonTestResult integrationTestsResult, List<ChildReport> testReport) {
List<HudsonTest> tests = createTestsFrom(testReport);
for (HudsonTest test : tests) {
if (test.isIntegrationTest()) {
updateTestResult(integrationTestsResult, test);
}
}
}
private void updateTestResult(HudsonTestResult unitTestsResult, HudsonTest test) {
String status = test.getStatus();
if ("FAILED".equals(status)) {
unitTestsResult.setFailCount(unitTestsResult.getFailCount() + 1);
}
if ("SKIPPED".equals(status)) {
unitTestsResult.setSkipCount(unitTestsResult.getSkipCount() + 1);
}
if ("PASSED".equals(status)) {
unitTestsResult.setPassCount(unitTestsResult.getPassCount() + 1);
}
}
private List<HudsonTest> createTestsFrom(List<ChildReport> testReport) {
List<HudsonTest> tests = new ArrayList<HudsonTest>();
for (ChildReport childReport : testReport) {
Result childReportResult = childReport.getResult();
List<Suite> suites = childReportResult.getSuites();
for (Suite suite : suites) {
for (Case case_ : suite.getCases()) {
HudsonTest test = createTestFrom(case_);
tests.add(test);
}
}
}
return tests;
}
private HudsonTest createTestFrom(Case case_) {
HudsonTest test = new HudsonTest();
test.setClassName(case_.getClassName());
test.setStatus(case_.getStatus());
return test;
}
}