From 011722a6750ea10bd6e87d51fd6371c0710869ca Mon Sep 17 00:00:00 2001 From: tesarakt97 <90032193+tesarakt97@users.noreply.github.com> Date: Sun, 22 Sep 2024 15:01:54 +0300 Subject: [PATCH 1/4] =?UTF-8?q?1=20=D0=A3=D0=B4=D0=B0=D0=BB=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20=D0=B8=D0=BC=D0=B5=D1=8E=D1=89=D0=B8=D1=85=D1=81?= =?UTF-8?q?=D1=8F=20=D1=84=D0=B0=D0=B9=D0=BB=D0=BE=D0=B2=20=D0=B2=20=D0=BF?= =?UTF-8?q?=D0=B0=D0=BF=D0=BA=D0=B5=20tests=202=20=D0=A1=D0=BE=D0=B7=D0=B4?= =?UTF-8?q?=D0=B0=D0=BD=D0=B8=D0=B5=20=D0=BF=D1=80=D0=BE=D0=B5=D0=BA=D1=82?= =?UTF-8?q?=D0=B0=20=D0=BD=D0=B0=20=D0=BE=D1=81=D0=BD=D0=BE=D0=B2=D0=B5=20?= =?UTF-8?q?=D0=BF=D0=B5=D1=80=D0=B2=D0=BE=D0=B3=D0=BE=20=D1=83=D1=80=D0=BE?= =?UTF-8?q?=D0=BA=D0=B0=20+=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=BB=D0=BE=D0=B3=D0=B8=D1=80=D0=BE=D0=B2?= =?UTF-8?q?=D0=B0=D0=BD=D0=B8=D1=8F=203=20=D0=9F=D0=B5=D1=80=D0=B5=D0=BD?= =?UTF-8?q?=D0=BE=D1=81=20=D0=BE=D0=B1=D1=8A=D0=B5=D0=BA=D1=82=D0=BE=D0=B2?= =?UTF-8?q?=20=D0=B2=20submodel?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../niffler/NifflerCurrencyApplication.java | 1 - .../test/java/guru/qa/niffler/api/GhApi.java | 19 ---- .../java/guru/qa/niffler/api/GhApiClient.java | 30 ------ .../java/guru/qa/niffler/api/SpendApi.java | 12 --- .../guru/qa/niffler/api/SpendApiClient.java | 24 ----- .../jupiter/annotation/DisabledByIssue.java | 16 --- .../jupiter/extension/BrowserExtension.java | 67 ------------ .../jupiter/extension/IssueExtension.java | 37 ------- .../jupiter/extension/SpendingExtension.java | 57 ---------- .../jupiter/extension/SuiteExtension.java | 37 ------- .../extension/UsersQueueExtension.java | 102 ------------------ .../qa/niffler/page/EditSpendingPage.java | 20 ---- .../java/guru/qa/niffler/page/LoginPage.java | 18 ---- .../qa/niffler/test/web/SpendingWebTest.java | 37 ------- .../java/guru/qa/nifler/api/SpendApi.java | 12 +++ .../guru/qa/nifler/api/SpendApiClient.java | 37 +++++++ .../qa/{niffler => nifler}/config/Config.java | 7 +- .../config/LocalConfig.java | 13 +-- .../enums}/CurrencyValues.java | 4 +- .../jupiter/Spend.java} | 16 ++- .../qa/nifler/jupiter/SpendExtension.java | 57 ++++++++++ .../{niffler => nifler}/model/SpendJson.java | 7 +- .../model/submodel}/CategoryJson.java | 5 +- .../guru/qa/nifler/page/EditSpendingPage.java | 15 +++ .../java/guru/qa/nifler/page/LoginPage.java | 18 ++++ .../qa/{niffler => nifler}/page/MainPage.java | 13 +-- .../guru/qa/nifler/test/SpendingWebTest.java | 34 ++++++ niffler-spend/build.gradle | 1 + settings.gradle | 2 +- 29 files changed, 203 insertions(+), 515 deletions(-) delete mode 100644 niffler-e-2-e-tests/src/test/java/guru/qa/niffler/api/GhApi.java delete mode 100644 niffler-e-2-e-tests/src/test/java/guru/qa/niffler/api/GhApiClient.java delete mode 100644 niffler-e-2-e-tests/src/test/java/guru/qa/niffler/api/SpendApi.java delete mode 100644 niffler-e-2-e-tests/src/test/java/guru/qa/niffler/api/SpendApiClient.java delete mode 100644 niffler-e-2-e-tests/src/test/java/guru/qa/niffler/jupiter/annotation/DisabledByIssue.java delete mode 100644 niffler-e-2-e-tests/src/test/java/guru/qa/niffler/jupiter/extension/BrowserExtension.java delete mode 100644 niffler-e-2-e-tests/src/test/java/guru/qa/niffler/jupiter/extension/IssueExtension.java delete mode 100644 niffler-e-2-e-tests/src/test/java/guru/qa/niffler/jupiter/extension/SpendingExtension.java delete mode 100644 niffler-e-2-e-tests/src/test/java/guru/qa/niffler/jupiter/extension/SuiteExtension.java delete mode 100644 niffler-e-2-e-tests/src/test/java/guru/qa/niffler/jupiter/extension/UsersQueueExtension.java delete mode 100644 niffler-e-2-e-tests/src/test/java/guru/qa/niffler/page/EditSpendingPage.java delete mode 100644 niffler-e-2-e-tests/src/test/java/guru/qa/niffler/page/LoginPage.java delete mode 100644 niffler-e-2-e-tests/src/test/java/guru/qa/niffler/test/web/SpendingWebTest.java create mode 100644 niffler-e-2-e-tests/src/test/java/guru/qa/nifler/api/SpendApi.java create mode 100644 niffler-e-2-e-tests/src/test/java/guru/qa/nifler/api/SpendApiClient.java rename niffler-e-2-e-tests/src/test/java/guru/qa/{niffler => nifler}/config/Config.java (56%) rename niffler-e-2-e-tests/src/test/java/guru/qa/{niffler => nifler}/config/LocalConfig.java (50%) rename niffler-e-2-e-tests/src/test/java/guru/qa/{niffler/model => nifler/enums}/CurrencyValues.java (60%) rename niffler-e-2-e-tests/src/test/java/guru/qa/{niffler/jupiter/annotation/Spending.java => nifler/jupiter/Spend.java} (67%) create mode 100644 niffler-e-2-e-tests/src/test/java/guru/qa/nifler/jupiter/SpendExtension.java rename niffler-e-2-e-tests/src/test/java/guru/qa/{niffler => nifler}/model/SpendJson.java (79%) rename niffler-e-2-e-tests/src/test/java/guru/qa/{niffler/model => nifler/model/submodel}/CategoryJson.java (87%) create mode 100644 niffler-e-2-e-tests/src/test/java/guru/qa/nifler/page/EditSpendingPage.java create mode 100644 niffler-e-2-e-tests/src/test/java/guru/qa/nifler/page/LoginPage.java rename niffler-e-2-e-tests/src/test/java/guru/qa/{niffler => nifler}/page/MainPage.java (54%) create mode 100644 niffler-e-2-e-tests/src/test/java/guru/qa/nifler/test/SpendingWebTest.java diff --git a/niffler-currency/src/main/java/guru/qa/niffler/NifflerCurrencyApplication.java b/niffler-currency/src/main/java/guru/qa/niffler/NifflerCurrencyApplication.java index dfe4f51f2..44374d794 100644 --- a/niffler-currency/src/main/java/guru/qa/niffler/NifflerCurrencyApplication.java +++ b/niffler-currency/src/main/java/guru/qa/niffler/NifflerCurrencyApplication.java @@ -12,5 +12,4 @@ public static void main(String[] args) { springApplication.addListeners(new PropertiesLogger()); springApplication.run(args); } - } diff --git a/niffler-e-2-e-tests/src/test/java/guru/qa/niffler/api/GhApi.java b/niffler-e-2-e-tests/src/test/java/guru/qa/niffler/api/GhApi.java deleted file mode 100644 index b6257d750..000000000 --- a/niffler-e-2-e-tests/src/test/java/guru/qa/niffler/api/GhApi.java +++ /dev/null @@ -1,19 +0,0 @@ -package guru.qa.niffler.api; - -import com.fasterxml.jackson.databind.JsonNode; -import retrofit2.Call; -import retrofit2.http.GET; -import retrofit2.http.Header; -import retrofit2.http.Headers; -import retrofit2.http.Path; - -public interface GhApi { - - @GET("repos/qa-guru/niffler/issues/{issue_number}") - @Headers({ - "Accept: application/vnd.github+json", - "X-GitHub-Api-Version: 2022-11-28" - }) - Call issue(@Header("Authorization") String bearerToken, - @Path("issue_number") String issueNumber); -} diff --git a/niffler-e-2-e-tests/src/test/java/guru/qa/niffler/api/GhApiClient.java b/niffler-e-2-e-tests/src/test/java/guru/qa/niffler/api/GhApiClient.java deleted file mode 100644 index c0e74366a..000000000 --- a/niffler-e-2-e-tests/src/test/java/guru/qa/niffler/api/GhApiClient.java +++ /dev/null @@ -1,30 +0,0 @@ -package guru.qa.niffler.api; - -import com.fasterxml.jackson.databind.JsonNode; -import guru.qa.niffler.config.Config; -import lombok.SneakyThrows; -import retrofit2.Retrofit; -import retrofit2.converter.jackson.JacksonConverterFactory; - -import java.util.Objects; - -public class GhApiClient { - - private static final String GH_TOKEN_ENV = "GITHUB_TOKEN"; - - private final Retrofit retrofit = new Retrofit.Builder() - .baseUrl(Config.getInstance().ghUrl()) - .addConverterFactory(JacksonConverterFactory.create()) - .build(); - - private final GhApi ghApi = retrofit.create(GhApi.class); - - @SneakyThrows - public String issueState(String issueNumber) { - JsonNode responseBody = ghApi.issue( - "Bearer " + System.getenv(GH_TOKEN_ENV), - issueNumber - ).execute().body(); - return Objects.requireNonNull(responseBody).get("state").asText(); - } -} diff --git a/niffler-e-2-e-tests/src/test/java/guru/qa/niffler/api/SpendApi.java b/niffler-e-2-e-tests/src/test/java/guru/qa/niffler/api/SpendApi.java deleted file mode 100644 index 0d4a987c1..000000000 --- a/niffler-e-2-e-tests/src/test/java/guru/qa/niffler/api/SpendApi.java +++ /dev/null @@ -1,12 +0,0 @@ -package guru.qa.niffler.api; - -import guru.qa.niffler.model.SpendJson; -import retrofit2.Call; -import retrofit2.http.Body; -import retrofit2.http.POST; - -public interface SpendApi { - - @POST("internal/spends/add") - Call addSpend(@Body SpendJson spend); -} diff --git a/niffler-e-2-e-tests/src/test/java/guru/qa/niffler/api/SpendApiClient.java b/niffler-e-2-e-tests/src/test/java/guru/qa/niffler/api/SpendApiClient.java deleted file mode 100644 index f40ebfcbe..000000000 --- a/niffler-e-2-e-tests/src/test/java/guru/qa/niffler/api/SpendApiClient.java +++ /dev/null @@ -1,24 +0,0 @@ -package guru.qa.niffler.api; - -import guru.qa.niffler.config.Config; -import guru.qa.niffler.model.SpendJson; -import lombok.SneakyThrows; -import retrofit2.Retrofit; -import retrofit2.converter.jackson.JacksonConverterFactory; - -public class SpendApiClient { - - private final Retrofit retrofit = new Retrofit.Builder() - .baseUrl(Config.getInstance().spendUrl()) - .addConverterFactory(JacksonConverterFactory.create()) - .build(); - - private final SpendApi spendApi = retrofit.create(SpendApi.class); - - @SneakyThrows - public SpendJson createSpend(SpendJson spend) { - return spendApi.addSpend(spend) - .execute() - .body(); - } -} diff --git a/niffler-e-2-e-tests/src/test/java/guru/qa/niffler/jupiter/annotation/DisabledByIssue.java b/niffler-e-2-e-tests/src/test/java/guru/qa/niffler/jupiter/annotation/DisabledByIssue.java deleted file mode 100644 index 2e60ca02a..000000000 --- a/niffler-e-2-e-tests/src/test/java/guru/qa/niffler/jupiter/annotation/DisabledByIssue.java +++ /dev/null @@ -1,16 +0,0 @@ -package guru.qa.niffler.jupiter.annotation; - -import guru.qa.niffler.jupiter.extension.IssueExtension; -import org.junit.jupiter.api.extension.ExtendWith; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -@Target({ElementType.TYPE, ElementType.METHOD}) -@Retention(RetentionPolicy.RUNTIME) -@ExtendWith(IssueExtension.class) -public @interface DisabledByIssue { - String value(); -} diff --git a/niffler-e-2-e-tests/src/test/java/guru/qa/niffler/jupiter/extension/BrowserExtension.java b/niffler-e-2-e-tests/src/test/java/guru/qa/niffler/jupiter/extension/BrowserExtension.java deleted file mode 100644 index af20fdf49..000000000 --- a/niffler-e-2-e-tests/src/test/java/guru/qa/niffler/jupiter/extension/BrowserExtension.java +++ /dev/null @@ -1,67 +0,0 @@ -package guru.qa.niffler.jupiter.extension; - -import com.codeborne.selenide.Selenide; -import com.codeborne.selenide.WebDriverRunner; -import com.codeborne.selenide.logevents.SelenideLogger; -import io.qameta.allure.Allure; -import io.qameta.allure.selenide.AllureSelenide; -import org.junit.jupiter.api.extension.AfterEachCallback; -import org.junit.jupiter.api.extension.BeforeEachCallback; -import org.junit.jupiter.api.extension.ExtensionContext; -import org.junit.jupiter.api.extension.LifecycleMethodExecutionExceptionHandler; -import org.junit.jupiter.api.extension.TestExecutionExceptionHandler; -import org.openqa.selenium.OutputType; -import org.openqa.selenium.TakesScreenshot; - -import java.io.ByteArrayInputStream; - -public class BrowserExtension implements - BeforeEachCallback, - AfterEachCallback, - TestExecutionExceptionHandler, - LifecycleMethodExecutionExceptionHandler { - - @Override - public void afterEach(ExtensionContext context) throws Exception { - if (WebDriverRunner.hasWebDriverStarted()) { - Selenide.closeWebDriver(); - } - } - - @Override - public void beforeEach(ExtensionContext context) throws Exception { - SelenideLogger.addListener("Allure-selenide", new AllureSelenide() - .savePageSource(false) - .screenshots(false) - ); - } - - @Override - public void handleTestExecutionException(ExtensionContext context, Throwable throwable) throws Throwable { - doScreenshot(); - throw throwable; - } - - @Override - public void handleBeforeEachMethodExecutionException(ExtensionContext context, Throwable throwable) throws Throwable { - doScreenshot(); - throw throwable; - } - - @Override - public void handleAfterEachMethodExecutionException(ExtensionContext context, Throwable throwable) throws Throwable { - doScreenshot(); - throw throwable; - } - - private static void doScreenshot() { - if (WebDriverRunner.hasWebDriverStarted()) { - Allure.addAttachment( - "Screen on fail", - new ByteArrayInputStream( - ((TakesScreenshot) WebDriverRunner.getWebDriver()).getScreenshotAs(OutputType.BYTES) - ) - ); - } - } -} diff --git a/niffler-e-2-e-tests/src/test/java/guru/qa/niffler/jupiter/extension/IssueExtension.java b/niffler-e-2-e-tests/src/test/java/guru/qa/niffler/jupiter/extension/IssueExtension.java deleted file mode 100644 index 3d2d89735..000000000 --- a/niffler-e-2-e-tests/src/test/java/guru/qa/niffler/jupiter/extension/IssueExtension.java +++ /dev/null @@ -1,37 +0,0 @@ -package guru.qa.niffler.jupiter.extension; - -import guru.qa.niffler.api.GhApiClient; -import guru.qa.niffler.jupiter.annotation.DisabledByIssue; -import lombok.SneakyThrows; -import org.junit.jupiter.api.extension.ConditionEvaluationResult; -import org.junit.jupiter.api.extension.ExecutionCondition; -import org.junit.jupiter.api.extension.ExtensionContext; -import org.junit.platform.commons.support.AnnotationSupport; -import org.junit.platform.commons.support.SearchOption; - - -public class IssueExtension implements ExecutionCondition { - - private static final GhApiClient ghApiClient = new GhApiClient(); - - @SneakyThrows - @Override - public ConditionEvaluationResult evaluateExecutionCondition(ExtensionContext context) { - return AnnotationSupport.findAnnotation( - context.getRequiredTestMethod(), - DisabledByIssue.class - ).or( - () -> AnnotationSupport.findAnnotation( - context.getRequiredTestClass(), - DisabledByIssue.class, - SearchOption.INCLUDE_ENCLOSING_CLASSES - ) - ).map( - byIssue -> "open".equals(ghApiClient.issueState(byIssue.value())) - ? ConditionEvaluationResult.disabled("Disabled by issue #" + byIssue.value()) - : ConditionEvaluationResult.enabled("Issue closed") - ).orElseGet( - () -> ConditionEvaluationResult.enabled("Annotation @DisabledByIssue not found") - ); - } -} diff --git a/niffler-e-2-e-tests/src/test/java/guru/qa/niffler/jupiter/extension/SpendingExtension.java b/niffler-e-2-e-tests/src/test/java/guru/qa/niffler/jupiter/extension/SpendingExtension.java deleted file mode 100644 index 731f2c84f..000000000 --- a/niffler-e-2-e-tests/src/test/java/guru/qa/niffler/jupiter/extension/SpendingExtension.java +++ /dev/null @@ -1,57 +0,0 @@ -package guru.qa.niffler.jupiter.extension; - -import guru.qa.niffler.api.SpendApiClient; -import guru.qa.niffler.jupiter.annotation.Spending; -import guru.qa.niffler.model.CategoryJson; -import guru.qa.niffler.model.CurrencyValues; -import guru.qa.niffler.model.SpendJson; -import org.junit.jupiter.api.extension.BeforeEachCallback; -import org.junit.jupiter.api.extension.ExtensionContext; -import org.junit.jupiter.api.extension.ParameterContext; -import org.junit.jupiter.api.extension.ParameterResolutionException; -import org.junit.jupiter.api.extension.ParameterResolver; -import org.junit.platform.commons.support.AnnotationSupport; - -import java.util.Date; - -public class SpendingExtension implements BeforeEachCallback, ParameterResolver { - - public static final ExtensionContext.Namespace NAMESPACE = ExtensionContext.Namespace.create(SpendingExtension.class); - - private final SpendApiClient spendApiClient = new SpendApiClient(); - - @Override - public void beforeEach(ExtensionContext context) throws Exception { - AnnotationSupport.findAnnotation(context.getRequiredTestMethod(), Spending.class) - .ifPresent(anno -> { - SpendJson spend = new SpendJson( - null, - new Date(), - new CategoryJson( - null, - anno.category(), - anno.username(), - false - ), - CurrencyValues.RUB, - anno.amount(), - anno.description(), - anno.username() - ); - context.getStore(NAMESPACE).put( - context.getUniqueId(), - spendApiClient.createSpend(spend) - ); - }); - } - - @Override - public boolean supportsParameter(ParameterContext parameterContext, ExtensionContext extensionContext) throws ParameterResolutionException { - return parameterContext.getParameter().getType().isAssignableFrom(SpendJson.class); - } - - @Override - public SpendJson resolveParameter(ParameterContext parameterContext, ExtensionContext extensionContext) throws ParameterResolutionException { - return extensionContext.getStore(NAMESPACE).get(extensionContext.getUniqueId(), SpendJson.class); - } -} diff --git a/niffler-e-2-e-tests/src/test/java/guru/qa/niffler/jupiter/extension/SuiteExtension.java b/niffler-e-2-e-tests/src/test/java/guru/qa/niffler/jupiter/extension/SuiteExtension.java deleted file mode 100644 index eaf87a975..000000000 --- a/niffler-e-2-e-tests/src/test/java/guru/qa/niffler/jupiter/extension/SuiteExtension.java +++ /dev/null @@ -1,37 +0,0 @@ -package guru.qa.niffler.jupiter.extension; - -import org.junit.jupiter.api.extension.BeforeAllCallback; -import org.junit.jupiter.api.extension.ExtensionContext; - -public interface SuiteExtension extends BeforeAllCallback { - - /* - 1) Быть уверенными, что SuiteExtension будет выполняться перед каждым тестовым классом - 2) Если мы выполним какой-то код перед загрузкой самого первого тестовго класса, то это и будет beforeSuite(). - 3) При этом, для 2, 3 и т.д. (до N) тестовых классов, больше не будем вызывать beforeSuite() - 4) Когда все-все тесты завершаться, вызовем afterSuite() - */ - @Override - default void beforeAll(ExtensionContext context) throws Exception { - final ExtensionContext rootContext = context.getRoot(); - rootContext.getStore(ExtensionContext.Namespace.GLOBAL) - .getOrComputeIfAbsent( - this.getClass(), - key -> { - beforeSuite(rootContext); - return new ExtensionContext.Store.CloseableResource() { - @Override - public void close() throws Throwable { - afterSuite(); - } - }; - } - ); - } - - default void beforeSuite(ExtensionContext context) { - } - - default void afterSuite() { - } -} diff --git a/niffler-e-2-e-tests/src/test/java/guru/qa/niffler/jupiter/extension/UsersQueueExtension.java b/niffler-e-2-e-tests/src/test/java/guru/qa/niffler/jupiter/extension/UsersQueueExtension.java deleted file mode 100644 index 854c28733..000000000 --- a/niffler-e-2-e-tests/src/test/java/guru/qa/niffler/jupiter/extension/UsersQueueExtension.java +++ /dev/null @@ -1,102 +0,0 @@ -package guru.qa.niffler.jupiter.extension; - -import io.qameta.allure.Allure; -import org.apache.commons.lang3.time.StopWatch; -import org.junit.jupiter.api.extension.AfterTestExecutionCallback; -import org.junit.jupiter.api.extension.BeforeTestExecutionCallback; -import org.junit.jupiter.api.extension.ExtensionContext; -import org.junit.jupiter.api.extension.ParameterContext; -import org.junit.jupiter.api.extension.ParameterResolutionException; -import org.junit.jupiter.api.extension.ParameterResolver; -import org.junit.platform.commons.support.AnnotationSupport; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; -import java.util.Arrays; -import java.util.Date; -import java.util.Optional; -import java.util.Queue; -import java.util.concurrent.ConcurrentLinkedQueue; -import java.util.concurrent.TimeUnit; - -public class UsersQueueExtension implements - BeforeTestExecutionCallback, - AfterTestExecutionCallback, - ParameterResolver { - - public static final ExtensionContext.Namespace NAMESPACE = ExtensionContext.Namespace.create(UsersQueueExtension.class); - - public record StaticUser(String username, String password, boolean empty) { - } - - private static final Queue EMPTY_USERS = new ConcurrentLinkedQueue<>(); - private static final Queue NOT_EMPTY_USERS = new ConcurrentLinkedQueue<>(); - - static { - EMPTY_USERS.add(new StaticUser("bee", "12345", true)); - NOT_EMPTY_USERS.add(new StaticUser("duck", "12345", false)); - NOT_EMPTY_USERS.add(new StaticUser("dima", "12345", false)); - } - - @Target(ElementType.PARAMETER) - @Retention(RetentionPolicy.RUNTIME) - public @interface UserType { - boolean empty() default true; - } - - @Override - public void beforeTestExecution(ExtensionContext context) { - Arrays.stream(context.getRequiredTestMethod().getParameters()) - .filter(p -> AnnotationSupport.isAnnotated(p, UserType.class)) - .findFirst() - .map(p -> p.getAnnotation(UserType.class)) - .ifPresent(ut -> { - Optional user = Optional.empty(); - StopWatch sw = StopWatch.createStarted(); - while (user.isEmpty() && sw.getTime(TimeUnit.SECONDS) < 30) { - user = ut.empty() - ? Optional.ofNullable(EMPTY_USERS.poll()) - : Optional.ofNullable(NOT_EMPTY_USERS.poll()); - } - Allure.getLifecycle().updateTestCase(testCase -> - testCase.setStart(new Date().getTime()) - ); - user.ifPresentOrElse( - u -> - context.getStore(NAMESPACE).put( - context.getUniqueId(), - u - ), - () -> { - throw new IllegalStateException("Can`t obtain user after 30s."); - } - ); - }); - } - - @Override - public void afterTestExecution(ExtensionContext context) { - StaticUser user = context.getStore(NAMESPACE).get( - context.getUniqueId(), - StaticUser.class - ); - if (user.empty()) { - EMPTY_USERS.add(user); - } else { - NOT_EMPTY_USERS.add(user); - } - } - - @Override - public boolean supportsParameter(ParameterContext parameterContext, ExtensionContext extensionContext) throws ParameterResolutionException { - return parameterContext.getParameter().getType().isAssignableFrom(StaticUser.class) - && AnnotationSupport.isAnnotated(parameterContext.getParameter(), UserType.class); - } - - @Override - public StaticUser resolveParameter(ParameterContext parameterContext, ExtensionContext extensionContext) throws ParameterResolutionException { - return extensionContext.getStore(NAMESPACE).get(extensionContext.getUniqueId(), StaticUser.class); - } -} diff --git a/niffler-e-2-e-tests/src/test/java/guru/qa/niffler/page/EditSpendingPage.java b/niffler-e-2-e-tests/src/test/java/guru/qa/niffler/page/EditSpendingPage.java deleted file mode 100644 index 6a05fc800..000000000 --- a/niffler-e-2-e-tests/src/test/java/guru/qa/niffler/page/EditSpendingPage.java +++ /dev/null @@ -1,20 +0,0 @@ -package guru.qa.niffler.page; - -import com.codeborne.selenide.SelenideElement; - -import static com.codeborne.selenide.Selenide.$; - -public class EditSpendingPage { - private final SelenideElement descriptionInput = $("#description"); - private final SelenideElement saveBtn = $("#save"); - - public EditSpendingPage setNewSpendingDescription(String description) { - descriptionInput.clear(); - descriptionInput.setValue(description); - return this; - } - - public void save() { - saveBtn.click(); - } -} diff --git a/niffler-e-2-e-tests/src/test/java/guru/qa/niffler/page/LoginPage.java b/niffler-e-2-e-tests/src/test/java/guru/qa/niffler/page/LoginPage.java deleted file mode 100644 index 034727184..000000000 --- a/niffler-e-2-e-tests/src/test/java/guru/qa/niffler/page/LoginPage.java +++ /dev/null @@ -1,18 +0,0 @@ -package guru.qa.niffler.page; - -import com.codeborne.selenide.SelenideElement; - -import static com.codeborne.selenide.Selenide.$; - -public class LoginPage { - private final SelenideElement usernameInput = $("input[name='username']"); - private final SelenideElement passwordInput = $("input[name='password']"); - private final SelenideElement submitButton = $("button[type='submit']"); - - public MainPage login(String username, String password) { - usernameInput.setValue(username); - passwordInput.setValue(password); - submitButton.click(); - return new MainPage(); - } -} diff --git a/niffler-e-2-e-tests/src/test/java/guru/qa/niffler/test/web/SpendingWebTest.java b/niffler-e-2-e-tests/src/test/java/guru/qa/niffler/test/web/SpendingWebTest.java deleted file mode 100644 index 3f503cd8e..000000000 --- a/niffler-e-2-e-tests/src/test/java/guru/qa/niffler/test/web/SpendingWebTest.java +++ /dev/null @@ -1,37 +0,0 @@ -package guru.qa.niffler.test.web; - -import com.codeborne.selenide.Selenide; -import guru.qa.niffler.config.Config; -import guru.qa.niffler.jupiter.extension.BrowserExtension; -import guru.qa.niffler.jupiter.annotation.Spending; -import guru.qa.niffler.model.SpendJson; -import guru.qa.niffler.page.LoginPage; -import guru.qa.niffler.page.MainPage; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; - -@ExtendWith(BrowserExtension.class) -public class SpendingWebTest { - - private static final Config CFG = Config.getInstance(); - - @Spending( - username = "duck", - category = "Обучение", - description = "Обучение Advanced 2.0", - amount = 79990 - ) - @Test - void categoryDescriptionShouldBeChangedFromTable(SpendJson spend) { - final String newDescription = "Обучение Niffler Next Generation"; - - Selenide.open(CFG.frontUrl(), LoginPage.class) - .login("duck", "12345") - .editSpending(spend.description()) - .setNewSpendingDescription(newDescription) - .save(); - - new MainPage().checkThatTableContainsSpending(newDescription); - } -} - diff --git a/niffler-e-2-e-tests/src/test/java/guru/qa/nifler/api/SpendApi.java b/niffler-e-2-e-tests/src/test/java/guru/qa/nifler/api/SpendApi.java new file mode 100644 index 000000000..72bfc2295 --- /dev/null +++ b/niffler-e-2-e-tests/src/test/java/guru/qa/nifler/api/SpendApi.java @@ -0,0 +1,12 @@ +package guru.qa.nifler.api; + +import guru.qa.nifler.model.SpendJson; +import retrofit2.Call; +import retrofit2.http.Body; +import retrofit2.http.POST; + +public interface SpendApi { + + @POST("/internal/spends/add") + Call createSpend(@Body SpendJson spend); +} \ No newline at end of file diff --git a/niffler-e-2-e-tests/src/test/java/guru/qa/nifler/api/SpendApiClient.java b/niffler-e-2-e-tests/src/test/java/guru/qa/nifler/api/SpendApiClient.java new file mode 100644 index 000000000..569881c5a --- /dev/null +++ b/niffler-e-2-e-tests/src/test/java/guru/qa/nifler/api/SpendApiClient.java @@ -0,0 +1,37 @@ +package guru.qa.nifler.api; + +import guru.qa.nifler.config.Config; +import guru.qa.nifler.model.SpendJson; +import lombok.SneakyThrows; +import okhttp3.OkHttpClient; +import okhttp3.logging.HttpLoggingInterceptor; +import okhttp3.logging.HttpLoggingInterceptor.Level; +import retrofit2.Retrofit; +import retrofit2.converter.jackson.JacksonConverterFactory; + +public class SpendApiClient { + private static final Config CFG = Config.getInstance(); + + private final OkHttpClient okHttpClient = getOkHttpClient(); + + public OkHttpClient getOkHttpClient() { + HttpLoggingInterceptor logging = new HttpLoggingInterceptor(); + logging.setLevel(Level.BODY); + return new OkHttpClient.Builder().addInterceptor(logging).build(); + } + + private final Retrofit retrofit = new Retrofit.Builder() + .client(okHttpClient) + .baseUrl(CFG.spendUrl()) + .addConverterFactory(JacksonConverterFactory.create()) + .build(); + + private final SpendApi spendApi = retrofit.create(SpendApi.class); + + @SneakyThrows + public SpendJson createSpend(SpendJson spend) { + return spendApi.createSpend(spend) + .execute() + .body(); + } +} \ No newline at end of file diff --git a/niffler-e-2-e-tests/src/test/java/guru/qa/niffler/config/Config.java b/niffler-e-2-e-tests/src/test/java/guru/qa/nifler/config/Config.java similarity index 56% rename from niffler-e-2-e-tests/src/test/java/guru/qa/niffler/config/Config.java rename to niffler-e-2-e-tests/src/test/java/guru/qa/nifler/config/Config.java index 4a65233a9..1417045d6 100644 --- a/niffler-e-2-e-tests/src/test/java/guru/qa/niffler/config/Config.java +++ b/niffler-e-2-e-tests/src/test/java/guru/qa/nifler/config/Config.java @@ -1,14 +1,11 @@ -package guru.qa.niffler.config; +package guru.qa.nifler.config; public interface Config { static Config getInstance() { - return LocalConfig.INSTANCE; + return LocalConfig.instance; } String frontUrl(); - String spendUrl(); - - String ghUrl(); } diff --git a/niffler-e-2-e-tests/src/test/java/guru/qa/niffler/config/LocalConfig.java b/niffler-e-2-e-tests/src/test/java/guru/qa/nifler/config/LocalConfig.java similarity index 50% rename from niffler-e-2-e-tests/src/test/java/guru/qa/niffler/config/LocalConfig.java rename to niffler-e-2-e-tests/src/test/java/guru/qa/nifler/config/LocalConfig.java index 63c0d46c3..32cfc741f 100644 --- a/niffler-e-2-e-tests/src/test/java/guru/qa/niffler/config/LocalConfig.java +++ b/niffler-e-2-e-tests/src/test/java/guru/qa/nifler/config/LocalConfig.java @@ -1,7 +1,7 @@ -package guru.qa.niffler.config; +package guru.qa.nifler.config; -enum LocalConfig implements Config { - INSTANCE; +public enum LocalConfig implements Config { + instance; @Override public String frontUrl() { @@ -12,9 +12,4 @@ public String frontUrl() { public String spendUrl() { return "http://127.0.0.1:8093/"; } - - @Override - public String ghUrl() { - return "https://api.github.com/"; - } -} +} \ No newline at end of file diff --git a/niffler-e-2-e-tests/src/test/java/guru/qa/niffler/model/CurrencyValues.java b/niffler-e-2-e-tests/src/test/java/guru/qa/nifler/enums/CurrencyValues.java similarity index 60% rename from niffler-e-2-e-tests/src/test/java/guru/qa/niffler/model/CurrencyValues.java rename to niffler-e-2-e-tests/src/test/java/guru/qa/nifler/enums/CurrencyValues.java index 848bfd6c4..b561c3f7b 100644 --- a/niffler-e-2-e-tests/src/test/java/guru/qa/niffler/model/CurrencyValues.java +++ b/niffler-e-2-e-tests/src/test/java/guru/qa/nifler/enums/CurrencyValues.java @@ -1,5 +1,5 @@ -package guru.qa.niffler.model; +package guru.qa.nifler.enums; public enum CurrencyValues { RUB, USD, EUR, KZT -} +} \ No newline at end of file diff --git a/niffler-e-2-e-tests/src/test/java/guru/qa/niffler/jupiter/annotation/Spending.java b/niffler-e-2-e-tests/src/test/java/guru/qa/nifler/jupiter/Spend.java similarity index 67% rename from niffler-e-2-e-tests/src/test/java/guru/qa/niffler/jupiter/annotation/Spending.java rename to niffler-e-2-e-tests/src/test/java/guru/qa/nifler/jupiter/Spend.java index df11b002c..cd7ec1fc6 100644 --- a/niffler-e-2-e-tests/src/test/java/guru/qa/niffler/jupiter/annotation/Spending.java +++ b/niffler-e-2-e-tests/src/test/java/guru/qa/nifler/jupiter/Spend.java @@ -1,6 +1,6 @@ -package guru.qa.niffler.jupiter.annotation; +package guru.qa.nifler.jupiter; -import guru.qa.niffler.jupiter.extension.SpendingExtension; +import guru.qa.nifler.enums.CurrencyValues; import org.junit.jupiter.api.extension.ExtendWith; import java.lang.annotation.ElementType; @@ -10,13 +10,11 @@ @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) -@ExtendWith(SpendingExtension.class) -public @interface Spending { - String username(); - +@ExtendWith(SpendExtension.class) +public @interface Spend { String category(); - String description(); - + String username(); double amount(); -} + CurrencyValues currency(); +} \ No newline at end of file diff --git a/niffler-e-2-e-tests/src/test/java/guru/qa/nifler/jupiter/SpendExtension.java b/niffler-e-2-e-tests/src/test/java/guru/qa/nifler/jupiter/SpendExtension.java new file mode 100644 index 000000000..7425cbeea --- /dev/null +++ b/niffler-e-2-e-tests/src/test/java/guru/qa/nifler/jupiter/SpendExtension.java @@ -0,0 +1,57 @@ +package guru.qa.nifler.jupiter; + +import guru.qa.nifler.api.SpendApiClient; +import guru.qa.nifler.model.SpendJson; +import guru.qa.nifler.model.submodel.CategoryJson; +import org.junit.jupiter.api.extension.BeforeEachCallback; +import org.junit.jupiter.api.extension.ExtensionContext; +import org.junit.jupiter.api.extension.ExtensionContext.Namespace; +import org.junit.jupiter.api.extension.ParameterContext; +import org.junit.jupiter.api.extension.ParameterResolutionException; +import org.junit.jupiter.api.extension.ParameterResolver; +import org.junit.platform.commons.support.AnnotationSupport; + +import java.util.Date; + +public class SpendExtension implements BeforeEachCallback, ParameterResolver { + + public static final Namespace NAMESPACE = ExtensionContext.Namespace.create(SpendExtension.class); + private final SpendApiClient spendApiClient = new SpendApiClient(); + + @Override + public void beforeEach(ExtensionContext context) { + AnnotationSupport.findAnnotation(context.getRequiredTestMethod(), Spend.class) + .ifPresent( + anno -> { + SpendJson spendJson = new SpendJson( + null, + new Date(), + new CategoryJson(null, anno.category(), anno.username(), false), + anno.currency(), + anno.amount(), + anno.description(), + anno.username() + ); + final SpendJson createdSpend = spendApiClient.createSpend(spendJson); + context + .getStore(NAMESPACE) + .put(context.getUniqueId(), createdSpend); + } + ); + } + + @Override + public boolean supportsParameter(ParameterContext parameterContext, ExtensionContext extensionContext) throws ParameterResolutionException { + return parameterContext + .getParameter() + .getType() + .isAssignableFrom(SpendJson.class); + } + + @Override + public Object resolveParameter(ParameterContext parameterContext, ExtensionContext extensionContext) throws ParameterResolutionException { + return extensionContext + .getStore(NAMESPACE) + .get(extensionContext.getUniqueId(), SpendJson.class); + } +} \ No newline at end of file diff --git a/niffler-e-2-e-tests/src/test/java/guru/qa/niffler/model/SpendJson.java b/niffler-e-2-e-tests/src/test/java/guru/qa/nifler/model/SpendJson.java similarity index 79% rename from niffler-e-2-e-tests/src/test/java/guru/qa/niffler/model/SpendJson.java rename to niffler-e-2-e-tests/src/test/java/guru/qa/nifler/model/SpendJson.java index 64a102712..f1c23d0f3 100644 --- a/niffler-e-2-e-tests/src/test/java/guru/qa/niffler/model/SpendJson.java +++ b/niffler-e-2-e-tests/src/test/java/guru/qa/nifler/model/SpendJson.java @@ -1,6 +1,8 @@ -package guru.qa.niffler.model; +package guru.qa.nifler.model; import com.fasterxml.jackson.annotation.JsonProperty; +import guru.qa.nifler.enums.CurrencyValues; +import guru.qa.nifler.model.submodel.CategoryJson; import java.util.Date; import java.util.UUID; @@ -20,5 +22,4 @@ public record SpendJson( String description, @JsonProperty("username") String username) { - -} +} \ No newline at end of file diff --git a/niffler-e-2-e-tests/src/test/java/guru/qa/niffler/model/CategoryJson.java b/niffler-e-2-e-tests/src/test/java/guru/qa/nifler/model/submodel/CategoryJson.java similarity index 87% rename from niffler-e-2-e-tests/src/test/java/guru/qa/niffler/model/CategoryJson.java rename to niffler-e-2-e-tests/src/test/java/guru/qa/nifler/model/submodel/CategoryJson.java index b33c7663c..8383c48ce 100644 --- a/niffler-e-2-e-tests/src/test/java/guru/qa/niffler/model/CategoryJson.java +++ b/niffler-e-2-e-tests/src/test/java/guru/qa/nifler/model/submodel/CategoryJson.java @@ -1,4 +1,4 @@ -package guru.qa.niffler.model; +package guru.qa.nifler.model.submodel; import com.fasterxml.jackson.annotation.JsonProperty; @@ -13,5 +13,4 @@ public record CategoryJson( String username, @JsonProperty("archived") boolean archived) { - -} +} \ No newline at end of file diff --git a/niffler-e-2-e-tests/src/test/java/guru/qa/nifler/page/EditSpendingPage.java b/niffler-e-2-e-tests/src/test/java/guru/qa/nifler/page/EditSpendingPage.java new file mode 100644 index 000000000..8773d57c4 --- /dev/null +++ b/niffler-e-2-e-tests/src/test/java/guru/qa/nifler/page/EditSpendingPage.java @@ -0,0 +1,15 @@ +package guru.qa.nifler.page; + +import com.codeborne.selenide.SelenideElement; + +import static com.codeborne.selenide.Selenide.$; + +public class EditSpendingPage { + private final SelenideElement descriptionInput = $("#description"); + private final SelenideElement submitButton = $("#save"); + + public void editSpendingDescription(String description) { + descriptionInput.setValue(description); + submitButton.click(); + } +} diff --git a/niffler-e-2-e-tests/src/test/java/guru/qa/nifler/page/LoginPage.java b/niffler-e-2-e-tests/src/test/java/guru/qa/nifler/page/LoginPage.java new file mode 100644 index 000000000..06e11bfed --- /dev/null +++ b/niffler-e-2-e-tests/src/test/java/guru/qa/nifler/page/LoginPage.java @@ -0,0 +1,18 @@ +package guru.qa.nifler.page; + +import com.codeborne.selenide.SelenideElement; + +import static com.codeborne.selenide.Selenide.$; + +public class LoginPage { + private final SelenideElement usernameInput = $("input[name='username']"); + private final SelenideElement passwordInput = $("input[name='password']"); + private final SelenideElement submitBtn = $("button[type='submit']"); + + public MainPage doLogin(String userName, String password) { + usernameInput.setValue(userName); + passwordInput.setValue(password); + submitBtn.click(); + return new MainPage(); + } +} \ No newline at end of file diff --git a/niffler-e-2-e-tests/src/test/java/guru/qa/niffler/page/MainPage.java b/niffler-e-2-e-tests/src/test/java/guru/qa/nifler/page/MainPage.java similarity index 54% rename from niffler-e-2-e-tests/src/test/java/guru/qa/niffler/page/MainPage.java rename to niffler-e-2-e-tests/src/test/java/guru/qa/nifler/page/MainPage.java index 49c86f202..2cbf88ec6 100644 --- a/niffler-e-2-e-tests/src/test/java/guru/qa/niffler/page/MainPage.java +++ b/niffler-e-2-e-tests/src/test/java/guru/qa/nifler/page/MainPage.java @@ -1,20 +1,21 @@ -package guru.qa.niffler.page; +package guru.qa.nifler.page; import com.codeborne.selenide.ElementsCollection; import static com.codeborne.selenide.Condition.text; import static com.codeborne.selenide.Condition.visible; -import static com.codeborne.selenide.Selenide.$; +import static com.codeborne.selenide.Selenide.$$; public class MainPage { - private final ElementsCollection tableRows = $("#spendings tbody").$$("tr"); + + private final ElementsCollection tableRows = $$("#spendings tbody tr"); public EditSpendingPage editSpending(String spendingDescription) { - tableRows.find(text(spendingDescription)).$$("td").get(5).click(); + tableRows.find(text(spendingDescription)).$("td button").click(); return new EditSpendingPage(); } - public void checkThatTableContainsSpending(String spendingDescription) { + public void checkThatTableContains(String spendingDescription){ tableRows.find(text(spendingDescription)).should(visible); } -} +} \ No newline at end of file diff --git a/niffler-e-2-e-tests/src/test/java/guru/qa/nifler/test/SpendingWebTest.java b/niffler-e-2-e-tests/src/test/java/guru/qa/nifler/test/SpendingWebTest.java new file mode 100644 index 000000000..10019337d --- /dev/null +++ b/niffler-e-2-e-tests/src/test/java/guru/qa/nifler/test/SpendingWebTest.java @@ -0,0 +1,34 @@ +package guru.qa.nifler.test; + +import com.codeborne.selenide.Selenide; +import guru.qa.nifler.config.Config; +import guru.qa.nifler.jupiter.Spend; +import guru.qa.nifler.page.LoginPage; +import guru.qa.nifler.page.MainPage; +import org.junit.jupiter.api.Test; + +import static guru.qa.nifler.enums.CurrencyValues.RUB; + +public class SpendingWebTest { + + private static final Config CFG = Config.getInstance(); + + @Spend( + category = "Обучение", + description = "Обучение Advanced 2.0", + username = "max", + amount = 84550, + currency = RUB + ) + @Test + void categoryDescriptionShouldBeEditedByTableAction() { + final String newSpendingName = "Обучение Niffler Next Generation"; + + Selenide.open(CFG.frontUrl(), LoginPage.class) + .doLogin("max", "max") + .editSpending("Обучение") + .editSpendingDescription(newSpendingName); + + new MainPage().checkThatTableContains(newSpendingName); + } +} \ No newline at end of file diff --git a/niffler-spend/build.gradle b/niffler-spend/build.gradle index a483c899d..20282c724 100644 --- a/niffler-spend/build.gradle +++ b/niffler-spend/build.gradle @@ -11,6 +11,7 @@ dependencies { implementation project(':niffler-grpc-common') implementation 'org.springframework.boot:spring-boot-starter-web' + implementation 'com.squareup.okhttp3:logging-interceptor:4.11.0' implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation "net.devh:grpc-client-spring-boot-starter:${project.ext.springGrpcVersion}" implementation "org.springframework.cloud:spring-cloud-starter-vault-config:${project.ext.springVaultVersion}" diff --git a/settings.gradle b/settings.gradle index 7dbbc021d..363274bcd 100644 --- a/settings.gradle +++ b/settings.gradle @@ -5,4 +5,4 @@ include 'niffler-currency' include 'niffler-userdata' include 'niffler-spend' include 'niffler-grpc-common' -include 'niffler-e-2-e-tests' +include 'niffler-e-2-e-tests' \ No newline at end of file From 4b269453fa39be72b457e0173d91e53d6246396c Mon Sep 17 00:00:00 2001 From: tesarakt97 <90032193+tesarakt97@users.noreply.github.com> Date: Sun, 22 Sep 2024 17:28:12 +0300 Subject: [PATCH 2/4] =?UTF-8?q?1=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20=D1=80=D0=B0=D1=81=D1=88=D0=B8=D1=80?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=B8=D0=B7=203=20=D1=83=D1=80?= =?UTF-8?q?=D0=BE=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../qa/nifler/jupiter/BrowserExtension.java | 66 +++++++++++++++++++ ...sion.java => CreateSpendingExtension.java} | 25 +------ .../java/guru/qa/nifler/jupiter/Spend.java | 6 +- .../jupiter/SpendingResolverExtension.java | 29 ++++++++ .../qa/nifler/jupiter/SuiteExtension.java | 40 +++++++++++ .../guru/qa/nifler/test/SpendingWebTest.java | 8 ++- 6 files changed, 149 insertions(+), 25 deletions(-) create mode 100644 niffler-e-2-e-tests/src/test/java/guru/qa/nifler/jupiter/BrowserExtension.java rename niffler-e-2-e-tests/src/test/java/guru/qa/nifler/jupiter/{SpendExtension.java => CreateSpendingExtension.java} (58%) create mode 100644 niffler-e-2-e-tests/src/test/java/guru/qa/nifler/jupiter/SpendingResolverExtension.java create mode 100644 niffler-e-2-e-tests/src/test/java/guru/qa/nifler/jupiter/SuiteExtension.java diff --git a/niffler-e-2-e-tests/src/test/java/guru/qa/nifler/jupiter/BrowserExtension.java b/niffler-e-2-e-tests/src/test/java/guru/qa/nifler/jupiter/BrowserExtension.java new file mode 100644 index 000000000..1df3c677f --- /dev/null +++ b/niffler-e-2-e-tests/src/test/java/guru/qa/nifler/jupiter/BrowserExtension.java @@ -0,0 +1,66 @@ +package guru.qa.nifler.jupiter; + +import com.codeborne.selenide.Selenide; +import com.codeborne.selenide.WebDriverRunner; +import com.codeborne.selenide.logevents.SelenideLogger; +import io.qameta.allure.Allure; +import io.qameta.allure.selenide.AllureSelenide; +import org.junit.jupiter.api.extension.AfterEachCallback; +import org.junit.jupiter.api.extension.BeforeEachCallback; +import org.junit.jupiter.api.extension.ExtensionContext; +import org.junit.jupiter.api.extension.LifecycleMethodExecutionExceptionHandler; +import org.junit.jupiter.api.extension.TestExecutionExceptionHandler; +import org.openqa.selenium.OutputType; +import org.openqa.selenium.TakesScreenshot; + +import java.io.ByteArrayInputStream; + +public class BrowserExtension implements + BeforeEachCallback, + AfterEachCallback, + TestExecutionExceptionHandler, + LifecycleMethodExecutionExceptionHandler { + @Override + public void afterEach(ExtensionContext context) throws Exception { + if (WebDriverRunner.hasWebDriverStarted()) { + Selenide.closeWebDriver(); + } + } + + @Override + public void beforeEach(ExtensionContext context) throws Exception { + SelenideLogger.addListener("Allure-selenide", new AllureSelenide() + .savePageSource(false) + .screenshots(false) + ); + } + + @Override + public void handleTestExecutionException(ExtensionContext context, Throwable throwable) throws Throwable { + doScreenShot(); + throw throwable; + } + + @Override + public void handleBeforeEachMethodExecutionException(ExtensionContext context, Throwable throwable) throws Throwable { + doScreenShot(); + throw throwable; + } + + @Override + public void handleAfterEachMethodExecutionException(ExtensionContext context, Throwable throwable) throws Throwable { + doScreenShot(); + throw throwable; + } + + private static void doScreenShot() { + if (WebDriverRunner.hasWebDriverStarted()) { + Allure.addAttachment( + "Screen on fail", + new ByteArrayInputStream( + ((TakesScreenshot) WebDriverRunner.getWebDriver()).getScreenshotAs(OutputType.BYTES) + ) + ); + } + } +} \ No newline at end of file diff --git a/niffler-e-2-e-tests/src/test/java/guru/qa/nifler/jupiter/SpendExtension.java b/niffler-e-2-e-tests/src/test/java/guru/qa/nifler/jupiter/CreateSpendingExtension.java similarity index 58% rename from niffler-e-2-e-tests/src/test/java/guru/qa/nifler/jupiter/SpendExtension.java rename to niffler-e-2-e-tests/src/test/java/guru/qa/nifler/jupiter/CreateSpendingExtension.java index 7425cbeea..2debdd6bd 100644 --- a/niffler-e-2-e-tests/src/test/java/guru/qa/nifler/jupiter/SpendExtension.java +++ b/niffler-e-2-e-tests/src/test/java/guru/qa/nifler/jupiter/CreateSpendingExtension.java @@ -6,16 +6,13 @@ import org.junit.jupiter.api.extension.BeforeEachCallback; import org.junit.jupiter.api.extension.ExtensionContext; import org.junit.jupiter.api.extension.ExtensionContext.Namespace; -import org.junit.jupiter.api.extension.ParameterContext; -import org.junit.jupiter.api.extension.ParameterResolutionException; -import org.junit.jupiter.api.extension.ParameterResolver; import org.junit.platform.commons.support.AnnotationSupport; import java.util.Date; -public class SpendExtension implements BeforeEachCallback, ParameterResolver { +public class CreateSpendingExtension implements BeforeEachCallback { - public static final Namespace NAMESPACE = ExtensionContext.Namespace.create(SpendExtension.class); + public static final Namespace NAMESPACE = ExtensionContext.Namespace.create(CreateSpendingExtension.class); private final SpendApiClient spendApiClient = new SpendApiClient(); @Override @@ -33,25 +30,9 @@ public void beforeEach(ExtensionContext context) { anno.username() ); final SpendJson createdSpend = spendApiClient.createSpend(spendJson); - context - .getStore(NAMESPACE) + context.getStore(NAMESPACE) .put(context.getUniqueId(), createdSpend); } ); } - - @Override - public boolean supportsParameter(ParameterContext parameterContext, ExtensionContext extensionContext) throws ParameterResolutionException { - return parameterContext - .getParameter() - .getType() - .isAssignableFrom(SpendJson.class); - } - - @Override - public Object resolveParameter(ParameterContext parameterContext, ExtensionContext extensionContext) throws ParameterResolutionException { - return extensionContext - .getStore(NAMESPACE) - .get(extensionContext.getUniqueId(), SpendJson.class); - } } \ No newline at end of file diff --git a/niffler-e-2-e-tests/src/test/java/guru/qa/nifler/jupiter/Spend.java b/niffler-e-2-e-tests/src/test/java/guru/qa/nifler/jupiter/Spend.java index cd7ec1fc6..c1de39830 100644 --- a/niffler-e-2-e-tests/src/test/java/guru/qa/nifler/jupiter/Spend.java +++ b/niffler-e-2-e-tests/src/test/java/guru/qa/nifler/jupiter/Spend.java @@ -10,11 +10,15 @@ @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) -@ExtendWith(SpendExtension.class) +@ExtendWith({CreateSpendingExtension.class, SpendingResolverExtension.class}) public @interface Spend { String category(); + String description(); + String username(); + double amount(); + CurrencyValues currency(); } \ No newline at end of file diff --git a/niffler-e-2-e-tests/src/test/java/guru/qa/nifler/jupiter/SpendingResolverExtension.java b/niffler-e-2-e-tests/src/test/java/guru/qa/nifler/jupiter/SpendingResolverExtension.java new file mode 100644 index 000000000..0b2d1da60 --- /dev/null +++ b/niffler-e-2-e-tests/src/test/java/guru/qa/nifler/jupiter/SpendingResolverExtension.java @@ -0,0 +1,29 @@ +package guru.qa.nifler.jupiter; + +import guru.qa.nifler.api.SpendApiClient; +import guru.qa.nifler.model.SpendJson; +import org.junit.jupiter.api.extension.ExtensionContext; +import org.junit.jupiter.api.extension.ParameterContext; +import org.junit.jupiter.api.extension.ParameterResolutionException; +import org.junit.jupiter.api.extension.ParameterResolver; + +public class SpendingResolverExtension implements ParameterResolver { + + public static final ExtensionContext.Namespace NAMESPACE = ExtensionContext.Namespace.create(SpendingResolverExtension.class); + private final SpendApiClient spendApiClient = new SpendApiClient(); + + @Override + public boolean supportsParameter(ParameterContext parameterContext, ExtensionContext extensionContext) throws ParameterResolutionException { + return parameterContext + .getParameter() + .getType() + .isAssignableFrom(SpendJson.class); + } + + @Override + public Object resolveParameter(ParameterContext parameterContext, ExtensionContext extensionContext) throws ParameterResolutionException { + return extensionContext + .getStore(CreateSpendingExtension.NAMESPACE) + .get(extensionContext.getUniqueId(), SpendJson.class); + } +} \ No newline at end of file diff --git a/niffler-e-2-e-tests/src/test/java/guru/qa/nifler/jupiter/SuiteExtension.java b/niffler-e-2-e-tests/src/test/java/guru/qa/nifler/jupiter/SuiteExtension.java new file mode 100644 index 000000000..43e5fefd8 --- /dev/null +++ b/niffler-e-2-e-tests/src/test/java/guru/qa/nifler/jupiter/SuiteExtension.java @@ -0,0 +1,40 @@ +package guru.qa.nifler.jupiter; + +import org.junit.jupiter.api.extension.BeforeAllCallback; +import org.junit.jupiter.api.extension.ExtensionContext; +import org.junit.jupiter.api.extension.ExtensionContext.Store.CloseableResource; + +import static org.junit.jupiter.api.extension.ExtensionContext.Namespace.GLOBAL; + + +public interface SuiteExtension extends BeforeAllCallback { + + /* + 1) Быть уверенным, что SuiteExtension выполняется перед каждым тестовым классом + 2) Если мы выполним какой-то код перед загрузкой самого первого тестового класса, то это и будет beforeSuite() + 3) При этом для 2,3 и т.д. (до N) тестовых классов, больше не будем вызывать beforeSuite() + 3) Когда все тесты завершаться, вызовем afterSuite() + */ + + @Override + default void beforeAll(ExtensionContext context) throws Exception { + final ExtensionContext rootContext = context.getRoot(); + context.getStore(GLOBAL) + .getOrComputeIfAbsent( + this.getClass(), + key -> { // Попадаем только в самый первый раз + beforeSuite(rootContext); + return new CloseableResource() { + @Override + public void close() throws Throwable { + afterSuite(); + } + }; + } + ); + } + + default void beforeSuite(ExtensionContext context) {} + + default void afterSuite() {} +} diff --git a/niffler-e-2-e-tests/src/test/java/guru/qa/nifler/test/SpendingWebTest.java b/niffler-e-2-e-tests/src/test/java/guru/qa/nifler/test/SpendingWebTest.java index 10019337d..5da0bbe31 100644 --- a/niffler-e-2-e-tests/src/test/java/guru/qa/nifler/test/SpendingWebTest.java +++ b/niffler-e-2-e-tests/src/test/java/guru/qa/nifler/test/SpendingWebTest.java @@ -2,13 +2,17 @@ import com.codeborne.selenide.Selenide; import guru.qa.nifler.config.Config; +import guru.qa.nifler.jupiter.BrowserExtension; import guru.qa.nifler.jupiter.Spend; +import guru.qa.nifler.model.SpendJson; import guru.qa.nifler.page.LoginPage; import guru.qa.nifler.page.MainPage; import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; import static guru.qa.nifler.enums.CurrencyValues.RUB; +@ExtendWith(BrowserExtension.class) public class SpendingWebTest { private static final Config CFG = Config.getInstance(); @@ -21,12 +25,12 @@ public class SpendingWebTest { currency = RUB ) @Test - void categoryDescriptionShouldBeEditedByTableAction() { + void categoryDescriptionShouldBeEditedByTableAction(SpendJson spend) { final String newSpendingName = "Обучение Niffler Next Generation"; Selenide.open(CFG.frontUrl(), LoginPage.class) .doLogin("max", "max") - .editSpending("Обучение") + .editSpending(spend.description()) .editSpendingDescription(newSpendingName); new MainPage().checkThatTableContains(newSpendingName); From f687fdb27d6e5cf6c0bfbc287aa7ea6ce9e03b39 Mon Sep 17 00:00:00 2001 From: tesarakt97 <90032193+tesarakt97@users.noreply.github.com> Date: Sun, 22 Sep 2024 18:07:50 +0300 Subject: [PATCH 3/4] =?UTF-8?q?=D0=A3=D0=B4=D0=B0=D0=BB=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=20=D0=BB=D0=B8=D1=88=D0=BD=D0=B5=D0=B3=D0=BE=20=D0=BA?= =?UTF-8?q?=D0=BE=D0=BD=D1=82=D0=B5=D0=BD=D1=82=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../qa/{nifler => niffler}/api/SpendApi.java | 4 +- .../api/SpendApiClient.java | 6 +- .../qa/{nifler => niffler}/config/Config.java | 2 +- .../config/LocalConfig.java | 2 +- .../enums/CurrencyValues.java | 2 +- .../jupiter/BrowserExtension.java | 11 ++-- .../jupiter/CreateSpendingExtension.java | 8 +-- .../qa/{nifler => niffler}/jupiter/Spend.java | 4 +- .../jupiter/SpendingResolverExtension.java | 16 ++---- .../jupiter/SuiteExtension.java | 2 +- .../{nifler => niffler}/model/SpendJson.java | 6 +- .../model/submodel/CategoryJson.java | 2 +- .../page/EditSpendingPage.java | 2 +- .../{nifler => niffler}/page/LoginPage.java | 2 +- .../qa/{nifler => niffler}/page/MainPage.java | 2 +- .../test/SpendingWebTest.java | 18 +++--- .../qa/niffler/test/web/FriendsWebTest.java | 56 ------------------- .../guru/qa/niffler/test/web/LoginTest.java | 29 ---------- .../guru/qa/niffler/test/web/ProfileTest.java | 44 --------------- .../qa/niffler/test/web/RegistrationTest.java | 51 ----------------- .../java/guru/qa/nifler/jupiter/Category.java | 0 .../qa/nifler/jupiter/CategoryExtension.java | 0 .../org.junit.jupiter.api.extension.Extension | 2 +- 23 files changed, 43 insertions(+), 228 deletions(-) rename niffler-e-2-e-tests/src/test/java/guru/qa/{nifler => niffler}/api/SpendApi.java (74%) rename niffler-e-2-e-tests/src/test/java/guru/qa/{nifler => niffler}/api/SpendApiClient.java (90%) rename niffler-e-2-e-tests/src/test/java/guru/qa/{nifler => niffler}/config/Config.java (81%) rename niffler-e-2-e-tests/src/test/java/guru/qa/{nifler => niffler}/config/LocalConfig.java (87%) rename niffler-e-2-e-tests/src/test/java/guru/qa/{nifler => niffler}/enums/CurrencyValues.java (62%) rename niffler-e-2-e-tests/src/test/java/guru/qa/{nifler => niffler}/jupiter/BrowserExtension.java (88%) rename niffler-e-2-e-tests/src/test/java/guru/qa/{nifler => niffler}/jupiter/CreateSpendingExtension.java (88%) rename niffler-e-2-e-tests/src/test/java/guru/qa/{nifler => niffler}/jupiter/Spend.java (86%) rename niffler-e-2-e-tests/src/test/java/guru/qa/{nifler => niffler}/jupiter/SpendingResolverExtension.java (50%) rename niffler-e-2-e-tests/src/test/java/guru/qa/{nifler => niffler}/jupiter/SuiteExtension.java (97%) rename niffler-e-2-e-tests/src/test/java/guru/qa/{nifler => niffler}/model/SpendJson.java (79%) rename niffler-e-2-e-tests/src/test/java/guru/qa/{nifler => niffler}/model/submodel/CategoryJson.java (88%) rename niffler-e-2-e-tests/src/test/java/guru/qa/{nifler => niffler}/page/EditSpendingPage.java (92%) rename niffler-e-2-e-tests/src/test/java/guru/qa/{nifler => niffler}/page/LoginPage.java (95%) rename niffler-e-2-e-tests/src/test/java/guru/qa/{nifler => niffler}/page/MainPage.java (95%) rename niffler-e-2-e-tests/src/test/java/guru/qa/{nifler => niffler}/test/SpendingWebTest.java (64%) delete mode 100644 niffler-e-2-e-tests/src/test/java/guru/qa/niffler/test/web/FriendsWebTest.java delete mode 100644 niffler-e-2-e-tests/src/test/java/guru/qa/niffler/test/web/LoginTest.java delete mode 100644 niffler-e-2-e-tests/src/test/java/guru/qa/niffler/test/web/ProfileTest.java delete mode 100644 niffler-e-2-e-tests/src/test/java/guru/qa/niffler/test/web/RegistrationTest.java delete mode 100644 niffler-e-2-e-tests/src/test/java/guru/qa/nifler/jupiter/Category.java delete mode 100644 niffler-e-2-e-tests/src/test/java/guru/qa/nifler/jupiter/CategoryExtension.java diff --git a/niffler-e-2-e-tests/src/test/java/guru/qa/nifler/api/SpendApi.java b/niffler-e-2-e-tests/src/test/java/guru/qa/niffler/api/SpendApi.java similarity index 74% rename from niffler-e-2-e-tests/src/test/java/guru/qa/nifler/api/SpendApi.java rename to niffler-e-2-e-tests/src/test/java/guru/qa/niffler/api/SpendApi.java index 72bfc2295..4a0d42ead 100644 --- a/niffler-e-2-e-tests/src/test/java/guru/qa/nifler/api/SpendApi.java +++ b/niffler-e-2-e-tests/src/test/java/guru/qa/niffler/api/SpendApi.java @@ -1,6 +1,6 @@ -package guru.qa.nifler.api; +package guru.qa.niffler.api; -import guru.qa.nifler.model.SpendJson; +import guru.qa.niffler.model.SpendJson; import retrofit2.Call; import retrofit2.http.Body; import retrofit2.http.POST; diff --git a/niffler-e-2-e-tests/src/test/java/guru/qa/nifler/api/SpendApiClient.java b/niffler-e-2-e-tests/src/test/java/guru/qa/niffler/api/SpendApiClient.java similarity index 90% rename from niffler-e-2-e-tests/src/test/java/guru/qa/nifler/api/SpendApiClient.java rename to niffler-e-2-e-tests/src/test/java/guru/qa/niffler/api/SpendApiClient.java index 569881c5a..2a9fcb513 100644 --- a/niffler-e-2-e-tests/src/test/java/guru/qa/nifler/api/SpendApiClient.java +++ b/niffler-e-2-e-tests/src/test/java/guru/qa/niffler/api/SpendApiClient.java @@ -1,7 +1,7 @@ -package guru.qa.nifler.api; +package guru.qa.niffler.api; -import guru.qa.nifler.config.Config; -import guru.qa.nifler.model.SpendJson; +import guru.qa.niffler.config.Config; +import guru.qa.niffler.model.SpendJson; import lombok.SneakyThrows; import okhttp3.OkHttpClient; import okhttp3.logging.HttpLoggingInterceptor; diff --git a/niffler-e-2-e-tests/src/test/java/guru/qa/nifler/config/Config.java b/niffler-e-2-e-tests/src/test/java/guru/qa/niffler/config/Config.java similarity index 81% rename from niffler-e-2-e-tests/src/test/java/guru/qa/nifler/config/Config.java rename to niffler-e-2-e-tests/src/test/java/guru/qa/niffler/config/Config.java index 1417045d6..98372ec5b 100644 --- a/niffler-e-2-e-tests/src/test/java/guru/qa/nifler/config/Config.java +++ b/niffler-e-2-e-tests/src/test/java/guru/qa/niffler/config/Config.java @@ -1,4 +1,4 @@ -package guru.qa.nifler.config; +package guru.qa.niffler.config; public interface Config { diff --git a/niffler-e-2-e-tests/src/test/java/guru/qa/nifler/config/LocalConfig.java b/niffler-e-2-e-tests/src/test/java/guru/qa/niffler/config/LocalConfig.java similarity index 87% rename from niffler-e-2-e-tests/src/test/java/guru/qa/nifler/config/LocalConfig.java rename to niffler-e-2-e-tests/src/test/java/guru/qa/niffler/config/LocalConfig.java index 32cfc741f..33bf0fb10 100644 --- a/niffler-e-2-e-tests/src/test/java/guru/qa/nifler/config/LocalConfig.java +++ b/niffler-e-2-e-tests/src/test/java/guru/qa/niffler/config/LocalConfig.java @@ -1,4 +1,4 @@ -package guru.qa.nifler.config; +package guru.qa.niffler.config; public enum LocalConfig implements Config { instance; diff --git a/niffler-e-2-e-tests/src/test/java/guru/qa/nifler/enums/CurrencyValues.java b/niffler-e-2-e-tests/src/test/java/guru/qa/niffler/enums/CurrencyValues.java similarity index 62% rename from niffler-e-2-e-tests/src/test/java/guru/qa/nifler/enums/CurrencyValues.java rename to niffler-e-2-e-tests/src/test/java/guru/qa/niffler/enums/CurrencyValues.java index b561c3f7b..d1e2e4af9 100644 --- a/niffler-e-2-e-tests/src/test/java/guru/qa/nifler/enums/CurrencyValues.java +++ b/niffler-e-2-e-tests/src/test/java/guru/qa/niffler/enums/CurrencyValues.java @@ -1,4 +1,4 @@ -package guru.qa.nifler.enums; +package guru.qa.niffler.enums; public enum CurrencyValues { RUB, USD, EUR, KZT diff --git a/niffler-e-2-e-tests/src/test/java/guru/qa/nifler/jupiter/BrowserExtension.java b/niffler-e-2-e-tests/src/test/java/guru/qa/niffler/jupiter/BrowserExtension.java similarity index 88% rename from niffler-e-2-e-tests/src/test/java/guru/qa/nifler/jupiter/BrowserExtension.java rename to niffler-e-2-e-tests/src/test/java/guru/qa/niffler/jupiter/BrowserExtension.java index 1df3c677f..394df6664 100644 --- a/niffler-e-2-e-tests/src/test/java/guru/qa/nifler/jupiter/BrowserExtension.java +++ b/niffler-e-2-e-tests/src/test/java/guru/qa/niffler/jupiter/BrowserExtension.java @@ -1,4 +1,4 @@ -package guru.qa.nifler.jupiter; +package guru.qa.niffler.jupiter; import com.codeborne.selenide.Selenide; import com.codeborne.selenide.WebDriverRunner; @@ -21,18 +21,15 @@ public class BrowserExtension implements TestExecutionExceptionHandler, LifecycleMethodExecutionExceptionHandler { @Override - public void afterEach(ExtensionContext context) throws Exception { + public void afterEach(ExtensionContext context) { if (WebDriverRunner.hasWebDriverStarted()) { Selenide.closeWebDriver(); } } @Override - public void beforeEach(ExtensionContext context) throws Exception { - SelenideLogger.addListener("Allure-selenide", new AllureSelenide() - .savePageSource(false) - .screenshots(false) - ); + public void beforeEach(ExtensionContext context) { + SelenideLogger.addListener("Allure-selenide", new AllureSelenide().savePageSource(false).screenshots(false)); } @Override diff --git a/niffler-e-2-e-tests/src/test/java/guru/qa/nifler/jupiter/CreateSpendingExtension.java b/niffler-e-2-e-tests/src/test/java/guru/qa/niffler/jupiter/CreateSpendingExtension.java similarity index 88% rename from niffler-e-2-e-tests/src/test/java/guru/qa/nifler/jupiter/CreateSpendingExtension.java rename to niffler-e-2-e-tests/src/test/java/guru/qa/niffler/jupiter/CreateSpendingExtension.java index 2debdd6bd..80692f4b4 100644 --- a/niffler-e-2-e-tests/src/test/java/guru/qa/nifler/jupiter/CreateSpendingExtension.java +++ b/niffler-e-2-e-tests/src/test/java/guru/qa/niffler/jupiter/CreateSpendingExtension.java @@ -1,8 +1,8 @@ -package guru.qa.nifler.jupiter; +package guru.qa.niffler.jupiter; -import guru.qa.nifler.api.SpendApiClient; -import guru.qa.nifler.model.SpendJson; -import guru.qa.nifler.model.submodel.CategoryJson; +import guru.qa.niffler.api.SpendApiClient; +import guru.qa.niffler.model.SpendJson; +import guru.qa.niffler.model.submodel.CategoryJson; import org.junit.jupiter.api.extension.BeforeEachCallback; import org.junit.jupiter.api.extension.ExtensionContext; import org.junit.jupiter.api.extension.ExtensionContext.Namespace; diff --git a/niffler-e-2-e-tests/src/test/java/guru/qa/nifler/jupiter/Spend.java b/niffler-e-2-e-tests/src/test/java/guru/qa/niffler/jupiter/Spend.java similarity index 86% rename from niffler-e-2-e-tests/src/test/java/guru/qa/nifler/jupiter/Spend.java rename to niffler-e-2-e-tests/src/test/java/guru/qa/niffler/jupiter/Spend.java index c1de39830..f61efe2a7 100644 --- a/niffler-e-2-e-tests/src/test/java/guru/qa/nifler/jupiter/Spend.java +++ b/niffler-e-2-e-tests/src/test/java/guru/qa/niffler/jupiter/Spend.java @@ -1,6 +1,6 @@ -package guru.qa.nifler.jupiter; +package guru.qa.niffler.jupiter; -import guru.qa.nifler.enums.CurrencyValues; +import guru.qa.niffler.enums.CurrencyValues; import org.junit.jupiter.api.extension.ExtendWith; import java.lang.annotation.ElementType; diff --git a/niffler-e-2-e-tests/src/test/java/guru/qa/nifler/jupiter/SpendingResolverExtension.java b/niffler-e-2-e-tests/src/test/java/guru/qa/niffler/jupiter/SpendingResolverExtension.java similarity index 50% rename from niffler-e-2-e-tests/src/test/java/guru/qa/nifler/jupiter/SpendingResolverExtension.java rename to niffler-e-2-e-tests/src/test/java/guru/qa/niffler/jupiter/SpendingResolverExtension.java index 0b2d1da60..1712832d4 100644 --- a/niffler-e-2-e-tests/src/test/java/guru/qa/nifler/jupiter/SpendingResolverExtension.java +++ b/niffler-e-2-e-tests/src/test/java/guru/qa/niffler/jupiter/SpendingResolverExtension.java @@ -1,7 +1,6 @@ -package guru.qa.nifler.jupiter; +package guru.qa.niffler.jupiter; -import guru.qa.nifler.api.SpendApiClient; -import guru.qa.nifler.model.SpendJson; +import guru.qa.niffler.model.SpendJson; import org.junit.jupiter.api.extension.ExtensionContext; import org.junit.jupiter.api.extension.ParameterContext; import org.junit.jupiter.api.extension.ParameterResolutionException; @@ -9,9 +8,6 @@ public class SpendingResolverExtension implements ParameterResolver { - public static final ExtensionContext.Namespace NAMESPACE = ExtensionContext.Namespace.create(SpendingResolverExtension.class); - private final SpendApiClient spendApiClient = new SpendApiClient(); - @Override public boolean supportsParameter(ParameterContext parameterContext, ExtensionContext extensionContext) throws ParameterResolutionException { return parameterContext @@ -21,9 +17,9 @@ public boolean supportsParameter(ParameterContext parameterContext, ExtensionCon } @Override - public Object resolveParameter(ParameterContext parameterContext, ExtensionContext extensionContext) throws ParameterResolutionException { - return extensionContext - .getStore(CreateSpendingExtension.NAMESPACE) - .get(extensionContext.getUniqueId(), SpendJson.class); + public SpendJson resolveParameter(ParameterContext parameterContext, ExtensionContext extensionContext) throws ParameterResolutionException { + return extensionContext.getStore(CreateSpendingExtension.NAMESPACE) + .get(extensionContext.getUniqueId(), + SpendJson.class); } } \ No newline at end of file diff --git a/niffler-e-2-e-tests/src/test/java/guru/qa/nifler/jupiter/SuiteExtension.java b/niffler-e-2-e-tests/src/test/java/guru/qa/niffler/jupiter/SuiteExtension.java similarity index 97% rename from niffler-e-2-e-tests/src/test/java/guru/qa/nifler/jupiter/SuiteExtension.java rename to niffler-e-2-e-tests/src/test/java/guru/qa/niffler/jupiter/SuiteExtension.java index 43e5fefd8..0bb68d837 100644 --- a/niffler-e-2-e-tests/src/test/java/guru/qa/nifler/jupiter/SuiteExtension.java +++ b/niffler-e-2-e-tests/src/test/java/guru/qa/niffler/jupiter/SuiteExtension.java @@ -1,4 +1,4 @@ -package guru.qa.nifler.jupiter; +package guru.qa.niffler.jupiter; import org.junit.jupiter.api.extension.BeforeAllCallback; import org.junit.jupiter.api.extension.ExtensionContext; diff --git a/niffler-e-2-e-tests/src/test/java/guru/qa/nifler/model/SpendJson.java b/niffler-e-2-e-tests/src/test/java/guru/qa/niffler/model/SpendJson.java similarity index 79% rename from niffler-e-2-e-tests/src/test/java/guru/qa/nifler/model/SpendJson.java rename to niffler-e-2-e-tests/src/test/java/guru/qa/niffler/model/SpendJson.java index f1c23d0f3..7137e3368 100644 --- a/niffler-e-2-e-tests/src/test/java/guru/qa/nifler/model/SpendJson.java +++ b/niffler-e-2-e-tests/src/test/java/guru/qa/niffler/model/SpendJson.java @@ -1,8 +1,8 @@ -package guru.qa.nifler.model; +package guru.qa.niffler.model; import com.fasterxml.jackson.annotation.JsonProperty; -import guru.qa.nifler.enums.CurrencyValues; -import guru.qa.nifler.model.submodel.CategoryJson; +import guru.qa.niffler.enums.CurrencyValues; +import guru.qa.niffler.model.submodel.CategoryJson; import java.util.Date; import java.util.UUID; diff --git a/niffler-e-2-e-tests/src/test/java/guru/qa/nifler/model/submodel/CategoryJson.java b/niffler-e-2-e-tests/src/test/java/guru/qa/niffler/model/submodel/CategoryJson.java similarity index 88% rename from niffler-e-2-e-tests/src/test/java/guru/qa/nifler/model/submodel/CategoryJson.java rename to niffler-e-2-e-tests/src/test/java/guru/qa/niffler/model/submodel/CategoryJson.java index 8383c48ce..ecf835008 100644 --- a/niffler-e-2-e-tests/src/test/java/guru/qa/nifler/model/submodel/CategoryJson.java +++ b/niffler-e-2-e-tests/src/test/java/guru/qa/niffler/model/submodel/CategoryJson.java @@ -1,4 +1,4 @@ -package guru.qa.nifler.model.submodel; +package guru.qa.niffler.model.submodel; import com.fasterxml.jackson.annotation.JsonProperty; diff --git a/niffler-e-2-e-tests/src/test/java/guru/qa/nifler/page/EditSpendingPage.java b/niffler-e-2-e-tests/src/test/java/guru/qa/niffler/page/EditSpendingPage.java similarity index 92% rename from niffler-e-2-e-tests/src/test/java/guru/qa/nifler/page/EditSpendingPage.java rename to niffler-e-2-e-tests/src/test/java/guru/qa/niffler/page/EditSpendingPage.java index 8773d57c4..777068e06 100644 --- a/niffler-e-2-e-tests/src/test/java/guru/qa/nifler/page/EditSpendingPage.java +++ b/niffler-e-2-e-tests/src/test/java/guru/qa/niffler/page/EditSpendingPage.java @@ -1,4 +1,4 @@ -package guru.qa.nifler.page; +package guru.qa.niffler.page; import com.codeborne.selenide.SelenideElement; diff --git a/niffler-e-2-e-tests/src/test/java/guru/qa/nifler/page/LoginPage.java b/niffler-e-2-e-tests/src/test/java/guru/qa/niffler/page/LoginPage.java similarity index 95% rename from niffler-e-2-e-tests/src/test/java/guru/qa/nifler/page/LoginPage.java rename to niffler-e-2-e-tests/src/test/java/guru/qa/niffler/page/LoginPage.java index 06e11bfed..9a89c732a 100644 --- a/niffler-e-2-e-tests/src/test/java/guru/qa/nifler/page/LoginPage.java +++ b/niffler-e-2-e-tests/src/test/java/guru/qa/niffler/page/LoginPage.java @@ -1,4 +1,4 @@ -package guru.qa.nifler.page; +package guru.qa.niffler.page; import com.codeborne.selenide.SelenideElement; diff --git a/niffler-e-2-e-tests/src/test/java/guru/qa/nifler/page/MainPage.java b/niffler-e-2-e-tests/src/test/java/guru/qa/niffler/page/MainPage.java similarity index 95% rename from niffler-e-2-e-tests/src/test/java/guru/qa/nifler/page/MainPage.java rename to niffler-e-2-e-tests/src/test/java/guru/qa/niffler/page/MainPage.java index 2cbf88ec6..7cee0b39e 100644 --- a/niffler-e-2-e-tests/src/test/java/guru/qa/nifler/page/MainPage.java +++ b/niffler-e-2-e-tests/src/test/java/guru/qa/niffler/page/MainPage.java @@ -1,4 +1,4 @@ -package guru.qa.nifler.page; +package guru.qa.niffler.page; import com.codeborne.selenide.ElementsCollection; diff --git a/niffler-e-2-e-tests/src/test/java/guru/qa/nifler/test/SpendingWebTest.java b/niffler-e-2-e-tests/src/test/java/guru/qa/niffler/test/SpendingWebTest.java similarity index 64% rename from niffler-e-2-e-tests/src/test/java/guru/qa/nifler/test/SpendingWebTest.java rename to niffler-e-2-e-tests/src/test/java/guru/qa/niffler/test/SpendingWebTest.java index 5da0bbe31..6fe52e4f2 100644 --- a/niffler-e-2-e-tests/src/test/java/guru/qa/nifler/test/SpendingWebTest.java +++ b/niffler-e-2-e-tests/src/test/java/guru/qa/niffler/test/SpendingWebTest.java @@ -1,16 +1,17 @@ -package guru.qa.nifler.test; +package guru.qa.niffler.test; import com.codeborne.selenide.Selenide; -import guru.qa.nifler.config.Config; -import guru.qa.nifler.jupiter.BrowserExtension; -import guru.qa.nifler.jupiter.Spend; -import guru.qa.nifler.model.SpendJson; -import guru.qa.nifler.page.LoginPage; -import guru.qa.nifler.page.MainPage; +import guru.qa.niffler.config.Config; +import guru.qa.niffler.jupiter.BrowserExtension; +import guru.qa.niffler.jupiter.Spend; +import guru.qa.niffler.model.SpendJson; +import guru.qa.niffler.page.LoginPage; +import guru.qa.niffler.page.MainPage; +import io.qameta.allure.Description; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; -import static guru.qa.nifler.enums.CurrencyValues.RUB; +import static guru.qa.niffler.enums.CurrencyValues.RUB; @ExtendWith(BrowserExtension.class) public class SpendingWebTest { @@ -25,6 +26,7 @@ public class SpendingWebTest { currency = RUB ) @Test + @Description("Проверка возможности редактирования трат") void categoryDescriptionShouldBeEditedByTableAction(SpendJson spend) { final String newSpendingName = "Обучение Niffler Next Generation"; diff --git a/niffler-e-2-e-tests/src/test/java/guru/qa/niffler/test/web/FriendsWebTest.java b/niffler-e-2-e-tests/src/test/java/guru/qa/niffler/test/web/FriendsWebTest.java deleted file mode 100644 index e6e6651a2..000000000 --- a/niffler-e-2-e-tests/src/test/java/guru/qa/niffler/test/web/FriendsWebTest.java +++ /dev/null @@ -1,56 +0,0 @@ -package guru.qa.niffler.test.web; - -import com.codeborne.selenide.Selenide; -import guru.qa.niffler.config.Config; -import guru.qa.niffler.jupiter.annotation.meta.WebTest; -import guru.qa.niffler.jupiter.extension.UsersQueueExtension.StaticUser; -import guru.qa.niffler.jupiter.extension.UsersQueueExtension.UserType; -import guru.qa.niffler.page.LoginPage; -import org.junit.jupiter.api.Test; - -import static guru.qa.niffler.jupiter.extension.UsersQueueExtension.UserType.Type.EMPTY; -import static guru.qa.niffler.jupiter.extension.UsersQueueExtension.UserType.Type.WITH_FRIEND; -import static guru.qa.niffler.jupiter.extension.UsersQueueExtension.UserType.Type.WITH_INCOME_REQUEST; -import static guru.qa.niffler.jupiter.extension.UsersQueueExtension.UserType.Type.WITH_OUTCOME_REQUEST; - -@WebTest -public class FriendsWebTest { - - private static final Config CFG = Config.getInstance(); - - @Test - void friendShouldBePresentInFriendsTable(@UserType(WITH_FRIEND) StaticUser user) { - Selenide.open(CFG.frontUrl(), LoginPage.class) - .successLogin(user.username(), user.password()) - .checkThatPageLoaded() - .friendsPage() - .checkExistingFriends(user.friend()); - } - - @Test - void friendsTableShouldBeEmptyForNewUser(@UserType(EMPTY) StaticUser user) { - Selenide.open(CFG.frontUrl(), LoginPage.class) - .successLogin(user.username(), user.password()) - .checkThatPageLoaded() - .friendsPage() - .checkNoExistingFriends(); - } - - @Test - void incomeInvitationBePresentInFriendsTable(@UserType(WITH_INCOME_REQUEST) StaticUser user) { - Selenide.open(CFG.frontUrl(), LoginPage.class) - .successLogin(user.username(), user.password()) - .checkThatPageLoaded() - .friendsPage() - .checkExistingInvitations(user.income()); - } - - @Test - void outcomeInvitationBePresentInAllPeoplesTable(@UserType(WITH_OUTCOME_REQUEST) StaticUser user) { - Selenide.open(CFG.frontUrl(), LoginPage.class) - .successLogin(user.username(), user.password()) - .checkThatPageLoaded() - .allPeoplesPage() - .checkInvitationSentToUser(user.outcome()); - } -} diff --git a/niffler-e-2-e-tests/src/test/java/guru/qa/niffler/test/web/LoginTest.java b/niffler-e-2-e-tests/src/test/java/guru/qa/niffler/test/web/LoginTest.java deleted file mode 100644 index 947bf390f..000000000 --- a/niffler-e-2-e-tests/src/test/java/guru/qa/niffler/test/web/LoginTest.java +++ /dev/null @@ -1,29 +0,0 @@ -package guru.qa.niffler.test.web; - -import com.codeborne.selenide.Selenide; -import com.github.javafaker.Faker; -import guru.qa.niffler.config.Config; -import guru.qa.niffler.jupiter.annotation.meta.WebTest; -import guru.qa.niffler.page.LoginPage; -import org.junit.jupiter.api.Test; - -@WebTest -public class LoginTest { - - private static final Config CFG = Config.getInstance(); - private static final Faker faker = new Faker(); - - @Test - void mainPageShouldBeDisplayedAfterSuccessLogin() { - Selenide.open(CFG.frontUrl(), LoginPage.class) - .successLogin("duck", "12345") - .checkThatPageLoaded(); - } - - @Test - void userShouldStayOnLoginPageAfterLoginWithBadCredentials() { - LoginPage loginPage = Selenide.open(CFG.frontUrl(), LoginPage.class); - loginPage.login(faker.name().username(), "BAD"); - loginPage.checkError("Bad credentials"); - } -} diff --git a/niffler-e-2-e-tests/src/test/java/guru/qa/niffler/test/web/ProfileTest.java b/niffler-e-2-e-tests/src/test/java/guru/qa/niffler/test/web/ProfileTest.java deleted file mode 100644 index 93a9a1413..000000000 --- a/niffler-e-2-e-tests/src/test/java/guru/qa/niffler/test/web/ProfileTest.java +++ /dev/null @@ -1,44 +0,0 @@ -package guru.qa.niffler.test.web; - -import com.codeborne.selenide.Selenide; -import guru.qa.niffler.config.Config; -import guru.qa.niffler.jupiter.annotation.Category; -import guru.qa.niffler.jupiter.annotation.meta.WebTest; -import guru.qa.niffler.model.CategoryJson; -import guru.qa.niffler.page.LoginPage; -import guru.qa.niffler.page.ProfilePage; -import org.junit.jupiter.api.Test; - -@WebTest -public class ProfileTest { - - private static final Config CFG = Config.getInstance(); - - @Category( - username = "duck", - archived = true - ) - @Test - void archivedCategoryShouldPresentInCategoriesList(CategoryJson category) { - Selenide.open(CFG.frontUrl(), LoginPage.class) - .successLogin("duck", "12345") - .checkThatPageLoaded(); - - Selenide.open(CFG.frontUrl() + "profile", ProfilePage.class) - .checkArchivedCategoryExists(category.name()); - } - - @Category( - username = "duck", - archived = false - ) - @Test - void activeCategoryShouldPresentInCategoriesList(CategoryJson category) { - Selenide.open(CFG.frontUrl(), LoginPage.class) - .successLogin("duck", "12345") - .checkThatPageLoaded(); - - Selenide.open(CFG.frontUrl() + "profile", ProfilePage.class) - .checkCategoryExists(category.name()); - } -} diff --git a/niffler-e-2-e-tests/src/test/java/guru/qa/niffler/test/web/RegistrationTest.java b/niffler-e-2-e-tests/src/test/java/guru/qa/niffler/test/web/RegistrationTest.java deleted file mode 100644 index 3886d7547..000000000 --- a/niffler-e-2-e-tests/src/test/java/guru/qa/niffler/test/web/RegistrationTest.java +++ /dev/null @@ -1,51 +0,0 @@ -package guru.qa.niffler.test.web; - -import com.codeborne.selenide.Selenide; -import com.github.javafaker.Faker; -import guru.qa.niffler.config.Config; -import guru.qa.niffler.jupiter.annotation.meta.WebTest; -import guru.qa.niffler.page.LoginPage; -import org.junit.jupiter.api.Test; - -@WebTest -public class RegistrationTest { - - private static final Config CFG = Config.getInstance(); - private static final Faker faker = new Faker(); - - @Test - void shouldRegisterNewUser() { - String newUsername = faker.name().username(); - String password = "12345"; - Selenide.open(CFG.frontUrl(), LoginPage.class) - .doRegister() - .fillRegisterPage(newUsername, password, password) - .successSubmit() - .successLogin(newUsername, password) - .checkThatPageLoaded(); - } - - @Test - void shouldNotRegisterUserWithExistingUsername() { - String existingUsername = "duck"; - String password = "12345"; - - LoginPage loginPage = Selenide.open(CFG.frontUrl(), LoginPage.class); - loginPage.doRegister() - .fillRegisterPage(existingUsername, password, password) - .submit(); - loginPage.checkError("Username `" + existingUsername + "` already exists"); - } - - @Test - void shouldShowErrorIfPasswordAndConfirmPasswordAreNotEqual() { - String newUsername = faker.name().username(); - String password = "12345"; - - LoginPage loginPage = Selenide.open(CFG.frontUrl(), LoginPage.class); - loginPage.doRegister() - .fillRegisterPage(newUsername, password, "bad password submit") - .submit(); - loginPage.checkError("Passwords should be equal"); - } -} diff --git a/niffler-e-2-e-tests/src/test/java/guru/qa/nifler/jupiter/Category.java b/niffler-e-2-e-tests/src/test/java/guru/qa/nifler/jupiter/Category.java deleted file mode 100644 index e69de29bb..000000000 diff --git a/niffler-e-2-e-tests/src/test/java/guru/qa/nifler/jupiter/CategoryExtension.java b/niffler-e-2-e-tests/src/test/java/guru/qa/nifler/jupiter/CategoryExtension.java deleted file mode 100644 index e69de29bb..000000000 diff --git a/niffler-e-2-e-tests/src/test/resources/META-INF/services/org.junit.jupiter.api.extension.Extension b/niffler-e-2-e-tests/src/test/resources/META-INF/services/org.junit.jupiter.api.extension.Extension index d0d8eb030..077c9a29b 100644 --- a/niffler-e-2-e-tests/src/test/resources/META-INF/services/org.junit.jupiter.api.extension.Extension +++ b/niffler-e-2-e-tests/src/test/resources/META-INF/services/org.junit.jupiter.api.extension.Extension @@ -1 +1 @@ -guru.qa.niffler.jupiter.extension.TestMethodContextExtension +#guru.qa.niffler.jupiter.extension.TestMethodContextExtension From 49509113c4589e0df7adaa6b76089a64cc2d8ab1 Mon Sep 17 00:00:00 2001 From: tesarakt97 <90032193+tesarakt97@users.noreply.github.com> Date: Sat, 12 Oct 2024 19:35:33 +0300 Subject: [PATCH 4/4] =?UTF-8?q?1=20=D0=A4=D0=B8=D0=BA=D1=81=20=D0=B7=D0=B0?= =?UTF-8?q?=D0=BC=D0=B5=D1=87=D0=B0=D0=BD=D0=B8=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/guru/qa/niffler/jupiter/SpendingResolverExtension.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/niffler-e-2-e-tests/src/test/java/guru/qa/niffler/jupiter/SpendingResolverExtension.java b/niffler-e-2-e-tests/src/test/java/guru/qa/niffler/jupiter/SpendingResolverExtension.java index 1712832d4..ccb3a3413 100644 --- a/niffler-e-2-e-tests/src/test/java/guru/qa/niffler/jupiter/SpendingResolverExtension.java +++ b/niffler-e-2-e-tests/src/test/java/guru/qa/niffler/jupiter/SpendingResolverExtension.java @@ -1,6 +1,7 @@ package guru.qa.niffler.jupiter; import guru.qa.niffler.model.SpendJson; +import io.qameta.allure.Step; import org.junit.jupiter.api.extension.ExtensionContext; import org.junit.jupiter.api.extension.ParameterContext; import org.junit.jupiter.api.extension.ParameterResolutionException; @@ -17,6 +18,7 @@ public boolean supportsParameter(ParameterContext parameterContext, ExtensionCon } @Override + @Step("") public SpendJson resolveParameter(ParameterContext parameterContext, ExtensionContext extensionContext) throws ParameterResolutionException { return extensionContext.getStore(CreateSpendingExtension.NAMESPACE) .get(extensionContext.getUniqueId(),