Skip to content
Merged
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
3 changes: 3 additions & 0 deletions .github/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,9 @@ changelog:
- title: '⬆️ Dependency Updates'
labels:
- 'type:dependencies'
- title: '📖 Documentation improvements'
labels:
- 'type:documentation'
- title: '⛔️ Security'
labels:
- 'type:security'
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ jobs:
strategy:
fail-fast: false
matrix:
java-version: [ '8.0.x', '11.0.x' ]
java-version: [ '17.0.x' ]
steps:
- uses: actions/checkout@v3.2.0

Expand Down
17 changes: 13 additions & 4 deletions .github/workflows/labels-verify.yml
Original file line number Diff line number Diff line change
@@ -1,13 +1,22 @@
name: "Verify type labels"

on:
pull_request:
types: [ labeled, unlabeled ]
pull_request_target:
types: [opened, labeled, unlabeled, synchronize]

jobs:
triage:
runs-on: ubuntu-latest
steps:
- uses: baev/match-label-action@master
- uses: baev/action-label-verify@main
with:
allowed: 'type:bug,type:new feature,type:improvement,type:dependencies,type:internal,type:invalid'
repo-token: ${{ secrets.GITHUB_TOKEN }}
allowed: |
type:bug
type:dependencies
type:improvement
type:internal
type:invalid
type:new feature
type:security
type:documentation
4 changes: 2 additions & 2 deletions .github/workflows/publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,11 @@ jobs:
steps:
- uses: actions/checkout@v3.2.0

- name: Set up JDK 1.8
- name: "Set up JDK 17.0.x"
uses: actions/setup-java@v3
with:
distribution: 'zulu'
java-version: 8.0.x
java-version: '17.0.x'

