Skip to content

Commit

Permalink
Fix/requirement links (#3379)
Browse files Browse the repository at this point in the history
* Fixed deep links to JS-generated feature reports

* Removed debug output
  • Loading branch information
jan-molak committed Jan 22, 2024
1 parent fc35b51 commit 4abf7e7
Show file tree
Hide file tree
Showing 5 changed files with 26 additions and 9 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,11 @@ public Map<String, Requirement> getRequirementsPathIndex() {
}

public Requirement getRequirementsByTag(TestTag testTag, Function<TestTag, Requirement> requirementFinder) {
if (!requirementsByTag.containsKey(testTag)) {
return getRequirementsByTag(testTag, requirementFinder, false);
}

public Requirement getRequirementsByTag(TestTag testTag, Function<TestTag, Requirement> requirementFinder, boolean forceLoad) {
if (!requirementsByTag.containsKey(testTag) || (null == requirementsByTag.get(testTag) && forceLoad)) {
requirementsByTag.put(testTag, requirementFinder.apply(testTag));
}
return requirementsByTag.get(testTag);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -361,8 +361,9 @@ public Optional<Requirement> getParentRequirementOf(Requirement requirement) {

@Override
public Optional<Requirement> getRequirementFor(TestTag testTag) {
boolean forceLoadFeatures = testTag.getType().equals("feature");
Requirement matchingRequirement
= RequirementCache.getInstance().getRequirementsByTag(testTag, this::findRequirementByTag);
= RequirementCache.getInstance().getRequirementsByTag(testTag, this::findRequirementByTag, forceLoadFeatures);
return Optional.ofNullable(matchingRequirement);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -133,7 +133,8 @@ public Map<String, Object> getBuildContext(TestOutcomes completeTestOutcomes,
context.put("reportName", reportName);
context.put("reportNameInContext", reportName);

context.put("absoluteReportName", new ReportNameProvider(NO_CONTEXT, ReportType.HTML, requirements));
ReportNameProvider absoluteReportNameProvider = new ReportNameProvider(NO_CONTEXT, ReportType.HTML, requirements);
context.put("absoluteReportName", absoluteReportNameProvider);

context.put("reportOptions", reportOptions);
context.put("timestamp", timestampFrom(new DateTime()));
Expand Down Expand Up @@ -192,10 +193,10 @@ public Map<String, Object> getBuildContext(TestOutcomes completeTestOutcomes,
.filter(requirementsFilter::inDisplayOnlyTags)
.map(Requirement::asTag)
.collect(Collectors.toSet());
coverage = TagCoverage.from(testOutcomes).showingTags(coveredTags).forTagTypes(tagTypes);
coverage = TagCoverage.from(testOutcomes).withReportNameProvider(absoluteReportNameProvider).showingTags(coveredTags).forTagTypes(tagTypes);
} else {
// Otherwise show coverage for all requirements
coverage = TagCoverage.from(testOutcomes).forTagTypes(requirements.getRequirementTypes());
coverage = TagCoverage.from(testOutcomes).withReportNameProvider(absoluteReportNameProvider).forTagTypes(requirements.getRequirementTypes());
}

boolean hideEmptyRequirements = EnvironmentSpecificConfiguration.from(environmentVariables).getBooleanProperty(SERENITY_REPORT_HIDE_EMPTY_REQUIREMENTS, true);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -180,6 +180,8 @@ public void generateReportsForTestResultsIn(TestOutcomes testOutcomes) throws IO

List<String> requirementTypes = requirementsConfiguration.getRequirementTypes();
LOGGER.info("GENERATING SUMMARY REPORTS...");
LOGGER.debug("Detected requirement types: {}", requirements.getRequirementsService().getRequirementTypes());

reporter.generateReportsFor(
Stream.of(
// SUMMARY REPORTS
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,13 +27,15 @@ class TagCoverage(val environmentVariables: EnvironmentVariables, val testOutcom
class TagCoverageBuilder(
val testOutcomes: TestOutcomes,
val tagsToDisplay: Collection<TestTag>,
val environmentVariables: EnvironmentVariables
val environmentVariables: EnvironmentVariables,
var reportNameProvider: ReportNameProvider
) {

constructor(testOutcomes: TestOutcomes, environmentVariables: EnvironmentVariables) : this(
testOutcomes,
setOf(),
environmentVariables
environmentVariables,
ReportNameProvider()
)

var hideEmptyRequirements: Boolean = false
Expand All @@ -43,6 +45,11 @@ class TagCoverageBuilder(
.getBooleanProperty(SERENITY_REPORT_HIDE_EMPTY_REQUIREMENTS, true)
}

fun withReportNameProvider(reportNameProvider: ReportNameProvider): TagCoverageBuilder {
this.reportNameProvider = reportNameProvider
return this
}

fun forTagTypes(displayedTagTypes: List<String>): List<CoverageByTagType> {

var coveragesByTagType = mutableListOf<CoverageByTagType>()
Expand All @@ -52,6 +59,7 @@ class TagCoverageBuilder(
if (shouldShow(testOutcomesWithTag)) {
coveragesByTagType.add(
CoverageByTagType(
reportNameProvider,
displayedTagType.replaceFirstChar { if (it.isLowerCase()) it.titlecase(Locale.getDefault()) else it.toString() },
humanize(displayedTagType),
testOutcomes.withTagType(displayedTagType),
Expand All @@ -74,11 +82,12 @@ class TagCoverageBuilder(
}

fun showingTags(tagsOfType: Collection<TestTag>): TagCoverageBuilder {
return TagCoverageBuilder(testOutcomes, tagsOfType, environmentVariables)
return TagCoverageBuilder(testOutcomes, tagsOfType, environmentVariables, reportNameProvider)
}
}

class CoverageByTagType(
val reportNameProvider: ReportNameProvider,
val tagType: String,
val tagTitle: String,
val testOutcomes: TestOutcomes,
Expand Down Expand Up @@ -155,7 +164,7 @@ class CoverageByTagType(
testOutcomesForTag.testCaseCount,
successRate,
testOutcomesForTag.result,
ReportNameProvider().forRequirementOrTag(testTag),
reportNameProvider.forRequirementOrTag(testTag), // ReportNameProvider().forRequirementOrTag(testTag),
countByResultLabelFrom(testOutcomesForTag),
percentageByResultFrom(testOutcomesForTag)
)
Expand Down

0 comments on commit 4abf7e7

Please sign in to comment.