Skip to content

Commit ad8d68d

Browse files
authored
preserve manually assigned step statuses (fixes #1133, via #1337)
1 parent ac47d91 commit ad8d68d

4 files changed

Lines changed: 75 additions & 2 deletions

File tree

allure-java-commons/src/main/java/io/qameta/allure/Allure.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,11 @@ public static <T> T step(final ThrowableContextRunnable<T, StepContext> runnable
175175

176176
try {
177177
final T result = runnable.run(new DefaultStepContext(key));
178-
getLifecycle().updateStep(key, step -> step.setStatus(Status.PASSED));
178+
getLifecycle().updateStep(key, step -> {
179+
if (Objects.isNull(step.getStatus())) {
180+
step.setStatus(Status.PASSED);
181+
}
182+
});
179183
return result;
180184
} catch (Throwable throwable) {
181185
getLifecycle().updateStep(

allure-java-commons/src/main/java/io/qameta/allure/aspects/StepsAspects.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,11 @@ public void stepStop() {
130130
if (Objects.isNull(key)) {
131131
return;
132132
}
133-
getLifecycle().updateStep(key, s -> s.setStatus(Status.PASSED));
133+
getLifecycle().updateStep(key, step -> {
134+
if (Objects.isNull(step.getStatus())) {
135+
step.setStatus(Status.PASSED);
136+
}
137+
});
134138
getLifecycle().stopStep();
135139
}
136140

allure-java-commons/src/test/java/io/qameta/allure/AllureTest.java

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,38 @@ void shouldCreateStepsFromLambdas() {
109109
);
110110
}
111111

112+
@Issue("1133")
113+
@Test
114+
void shouldPreserveManuallySetStatusWhenLambdaStepReturns() {
115+
final AllureResults results = runWithinTestContext(
116+
() -> step(
117+
"step with manually set status",
118+
() -> getLifecycle().updateStep(step -> step.setStatus(Status.FAILED))
119+
)
120+
);
121+
122+
assertThat(results.getTestResults())
123+
.flatExtracting(TestResult::getSteps)
124+
.extracting(StepResult::getStatus)
125+
.containsExactly(Status.FAILED);
126+
}
127+
128+
@Issue("1133")
129+
@Test
130+
void shouldOverrideManuallySetStatusWhenLambdaStepThrows() {
131+
final AllureResults results = runWithinTestContext(
132+
() -> step("failing step with manually set status", () -> {
133+
getLifecycle().updateStep(step -> step.setStatus(Status.SKIPPED));
134+
throw new AssertionError("some assertion");
135+
})
136+
);
137+
138+
assertThat(results.getTestResults())
139+
.flatExtracting(TestResult::getSteps)
140+
.extracting(StepResult::getStatus)
141+
.containsExactly(Status.FAILED);
142+
}
143+
112144
void doSomething() {
113145
}
114146

allure-java-commons/src/test/java/io/qameta/allure/aspects/StepsAspectsTest.java

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,28 @@ void shouldCreateSteps() {
5555
.containsExactly("Simple step", "Simple step");
5656
}
5757

58+
@Issue("1133")
59+
@Test
60+
void shouldPreserveManuallySetStatusWhenAnnotatedStepReturns() {
61+
final AllureResults results = runWithinTestContext(this::stepWithManuallySetStatus);
62+
63+
assertThat(results.getTestResults())
64+
.flatExtracting(TestResult::getSteps)
65+
.extracting(StepResult::getStatus)
66+
.containsExactly(Status.FAILED);
67+
}
68+
69+
@Issue("1133")
70+
@Test
71+
void shouldOverrideManuallySetStatusWhenAnnotatedStepThrows() {
72+
final AllureResults results = runWithinTestContext(this::failingStepWithManuallySetStatus);
73+
74+
assertThat(results.getTestResults())
75+
.flatExtracting(TestResult::getSteps)
76+
.extracting(StepResult::getStatus)
77+
.containsExactly(Status.FAILED);
78+
}
79+
5880
@Test
5981
void shouldKeepStepStatusWithTrailingOpenStage() {
6082
final AllureResults results = runWithinTestContext(() -> stepWithTrailingStage());
@@ -354,6 +376,17 @@ void stepWithDefaultName() {
354376
void simpleStep() {
355377
}
356378

379+
@Step
380+
void stepWithManuallySetStatus() {
381+
Allure.getLifecycle().updateStep(step -> step.setStatus(Status.FAILED));
382+
}
383+
384+
@Step
385+
void failingStepWithManuallySetStatus() {
386+
Allure.getLifecycle().updateStep(step -> step.setStatus(Status.SKIPPED));
387+
throw new AssertionError("some assertion");
388+
}
389+
357390
@Step("Method {method}")
358391
void stepWithMethodPlaceholder() {
359392
}

0 commit comments

Comments
 (0)