package nl.topicus.onderwijs.dashboard.modules.hudson;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import nl.topicus.onderwijs.dashboard.datasources.NumberOfUnitTests;
import nl.topicus.onderwijs.dashboard.datatypes.hudson.Action;
import nl.topicus.onderwijs.dashboard.datatypes.hudson.Build;
import nl.topicus.onderwijs.dashboard.keys.Project;
class NumberOfUnitTestsImpl implements NumberOfUnitTests {
private Project project;
private HudsonService service;
NumberOfUnitTestsImpl(Project project, HudsonService service) {
this.project = project;
this.service = service;
}
@Override
public Integer getValue() {
class UnitTestComparator implements Comparator<Build> {
@Override
public int compare(Build o1, Build o2) {
Action test1 = getTestReport(o1);
Action test2 = getTestReport(o2);
if (test1 == null && test2 == null)
return 0;
if (test1 == null)
return 1;
if (test2 == null)
return -1;
return test1.getTotalCount() - test2.getTotalCount();
}
}
List<Build> builds = service.getBuilds(project);
if (builds.isEmpty())
return null;
Build buildWithMaxUnitTests = Collections.max(builds,
new UnitTestComparator());
Action testReport = getTestReport(buildWithMaxUnitTests);
return testReport == null ? null : testReport.getTotalCount();
}
private Action getTestReport(Build build) {
if (build != null && build.getActions() != null) {
for (Action action : build.getActions()) {
if ("testReport".equals(action.getUrlName())) {
return action;
}
}
}
return null;
}
}