- name: Set up GPG
run: echo -n "${GPG_PRIVATE_KEY}" | base64 --decode > ${GITHUB_WORKSPACE}/${GPG_KEY_ID}.gpg
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -177,16 +177,15 @@ public void conditionEvaluated(final EvaluatedCondition<Object> condition) {
final long remainingTime = unit.convert(condition.getRemainingTimeInMS(), MILLISECONDS);
final String unitAsString = unit.toString().toLowerCase();

final String message;
if (condition.isSatisfied()) {
message =
String.format(onSatisfiedStepTextPattern, description, elapsedTime, unitAsString, remainingTime,
unitAsString, new TemporalDuration(condition.getPollInterval()));
} else {
message =
String.format(onAwaitStepTextPattern, description, elapsedTime, unitAsString, remainingTime,
unitAsString, new TemporalDuration(condition.getPollInterval()));
}
final String message = String.format(
condition.isSatisfied() ? onSatisfiedStepTextPattern : onAwaitStepTextPattern,
description,
elapsedTime,
unitAsString,
remainingTime,
unitAsString,
new TemporalDuration(condition.getPollInterval())
);

getLifecycle().updateStep(awaitilityCondition -> {
final String lastAwaitStepUUID = UUID.randomUUID().toString();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,23 +16,26 @@
package io.qameta.allure.awaitility;

import io.qameta.allure.model.Status;
import io.qameta.allure.model.StepResult;
import io.qameta.allure.model.TestResult;
import org.junit.jupiter.api.DynamicNode;
import org.junit.jupiter.api.DynamicTest;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestInstance;
import org.junit.jupiter.api.TestFactory;

import java.time.Duration;
import java.time.temporal.ChronoUnit;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Stream;

import static io.qameta.allure.test.RunUtils.runWithinTestContext;
import static org.assertj.core.api.Assertions.assertThat;
import static org.awaitility.Awaitility.await;
import static org.hamcrest.Matchers.is;
import static org.junit.jupiter.api.Assertions.assertAll;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.DynamicTest.dynamicTest;

@TestInstance(TestInstance.Lifecycle.PER_METHOD)
class ConditionListenersPositiveTest {

/**
Expand All @@ -45,8 +48,8 @@ class ConditionListenersPositiveTest {
* <li>2. Top level step has passed status</li>
* <li>3. Top level step has default name</li>
*/
@Test
void globalSettingsAwaitWoAliasCheckTopLevelPassedStep() {
@TestFactory
Stream<DynamicNode> globalSettingsAwaitWoAliasCheckTopLevelPassedStep() {
final List<TestResult> testResult = runWithinTestContext(() -> {
final AtomicInteger atomicInteger = new AtomicInteger(0);
await().with()
Expand All @@ -57,19 +60,20 @@ void globalSettingsAwaitWoAliasCheckTopLevelPassedStep() {
},
AllureAwaitilityListener::setLifecycle
).getTestResults();
assertAll(
() -> assertEquals(
1, testResult.get(0).getSteps().size(),
"Exactly 1 top level step for 1 awaitility condition"

return Stream.of(
DynamicTest.dynamicTest("Exactly 1 top level step for 1 awaitility condition", () ->
assertThat(testResult.get(0).getSteps())
.hasSize(1)
),
() -> assertEquals(
Status.PASSED, testResult.get(0).getSteps().get(0).getStatus(),
"Top level step has passed status"
DynamicTest.dynamicTest("Top level step has passed status", () ->
assertThat(testResult.get(0).getSteps())
.allMatch(step -> Status.PASSED.equals(step.getStatus()))
),
() -> assertEquals(
"Awaitility: Starting evaluation",
testResult.get(0).getSteps().get(0).getName(),
"Top level step has default name because await() wo alias"
DynamicTest.dynamicTest("Top level step has default name because await() wo alias", () ->
assertThat(testResult.get(0).getSteps())
.extracting(StepResult::getName)
.containsExactly("Awaitility: Starting evaluation")
)
);
}
Expand Down Expand Up @@ -111,8 +115,8 @@ void globalSettingsAwaitWithAliasCheckTopLevelPassedStep() {
* <li>2. All second-level steps should have passed status for successful condition evaluation</li>
* <li>3. All second-level steps should have information about polling intervals and evaluation</li>
*/
@Test
void globalSettingsCheckAwaitWoAliasSecondLevelPassedSteps() {
@TestFactory
Stream<DynamicNode> globalSettingsCheckAwaitWoAliasSecondLevelPassedSteps() {
final List<TestResult> testResult = runWithinTestContext(() -> {
final AtomicInteger atomicInteger = new AtomicInteger(0);
await().with()
Expand All @@ -123,43 +127,47 @@ void globalSettingsCheckAwaitWoAliasSecondLevelPassedSteps() {
},
AllureAwaitilityListener::setLifecycle
).getTestResults();
assertAll(
() -> assertEquals(
4, testResult.get(0).getSteps().get(0).getSteps().size(),
"Exactly 4 second level steps for 4 polling iterations"

return Stream.of(
dynamicTest("Exactly 4 second level steps for 4 polling iterations", () ->
assertThat(testResult.get(0).getSteps().get(0).getSteps())
.hasSize(4)
),
() -> assertEquals(
4, (int) testResult.get(0).getSteps().get(0).getSteps().stream()
.filter(x -> x.getStatus().equals(Status.PASSED)).count(),
"All second level steps has passed statuses"
dynamicTest("All second level steps has passed statuses", () ->
assertThat(testResult.get(0).getSteps().get(0).getSteps())
.allMatch(x -> x.getStatus().equals(Status.PASSED))
),
() -> assertThat(testResult.get(0).getSteps().get(0).getSteps().get(0).getName())
.contains("Lambda expression in io.qameta.allure.awaitility.ConditionListenersPositiveTest")
.contains("that uses java.util.concurrent.atomic.AtomicInteger:")
.contains("expected <3> but was <0>")
.contains("elapsed time")
.contains("remaining time")
.contains("last poll interval was"),
() -> assertThat(testResult.get(0).getSteps().get(0).getSteps().get(1).getName())
.contains("Lambda expression in io.qameta.allure.awaitility.ConditionListenersPositiveTest")
.contains("that uses java.util.concurrent.atomic.AtomicInteger:")
.contains("expected <3> but was <1>")
.contains("elapsed time")
.contains("remaining time")
.contains("last poll interval was"),
() -> assertThat(testResult.get(0).getSteps().get(0).getSteps().get(2).getName())
.contains("Lambda expression in io.qameta.allure.awaitility.ConditionListenersPositiveTest")
.contains("that uses java.util.concurrent.atomic.AtomicInteger:")
.contains("expected <3> but was <2>")
.contains("elapsed time")
.contains("remaining time")
.contains("last poll interval was"),
() -> assertThat(testResult.get(0).getSteps().get(0).getSteps().get(3).getName())
.contains("Lambda expression in io.qameta.allure.awaitility.ConditionListenersPositiveTest")
.contains("that uses java.util.concurrent.atomic.AtomicInteger:")
.contains("reached its end value of <3> after")
.contains("remaining time")
.contains("last poll interval was")
dynamicTest("Second level step 1 name", () ->
assertThat(testResult.get(0).getSteps().get(0).getSteps().get(0).getName())
.contains("io.qameta.allure.awaitility.ConditionListenersPositiveTest")
.contains("expected <3> but was <0>")
.contains("elapsed time")
.contains("remaining time")
.contains("last poll interval was")
),
dynamicTest("Second level step 2 name", () ->
assertThat(testResult.get(0).getSteps().get(0).getSteps().get(1).getName())
.contains("io.qameta.allure.awaitility.ConditionListenersPositiveTest")
.contains("expected <3> but was <1>")
.contains("elapsed time")
.contains("remaining time")
.contains("last poll interval was")
),
dynamicTest("Second level step 3 name", () ->
assertThat(testResult.get(0).getSteps().get(0).getSteps().get(2).getName())
.contains("io.qameta.allure.awaitility.ConditionListenersPositiveTest")
.contains("expected <3> but was <2>")
.contains("elapsed time")
.contains("remaining time")
.contains("last poll interval was")
),
dynamicTest("Second level step 4 name", () ->
assertThat(testResult.get(0).getSteps().get(0).getSteps().get(3).getName())
.contains("io.qameta.allure.awaitility.ConditionListenersPositiveTest")
.contains("reached its end value of <3> after")
.contains("remaining time")
.contains("last poll interval was")
)
);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,20 +20,23 @@
import org.awaitility.Awaitility;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DynamicNode;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestFactory;
import org.junit.jupiter.api.TestInstance;

import java.time.Duration;
import java.time.temporal.ChronoUnit;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Stream;

import static io.qameta.allure.test.RunUtils.runWithinTestContext;
import static org.assertj.core.api.Assertions.assertThat;
import static org.awaitility.Awaitility.await;
import static org.hamcrest.Matchers.is;
import static org.junit.jupiter.api.Assertions.assertAll;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.DynamicTest.dynamicTest;

@TestInstance(TestInstance.Lifecycle.PER_METHOD)
class GlobalSettingsNegativeTest {
Expand Down Expand Up @@ -83,8 +86,8 @@ void globalSettingsAwaitWoAliasCheckTopLevelBrokenStep() {
* <li>2. All second-level steps should have passed or broken status for successful and timeout evaluations</li>
* <li>3. All second-level steps should have information about polling intervals and evaluation</li>
*/
@Test
void globalSettingsCheckAwaitWoAliasSecondLevelTimeoutStep() {
@TestFactory
Stream<DynamicNode> globalSettingsCheckAwaitWoAliasSecondLevelTimeoutStep() {
final List<TestResult> testResult = runWithinTestContext(() -> {
final AtomicInteger atomicInteger = new AtomicInteger(0);
await().with()
Expand All @@ -94,26 +97,29 @@ void globalSettingsCheckAwaitWoAliasSecondLevelTimeoutStep() {
},
AllureAwaitilityListener::setLifecycle
).getTestResults();
assertAll(
() -> assertEquals(
2, testResult.get(0).getSteps().get(0).getSteps().size(),
"Exactly 2 second level steps for 2 polling iterations"
),
() -> assertThat(testResult.get(0).getSteps().get(0).getSteps().get(0).getName())
.contains("Lambda expression in io.qameta.allure.awaitility.GlobalSettingsNegativeTest")
.contains("that uses java.util.concurrent.atomic.AtomicInteger:")
.contains("expected <3> but was <0>")
.contains("elapsed time")
.contains("remaining time")
.contains("last poll interval was"),
() -> assertThat(testResult.get(0).getSteps().get(0).getSteps().get(0).getStatus())
.isEqualTo(Status.PASSED),
() -> assertThat(testResult.get(0).getSteps().get(0).getSteps().get(1).getName())
.contains("Condition timeout.")
.contains("Lambda expression in io.qameta.allure.awaitility.GlobalSettingsNegativeTest")
.contains("expected <3> but was <0> within 1 seconds"),
() -> assertThat(testResult.get(0).getSteps().get(0).getSteps().get(1).getStatus())
.isEqualTo(Status.BROKEN)

return Stream.of(
dynamicTest("Second level steps count", () ->
assertThat(testResult.get(0).getSteps().get(0).getSteps())
.as("Exactly 2 second level steps for 2 polling iterations")
.hasSize(2)),
dynamicTest("Second level step 1 name", () ->
assertThat(testResult.get(0).getSteps().get(0).getSteps().get(0).getName())
.contains("io.qameta.allure.awaitility.GlobalSettingsNegativeTest")
.contains("expected <3> but was <0>")
.contains("elapsed time")
.contains("remaining time")
.contains("last poll interval was")),
dynamicTest("Second level step 1 status", () ->
assertThat(testResult.get(0).getSteps().get(0).getSteps().get(0).getStatus())
.isEqualTo(Status.PASSED)),
dynamicTest("Second level step 2 name", () ->
assertThat(testResult.get(0).getSteps().get(0).getSteps().get(1).getName())
.contains("Condition timeout.")
.contains("io.qameta.allure.awaitility.GlobalSettingsNegativeTest")),
dynamicTest("Second level step 2 status", () ->
assertThat(testResult.get(0).getSteps().get(0).getSteps().get(1).getStatus())
.isEqualTo(Status.BROKEN))
);
}

Expand Down
Loading