From 838e9f3024b750d8f1424d7c930bd117ec1fa9ae Mon Sep 17 00:00:00 2001 From: Vadzim Hushchanskou Date: Wed, 27 Dec 2023 17:33:39 +0300 Subject: [PATCH] Add another test --- .../karate/ReportPortalPublisher.java | 2 +- .../logging/HttpRequestLoggingTest.java | 80 +++++++++++++++++++ .../resources/feature/http_request.feature | 16 ++++ 3 files changed, 97 insertions(+), 1 deletion(-) create mode 100644 src/test/java/com/epam/reportportal/karate/logging/HttpRequestLoggingTest.java create mode 100644 src/test/resources/feature/http_request.feature diff --git a/src/main/java/com/epam/reportportal/karate/ReportPortalPublisher.java b/src/main/java/com/epam/reportportal/karate/ReportPortalPublisher.java index e3d0835..e0fddae 100644 --- a/src/main/java/com/epam/reportportal/karate/ReportPortalPublisher.java +++ b/src/main/java/com/epam/reportportal/karate/ReportPortalPublisher.java @@ -467,7 +467,7 @@ public void sendStepResults(StepResult stepResult) { Step step = stepResult.getStep(); String docString = step.getDocString(); if (isNotBlank(docString)) { - sendLog(stepId, "Docstring: \n\n" + String.format(MARKDOWN_CODE_PATTERN, step.getDocString()), + sendLog(stepId, "Docstring:\n\n" + String.format(MARKDOWN_CODE_PATTERN, step.getDocString()), LogLevel.INFO); } diff --git a/src/test/java/com/epam/reportportal/karate/logging/HttpRequestLoggingTest.java b/src/test/java/com/epam/reportportal/karate/logging/HttpRequestLoggingTest.java new file mode 100644 index 0000000..17a88f9 --- /dev/null +++ b/src/test/java/com/epam/reportportal/karate/logging/HttpRequestLoggingTest.java @@ -0,0 +1,80 @@ +/* + * Copyright 2023 EPAM Systems + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.epam.reportportal.karate.logging; + +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.log.SaveLogRQ; +import okhttp3.MultipartBody; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.mockito.ArgumentCaptor; + +import java.util.List; +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.Mockito.*; + +public class HttpRequestLoggingTest { + private final String launchUuid = CommonUtils.namedId("launch_"); + private final String featureId = CommonUtils.namedId("feature_"); + private final String scenarioId = CommonUtils.namedId("scenario_"); + private final List stepIds = Stream.generate(() -> CommonUtils.namedId("step_")) + .limit(6).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, launchUuid, featureId, scenarioId, stepIds); + mockBatchLogging(client); + } + + @Test + @SuppressWarnings({"unchecked", "rawtypes"}) + public void test_http_request_logging() { + var results = TestUtils.runAsReport(rp, "classpath:feature/http_request.feature"); + assertThat(results.getFailCount(), equalTo(0)); + + ArgumentCaptor logCaptor = ArgumentCaptor.forClass(List.class); + verify(client, atLeastOnce()).log(logCaptor.capture()); + List logs = logCaptor + .getAllValues(). + stream() + .flatMap(rq -> extractJsonParts((List) rq).stream()) + .filter(rq -> LogLevel.INFO.name().equals(rq.getLevel())) + .collect(Collectors.toList()); + + assertThat(logs, hasSize(2)); + List messages = logs.stream().map(SaveLogRQ::getMessage).collect(Collectors.toList()); + assertThat(messages, containsInAnyOrder( + equalTo("Docstring:\n\n```\n{\n" + + " username: 'user',\n" + + " password: 'password',\n" + + " grant_type: 'password'\n" + + "}\n```"), + containsString("{\"username\":\"user\",\"password\":\"password\",\"grant_type\":\"password\"}"))); + } +} diff --git a/src/test/resources/feature/http_request.feature b/src/test/resources/feature/http_request.feature new file mode 100644 index 0000000..b958f45 --- /dev/null +++ b/src/test/resources/feature/http_request.feature @@ -0,0 +1,16 @@ +Feature: verify basic HTTP request + + Scenario: Verify HTTP request + Given url 'https://example.com' + And header Content-Type = 'application/json' + And path 'api/test' + And request + """ + { + username: 'user', + password: 'password', + grant_type: 'password' + } + """ + When method post + Then status 404