diff --git a/CHANGELOG.md b/CHANGELOG.md index 0e31d25..04e804a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,8 @@ # Changelog ## [Unreleased] +### Fixed +- Step name generation for some cases, by @HardNorth ## [5.5.0] ### Added diff --git a/src/main/java/com/epam/reportportal/karate/ReportPortalUtils.java b/src/main/java/com/epam/reportportal/karate/ReportPortalUtils.java index fa92fbe..700d52b 100644 --- a/src/main/java/com/epam/reportportal/karate/ReportPortalUtils.java +++ b/src/main/java/com/epam/reportportal/karate/ReportPortalUtils.java @@ -109,6 +109,7 @@ public class ReportPortalUtils { private static final String PARAMETER_ITEMS_DELIMITER = ";"; private static final String KEY_VALUE_SEPARATOR = ":"; private static final Pattern CONSOLE_COLORS_PATTERN = Pattern.compile("\\u001B\\[[0-?]*[ -/]*[@-~]"); + private static final String STEP_NAME_PART_SEPARATOR = " "; private static final List CODE_REF_PREFIXES_TO_REMOVE = List.of( "build/resources/test/", @@ -453,6 +454,25 @@ public static StartTestItemRQ buildStartBackgroundRq(Instant startTime, @Nonnull return rq; } + private static String getStepName(@Nonnull Step step) { + StringBuilder builder = new StringBuilder(); + String prefix = step.getPrefix(); + if (prefix != null && !prefix.isBlank()) { + builder.append(prefix); + } + String keyword = step.getKeyword(); + if (keyword != null && !keyword.isBlank()) { + builder.append(STEP_NAME_PART_SEPARATOR); + builder.append(keyword); + } + String text = step.getText(); + if (text != null && !text.isBlank()) { + builder.append(STEP_NAME_PART_SEPARATOR); + builder.append(text); + } + return builder.toString(); + } + /** * Customize start step test item event/request * @@ -462,7 +482,7 @@ public static StartTestItemRQ buildStartBackgroundRq(Instant startTime, @Nonnull */ @Nonnull public static StartTestItemRQ buildStartStepRq(@Nonnull Step step, @Nonnull Scenario scenario) { - String stepName = step.getPrefix() + " " + step.getText(); + String stepName = getStepName(step); StartTestItemRQ rq = buildStartTestItemRq(stepName, Instant.now(), ItemType.STEP); rq.setHasStats(false); if (step.isOutline()) { diff --git a/src/test/java/com/epam/reportportal/karate/background/BackgroundExamplesTest.java b/src/test/java/com/epam/reportportal/karate/background/BackgroundExamplesTest.java index 9be0687..ff7a1cd 100644 --- a/src/test/java/com/epam/reportportal/karate/background/BackgroundExamplesTest.java +++ b/src/test/java/com/epam/reportportal/karate/background/BackgroundExamplesTest.java @@ -115,6 +115,6 @@ public void test_background_steps(boolean report) { Set nestedStepNames = nestedSteps.stream().map(StartTestItemRQ::getName).collect(Collectors.toSet()); assertThat(nestedStepNames, hasSize(1)); - assertThat(nestedStepNames, hasItem("Given varb = 2")); + assertThat(nestedStepNames, hasItem("Given def varb = 2")); } } 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 b23f484..c7ece3d 100644 --- a/src/test/java/com/epam/reportportal/karate/background/BackgroundTest.java +++ b/src/test/java/com/epam/reportportal/karate/background/BackgroundTest.java @@ -97,7 +97,7 @@ public void test_background_steps(boolean report) { List nestedSteps = nestedStepCaptor.getAllValues(); assertThat(nestedSteps, hasSize(1)); StartTestItemRQ nestedStep = nestedSteps.getFirst(); - assertThat(nestedStep.getName(), equalTo("Given four = 4")); + 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 index 4a2a8cf..bb07f64 100644 --- a/src/test/java/com/epam/reportportal/karate/background/BackgroundTwoStepsTest.java +++ b/src/test/java/com/epam/reportportal/karate/background/BackgroundTwoStepsTest.java @@ -101,6 +101,6 @@ public void test_background_steps(boolean report) { nestedSteps.forEach(step -> assertThat(step.isHasStats(), equalTo(Boolean.FALSE))); Set nestedStepNames = nestedSteps.stream().map(StartTestItemRQ::getName).collect(Collectors.toSet()); - assertThat(nestedStepNames, allOf(hasItem("Given vara = 2"), hasItem("And varb = 2"))); + assertThat(nestedStepNames, allOf(hasItem("Given def vara = 2"), hasItem("And def varb = 2"))); } } diff --git a/src/test/java/com/epam/reportportal/karate/logging/HttpRequestLoggingTest.java b/src/test/java/com/epam/reportportal/karate/logging/HttpRequestLoggingTest.java index 4684488..31da543 100644 --- a/src/test/java/com/epam/reportportal/karate/logging/HttpRequestLoggingTest.java +++ b/src/test/java/com/epam/reportportal/karate/logging/HttpRequestLoggingTest.java @@ -21,6 +21,7 @@ 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.epam.ta.reportportal.ws.model.log.SaveLogRQ; import io.karatelabs.core.SuiteResult; import okhttp3.MultipartBody; @@ -35,6 +36,7 @@ import static com.epam.reportportal.karate.utils.TestUtils.*; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.*; +import static org.hamcrest.Matchers.contains; import static org.mockito.Mockito.*; public class HttpRequestLoggingTest { @@ -49,6 +51,9 @@ public class HttpRequestLoggingTest { grant_type: 'password' } ```"""; + public static final String[] STEP_NAMES = { "Given url 'https://example.com'", "And header Content-Type = 'application/json'", + "And path 'api/test'", "And request", "When method post", "Then status 404" }; + private final String launchUuid = CommonUtils.namedId("launch_"); private final String featureId = CommonUtils.namedId("feature_"); private final String scenarioId = CommonUtils.namedId("scenario_"); @@ -74,7 +79,18 @@ private List extractMessages() { .collect(Collectors.toList()); assertThat(logs, hasSize(greaterThanOrEqualTo(2))); - return logs.stream().map(SaveLogRQ::getMessage).collect(Collectors.toList()); + return logs.stream().map(SaveLogRQ::getMessage).toList(); + } + + @SuppressWarnings({ "unchecked", "rawtypes" }) + private List extractStepNames() { + ArgumentCaptor stepCaptor = ArgumentCaptor.forClass(StartTestItemRQ.class); + verify(client, times(6)).startTestItem(same(scenarioId), stepCaptor.capture()); + List steps = stepCaptor.getAllValues(); + return steps.stream() + .sorted((a, b) -> ((Comparable) a.getStartTime()).compareTo(b.getStartTime())) + .map(StartTestItemRQ::getName) + .toList(); } @Test @@ -84,6 +100,9 @@ public void test_http_request_logging_result_listener() { List messages = extractMessages(); assertThat(messages, hasItem(equalTo(DOCSTRING_LOG_ENTRY))); assertThat(messages, hasItem(containsString("{\"username\":\"user\",\"password\":\"password\",\"grant_type\":\"password\"}"))); + + List stepNames = extractStepNames(); + assertThat(stepNames, contains(STEP_NAMES)); } @Test @@ -95,5 +114,8 @@ public void test_http_request_logging_run_listener() { assertThat(messages, hasItem(containsString("**>>> REQUEST**"))); assertThat(messages, hasItem(containsString("**<<< RESPONSE**"))); assertThat(messages, hasItem(containsString("\"username\" : \"user\""))); + + List stepNames = extractStepNames(); + assertThat(stepNames, contains(STEP_NAMES)); } } diff --git a/src/test/java/com/epam/reportportal/karate/name/SimpleItemNameTest.java b/src/test/java/com/epam/reportportal/karate/name/SimpleItemNameTest.java index 09074a5..6950f6f 100644 --- a/src/test/java/com/epam/reportportal/karate/name/SimpleItemNameTest.java +++ b/src/test/java/com/epam/reportportal/karate/name/SimpleItemNameTest.java @@ -39,7 +39,7 @@ public class SimpleItemNameTest { private static final String TEST_FEATURE = "classpath:feature/simple.feature"; - private static final String[] STEP_NAMES = new String[] { "Given four = 4", "When actualFour = 2 * 2", "Then actualFour == four" }; + private static final String[] STEP_NAMES = new String[] { "Given def four = 4", "When def actualFour = 2 * 2", "Then assert actualFour == four" }; private final String featureId = CommonUtils.namedId("feature_"); private final String scenarioId = CommonUtils.namedId("scenario_"); private final List stepIds = Stream.generate(() -> CommonUtils.namedId("step_")).limit(3).collect(Collectors.toList()); diff --git a/src/test/java/com/epam/reportportal/karate/timing/SimpleTimingTest.java b/src/test/java/com/epam/reportportal/karate/timing/SimpleTimingTest.java index ed05471..6d9ec85 100644 --- a/src/test/java/com/epam/reportportal/karate/timing/SimpleTimingTest.java +++ b/src/test/java/com/epam/reportportal/karate/timing/SimpleTimingTest.java @@ -107,10 +107,10 @@ public void test_each_item_has_correct_start_date(boolean report, boolean useMic ); List steps = stepCaptor.getAllValues(); - StartTestItemRQ firstStep = steps.stream().filter(s -> "Given four = 4".equals(s.getName())).findAny().orElseThrow(); - StartTestItemRQ secondStep = steps.stream().filter(s -> "When actualFour = 2 * 2".equals(s.getName())).findAny().orElseThrow(); + StartTestItemRQ firstStep = steps.stream().filter(s -> "Given def four = 4".equals(s.getName())).findAny().orElseThrow(); + StartTestItemRQ secondStep = steps.stream().filter(s -> "When def actualFour = 2 * 2".equals(s.getName())).findAny().orElseThrow(); StartTestItemRQ thirdStep = steps.stream() - .filter(s -> "Then actualFour == four".equals(s.getName())) + .filter(s -> "Then assert actualFour == four".equals(s.getName())) .findAny() .orElseThrow();