Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support for requirements aggregation with Serenity/JS #3345

Closed
wants to merge 4 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import net.serenitybdd.reports.asciidoc.templates.FreemarkerTemplateEngine
import net.thucydides.model.reports.OutcomeFormat
import net.thucydides.model.reports.TestOutcomeLoader
import net.thucydides.model.reports.TestOutcomes
import net.thucydides.model.requirements.reports.FileSystemRequirmentsOutcomeFactory
import net.thucydides.model.requirements.reports.FileSystemRequirementsOutcomeFactory
import net.thucydides.model.requirements.reports.RequirementsOutcomes
import net.thucydides.model.util.EnvironmentVariables
import java.io.File
Expand Down Expand Up @@ -82,6 +82,6 @@ class AsciidocReporter(val environmentVariables: EnvironmentVariables) {

class RequirementsOutcomesProvider(val testOutcomes: TestOutcomes) {
fun using(environmentVariables: EnvironmentVariables): RequirementsOutcomes =
FileSystemRequirmentsOutcomeFactory(environmentVariables).buildRequirementsOutcomesFrom(testOutcomes)
FileSystemRequirementsOutcomeFactory(environmentVariables).buildRequirementsOutcomesFrom(testOutcomes)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ package net.serenitybdd.reports.asciidoc
import net.thucydides.model.reports.OutcomeFormat
import net.thucydides.model.reports.TestOutcomeLoader
import net.thucydides.model.requirements.FileSystemRequirementsTagProvider
import net.thucydides.model.requirements.reports.FileSystemRequirmentsOutcomeFactory
import net.thucydides.model.requirements.reports.FileSystemRequirementsOutcomeFactory
import net.thucydides.model.util.EnvironmentVariables
import net.thucydides.model.util.MockEnvironmentVariables
import org.assertj.core.api.Assertions.assertThat
Expand Down Expand Up @@ -39,7 +39,7 @@ class WhenLoadingRequirementsOutcomes {
.inFormat(OutcomeFormat.JSON)
.from(File("src/test/resources/test_outcomes/with_a_single_test"))

val outcomesFactory = FileSystemRequirmentsOutcomeFactory(environmentVariables)
val outcomesFactory = FileSystemRequirementsOutcomeFactory(environmentVariables)
val requirementsOutcomes = outcomesFactory.buildRequirementsOutcomesFrom(testOutcomes)
assertThat(requirementsOutcomes.requirementCount).isEqualTo(3)
}
Expand Down
30 changes: 17 additions & 13 deletions serenity-cli/src/main/java/net/serenitybdd/cli/Serenity.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,15 @@ public class Serenity {
@Option(name = "--help", usage = "print this message")
private boolean help;

@Option(name = "--features",
usage = "Source directory containing the feature files",
metaVar = "<directory>")
Path testScenariosDirectory = Paths.get("src/test/resources/features");

@Option(name = "--source",
usage = "Source directory containing the Serenity JSON output files",
metaVar = "<directory>")
Path source = Paths.get("target/site/serenity");
Path jsonOutcomesDirectory = Paths.get("target/site/serenity");

@Option(name = "--destination",
usage = "Directory directory to contain the generated Serenity report",
Expand Down Expand Up @@ -63,11 +68,6 @@ public class Serenity {
metaVar = "<string>")
String jiraWorkflowActive;

@Option(name = "--features",
usage = "Source directory containing the feature files",
metaVar = "<directory>")
Path requirementsDirectory = Paths.get("src/test/resources/features");

@Option(name = "--tags",
metaVar = "<string>")
String tags;
Expand All @@ -93,10 +93,9 @@ public void executeWith(String[] args) {
CmdLineParser parser = new CmdLineParser(this);

try {

parser.parseArgument(args);

} catch (CmdLineException e) {
}
catch (CmdLineException e) {
printUsage(parser);
return;
}
Expand All @@ -106,15 +105,20 @@ public void executeWith(String[] args) {
return;
}

SerenityCLIReportCoordinator reporter = new SerenityCLIReportCoordinator(source,
String projectName = (project != null) ? project : workingDirectoryName();

SerenityCLIReportCoordinator reporter = new SerenityCLIReportCoordinator(
testScenariosDirectory.toAbsolutePath(),
jsonOutcomesDirectory.toAbsolutePath(),
destination,
(project != null) ? project : workingDirectoryName(),
projectName,
issueTrackerUrl,
// todo: introduce a type for JiraDetails
jiraUrl, jiraProject, jiraUsername, jiraPassword, jiraWorkflowActive, jiraWorkflow,
requirementsDirectory.toAbsolutePath().toFile().toString(), tags);
tags
);

reporter.execute();

}

private String workingDirectoryName() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,41 +17,52 @@ public class SerenityCLIReportCoordinator {

List<CLIReportGenerator> reportGenerators = new ArrayList<>();

public SerenityCLIReportCoordinator(Path sourceDirectory,
Path destinationDirectory,
String project,
String issueTrackerUrl,
String jiraUrl,
String jiraProject,
String jiraUsername,
String jiraPassword,
String jiraWorkflowActive,
String jiraWorkflow,
String requirementsDirectory,
String tags) {
this.sourceDirectory = sourceDirectory;
public SerenityCLIReportCoordinator(
Path testScenariosDirectory,
Path jsonOutcomesDirectory,
Path destinationDirectory,
String project,
String issueTrackerUrl,
String jiraUrl,
String jiraProject,
String jiraUsername,
String jiraPassword,
String jiraWorkflowActive,
String jiraWorkflow,
String tags
) {
this.sourceDirectory = jsonOutcomesDirectory;
this.destinationDirectory = destinationDirectory;

reportGenerators.addAll(List.of(
new CLIAggregateReportGenerator(sourceDirectory, destinationDirectory, project, issueTrackerUrl,
jiraUrl, jiraProject, jiraUsername, jiraPassword,
requirementsDirectory, tags),
new CLIIssueTrackerUpdater(jiraWorkflow, jiraWorkflowActive)
new CLIAggregateReportGenerator(
testScenariosDirectory,
destinationDirectory,
project,
issueTrackerUrl,
jiraUrl,
jiraProject,
jiraUsername,
jiraPassword,
tags
),
new CLIIssueTrackerUpdater(
jiraWorkflow,
jiraWorkflowActive
)
));
}


public void execute() {
try {

printStartingBanner();

prepareDirectories();

for (CLIReportGenerator generator : reportGenerators) {
generator.generateReportsFrom(sourceDirectory);
}

} catch (IOException e) {
throw new RuntimeException(e);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import net.thucydides.core.reports.html.HtmlAggregateStoryReporter;
import net.thucydides.model.requirements.Requirements;
import net.thucydides.model.requirements.SerenityJsRequirements;

import java.io.IOException;
import java.nio.file.Path;
Expand All @@ -10,46 +11,45 @@

public class CLIAggregateReportGenerator implements CLIReportGenerator {

private final Path sourceDirectory;
private final Path requirementsDirectory;
private final Path destinationDirectory;
private final String project;
private final String issueTrackerUrl;
private final String jiraUrl;
private final String jiraProject;
private final String jiraUsername;
private final String jiraPassword;
private final String requirementsDirectory;
private final String tags;

public CLIAggregateReportGenerator(Path sourceDirectory,
Path destinationDirectory,
String project,
String issueTrackerUrl,
String jiraUrl,
String jiraProject,
String jiraUsername,
String jiraPassword,
String requirementsDirectory,
String tags) {
this.sourceDirectory = sourceDirectory;
public CLIAggregateReportGenerator(
Path testScenariosDirectory,
Path destinationDirectory,
String project,
String issueTrackerUrl,
String jiraUrl,
String jiraProject,
String jiraUsername,
String jiraPassword,
String tags
) {
this.requirementsDirectory = testScenariosDirectory;
this.destinationDirectory = destinationDirectory;
this.issueTrackerUrl = issueTrackerUrl;
this.jiraUrl = jiraUrl;
this.jiraProject = jiraProject;
this.jiraUsername = jiraUsername;
this.jiraPassword = jiraPassword;
this.project = project;
this.requirementsDirectory = requirementsDirectory;
this.tags = tags;
}

@Override
public void generateReportsFrom(Path sourceDirectory) throws IOException {
public void generateReportsFrom(Path jsonOutcomesDirectory) throws IOException {

Requirements requirements = new SerenityJsRequirements(requirementsDirectory, jsonOutcomesDirectory);

Requirements requirements = RequirementsStrategy.forJSONOutputsIn(sourceDirectory)
.andFeatureFilesIn(requirementsDirectory);
HtmlAggregateStoryReporter reporter = new HtmlAggregateStoryReporter(project, requirements);
reporter.setSourceDirectory(sourceDirectory.toFile());
reporter.setSourceDirectory(jsonOutcomesDirectory.toFile());
reporter.setOutputDirectory(destinationDirectory.toFile());
reporter.setIssueTrackerUrl(issueTrackerUrl);
reporter.setJiraUrl(jiraUrl);
Expand All @@ -63,6 +63,6 @@ public void generateReportsFrom(Path sourceDirectory) throws IOException {
reporter.setTags(tags);
}

reporter.generateReportsForTestResultsFrom(sourceDirectory.toFile());
reporter.generateReportsForTestResultsFrom(jsonOutcomesDirectory.toFile());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,10 @@
import net.serenitybdd.model.environment.ConfiguredEnvironment;
import net.thucydides.model.domain.ReportType;
import net.thucydides.model.reports.html.ReportNameProvider;
import net.thucydides.model.requirements.reports.FileSystemRequirmentsOutcomeFactory;
import net.thucydides.model.requirements.reports.FileSystemRequirementsOutcomeFactory;
import net.thucydides.model.requirements.reports.RequirementsOutcomeFactory;

import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;

import static net.thucydides.model.reports.html.ReportNameProvider.NO_CONTEXT;
Expand All @@ -26,10 +25,10 @@ public AggregateRequirements(Path jsonOutcomes, String featureFilesDirectory) {
ModelInfrastructure.getEnvironmentVariables(),
new FileSystemRequirementsTagProvider(featureFilesDirectory),
new TestOutcomeRequirementsTagProvider().fromSourceDirectory(jsonOutcomes));
this.requirmentsOutcomeFactory = new FileSystemRequirmentsOutcomeFactory(
this.requirmentsOutcomeFactory = new FileSystemRequirementsOutcomeFactory(
ConfiguredEnvironment.getEnvironmentVariables(),
ModelInfrastructure.getIssueTracking(),
new ReportNameProvider(NO_CONTEXT, ReportType.HTML, getRequirementsService()),
new ReportNameProvider(NO_CONTEXT, ReportType.HTML, requirementsService),
featureFilesDirectory);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@

public class DefaultCapabilityTypes {

public final static List<String> DEFAULT_CAPABILITY_TYPES = NewList.of("capability", "feature", "story");
public final static List<String> DEFAULT_CAPABILITY_TYPES = NewList.of("theme", "capability", "feature", "story");
private final static DefaultCapabilityTypes INSTANCE = new DefaultCapabilityTypes();
private List<String> defaultCapabilityTypes;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
import net.serenitybdd.model.environment.ConfiguredEnvironment;
import net.thucydides.model.domain.ReportType;
import net.thucydides.model.reports.html.ReportNameProvider;
import net.thucydides.model.requirements.reports.FileSystemRequirmentsOutcomeFactory;
import net.thucydides.model.requirements.reports.FileSystemRequirementsOutcomeFactory;
import net.thucydides.model.requirements.reports.RequirementsOutcomeFactory;

import java.util.List;
Expand All @@ -21,7 +21,7 @@ public class FileSystemRequirements implements Requirements {

public FileSystemRequirements(String path) {
this.requirementsService = new FileSystemRequirementsService(path);
this.requirmentsOutcomeFactory = new FileSystemRequirmentsOutcomeFactory(
this.requirmentsOutcomeFactory = new FileSystemRequirementsOutcomeFactory(
ConfiguredEnvironment.getEnvironmentVariables(),
ModelInfrastructure.getIssueTracking(),
new ReportNameProvider(NO_CONTEXT, ReportType.HTML, getRequirementsService()),
Expand Down
Loading
Loading