From 27c370c12bbaf8dd6b57e41dc219a0d3e337f7a2 Mon Sep 17 00:00:00 2001 From: Vadzim Hushchanskou Date: Wed, 20 Dec 2023 13:42:04 +0300 Subject: [PATCH] Add parameter log message verification --- .../ExamplesStepParametersTest.java | 23 ++++++++++++- .../reportportal/karate/utils/TestUtils.java | 33 +++++++++++++++++++ 2 files changed, 55 insertions(+), 1 deletion(-) diff --git a/src/test/java/com/epam/reportportal/karate/parameters/ExamplesStepParametersTest.java b/src/test/java/com/epam/reportportal/karate/parameters/ExamplesStepParametersTest.java index 1378c89..7e3d76f 100644 --- a/src/test/java/com/epam/reportportal/karate/parameters/ExamplesStepParametersTest.java +++ b/src/test/java/com/epam/reportportal/karate/parameters/ExamplesStepParametersTest.java @@ -1,11 +1,14 @@ package com.epam.reportportal.karate.parameters; import com.epam.reportportal.karate.utils.TestUtils; +import com.epam.reportportal.listeners.LogLevel; 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.ParameterResource; import com.epam.ta.reportportal.ws.model.StartTestItemRQ; +import com.epam.ta.reportportal.ws.model.log.SaveLogRQ; +import okhttp3.MultipartBody; import org.apache.commons.lang3.tuple.Pair; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -13,6 +16,7 @@ import java.util.Collection; import java.util.List; +import java.util.Map; import java.util.Set; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -21,6 +25,7 @@ import static java.util.stream.Stream.ofNullable; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.*; +import static org.hamcrest.Matchers.startsWith; import static org.mockito.ArgumentMatchers.same; import static org.mockito.Mockito.*; @@ -50,12 +55,13 @@ private static Set toParameterStringList(List paramet } @Test + @SuppressWarnings({"unchecked", "rawtypes"}) public void test_examples_parameters_for_steps() { var results = TestUtils.runAsReport(rp, "classpath:feature/examples.feature"); assertThat(results.getFailCount(), equalTo(0)); ArgumentCaptor captor = ArgumentCaptor.forClass(StartTestItemRQ.class); - verify(client, times(1)).startTestItem(captor.capture()); + verify(client).startTestItem(captor.capture()); verify(client, times(2)).startTestItem(same(featureId), captor.capture()); ArgumentCaptor firstExampleCaptor = ArgumentCaptor.forClass(StartTestItemRQ.class); verify(client, times(2)).startTestItem(same(exampleIds.get(0)), firstExampleCaptor.capture()); @@ -77,5 +83,20 @@ public void test_examples_parameters_for_steps() { parameterStrings = toParameterStringList(secondSteps.get(1).getParameters()); assertThat(parameterStrings, hasSize(1)); assertThat(parameterStrings, hasItem("result:3")); + + ArgumentCaptor logCaptor = ArgumentCaptor.forClass(List.class); + verify(client, atLeastOnce()).log(logCaptor.capture()); + Map logs = logCaptor + .getAllValues(). + stream() + .flatMap(rq -> extractJsonParts((List) rq).stream()) + .filter(rq -> LogLevel.INFO.name().equals(rq.getLevel())) + .collect(Collectors.toMap(SaveLogRQ::getItemUuid, v -> v)); + + List stepIdList = stepIds.stream().flatMap(e -> e.getValue().stream()).collect(Collectors.toList()); + assertThat(logs.keySet(), hasSize(stepIdList.size())); + stepIdList.forEach(id -> assertThat(logs, hasKey(id))); + assertThat(logs.values().stream().map(SaveLogRQ::getMessage).collect(Collectors.toList()), + everyItem(startsWith("Parameters:"))); } } diff --git a/src/test/java/com/epam/reportportal/karate/utils/TestUtils.java b/src/test/java/com/epam/reportportal/karate/utils/TestUtils.java index 3fbc449..cbb07c4 100644 --- a/src/test/java/com/epam/reportportal/karate/utils/TestUtils.java +++ b/src/test/java/com/epam/reportportal/karate/utils/TestUtils.java @@ -5,17 +5,24 @@ import com.epam.reportportal.service.ReportPortal; import com.epam.reportportal.service.ReportPortalClient; import com.epam.reportportal.util.test.CommonUtils; +import com.epam.reportportal.utils.http.HttpRequestUtils; import com.epam.ta.reportportal.ws.model.BatchSaveOperatingRS; +import com.epam.ta.reportportal.ws.model.Constants; import com.epam.ta.reportportal.ws.model.OperationCompletionRS; import com.epam.ta.reportportal.ws.model.item.ItemCreatedRS; import com.epam.ta.reportportal.ws.model.launch.StartLaunchRS; +import com.epam.ta.reportportal.ws.model.log.SaveLogRQ; +import com.fasterxml.jackson.core.type.TypeReference; import com.intuit.karate.Results; import io.reactivex.Maybe; +import okhttp3.MultipartBody; +import okio.Buffer; import org.apache.commons.lang3.tuple.Pair; import org.mockito.stubbing.Answer; import javax.annotation.Nonnull; import javax.annotation.Nullable; +import java.io.IOException; import java.util.*; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; @@ -169,4 +176,30 @@ public static void mockNestedSteps(final ReportPortalClient client, final List

>) invocation -> Maybe.just(new OperationCompletionRS()))); } + + public static List extractJsonParts(List parts) { + return parts.stream() + .filter(p -> ofNullable(p.headers()).map(headers -> headers.get("Content-Disposition")) + .map(h -> h.contains(Constants.LOG_REQUEST_JSON_PART)) + .orElse(false)) + .map(MultipartBody.Part::body) + .map(b -> { + Buffer buf = new Buffer(); + try { + b.writeTo(buf); + } catch (IOException ignore) { + } + return buf.readByteArray(); + }) + .map(b -> { + try { + return HttpRequestUtils.MAPPER.readValue(b, new TypeReference<>() { + }); + } catch (IOException e) { + return Collections.emptyList(); + } + }) + .flatMap(Collection::stream) + .collect(Collectors.toList()); + } }