From b5e86bb69b076c21d70ce713ff87100488ac830c Mon Sep 17 00:00:00 2001 From: Vadzim Hushchanskou Date: Thu, 21 Dec 2023 18:07:27 +0300 Subject: [PATCH] Another background test --- .../karate/ReportPortalPublisher.java | 2 +- .../karate/background/BackgroundTest.java | 1 + .../background/BackgroundTwoStepsTest.java | 81 +++++++++++++++++++ .../feature/background_two_steps.feature | 8 ++ 4 files changed, 91 insertions(+), 1 deletion(-) create mode 100644 src/test/java/com/epam/reportportal/karate/background/BackgroundTwoStepsTest.java create mode 100644 src/test/resources/feature/background_two_steps.feature diff --git a/src/main/java/com/epam/reportportal/karate/ReportPortalPublisher.java b/src/main/java/com/epam/reportportal/karate/ReportPortalPublisher.java index 15bdb23..b710363 100644 --- a/src/main/java/com/epam/reportportal/karate/ReportPortalPublisher.java +++ b/src/main/java/com/epam/reportportal/karate/ReportPortalPublisher.java @@ -307,7 +307,6 @@ public void finishFeature(FeatureResult featureResult) { featureResult.isFailed() ? ItemStatus.FAILED : ItemStatus.PASSED); //noinspection ReactiveStreamsUnusedPublisher launch.get().finishTestItem(featureIdMap.remove(featureResult.getCallNameForReport()), rq); - backgroundId = null; } /** @@ -338,6 +337,7 @@ public void finishScenario(ScenarioResult scenarioResult) { Maybe removedScenarioId = scenarioIdMap.remove(scenarioResult.getScenario().getName()); //noinspection ReactiveStreamsUnusedPublisher launch.get().finishTestItem(removedScenarioId, rq); + backgroundId = null; } @Nonnull diff --git a/src/test/java/com/epam/reportportal/karate/background/BackgroundTest.java b/src/test/java/com/epam/reportportal/karate/background/BackgroundTest.java index 784b086..785c3be 100644 --- a/src/test/java/com/epam/reportportal/karate/background/BackgroundTest.java +++ b/src/test/java/com/epam/reportportal/karate/background/BackgroundTest.java @@ -72,5 +72,6 @@ public void test_background_steps() { assertThat(nestedSteps, hasSize(1)); StartTestItemRQ nestedStep = nestedSteps.get(0); assertThat(nestedStep.getName(), equalTo("Given def four = 4")); + assertThat(nestedStep.isHasStats(), equalTo(Boolean.FALSE)); } } diff --git a/src/test/java/com/epam/reportportal/karate/background/BackgroundTwoStepsTest.java b/src/test/java/com/epam/reportportal/karate/background/BackgroundTwoStepsTest.java new file mode 100644 index 0000000..4659a40 --- /dev/null +++ b/src/test/java/com/epam/reportportal/karate/background/BackgroundTwoStepsTest.java @@ -0,0 +1,81 @@ +package com.epam.reportportal.karate.background; + +import com.epam.reportportal.karate.utils.TestUtils; +import com.epam.reportportal.listeners.ItemType; +import com.epam.reportportal.service.ReportPortal; +import com.epam.reportportal.service.ReportPortalClient; +import com.epam.reportportal.util.test.CommonUtils; +import com.epam.ta.reportportal.ws.model.StartTestItemRQ; +import com.intuit.karate.core.Background; +import org.apache.commons.lang3.tuple.Pair; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.mockito.ArgumentCaptor; + +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import static com.epam.reportportal.karate.utils.TestUtils.*; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.*; +import static org.mockito.ArgumentMatchers.same; +import static org.mockito.ArgumentMatchers.startsWith; +import static org.mockito.Mockito.*; + +public class BackgroundTwoStepsTest { + private final String featureId = CommonUtils.namedId("feature_"); + private final String scenarioId = CommonUtils.namedId("scenario_"); + private final List stepIds = Stream.generate(() -> CommonUtils.namedId("step_")) + .limit(2).collect(Collectors.toList()); + private final List> nestedStepIds = Stream.concat( + stepIds.stream().map(id -> Pair.of(id, CommonUtils.namedId("nested_step_"))), + stepIds.stream().map(id -> Pair.of(id, CommonUtils.namedId("nested_step_")))).collect(Collectors.toList() + ); + + private final ReportPortalClient client = mock(ReportPortalClient.class); + private final ReportPortal rp = ReportPortal.create(client, standardParameters(), testExecutor()); + + @BeforeEach + public void setupMock() { + mockLaunch(client, null, featureId, scenarioId, stepIds); + mockNestedSteps(client, nestedStepIds); + mockBatchLogging(client); + } + + @Test + public void test_background_steps() { + var results = TestUtils.runAsReport(rp, "classpath:feature/background_two_steps.feature"); + assertThat(results.getFailCount(), equalTo(0)); + + ArgumentCaptor captor = ArgumentCaptor.forClass(StartTestItemRQ.class); + verify(client).startTestItem(captor.capture()); + verify(client, times(1)).startTestItem(same(featureId), captor.capture()); + ArgumentCaptor stepCaptor = ArgumentCaptor.forClass(StartTestItemRQ.class); + verify(client, times(2)).startTestItem(same(scenarioId), stepCaptor.capture()); + ArgumentCaptor nestedStepCaptor = ArgumentCaptor.forClass(StartTestItemRQ.class); + verify(client, times(2)).startTestItem(startsWith("step_"), nestedStepCaptor.capture()); + + List items = captor.getAllValues(); + assertThat(items, hasSize(2)); + List steps = stepCaptor.getAllValues(); + assertThat(steps, hasSize(2)); + + List backgroundSteps = steps.stream() + .filter(s -> s.getName().startsWith(Background.KEYWORD)).collect(Collectors.toList()); + assertThat(backgroundSteps, hasSize(1)); + StartTestItemRQ backgroundStep = backgroundSteps.get(0); + assertThat(backgroundStep.getName(), equalTo(Background.KEYWORD)); // No name for Background in Karate + assertThat(backgroundStep.isHasStats(), equalTo(Boolean.FALSE)); + assertThat(backgroundStep.getStartTime(), notNullValue()); + assertThat(backgroundStep.getType(), equalTo(ItemType.STEP.name())); + + List nestedSteps = nestedStepCaptor.getAllValues(); + assertThat(nestedSteps, hasSize(2)); + nestedSteps.forEach(step -> assertThat(step.isHasStats(), equalTo(Boolean.FALSE))); + Set nestedStepNames = nestedSteps.stream().map(StartTestItemRQ::getName).collect(Collectors.toSet()); + + assertThat(nestedStepNames, allOf(hasItem("Given def vara = 2"), hasItem("And def varb = 2"))); + } +} diff --git a/src/test/resources/feature/background_two_steps.feature b/src/test/resources/feature/background_two_steps.feature new file mode 100644 index 0000000..70c4f06 --- /dev/null +++ b/src/test/resources/feature/background_two_steps.feature @@ -0,0 +1,8 @@ +Feature: test background with two steps reporting + + Background: Set variable + Given def vara = 2 + And def varb = 2 + + Scenario: Verify math + Then assert vara * varb == 4