package net.thucydides.core.model;
import net.thucydides.core.digest.Digest;
import net.thucydides.core.util.NameConverter;
import org.apache.commons.lang3.StringUtils;
import static net.thucydides.core.util.NameConverter.*;
/**
* Determies the correct default name for test reports.
* @author johnsmart
*
*/
public class ReportNamer {
public static ReportNamer forReportType(ReportType type) {
return new ReportNamer(type);
}
private ReportType type;
private ReportNamer(final ReportType type) {
this.type = type;
}
/**
* Return a filesystem-friendly version of the test case name. The file system
* version should have no spaces and have the XML file suffix.
*/
public String getNormalizedTestNameFor(final TestOutcome testOutcome) {
String testName = getBaseTestNameFor(testOutcome);
String testNameWithoutIndex = stripIndexesFrom(testName);
return appendSuffixTo(Digest.ofTextValue(testNameWithoutIndex));
}
private String getBaseTestNameFor(TestOutcome testOutcome) {
String testName = "";
if (testOutcome.getUserStory() != null) {
testName = NameConverter.underscore(testOutcome.getUserStory().getName());
} else if (testOutcome.getPath() != null) {
testName = NameConverter.underscore(testOutcome.getPath());
}
String scenarioName = NameConverter.underscore(testOutcome.getQualifiedMethodName());
return pathFrom(testOutcome) + withNoIssueNumbers(appendToIfNotNull(testName, scenarioName));
}
/**
* Return a filesystem-friendly version of the test case name. The filesytem
* version should have no spaces and have the XML file suffix.
*/
public String getSimpleTestNameFor(final TestOutcome testOutcome) {
String testName = "";
if (testOutcome.getUserStory() != null) {
testName = NameConverter.underscore(testOutcome.getUserStory().getName());
}
String scenarioName = NameConverter.underscore(testOutcome.getMethodName());
testName = pathFrom(testOutcome) + withNoIssueNumbers(withNoArguments(appendToIfNotNull(testName, scenarioName)));
return appendSuffixTo(Digest.ofTextValue(testName));
}
private String pathFrom(TestOutcome testOutcome) {
return (testOutcome.getPath() != null) ? testOutcome.getPath() + "/" : "";
}
private String appendToIfNotNull(final String baseString, final String nextElement) {
if (StringUtils.isNotEmpty(baseString)) {
return baseString + "_" + nextElement;
} else {
return nextElement;
}
}
public String getNormalizedTestNameFor(final Story userStory) {
return getNormalizedTestNameFor(userStory.getName());
}
public String getNormalizedTestNameFor(String name) {
String testNameWithUnderscores = NameConverter.underscore(name.toLowerCase());
return appendSuffixTo(Digest.ofTextValue(testNameWithUnderscores));
}
private String appendSuffixTo(final String testNameWithUnderscores) {
if (type == ReportType.ROOT) {
return testNameWithUnderscores;
} else {
return testNameWithUnderscores + "." + type.toString();
}
}
}