Skip to content

Commit 76af83a

Browse files
authored
fix history id generation for cucumberjvm scenarios with same feature file name (via #627)
1 parent 6e6f048 commit 76af83a

9 files changed

Lines changed: 93 additions & 21 deletions

File tree

allure-cucumber5-jvm/src/main/java/io/qameta/allure/cucumber5jvm/AllureCucumber5Jvm.java

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@
5151
import java.io.ByteArrayInputStream;
5252
import java.net.URI;
5353
import java.nio.charset.StandardCharsets;
54+
import java.nio.file.Paths;
5455
import java.util.Collections;
5556
import java.util.Deque;
5657
import java.util.LinkedList;
@@ -100,6 +101,7 @@ public class AllureCucumber5Jvm implements ConcurrentEventListener {
100101

101102
private static final String TXT_EXTENSION = ".txt";
102103
private static final String TEXT_PLAIN = "text/plain";
104+
private static final String CUCUMBER_WORKING_DIR = Paths.get("").toUri().toString();
103105

104106
@SuppressWarnings("unused")
105107
public AllureCucumber5Jvm() {
@@ -276,12 +278,18 @@ private String getHookStepUuid(final HookTestStep step) {
276278
}
277279

278280
private String getHistoryId(final TestCase testCase) {
279-
final String testCaseLocation = testCase.getUri().toString()
280-
.substring(testCase.getUri().toString().lastIndexOf('/') + 1)
281-
+ ":" + testCase.getLine();
281+
final String testCaseLocation = getTestCaseUri(testCase) + ":" + testCase.getLine();
282282
return md5(testCaseLocation);
283283
}
284284

285+
private String getTestCaseUri(final TestCase testCase) {
286+
final String testCaseUri = testCase.getUri().toString();
287+
if (testCaseUri.startsWith(CUCUMBER_WORKING_DIR)) {
288+
return testCaseUri.substring(CUCUMBER_WORKING_DIR.length());
289+
}
290+
return testCaseUri;
291+
}
292+
285293
private Status translateTestCaseStatus(final Result testCaseResult) {
286294
switch (testCaseResult.getStatus()) {
287295
case FAILED:

allure-cucumber5-jvm/src/test/java/io/qameta/allure/cucumber5jvm/AllureCucumber5JvmTest.java

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -565,7 +565,7 @@ void shouldPersistHistoryIdForScenarios() {
565565

566566
final List<TestResult> testResults = writer.getTestResults();
567567
assertThat(testResults.get(0).getHistoryId())
568-
.isEqualTo("8eea9ed4458a49d418859d1398580671");
568+
.isEqualTo("892e5eabe51184301cf1358453c9f052");
569569
}
570570

571571
@AllureFeatures.History
@@ -577,11 +577,20 @@ void shouldPersistHistoryIdForExamples() {
577577
final List<TestResult> testResults = writer.getTestResults();
578578
assertThat(testResults)
579579
.extracting(TestResult::getHistoryId)
580-
.containsExactlyInAnyOrder("42a7821e775ec18b112f92e96f0510a5", "afb27d131ed8d41b3f867895a26d2590");
580+
.containsExactlyInAnyOrder("c0f824814a130048e9f86358363cf23e", "646aca5d0775cd4f13161e1ea1a68c39");
581581
}
582582

583-
private Comparator<TestResult> byHistoryId =
584-
Comparator.comparing(TestResult::getHistoryId);
583+
@AllureFeatures.History
584+
@Test
585+
void shouldPersistDifferentHistoryIdComparedToTheSameTestCaseInDifferentLocation() {
586+
final AllureResultsWriterStub writer = new AllureResultsWriterStub();
587+
runFeature(writer, "features/simple.feature");
588+
runFeature(writer, "features/same/simple.feature");
589+
590+
final List<TestResult> testResults = writer.getTestResults();
591+
assertThat(testResults.get(0).getHistoryId())
592+
.isNotEqualTo(testResults.get(1).getHistoryId());
593+
}
585594

586595
@AllureFeatures.Parallel
587596
@Test
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
Feature: Simple feature
2+
3+
Scenario: Add a to b
4+
Given a is 5
5+
And b is 10
6+
When I add a to b
7+
Then result is 15

allure-cucumber6-jvm/src/main/java/io/qameta/allure/cucumber6jvm/AllureCucumber6Jvm.java

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@
5050
import java.io.ByteArrayInputStream;
5151
import java.net.URI;
5252
import java.nio.charset.StandardCharsets;
53+
import java.nio.file.Paths;
5354
import java.util.Collections;
5455
import java.util.Deque;
5556
import java.util.LinkedList;
@@ -99,6 +100,7 @@ public class AllureCucumber6Jvm implements ConcurrentEventListener {
99100

100101
private static final String TXT_EXTENSION = ".txt";
101102
private static final String TEXT_PLAIN = "text/plain";
103+
private static final String CUCUMBER_WORKING_DIR = Paths.get("").toUri().toString();
102104

103105
@SuppressWarnings("unused")
104106
public AllureCucumber6Jvm() {
@@ -279,12 +281,18 @@ private String getHookStepUuid(final HookTestStep step) {
279281
}
280282

281283
private String getHistoryId(final TestCase testCase) {
282-
final String testCaseLocation = testCase.getUri().toString()
283-
.substring(testCase.getUri().toString().lastIndexOf('/') + 1)
284-
+ ":" + testCase.getLocation().getLine();
284+
final String testCaseLocation = getTestCaseUri(testCase) + ":" + testCase.getLocation().getLine();
285285
return md5(testCaseLocation);
286286
}
287287

288+
private String getTestCaseUri(final TestCase testCase) {
289+
final String testCaseUri = testCase.getUri().toString();
290+
if (testCaseUri.startsWith(CUCUMBER_WORKING_DIR)) {
291+
return testCaseUri.substring(CUCUMBER_WORKING_DIR.length());
292+
}
293+
return testCaseUri;
294+
}
295+
288296
private Status translateTestCaseStatus(final Result testCaseResult) {
289297
switch (testCaseResult.getStatus()) {
290298
case FAILED:

allure-cucumber6-jvm/src/test/java/io/qameta/allure/cucumber6jvm/AllureCucumber6JvmTest.java

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -565,7 +565,7 @@ void shouldPersistHistoryIdForScenarios() {
565565

566566
final List<TestResult> testResults = writer.getTestResults();
567567
assertThat(testResults.get(0).getHistoryId())
568-
.isEqualTo("8eea9ed4458a49d418859d1398580671");
568+
.isEqualTo("892e5eabe51184301cf1358453c9f052");
569569
}
570570

571571
@AllureFeatures.History
@@ -577,11 +577,20 @@ void shouldPersistHistoryIdForExamples() {
577577
final List<TestResult> testResults = writer.getTestResults();
578578
assertThat(testResults)
579579
.extracting(TestResult::getHistoryId)
580-
.containsExactlyInAnyOrder("42a7821e775ec18b112f92e96f0510a5", "afb27d131ed8d41b3f867895a26d2590");
580+
.containsExactlyInAnyOrder("c0f824814a130048e9f86358363cf23e", "646aca5d0775cd4f13161e1ea1a68c39");
581581
}
582582

583-
private Comparator<TestResult> byHistoryId =
584-
Comparator.comparing(TestResult::getHistoryId);
583+
@AllureFeatures.History
584+
@Test
585+
void shouldPersistDifferentHistoryIdComparedToTheSameTestCaseInDifferentLocation() {
586+
final AllureResultsWriterStub writer = new AllureResultsWriterStub();
587+
runFeature(writer, "features/simple.feature");
588+
runFeature(writer, "features/same/simple.feature");
589+
590+
final List<TestResult> testResults = writer.getTestResults();
591+
assertThat(testResults.get(0).getHistoryId())
592+
.isNotEqualTo(testResults.get(1).getHistoryId());
593+
}
585594

586595
@AllureFeatures.Parallel
587596
@Test
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
Feature: Simple feature
2+
3+
Scenario: Add a to b
4+
Given a is 5
5+
And b is 10
6+
When I add a to b
7+
Then result is 15

allure-cucumber7-jvm/src/main/java/io/qameta/allure/cucumber7jvm/AllureCucumber7Jvm.java

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@
5050
import java.io.ByteArrayInputStream;
5151
import java.net.URI;
5252
import java.nio.charset.StandardCharsets;
53+
import java.nio.file.Paths;
5354
import java.util.Collections;
5455
import java.util.Deque;
5556
import java.util.LinkedList;
@@ -99,6 +100,7 @@ public class AllureCucumber7Jvm implements ConcurrentEventListener {
99100

100101
private static final String TXT_EXTENSION = ".txt";
101102
private static final String TEXT_PLAIN = "text/plain";
103+
private static final String CUCUMBER_WORKING_DIR = Paths.get("").toUri().toString();
102104

103105
@SuppressWarnings("unused")
104106
public AllureCucumber7Jvm() {
@@ -279,12 +281,18 @@ private String getHookStepUuid(final HookTestStep step) {
279281
}
280282

281283
private String getHistoryId(final TestCase testCase) {
282-
final String testCaseLocation = testCase.getUri().toString()
283-
.substring(testCase.getUri().toString().lastIndexOf('/') + 1)
284-
+ ":" + testCase.getLocation().getLine();
284+
final String testCaseLocation = getTestCaseUri(testCase) + ":" + testCase.getLocation().getLine();
285285
return md5(testCaseLocation);
286286
}
287287

288+
private String getTestCaseUri(final TestCase testCase) {
289+
final String testCaseUri = testCase.getUri().toString();
290+
if (testCaseUri.startsWith(CUCUMBER_WORKING_DIR)) {
291+
return testCaseUri.substring(CUCUMBER_WORKING_DIR.length());
292+
}
293+
return testCaseUri;
294+
}
295+
288296
private Status translateTestCaseStatus(final Result testCaseResult) {
289297
switch (testCaseResult.getStatus()) {
290298
case FAILED:

allure-cucumber7-jvm/src/test/java/io/qameta/allure/cucumber7jvm/AllureCucumber7JvmTest.java

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -565,7 +565,7 @@ void shouldPersistHistoryIdForScenarios() {
565565

566566
final List<TestResult> testResults = writer.getTestResults();
567567
assertThat(testResults.get(0).getHistoryId())
568-
.isEqualTo("8eea9ed4458a49d418859d1398580671");
568+
.isEqualTo("892e5eabe51184301cf1358453c9f052");
569569
}
570570

571571
@AllureFeatures.History
@@ -577,11 +577,20 @@ void shouldPersistHistoryIdForExamples() {
577577
final List<TestResult> testResults = writer.getTestResults();
578578
assertThat(testResults)
579579
.extracting(TestResult::getHistoryId)
580-
.containsExactlyInAnyOrder("42a7821e775ec18b112f92e96f0510a5", "afb27d131ed8d41b3f867895a26d2590");
580+
.containsExactlyInAnyOrder("c0f824814a130048e9f86358363cf23e", "646aca5d0775cd4f13161e1ea1a68c39");
581581
}
582582

583-
private Comparator<TestResult> byHistoryId =
584-
Comparator.comparing(TestResult::getHistoryId);
583+
@AllureFeatures.History
584+
@Test
585+
void shouldPersistDifferentHistoryIdComparedToTheSameTestCaseInDifferentLocation() {
586+
final AllureResultsWriterStub writer = new AllureResultsWriterStub();
587+
runFeature(writer, "features/simple.feature");
588+
runFeature(writer, "features/same/simple.feature");
589+
590+
final List<TestResult> testResults = writer.getTestResults();
591+
assertThat(testResults.get(0).getHistoryId())
592+
.isNotEqualTo(testResults.get(1).getHistoryId());
593+
}
585594

586595
@AllureFeatures.Parallel
587596
@Test
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
Feature: Simple feature
2+
3+
Scenario: Add a to b
4+
Given a is 5
5+
And b is 10
6+
When I add a to b
7+
Then result is 15

0 commit comments

Comments
 (0)