diff --git a/.github/workflows/branch-deploy.yml b/.github/workflows/branch-deploy.yml index 107a93116..6969bd2c6 100644 --- a/.github/workflows/branch-deploy.yml +++ b/.github/workflows/branch-deploy.yml @@ -8,6 +8,7 @@ on: permissions: contents: read + statuses: write jobs: build: diff --git a/.github/workflows/e2e-manual.yml b/.github/workflows/e2e-manual.yml new file mode 100644 index 000000000..edb9eead0 --- /dev/null +++ b/.github/workflows/e2e-manual.yml @@ -0,0 +1,26 @@ +name: "E2E: Suite run" +on: + workflow_dispatch: + inputs: + test_suite: + description: 'Select test suite to run' + default: 'regression' + required: true + type: choice + options: + - regression + - sanity + - smoke + +permissions: + contents: read + checks: write + statuses: write + +jobs: + build-and-test: + uses: ./.github/workflows/e2e-run.yml + secrets: inherit + with: + suite_name: ${{ github.event.inputs.test_suite }} + sha: ${{ github.sha }} diff --git a/.github/workflows/e2e-pr.yml b/.github/workflows/e2e-pr.yml new file mode 100644 index 000000000..d934e5bba --- /dev/null +++ b/.github/workflows/e2e-pr.yml @@ -0,0 +1,24 @@ +name: "E2E: PR smoke tests" +on: + pull_request: + types: [ "opened", "reopened", "synchronize" ] + paths: + - "pom.xml" + - "contract/**" + - "api/**" + - "serde-api/**" + - "frontend/**" + - "e2e-tests/**" + +permissions: + contents: read + checks: write + statuses: write + +jobs: + build-and-test: + uses: ./.github/workflows/e2e-run.yml + secrets: inherit + with: + suite_name: "smoke" + sha: ${{ github.event.pull_request.head.sha }} diff --git a/.github/workflows/e2e-run.yml b/.github/workflows/e2e-run.yml new file mode 100644 index 000000000..e42e40c56 --- /dev/null +++ b/.github/workflows/e2e-run.yml @@ -0,0 +1,164 @@ +name: "E2E: Run tests" + +on: + workflow_call: + inputs: + suite_name: + description: 'Test suite name to run' + default: 'regression' + required: true + type: string + sha: + required: true + type: string + +permissions: + contents: read + checks: write + statuses: write + +jobs: + build: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + token: ${{ github.token }} + ref: ${{ inputs.sha }} + + - name: Set up JDK + uses: actions/setup-java@v3 + with: + java-version: '17' + distribution: 'zulu' + cache: 'maven' + + - name: Build with Maven + id: build_app + run: | + ./mvnw -B -ntp versions:set -DnewVersion=${{ inputs.sha }} + ./mvnw -B -V -ntp clean install -Pprod -Dmaven.test.skip=true + + - name: Upload maven artifacts + uses: actions/upload-artifact@v4 + with: + name: artifacts + path: ~/.m2/repository/io/kafbat/ui/**/* + retention-days: 7 + + - name: Dump docker image + run: | + docker image save ghcr.io/kafbat/kafka-ui:latest > /tmp/image.tar + + - name: Upload docker image + uses: actions/upload-artifact@v4 + with: + name: image + path: /tmp/image.tar + retention-days: 7 + + tests: + runs-on: ubuntu-latest + needs: build + steps: + + - name: Checkout + uses: actions/checkout@v4 + with: + token: ${{ github.token }} + ref: ${{ inputs.sha }} + + - name: Set up JDK + uses: actions/setup-java@v3 + with: + java-version: '17' + distribution: 'zulu' + cache: 'maven' + + - name: Download maven artifacts + uses: actions/download-artifact@v4 + with: + name: artifacts + path: ~/.m2/repository/io/kafbat/ui + + - name: Download docker image + uses: actions/download-artifact@v4 + with: + name: image + path: /tmp + + - name: Load Docker image + run: | + docker load --input /tmp/image.tar + + - name: Cache Docker images. + uses: ScribeMD/docker-cache@0.5.0 + with: + key: docker-${{ runner.os }}-${{ hashFiles('./e2e-tests/selenoid/selenoid-ci.yaml', './documentation/compose/e2e-tests.yaml') }} + + - name: Compose up + id: compose_app + # use the following command until #819 will be fixed # TODO recheck 819 + run: | + mkdir -p ./e2e-tests/target/selenoid-results/video + mkdir -p ./e2e-tests/target/selenoid-results/logs + docker-compose -f ./e2e-tests/selenoid/selenoid-ci.yaml up -d + docker-compose -f ./documentation/compose/e2e-tests.yaml up -d + + - name: Dump Docker logs on failure + if: failure() + uses: jwalton/gh-docker-logs@v2.2.2 + + - name: Run test suite + run: | + ./mvnw -B -ntp versions:set -DnewVersion=${{ inputs.sha }} + ./mvnw -B -V -ntp -Dsurefire.suiteXmlFiles='src/test/resources/${{ inputs.suite_name }}.xml' -f 'e2e-tests' test -Pprod + + - name: Upload allure reports artifact + if: '!cancelled()' + uses: actions/upload-artifact@v4 + with: + name: reports + path: ./e2e-tests/target/allure-results + retention-days: 7 + + reports: + runs-on: ubuntu-latest + needs: tests + if: ${{ !cancelled() && github.repository == 'kafbat/kafka-ui' }} + steps: + - name: Download allure reports artifact + uses: actions/download-artifact@v4 + with: + name: reports + path: ./e2e-tests/target/allure-results + + - name: Generate Allure report + uses: simple-elf/allure-report-action@v1.9 + id: allure-report + with: + allure_results: ./e2e-tests/target/allure-results + gh_pages: allure-results + allure_report: allure-report + subfolder: allure-results + report_url: "https://reports.kafbat.dev" + + - name: Upload allure report to R2 + uses: ryand56/r2-upload-action@latest + with: + source-dir: allure-history/allure-results + destination-dir: . + r2-bucket: "reports" + r2-account-id: ${{ secrets.R2_ACCOUNT_ID }} + r2-access-key-id: ${{ secrets.R2_ACCESS_KEY_ID }} + r2-secret-access-key: ${{ secrets.R2_ACCESS_SECRET_KEY }} + + - name: Add allure link status check + uses: Sibz/github-status-action@v1.1.6 + with: + authToken: ${{secrets.GITHUB_TOKEN}} + context: "Click Details button to view Allure report" + state: "success" + sha: ${{ inputs.sha }} + target_url: https://reports.kafbat.dev/${{ github.run_number }} diff --git a/.github/workflows/e2e-weekly.yml b/.github/workflows/e2e-weekly.yml new file mode 100644 index 000000000..6b25c4679 --- /dev/null +++ b/.github/workflows/e2e-weekly.yml @@ -0,0 +1,17 @@ +name: "E2E: Weekly suite" +on: + schedule: + - cron: '0 1 * * 1' + +permissions: + contents: read + checks: write + statuses: write + +jobs: + build-and-test: + uses: ./.github/workflows/e2e-run.yml + secrets: inherit + with: + suite_name: "sanity" + sha: ${{ github.sha }} diff --git a/.github/workflows/welcome-first-time-contributors.yml b/.github/workflows/welcome-first-time-contributors.yml index 42acbf602..27cd67408 100644 --- a/.github/workflows/welcome-first-time-contributors.yml +++ b/.github/workflows/welcome-first-time-contributors.yml @@ -22,8 +22,8 @@ jobs: Welcome, and thank you for opening your first issue in the repo! - Please wait for triaging by our maintainers. - + Please wait for triaging by our maintainers. + As development is carried out in our spare time, you can support us by sponsoring our activities or even funding the development of specific issues. [Sponsorship link](https://github.com/kafbat) @@ -34,6 +34,6 @@ jobs: Welcome, and thank you for opening your first PR in the repo! - Please wait for triaging by our maintainers. + Please wait for triaging by our maintainers. Please take a look at our [contributing guide](https://ui.docs.kafbat.io/development/contributing). diff --git a/e2e-tests/.env.ci b/e2e-tests/.env.ci deleted file mode 100644 index cf6cd6d43..000000000 --- a/e2e-tests/.env.ci +++ /dev/null @@ -1,3 +0,0 @@ -USE_LOCAL_BROWSER=false -SHOULD_START_SELENOID=true -TURN_OFF_SCREENSHOTS=true diff --git a/e2e-tests/.gitignore b/e2e-tests/.gitignore index e1f37b83c..c52b34a36 100644 --- a/e2e-tests/.gitignore +++ b/e2e-tests/.gitignore @@ -1,6 +1,3 @@ .env build/ -allure-results/ -selenoid/video/ target/ -selenoid/logs/ diff --git a/e2e-tests/QASE.md b/e2e-tests/QASE.md deleted file mode 100644 index 84d021658..000000000 --- a/e2e-tests/QASE.md +++ /dev/null @@ -1,70 +0,0 @@ -### E2E integration with Qase.io TMS (for internal users) - -### Table of Contents - -- [Intro](#intro) -- [Set up Qase.io integration](#set-up-qase-integration) -- [Test case creation](#test-case-creation) -- [Test run reporting](#test-run-reporting) - -### Intro - -We're using [Qase.io](https://help.qase.io/en/) as TMS to keep test cases and accumulate test runs. -Integration is set up through API using [qase-api](https://mvnrepository.com/artifact/io.qase/qase-api) -and [qase-testng](https://mvnrepository.com/artifact/io.qase/qase-testng) libraries. - -### Set up Qase integration - -To set up integration locally add next VM option `-DQASEIO_API_TOKEN='%s'` -(add your [Qase token](https://app.qase.io/user/api/token) instead of '%s') into your run configuration - -### Test case creation - -All new test cases can be added into TMS by default if they have no QaseId and QaseTitle matching already existing -cases. -But to handle `@Suite` and `@Automation` we added custom QaseCreateListener. To create new test case for next sync with -Qase (see example `e2e-tests/src/test/java/io/kafbat/ui/qaseSuite/Template.java`): - -1. Create new class in `e2e-tests/src/test/java/io/kafbat/ui/qaseSuite/suit` -2. Inherit it from `e2e-tests/src/test/java/io/kafbat/ui/qaseSuite/BaseQaseTest.java` -3. Create new test method with some name inside the class and annotate it with: - -- `@Automation` (optional - Not automated by default) - to set one of automation states: NOT_AUTOMATED, TO_BE_AUTOMATED, - AUTOMATED -- `@QaseTitle` (required) - to set title for new test case and to check is there no existing cases with same title in - Qase.io -- `@Status` (optional - Draft by default) - to set one of case statuses: ACTUAL, DRAFT, DEPRECATED -- `@Suite` (optional) - to store new case in some existing package need to set its id, otherwise case will be stored in - the root -- `@Test` (required) - annotation from TestNG to specify this method as test - -4. Create new private void step methods with some name inside the same class and annotate it with - @io.qase.api.annotation.Step to specify this method as step. -5. Use defined step methods inside created test method in concrete order -6. If there are any additional cases to create you can repeat scenario in a new class -7. There are two ways to sync newly created cases in the framework with Qase.io: - -- sync can be performed locally - run new test classes with - already [set up Qase.io integration](#Set up Qase.io integration) -- also you can commit and push your changes, then - run [E2E Manual suite](https://github.com/kafbat/kafka-ui/actions/workflows/e2e-manual.yml) on your branch - -8. No test run in Qase.io will be created, new test case will be stored defined directory - in [project's repository](https://app.qase.io/project/KAFKAUI) -9. To add expected results into created test case edit in Qase.io manually - -### Test run reporting - -To handle manual test cases with status `Skipped` we added custom QaseResultListener. To create new test run: - -1. All test methods should be annotated with actual `@QaseId` -2. There are two ways to sync newly created cases in the framework with Qase.io: - -- run can be performed locally - run test classes (or suites) with - already [set up Qase.io integration](#Set up Qase.io integration), they will be labeled as `Automation CUSTOM suite` -- also you can commit and push your changes, then - run [E2E Automation suite](https://github.com/kafbat/kafka-ui/actions/workflows/e2e-automation.yml) on your branch - -3. All new test runs will be added into [project's test runs](https://app.qase.io/run/KAFKAUI) with corresponding label - using QaseId to identify existing cases -4. All test cases from manual suite are set up to have `Skipped` status in test runs to perform them manually diff --git a/e2e-tests/README.md b/e2e-tests/README.md index 83d8cfdec..89ffc6246 100644 --- a/e2e-tests/README.md +++ b/e2e-tests/README.md @@ -7,9 +7,7 @@ This repository is for E2E UI automation. - [Prerequisites](#prerequisites) - [How to install](#how-to-install) - [How to run checks](#how-to-run-checks) -- [Qase.io integration (for internal users)](#qase-integration) - [Reporting](#reporting) -- [Environments setup](#environments-setup) - [Test Data](#test-data) - [Actions](#actions) - [Checks](#checks) @@ -19,7 +17,7 @@ This repository is for E2E UI automation. ### Prerequisites - Docker & Docker-compose -- Java (install aarch64 jdk if you have M1/arm chip) +- Java (install arch64 jdk if you have M1/arm chip) - Maven ### How to install @@ -27,7 +25,7 @@ This repository is for E2E UI automation. ``` git clone https://github.com/kafbat/kafka-ui.git cd e2e-tests -docker pull selenoid/vnc_chrome:103.0 +docker pull selenoid/vnc_chrome:117.0 ``` ### How to run checks @@ -36,21 +34,17 @@ docker pull selenoid/vnc_chrome:103.0 ``` cd kafbat-ui -docker-compose -f e2e-tests/docker/selenoid-local.yaml up -d +docker-compose -f e2e-tests/selenoid/selenoid-local.yaml up -d docker-compose -f documentation/compose/e2e-tests.yaml up -d ``` -2. To run test suite select its name (options: regression, sanity, smoke) and put it instead %s into command below +2. To run test suite select its name (options: `regression`, `sanity`, `smoke`) and put it instead %s into command below ``` ./mvnw -Dsurefire.suiteXmlFiles='src/test/resources/%s.xml' -f 'e2e-tests' test -Pprod ``` -3. To run tests on your local Chrome browser just add next VM option to the Run Configuration - -``` --Dbrowser=local -``` +3. To run tests on your local Chrome browser check `selenoid-off` profile on Maven panel, also there you can check `headless-off` Expected Location of Chrome ``` @@ -60,32 +54,17 @@ Windows XP: %HOMEPATH%\Local Settings\Application Data\Google\Ch Windows Vista and newer: C:\Users%USERNAME%\AppData\Local\Google\Chrome\Application\chrome.exe ``` -### Qase integration - -Found instruction for Qase.io integration (for internal use only) at `e2e-tests/QASE.md` - ### Reporting -Reports are in `allure-results` folder. -If you have installed allure commandline [here](https://www.npmjs.com/package/allure-commandline)) -You can see allure report with command: +Screenshots are stored in `target/selenide-results/reports` folder. + +Reports are stored in `target/allure-results` folder. +If you have installed allure commandline [here](https://www.npmjs.com/package/allure-commandline), you can see allure report with command: ``` allure serve ``` -### Screenshots - -Reference screenshots are in `SCREENSHOTS_FOLDER` (default,`e2e-tests/screenshots`) - -### How to develop - -> ⚠️ todo - -### Setting for different environments - -> ⚠️ todo - ### Test Data > ⚠️ todo @@ -102,7 +81,6 @@ Reference screenshots are in `SCREENSHOTS_FOLDER` (default,`e2e-tests/screensho > ⚠️ todo -### Tips - -- install `Selenium UI Testing plugin` in IDEA +### How to develop +> ⚠️ todo diff --git a/e2e-tests/docker/selenoid-git.yaml b/e2e-tests/docker/selenoid-git.yaml deleted file mode 100644 index f4c5430f1..000000000 --- a/e2e-tests/docker/selenoid-git.yaml +++ /dev/null @@ -1,33 +0,0 @@ ---- -version: '3' - -services: - - selenoid: - network_mode: bridge - image: aerokube/selenoid:1.10.7 - volumes: - - "../selenoid/config:/etc/selenoid" - - "/var/run/docker.sock:/var/run/docker.sock" - - "../selenoid/video:/opt/selenoid/video" - - "../selenoid/logs:/opt/selenoid/logs" - environment: - - OVERRIDE_VIDEO_OUTPUT_DIR=../selenoid/video - command: [ "-conf", "/etc/selenoid/browsersGit.json", "-video-output-dir", "/opt/selenoid/video", "-log-output-dir", "/opt/selenoid/logs" ] - ports: - - "4444:4444" - - selenoid-ui: - network_mode: bridge - image: aerokube/selenoid-ui:latest-release - links: - - selenoid - ports: - - "8081:8080" - command: [ "--selenoid-uri", "http://selenoid:4444" ] - - selenoid-chrome: - network_mode: bridge - image: selenoid/vnc_chrome:103.0 - extra_hosts: - - "host.docker.internal:host-gateway" diff --git a/e2e-tests/docker/selenoid-local.yaml b/e2e-tests/docker/selenoid-local.yaml deleted file mode 100644 index 9d7fb8e0b..000000000 --- a/e2e-tests/docker/selenoid-local.yaml +++ /dev/null @@ -1,33 +0,0 @@ ---- -version: '3' - -services: - - selenoid: - network_mode: bridge - image: aerokube/selenoid:1.10.7 - volumes: - - "../selenoid/config:/etc/selenoid" - - "/var/run/docker.sock:/var/run/docker.sock" - - "../selenoid/video:/opt/selenoid/video" - - "../selenoid/logs:/opt/selenoid/logs" - environment: - - OVERRIDE_VIDEO_OUTPUT_DIR=../selenoid/video - command: [ "-conf", "/etc/selenoid/browsersLocal.json", "-video-output-dir", "/opt/selenoid/video", "-log-output-dir", "/opt/selenoid/logs" ] - ports: - - "4444:4444" - - selenoid-ui: - network_mode: bridge - image: aerokube/selenoid-ui:latest-release - links: - - selenoid - ports: - - "8081:8080" - command: [ "--selenoid-uri", "http://selenoid:4444" ] - - selenoid-chrome: - network_mode: bridge - image: selenoid/vnc_chrome:103.0 - extra_hosts: - - "host.docker.internal:host-gateway" diff --git a/e2e-tests/pom.xml b/e2e-tests/pom.xml index 9516808fd..c9b6babba 100644 --- a/e2e-tests/pom.xml +++ b/e2e-tests/pom.xml @@ -12,20 +12,13 @@ e2e-tests - 3.2.5 + 3.3.1 ${project.version} - 1.19.5 - 5.2.1 - 4.8.1 - 6.12.3 - 7.9.0 - 2.25.0 - 3.0.5 + 17 + 3.2.3 + 3.2.5 1.9.9.1 - 3.25.3 - 2.2 - 2.0.7 - 3.3.1 + 2.27.0 @@ -33,93 +26,17 @@ org.apache.kafka kafka_2.13 ${kafka.version} - - - io.netty - netty-buffer - - - io.netty - netty-common - - - io.netty - netty-codec - - - io.netty - netty-handler - - - io.netty - netty-resolver - - - io.netty - netty-transport - - - io.netty - netty-transport-native-epoll - - - io.netty - netty-transport-native-unix-common - - - - - - - io.netty - netty-buffer - - - io.netty - netty-common - - - io.netty - netty-codec - - - io.netty - netty-handler - io.netty - netty-resolver - - - io.netty - netty-transport - - - io.netty - netty-transport-native-epoll - - - io.netty - netty-transport-native-unix-common - - - io.netty - netty-resolver-dns-native-macos - osx-aarch_64 + io.kafbat.ui + contract + ${contract} - org.testcontainers - testcontainers - ${testcontainers.version} - - - org.testcontainers - selenium - ${testcontainers.version} + org.aspectj + aspectjweaver + ${aspectj.version} org.projectlombok @@ -127,79 +44,34 @@ ${org.projectlombok.version} - org.apache.httpcomponents.core5 - httpcore5 - ${httpcomponents.version} + commons-io + commons-io + 2.16.1 - org.apache.httpcomponents.client5 - httpclient5 - ${httpcomponents.version} - - - org.seleniumhq.selenium - selenium-http-jdk-client - ${selenium.version} - - - org.seleniumhq.selenium - selenium-http - ${selenium.version} + org.testng + testng + 7.10.0 com.codeborne selenide - ${selenide.version} - - - org.testng - testng - ${testng.version} + 7.2.3 io.qameta.allure - allure-selenide + allure-testng ${allure.version} io.qameta.allure - allure-testng + allure-selenide ${allure.version} - io.qase - qase-testng - ${qase.io.version} - - - io.qase - qase-api - ${qase.io.version} - - - org.hamcrest - hamcrest - ${hamcrest.version} - - - org.assertj - assertj-core - ${assertj.version} - - - org.aspectj - aspectjrt - ${aspectj.version} - - - org.slf4j - slf4j-simple - ${slf4j.version} - - - io.kafbat.ui - contract - ${contract} + io.github.bonigarcia + webdrivermanager + 5.8.0 @@ -210,28 +82,9 @@ true - - - - org.apache.maven.plugins - maven-surefire-plugin - - true - - - - org.apache.maven.surefire - surefire-testng - ${maven.surefire-plugin.version} - - - - - org.apache.maven.plugins - maven-compiler-plugin - - - + + true + prod @@ -240,17 +93,26 @@ org.apache.maven.plugins maven-surefire-plugin - ${maven.surefire-plugin.version} + ${maven.surefire.release} -javaagent:"${settings.localRepository}/org/aspectj/aspectjweaver/${aspectj.version}/aspectjweaver-${aspectj.version}.jar" + + + ${headless.state} + + ${selenoid.state} + + ${project.basedir}/target/allure-results + + org.apache.maven.surefire surefire-testng - ${maven.surefire-plugin.version} + ${maven.surefire-testng} org.aspectj @@ -287,16 +149,27 @@ true true true - file:${basedir}/../etc/checkstyle/checkstyle-e2e.xml + file:${basedir}/../etc/checkstyle/checkstyle-e2e.xml + file:${basedir}/../etc/checkstyle/apache-header.txt - - + + e2e-headless-off + + false + + + + e2e-selenoid-off + + false + + diff --git a/e2e-tests/selenoid/config/browsersGit.json b/e2e-tests/selenoid/config/browsers-ci.json similarity index 66% rename from e2e-tests/selenoid/config/browsersGit.json rename to e2e-tests/selenoid/config/browsers-ci.json index 9e0186161..11b492c1b 100644 --- a/e2e-tests/selenoid/config/browsersGit.json +++ b/e2e-tests/selenoid/config/browsers-ci.json @@ -1,9 +1,9 @@ { "chrome": { - "default": "103.0", + "default": "117.0", "versions": { - "103.0": { - "image": "selenoid/vnc_chrome:103.0", + "117.0": { + "image": "selenoid/vnc_chrome:117.0", "hosts": [ "host.docker.internal:172.17.0.1" ], diff --git a/e2e-tests/selenoid/config/browsersLocal.json b/e2e-tests/selenoid/config/browsers-local.json similarity index 52% rename from e2e-tests/selenoid/config/browsersLocal.json rename to e2e-tests/selenoid/config/browsers-local.json index 35a494f33..af299a40b 100644 --- a/e2e-tests/selenoid/config/browsersLocal.json +++ b/e2e-tests/selenoid/config/browsers-local.json @@ -1,9 +1,9 @@ { "chrome": { - "default": "103.0", + "default": "117.0", "versions": { - "103.0": { - "image": "selenoid/vnc_chrome:103.0", + "117.0": { + "image": "selenoid/vnc_chrome:117.0", "port": "4444", "path": "/" } diff --git a/e2e-tests/selenoid/selenoid-ci.yaml b/e2e-tests/selenoid/selenoid-ci.yaml new file mode 100644 index 000000000..578e6d621 --- /dev/null +++ b/e2e-tests/selenoid/selenoid-ci.yaml @@ -0,0 +1,38 @@ +--- +version: '3' + +services: + + # https://github.com/aerokube/selenoid/releases + selenoid: + network_mode: bridge + image: aerokube/selenoid:1.11.2 + volumes: + - "../selenoid/config:/etc/selenoid" + - "/var/run/docker.sock:/var/run/docker.sock" + - "../target/selenoid-results/video:/opt/selenoid/video" + - "../target/selenoid-results/logs:/opt/selenoid/logs" + environment: + - OVERRIDE_VIDEO_OUTPUT_DIR=../docker/selenoid/video + ports: + - "4444:4444" + command: [ "-limit", "5", "-conf", "/etc/selenoid/browsers-ci.json", "-video-output-dir", "/opt/selenoid/video", "-log-output-dir", "/opt/selenoid/logs" ] + + # https://github.com/aerokube/selenoid-ui/releases + selenoid-ui: + network_mode: bridge + image: aerokube/selenoid-ui:1.10.11 + links: + - selenoid + ports: + - "8081:8080" + command: [ "--selenoid-uri", "http://selenoid:4444" ] + + # https://aerokube.com/images/latest + selenoid-chrome: + image: selenoid/vnc_chrome:117.0 + extra_hosts: + - "host.docker.internal:host-gateway" + links: + - selenoid + - selenoid-ui diff --git a/e2e-tests/selenoid/selenoid-local.yaml b/e2e-tests/selenoid/selenoid-local.yaml new file mode 100644 index 000000000..a5e1f006f --- /dev/null +++ b/e2e-tests/selenoid/selenoid-local.yaml @@ -0,0 +1,38 @@ +--- +version: '3' + +services: + + # https://github.com/aerokube/selenoid/releases + selenoid: + network_mode: bridge + image: aerokube/selenoid:1.11.2 + volumes: + - "../selenoid/config:/etc/selenoid" + - "/var/run/docker.sock:/var/run/docker.sock" + - "../target/selenoid-results/video:/opt/selenoid/video" + - "../target/selenoid-results/logs:/opt/selenoid/logs" + environment: + - OVERRIDE_VIDEO_OUTPUT_DIR=../docker/selenoid/video + ports: + - "4444:4444" + command: [ "-limit", "5", "-conf", "/etc/selenoid/browsers-local.json", "-video-output-dir", "/opt/selenoid/video", "-log-output-dir", "/opt/selenoid/logs" ] + + # https://github.com/aerokube/selenoid-ui/releases + selenoid-ui: + network_mode: bridge + image: aerokube/selenoid-ui:1.10.11 + links: + - selenoid + ports: + - "8081:8080" + command: [ "--selenoid-uri", "http://selenoid:4444" ] + + # https://aerokube.com/images/latest + selenoid-chrome: + image: selenoid/vnc_chrome:117.0 + extra_hosts: + - "host.docker.internal:host-gateway" + links: + - selenoid + - selenoid-ui diff --git a/e2e-tests/src/main/java/io/kafbat/ui/models/Connector.java b/e2e-tests/src/main/java/io/kafbat/ui/models/Connector.java index 2885e3302..3f1826ac4 100644 --- a/e2e-tests/src/main/java/io/kafbat/ui/models/Connector.java +++ b/e2e-tests/src/main/java/io/kafbat/ui/models/Connector.java @@ -1,5 +1,7 @@ package io.kafbat.ui.models; +import static org.apache.commons.lang3.RandomStringUtils.randomAlphabetic; + import lombok.Data; import lombok.experimental.Accessors; @@ -8,4 +10,10 @@ public class Connector { private String name, config; + + public static Connector createConnector(String config) { + return new Connector() + .setName("aqa_connector_" + randomAlphabetic(5)) + .setConfig(config); + } } diff --git a/e2e-tests/src/main/java/io/kafbat/ui/models/Schema.java b/e2e-tests/src/main/java/io/kafbat/ui/models/Schema.java index edfdc3e10..9e89f5613 100644 --- a/e2e-tests/src/main/java/io/kafbat/ui/models/Schema.java +++ b/e2e-tests/src/main/java/io/kafbat/ui/models/Schema.java @@ -18,19 +18,19 @@ public class Schema { public static Schema createSchemaAvro() { return new Schema().setName("schema_avro-" + randomAlphabetic(5)) .setType(SchemaType.AVRO) - .setValuePath(System.getProperty(USER_DIR) + "/src/main/resources/testData/schemas/schema_avro_value.json"); + .setValuePath(System.getProperty(USER_DIR) + "/src/main/resources/testdata/schemas/schema_avro_value.json"); } public static Schema createSchemaJson() { return new Schema().setName("schema_json-" + randomAlphabetic(5)) .setType(SchemaType.JSON) - .setValuePath(System.getProperty(USER_DIR) + "/src/main/resources/testData/schemas/schema_json_Value.json"); + .setValuePath(System.getProperty(USER_DIR) + "/src/main/resources/testdata/schemas/schema_json_value.json"); } public static Schema createSchemaProtobuf() { return new Schema().setName("schema_protobuf-" + randomAlphabetic(5)) .setType(SchemaType.PROTOBUF) .setValuePath( - System.getProperty(USER_DIR) + "/src/main/resources/testData/schemas/schema_protobuf_value.txt"); + System.getProperty(USER_DIR) + "/src/main/resources/testdata/schemas/schema_protobuf_value.txt"); } } diff --git a/e2e-tests/src/main/java/io/kafbat/ui/models/Topic.java b/e2e-tests/src/main/java/io/kafbat/ui/models/Topic.java index 55d724b85..660e16339 100644 --- a/e2e-tests/src/main/java/io/kafbat/ui/models/Topic.java +++ b/e2e-tests/src/main/java/io/kafbat/ui/models/Topic.java @@ -1,9 +1,11 @@ package io.kafbat.ui.models; -import io.kafbat.ui.pages.topics.enums.CleanupPolicyValue; -import io.kafbat.ui.pages.topics.enums.CustomParameterType; -import io.kafbat.ui.pages.topics.enums.MaxSizeOnDisk; -import io.kafbat.ui.pages.topics.enums.TimeToRetain; +import static org.apache.commons.lang3.RandomStringUtils.randomAlphabetic; + +import io.kafbat.ui.screens.topics.enums.CleanupPolicyValue; +import io.kafbat.ui.screens.topics.enums.CustomParameterType; +import io.kafbat.ui.screens.topics.enums.MaxSizeOnDisk; +import io.kafbat.ui.screens.topics.enums.TimeToRetain; import lombok.Data; import lombok.experimental.Accessors; @@ -17,4 +19,12 @@ public class Topic { private CleanupPolicyValue cleanupPolicyValue; private MaxSizeOnDisk maxSizeOnDisk; private TimeToRetain timeToRetain; + + public static Topic createTopic() { + return new Topic() + .setName("aqa_topic_" + randomAlphabetic(5)) + .setNumberOfPartitions(1) + .setMessageKey(randomAlphabetic(5)) + .setMessageValue(randomAlphabetic(10)); + } } diff --git a/e2e-tests/src/main/java/io/kafbat/ui/pages/BasePage.java b/e2e-tests/src/main/java/io/kafbat/ui/screens/BasePage.java similarity index 87% rename from e2e-tests/src/main/java/io/kafbat/ui/pages/BasePage.java rename to e2e-tests/src/main/java/io/kafbat/ui/screens/BasePage.java index faee6ccce..11202e2da 100644 --- a/e2e-tests/src/main/java/io/kafbat/ui/pages/BasePage.java +++ b/e2e-tests/src/main/java/io/kafbat/ui/screens/BasePage.java @@ -1,21 +1,23 @@ -package io.kafbat.ui.pages; +package io.kafbat.ui.screens; import static com.codeborne.selenide.Selenide.$$x; import static com.codeborne.selenide.Selenide.$x; +import static io.kafbat.ui.variables.Common.LOG_RESULT; import com.codeborne.selenide.Condition; import com.codeborne.selenide.ElementsCollection; import com.codeborne.selenide.SelenideElement; import com.codeborne.selenide.WebDriverRunner; -import io.kafbat.ui.pages.panels.enums.MenuItem; -import io.kafbat.ui.utilities.WebUtils; +import io.kafbat.ui.screens.panels.enums.MenuItem; +import io.kafbat.ui.utilities.WebUtil; import java.time.Duration; +import lombok.Getter; import lombok.extern.slf4j.Slf4j; import org.openqa.selenium.Keys; import org.openqa.selenium.interactions.Actions; @Slf4j -public abstract class BasePage extends WebUtils { +public abstract class BasePage extends WebUtil { protected SelenideElement loadingSpinner = $x("//div[@role='progressbar']"); protected SelenideElement submitBtn = $x("//button[@type='submit']"); @@ -49,8 +51,14 @@ protected void waitUntilSpinnerDisappear(int... timeoutInSeconds) { } } + protected void clickClearSearchFieldButton() { + clickByActions(searchFld.$x("./../span[@role='button']/*")); + waitUntilSpinnerDisappear(1); + } + protected void searchItem(String tag) { log.debug("\nsearchItem: {}", tag); + clickClearSearchFieldButton(); sendKeysAfterClear(searchFld, tag); searchFld.pressEnter().shouldHave(Condition.value(tag)); waitUntilSpinnerDisappear(1); @@ -102,28 +110,28 @@ protected ElementsCollection getDdlOptions() { protected String getAlertHeader() { log.debug("\ngetAlertHeader"); String result = alertHeader.shouldBe(Condition.visible).getText(); - log.debug("-> {}", result); + log.debug(LOG_RESULT, result); return result; } protected String getAlertMessage() { log.debug("\ngetAlertMessage"); String result = alertMessage.shouldBe(Condition.visible).getText(); - log.debug("-> {}", result); + log.debug(LOG_RESULT, result); return result; } protected boolean isAlertVisible(AlertHeader header) { - log.debug("\nisAlertVisible: {}", header.toString()); - boolean result = getAlertHeader().equals(header.toString()); - log.debug("-> {}", result); + log.debug("\nisAlertVisible: {}", header.getValue()); + boolean result = getAlertHeader().equals(header.getValue()); + log.debug(LOG_RESULT, result); return result; } protected boolean isAlertVisible(AlertHeader header, String message) { log.debug("\nisAlertVisible: {} {}", header, message); boolean result = isAlertVisible(header) && getAlertMessage().equals(message); - log.debug("-> {}", result); + log.debug(LOG_RESULT, result); return result; } @@ -141,6 +149,7 @@ protected boolean isConfirmationModalVisible() { return isVisible(confirmationMdl); } + @Getter public enum AlertHeader { SUCCESS("Success"), VALIDATION_ERROR("Validation Error"), @@ -151,9 +160,5 @@ public enum AlertHeader { AlertHeader(String value) { this.value = value; } - - public String toString() { - return value; - } } } diff --git a/e2e-tests/src/main/java/io/kafbat/ui/pages/brokers/BrokersConfigTab.java b/e2e-tests/src/main/java/io/kafbat/ui/screens/brokers/BrokersConfigTab.java similarity index 93% rename from e2e-tests/src/main/java/io/kafbat/ui/pages/brokers/BrokersConfigTab.java rename to e2e-tests/src/main/java/io/kafbat/ui/screens/brokers/BrokersConfigTab.java index 36e11a841..f2801cae9 100644 --- a/e2e-tests/src/main/java/io/kafbat/ui/pages/brokers/BrokersConfigTab.java +++ b/e2e-tests/src/main/java/io/kafbat/ui/screens/brokers/BrokersConfigTab.java @@ -1,4 +1,4 @@ -package io.kafbat.ui.pages.brokers; +package io.kafbat.ui.screens.brokers; import static com.codeborne.selenide.Selenide.$$x; import static com.codeborne.selenide.Selenide.$x; @@ -7,8 +7,8 @@ import com.codeborne.selenide.Condition; import com.codeborne.selenide.ElementsCollection; import com.codeborne.selenide.SelenideElement; -import io.kafbat.ui.pages.BasePage; -import io.kafbat.ui.utilities.WebUtils; +import io.kafbat.ui.screens.BasePage; +import io.kafbat.ui.utilities.WebUtil; import io.qameta.allure.Step; import java.util.ArrayList; import java.util.List; @@ -17,7 +17,6 @@ public class BrokersConfigTab extends BasePage { - protected List editBtn = $$x("//button[@aria-label='editAction']"); protected SelenideElement searchByKeyField = $x("//input[@placeholder='Search by Key or Value']"); protected SelenideElement sourceInfoIcon = $x("//div[text()='Source']/..//div/div[@class]"); protected SelenideElement sourceInfoTooltip = $x("//div[text()='Source']/..//div/div[@style]"); @@ -43,7 +42,7 @@ public String getSourceInfoTooltipText() { @Step public boolean isSearchByKeyVisible() { - return WebUtils.isVisible(searchFld); + return WebUtil.isVisible(searchFld); } @Step @@ -59,7 +58,8 @@ public List getColumnHeaders() { } public List getEditButtons() { - return editBtns; + return editBtns.asFixedIterable().stream() + .collect(Collectors.toList()); } @Step @@ -115,7 +115,7 @@ public String getValue() { @Step public BrokersConfigItem setValue(String value) { - WebUtils.sendKeysAfterClear(getValueFld(), value); + WebUtil.sendKeysAfterClear(getValueFld(), value); return this; } diff --git a/e2e-tests/src/main/java/io/kafbat/ui/pages/brokers/BrokersDetails.java b/e2e-tests/src/main/java/io/kafbat/ui/screens/brokers/BrokersDetails.java similarity index 88% rename from e2e-tests/src/main/java/io/kafbat/ui/pages/brokers/BrokersDetails.java rename to e2e-tests/src/main/java/io/kafbat/ui/screens/brokers/BrokersDetails.java index a99d0078a..19ccc4292 100644 --- a/e2e-tests/src/main/java/io/kafbat/ui/pages/brokers/BrokersDetails.java +++ b/e2e-tests/src/main/java/io/kafbat/ui/screens/brokers/BrokersDetails.java @@ -1,15 +1,16 @@ -package io.kafbat.ui.pages.brokers; +package io.kafbat.ui.screens.brokers; import static com.codeborne.selenide.Selenide.$x; import com.codeborne.selenide.Condition; import com.codeborne.selenide.SelenideElement; -import io.kafbat.ui.pages.BasePage; +import io.kafbat.ui.screens.BasePage; import io.qameta.allure.Step; import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream; +import lombok.Getter; public class BrokersDetails extends BasePage { @@ -18,13 +19,13 @@ public class BrokersDetails extends BasePage { @Step public BrokersDetails waitUntilScreenReady() { waitUntilSpinnerDisappear(); - $x(String.format(brokersTabLocator, DetailsTab.LOG_DIRECTORIES)).shouldBe(Condition.visible); + $x(String.format(brokersTabLocator, DetailsTab.LOG_DIRECTORIES.getValue())).shouldBe(Condition.visible); return this; } @Step public BrokersDetails openDetailsTab(DetailsTab menu) { - $x(String.format(brokersTabLocator, menu.toString())).shouldBe(Condition.enabled).click(); + $x(String.format(brokersTabLocator, menu.getValue())).shouldBe(Condition.enabled).click(); waitUntilSpinnerDisappear(); return this; } @@ -49,7 +50,7 @@ private List getVisibleSummaryCells() { private List getDetailsTabs() { return Stream.of(DetailsTab.values()) - .map(name -> $x(String.format(brokersTabLocator, name))) + .map(tab -> $x(String.format(brokersTabLocator, tab.getValue()))) .collect(Collectors.toList()); } @@ -68,6 +69,7 @@ public List getAllVisibleElements() { return visibleElements; } + @Getter public enum DetailsTab { LOG_DIRECTORIES("Log directories"), CONFIGS("Configs"), @@ -78,9 +80,5 @@ public enum DetailsTab { DetailsTab(String value) { this.value = value; } - - public String toString() { - return value; - } } } diff --git a/e2e-tests/src/main/java/io/kafbat/ui/pages/brokers/BrokersList.java b/e2e-tests/src/main/java/io/kafbat/ui/screens/brokers/BrokersList.java similarity index 95% rename from e2e-tests/src/main/java/io/kafbat/ui/pages/brokers/BrokersList.java rename to e2e-tests/src/main/java/io/kafbat/ui/screens/brokers/BrokersList.java index 5f2324699..3de449d5a 100644 --- a/e2e-tests/src/main/java/io/kafbat/ui/pages/brokers/BrokersList.java +++ b/e2e-tests/src/main/java/io/kafbat/ui/screens/brokers/BrokersList.java @@ -1,12 +1,12 @@ -package io.kafbat.ui.pages.brokers; +package io.kafbat.ui.screens.brokers; import static com.codeborne.selenide.Selenide.$x; -import static io.kafbat.ui.pages.panels.enums.MenuItem.BROKERS; +import static io.kafbat.ui.screens.panels.enums.MenuItem.BROKERS; import com.codeborne.selenide.CollectionCondition; import com.codeborne.selenide.Condition; import com.codeborne.selenide.SelenideElement; -import io.kafbat.ui.pages.BasePage; +import io.kafbat.ui.screens.BasePage; import io.qameta.allure.Step; import java.util.ArrayList; import java.util.List; diff --git a/e2e-tests/src/main/java/io/kafbat/ui/pages/connectors/ConnectorCreateForm.java b/e2e-tests/src/main/java/io/kafbat/ui/screens/connectors/ConnectorCreateForm.java similarity index 94% rename from e2e-tests/src/main/java/io/kafbat/ui/pages/connectors/ConnectorCreateForm.java rename to e2e-tests/src/main/java/io/kafbat/ui/screens/connectors/ConnectorCreateForm.java index f84d264a5..0fe7f67c7 100644 --- a/e2e-tests/src/main/java/io/kafbat/ui/pages/connectors/ConnectorCreateForm.java +++ b/e2e-tests/src/main/java/io/kafbat/ui/screens/connectors/ConnectorCreateForm.java @@ -1,10 +1,10 @@ -package io.kafbat.ui.pages.connectors; +package io.kafbat.ui.screens.connectors; import static com.codeborne.selenide.Selenide.$x; import com.codeborne.selenide.Condition; import com.codeborne.selenide.SelenideElement; -import io.kafbat.ui.pages.BasePage; +import io.kafbat.ui.screens.BasePage; import io.qameta.allure.Step; public class ConnectorCreateForm extends BasePage { diff --git a/e2e-tests/src/main/java/io/kafbat/ui/pages/connectors/ConnectorDetails.java b/e2e-tests/src/main/java/io/kafbat/ui/screens/connectors/ConnectorDetails.java similarity index 84% rename from e2e-tests/src/main/java/io/kafbat/ui/pages/connectors/ConnectorDetails.java rename to e2e-tests/src/main/java/io/kafbat/ui/screens/connectors/ConnectorDetails.java index f79c7adae..f2107fdbb 100644 --- a/e2e-tests/src/main/java/io/kafbat/ui/pages/connectors/ConnectorDetails.java +++ b/e2e-tests/src/main/java/io/kafbat/ui/screens/connectors/ConnectorDetails.java @@ -1,11 +1,11 @@ -package io.kafbat.ui.pages.connectors; +package io.kafbat.ui.screens.connectors; import static com.codeborne.selenide.Selenide.$x; import com.codeborne.selenide.Condition; import com.codeborne.selenide.SelenideElement; -import io.kafbat.ui.pages.BasePage; -import io.kafbat.ui.utilities.WebUtils; +import io.kafbat.ui.screens.BasePage; +import io.kafbat.ui.utilities.WebUtil; import io.qameta.allure.Step; public class ConnectorDetails extends BasePage { @@ -27,14 +27,14 @@ public ConnectorDetails waitUntilScreenReady() { @Step public ConnectorDetails openConfigTab() { - WebUtils.clickByJavaScript(configTab); + WebUtil.clickByJavaScript(configTab); return this; } @Step public ConnectorDetails setConfig(String configJson) { configField.shouldBe(Condition.enabled).click(); - WebUtils.clearByKeyboard(contentTextArea); + WebUtil.clearByKeyboard(contentTextArea); contentTextArea.setValue(configJson); configField.shouldBe(Condition.enabled).click(); return this; @@ -48,13 +48,13 @@ public ConnectorDetails clickSubmitButton() { @Step public ConnectorDetails openDotMenu() { - WebUtils.clickByJavaScript(dotMenuBtn); + WebUtil.clickByJavaScript(dotMenuBtn); return this; } @Step public ConnectorDetails clickDeleteBtn() { - WebUtils.clickByJavaScript(deleteBtn); + WebUtil.clickByJavaScript(deleteBtn); return this; } @@ -75,7 +75,7 @@ public ConnectorDetails deleteConnector() { @Step public boolean isConnectorHeaderVisible(String connectorName) { - return WebUtils.isVisible($x(String.format(connectorHeaderLocator, connectorName))); + return WebUtil.isVisible($x(String.format(connectorHeaderLocator, connectorName))); } @Step diff --git a/e2e-tests/src/main/java/io/kafbat/ui/pages/connectors/KafkaConnectList.java b/e2e-tests/src/main/java/io/kafbat/ui/screens/connectors/KafkaConnectList.java similarity index 76% rename from e2e-tests/src/main/java/io/kafbat/ui/pages/connectors/KafkaConnectList.java rename to e2e-tests/src/main/java/io/kafbat/ui/screens/connectors/KafkaConnectList.java index 7ffaea488..5045e99d0 100644 --- a/e2e-tests/src/main/java/io/kafbat/ui/pages/connectors/KafkaConnectList.java +++ b/e2e-tests/src/main/java/io/kafbat/ui/screens/connectors/KafkaConnectList.java @@ -1,12 +1,12 @@ -package io.kafbat.ui.pages.connectors; +package io.kafbat.ui.screens.connectors; import static com.codeborne.selenide.Selenide.$x; -import static io.kafbat.ui.pages.panels.enums.MenuItem.KAFKA_CONNECT; +import static io.kafbat.ui.screens.panels.enums.MenuItem.KAFKA_CONNECT; import com.codeborne.selenide.Condition; import com.codeborne.selenide.SelenideElement; -import io.kafbat.ui.pages.BasePage; -import io.kafbat.ui.utilities.WebUtils; +import io.kafbat.ui.screens.BasePage; +import io.kafbat.ui.utilities.WebUtil; import io.qameta.allure.Step; @@ -27,7 +27,7 @@ public KafkaConnectList waitUntilScreenReady() { @Step public KafkaConnectList clickCreateConnectorBtn() { - WebUtils.clickByJavaScript(createConnectorBtn); + WebUtil.clickByJavaScript(createConnectorBtn); return this; } @@ -40,6 +40,6 @@ public KafkaConnectList openConnector(String connectorName) { @Step public boolean isConnectorVisible(String connectorName) { tableGrid.shouldBe(Condition.visible); - return WebUtils.isVisible(getTableElement(connectorName)); + return WebUtil.isVisible(getTableElement(connectorName)); } } diff --git a/e2e-tests/src/main/java/io/kafbat/ui/pages/consumers/ConsumersDetails.java b/e2e-tests/src/main/java/io/kafbat/ui/screens/consumers/ConsumersDetails.java similarity index 70% rename from e2e-tests/src/main/java/io/kafbat/ui/pages/consumers/ConsumersDetails.java rename to e2e-tests/src/main/java/io/kafbat/ui/screens/consumers/ConsumersDetails.java index 5de3bbb78..1312eb83e 100644 --- a/e2e-tests/src/main/java/io/kafbat/ui/pages/consumers/ConsumersDetails.java +++ b/e2e-tests/src/main/java/io/kafbat/ui/screens/consumers/ConsumersDetails.java @@ -1,10 +1,10 @@ -package io.kafbat.ui.pages.consumers; +package io.kafbat.ui.screens.consumers; import static com.codeborne.selenide.Selenide.$x; import com.codeborne.selenide.Condition; -import io.kafbat.ui.pages.BasePage; -import io.kafbat.ui.utilities.WebUtils; +import io.kafbat.ui.screens.BasePage; +import io.kafbat.ui.utilities.WebUtil; import io.qameta.allure.Step; public class ConsumersDetails extends BasePage { @@ -21,12 +21,12 @@ public ConsumersDetails waitUntilScreenReady() { @Step public boolean isRedirectedConsumerTitleVisible(String consumerGroupId) { - return WebUtils.isVisible($x(String.format(consumerIdHeaderLocator, consumerGroupId))); + return WebUtil.isVisible($x(String.format(consumerIdHeaderLocator, consumerGroupId))); } @Step public boolean isTopicInConsumersDetailsVisible(String topicName) { tableGrid.shouldBe(Condition.visible); - return WebUtils.isVisible($x(String.format(topicElementLocator, topicName))); + return WebUtil.isVisible($x(String.format(topicElementLocator, topicName))); } } diff --git a/e2e-tests/src/main/java/io/kafbat/ui/pages/consumers/ConsumersList.java b/e2e-tests/src/main/java/io/kafbat/ui/screens/consumers/ConsumersList.java similarity index 67% rename from e2e-tests/src/main/java/io/kafbat/ui/pages/consumers/ConsumersList.java rename to e2e-tests/src/main/java/io/kafbat/ui/screens/consumers/ConsumersList.java index 77b9fd203..554b080a4 100644 --- a/e2e-tests/src/main/java/io/kafbat/ui/pages/consumers/ConsumersList.java +++ b/e2e-tests/src/main/java/io/kafbat/ui/screens/consumers/ConsumersList.java @@ -1,9 +1,9 @@ -package io.kafbat.ui.pages.consumers; +package io.kafbat.ui.screens.consumers; -import static io.kafbat.ui.pages.panels.enums.MenuItem.CONSUMERS; +import static io.kafbat.ui.screens.panels.enums.MenuItem.CONSUMERS; import com.codeborne.selenide.Condition; -import io.kafbat.ui.pages.BasePage; +import io.kafbat.ui.screens.BasePage; import io.qameta.allure.Step; public class ConsumersList extends BasePage { diff --git a/e2e-tests/src/main/java/io/kafbat/ui/pages/ksqldb/KsqlDbList.java b/e2e-tests/src/main/java/io/kafbat/ui/screens/ksqldb/KsqlDbList.java similarity index 92% rename from e2e-tests/src/main/java/io/kafbat/ui/pages/ksqldb/KsqlDbList.java rename to e2e-tests/src/main/java/io/kafbat/ui/screens/ksqldb/KsqlDbList.java index 2d6666018..95617e771 100644 --- a/e2e-tests/src/main/java/io/kafbat/ui/pages/ksqldb/KsqlDbList.java +++ b/e2e-tests/src/main/java/io/kafbat/ui/screens/ksqldb/KsqlDbList.java @@ -1,16 +1,16 @@ -package io.kafbat.ui.pages.ksqldb; +package io.kafbat.ui.screens.ksqldb; import static com.codeborne.selenide.Condition.visible; import static com.codeborne.selenide.Selenide.$; import static com.codeborne.selenide.Selenide.$x; -import static io.kafbat.ui.pages.panels.enums.MenuItem.KSQL_DB; +import static io.kafbat.ui.screens.panels.enums.MenuItem.KSQL_DB; import com.codeborne.selenide.CollectionCondition; import com.codeborne.selenide.Condition; import com.codeborne.selenide.SelenideElement; -import io.kafbat.ui.pages.BasePage; -import io.kafbat.ui.pages.ksqldb.enums.KsqlMenuTabs; -import io.kafbat.ui.utilities.WebUtils; +import io.kafbat.ui.screens.BasePage; +import io.kafbat.ui.screens.ksqldb.enums.KsqlMenuTabs; +import io.kafbat.ui.utilities.WebUtil; import io.qameta.allure.Step; import java.time.Duration; import java.util.ArrayList; @@ -31,13 +31,13 @@ public KsqlDbList waitUntilScreenReady() { @Step public KsqlDbList clickExecuteKsqlRequestBtn() { - WebUtils.clickByJavaScript(executeKsqlBtn); + WebUtil.clickByJavaScript(executeKsqlBtn); return this; } @Step public KsqlDbList openDetailsTab(KsqlMenuTabs menu) { - $(By.linkText(menu.toString())).shouldBe(Condition.visible).click(); + $(By.linkText(menu.getValue())).shouldBe(Condition.visible).click(); waitUntilSpinnerDisappear(); return this; } diff --git a/e2e-tests/src/main/java/io/kafbat/ui/pages/ksqldb/KsqlQueryForm.java b/e2e-tests/src/main/java/io/kafbat/ui/screens/ksqldb/KsqlQueryForm.java similarity index 88% rename from e2e-tests/src/main/java/io/kafbat/ui/pages/ksqldb/KsqlQueryForm.java rename to e2e-tests/src/main/java/io/kafbat/ui/screens/ksqldb/KsqlQueryForm.java index b35b48ac2..1ef49cbb4 100644 --- a/e2e-tests/src/main/java/io/kafbat/ui/pages/ksqldb/KsqlQueryForm.java +++ b/e2e-tests/src/main/java/io/kafbat/ui/screens/ksqldb/KsqlQueryForm.java @@ -1,4 +1,4 @@ -package io.kafbat.ui.pages.ksqldb; +package io.kafbat.ui.screens.ksqldb; import static com.codeborne.selenide.Condition.visible; import static com.codeborne.selenide.Selenide.$$x; @@ -9,8 +9,8 @@ import com.codeborne.selenide.Condition; import com.codeborne.selenide.ElementsCollection; import com.codeborne.selenide.SelenideElement; -import io.kafbat.ui.pages.BasePage; -import io.kafbat.ui.utilities.WebUtils; +import io.kafbat.ui.screens.BasePage; +import io.kafbat.ui.utilities.WebUtil; import io.qameta.allure.Step; import java.time.Duration; import java.util.ArrayList; @@ -38,7 +38,7 @@ public KsqlQueryForm waitUntilScreenReady() { @Step public KsqlQueryForm clickClearBtn() { - WebUtils.clickByJavaScript(clearBtn); + WebUtil.clickByJavaScript(clearBtn); sleep(500); return this; } @@ -50,7 +50,7 @@ public String getEnteredQuery() { @Step public KsqlQueryForm clickExecuteBtn(String query) { - WebUtils.clickByActions(executeBtn); + WebUtil.clickByActions(executeBtn); if (query.contains("EMIT CHANGES")) { abortButton.shouldBe(Condition.visible); } else { @@ -61,42 +61,42 @@ public KsqlQueryForm clickExecuteBtn(String query) { @Step public boolean isAbortBtnVisible() { - return WebUtils.isVisible(abortButton); + return WebUtil.isVisible(abortButton); } @Step public KsqlQueryForm clickAbortBtn() { - WebUtils.clickByActions(abortButton); + WebUtil.clickByActions(abortButton); return this; } @Step public boolean isCancelledAlertVisible() { - return WebUtils.isVisible(cancelledAlert); + return WebUtil.isVisible(cancelledAlert); } @Step public boolean isClearResultsBtnEnabled() { - return WebUtils.isEnabled(clearResultsBtn); + return WebUtil.isEnabled(clearResultsBtn); } @Step public KsqlQueryForm clickClearResultsBtn() { - WebUtils.clickByActions(clearResultsBtn); + WebUtil.clickByActions(clearResultsBtn); waitUntilSpinnerDisappear(); return this; } @Step public KsqlQueryForm clickAddStreamProperty() { - WebUtils.clickByActions(addStreamPropertyBtn); + WebUtil.clickByActions(addStreamPropertyBtn); return this; } @Step public KsqlQueryForm setQuery(String query) { queryAreaValue.shouldBe(Condition.visible).click(); - WebUtils.sendKeysByActions(queryArea, query); + WebUtil.sendKeysByActions(queryArea, query); return this; } @@ -111,7 +111,7 @@ public KsqlQueryForm.KsqlResponseGridItem getItemByName(String name) { public boolean areResultsVisible() { boolean visible = false; try { - visible = initItems().size() > 0; + visible = !initItems().isEmpty(); } catch (Throwable ignored) { } return visible; diff --git a/e2e-tests/src/main/java/io/kafbat/ui/pages/ksqldb/enums/KsqlMenuTabs.java b/e2e-tests/src/main/java/io/kafbat/ui/screens/ksqldb/enums/KsqlMenuTabs.java similarity index 64% rename from e2e-tests/src/main/java/io/kafbat/ui/pages/ksqldb/enums/KsqlMenuTabs.java rename to e2e-tests/src/main/java/io/kafbat/ui/screens/ksqldb/enums/KsqlMenuTabs.java index 0cf532919..628b1959d 100644 --- a/e2e-tests/src/main/java/io/kafbat/ui/pages/ksqldb/enums/KsqlMenuTabs.java +++ b/e2e-tests/src/main/java/io/kafbat/ui/screens/ksqldb/enums/KsqlMenuTabs.java @@ -1,5 +1,8 @@ -package io.kafbat.ui.pages.ksqldb.enums; +package io.kafbat.ui.screens.ksqldb.enums; +import lombok.Getter; + +@Getter public enum KsqlMenuTabs { TABLES("Table"), @@ -10,8 +13,4 @@ public enum KsqlMenuTabs { KsqlMenuTabs(String value) { this.value = value; } - - public String toString() { - return value; - } } diff --git a/e2e-tests/src/main/java/io/kafbat/ui/pages/ksqldb/enums/KsqlQueryConfig.java b/e2e-tests/src/main/java/io/kafbat/ui/screens/ksqldb/enums/KsqlQueryConfig.java similarity index 73% rename from e2e-tests/src/main/java/io/kafbat/ui/pages/ksqldb/enums/KsqlQueryConfig.java rename to e2e-tests/src/main/java/io/kafbat/ui/screens/ksqldb/enums/KsqlQueryConfig.java index a423d2856..83be9aee3 100644 --- a/e2e-tests/src/main/java/io/kafbat/ui/pages/ksqldb/enums/KsqlQueryConfig.java +++ b/e2e-tests/src/main/java/io/kafbat/ui/screens/ksqldb/enums/KsqlQueryConfig.java @@ -1,5 +1,8 @@ -package io.kafbat.ui.pages.ksqldb.enums; +package io.kafbat.ui.screens.ksqldb.enums; +import lombok.Getter; + +@Getter public enum KsqlQueryConfig { SHOW_TABLES("show tables;"), @@ -11,8 +14,4 @@ public enum KsqlQueryConfig { KsqlQueryConfig(String query) { this.query = query; } - - public String getQuery() { - return query; - } } diff --git a/e2e-tests/src/main/java/io/kafbat/ui/pages/ksqldb/models/Stream.java b/e2e-tests/src/main/java/io/kafbat/ui/screens/ksqldb/models/Stream.java similarity index 79% rename from e2e-tests/src/main/java/io/kafbat/ui/pages/ksqldb/models/Stream.java rename to e2e-tests/src/main/java/io/kafbat/ui/screens/ksqldb/models/Stream.java index 238767996..d31ed708a 100644 --- a/e2e-tests/src/main/java/io/kafbat/ui/pages/ksqldb/models/Stream.java +++ b/e2e-tests/src/main/java/io/kafbat/ui/screens/ksqldb/models/Stream.java @@ -1,4 +1,4 @@ -package io.kafbat.ui.pages.ksqldb.models; +package io.kafbat.ui.screens.ksqldb.models; import lombok.Data; import lombok.experimental.Accessors; diff --git a/e2e-tests/src/main/java/io/kafbat/ui/pages/ksqldb/models/Table.java b/e2e-tests/src/main/java/io/kafbat/ui/screens/ksqldb/models/Table.java similarity index 77% rename from e2e-tests/src/main/java/io/kafbat/ui/pages/ksqldb/models/Table.java rename to e2e-tests/src/main/java/io/kafbat/ui/screens/ksqldb/models/Table.java index 27bef87dc..127deeee0 100644 --- a/e2e-tests/src/main/java/io/kafbat/ui/pages/ksqldb/models/Table.java +++ b/e2e-tests/src/main/java/io/kafbat/ui/screens/ksqldb/models/Table.java @@ -1,4 +1,4 @@ -package io.kafbat.ui.pages.ksqldb.models; +package io.kafbat.ui.screens.ksqldb.models; import lombok.Data; import lombok.experimental.Accessors; diff --git a/e2e-tests/src/main/java/io/kafbat/ui/pages/panels/NaviSideBar.java b/e2e-tests/src/main/java/io/kafbat/ui/screens/panels/NaviSideBar.java similarity index 87% rename from e2e-tests/src/main/java/io/kafbat/ui/pages/panels/NaviSideBar.java rename to e2e-tests/src/main/java/io/kafbat/ui/screens/panels/NaviSideBar.java index 3898ad4e6..068485748 100644 --- a/e2e-tests/src/main/java/io/kafbat/ui/pages/panels/NaviSideBar.java +++ b/e2e-tests/src/main/java/io/kafbat/ui/screens/panels/NaviSideBar.java @@ -1,13 +1,13 @@ -package io.kafbat.ui.pages.panels; +package io.kafbat.ui.screens.panels; import static com.codeborne.selenide.Selenide.$x; import com.codeborne.selenide.Condition; import com.codeborne.selenide.SelenideElement; -import io.kafbat.ui.pages.BasePage; -import io.kafbat.ui.pages.panels.enums.MenuItem; +import io.kafbat.ui.screens.BasePage; +import io.kafbat.ui.screens.panels.enums.MenuItem; import io.kafbat.ui.settings.BaseSource; -import io.kafbat.ui.utilities.WebUtils; +import io.kafbat.ui.utilities.WebUtil; import io.qameta.allure.Step; import java.time.Duration; import java.util.List; @@ -23,7 +23,7 @@ public class NaviSideBar extends BasePage { private SelenideElement expandCluster(String clusterName) { SelenideElement clusterElement = $x(String.format(clusterElementLocator, clusterName)).shouldBe(Condition.visible); if (clusterElement.parent().$$x(".//ul").size() == 0) { - WebUtils.clickByActions(clusterElement); + WebUtil.clickByActions(clusterElement); } return clusterElement; } @@ -44,7 +44,7 @@ public String getPagePath(MenuItem menuItem) { @Step public NaviSideBar openSideMenu(String clusterName, MenuItem menuItem) { - WebUtils.clickByActions(expandCluster(clusterName).parent() + WebUtil.clickByActions(expandCluster(clusterName).parent() .$x(String.format(sideMenuOptionElementLocator, menuItem.getNaviTitle()))); return this; } diff --git a/e2e-tests/src/main/java/io/kafbat/ui/pages/panels/TopPanel.java b/e2e-tests/src/main/java/io/kafbat/ui/screens/panels/TopPanel.java similarity index 90% rename from e2e-tests/src/main/java/io/kafbat/ui/pages/panels/TopPanel.java rename to e2e-tests/src/main/java/io/kafbat/ui/screens/panels/TopPanel.java index 31215c27b..92937260b 100644 --- a/e2e-tests/src/main/java/io/kafbat/ui/pages/panels/TopPanel.java +++ b/e2e-tests/src/main/java/io/kafbat/ui/screens/panels/TopPanel.java @@ -1,15 +1,15 @@ -package io.kafbat.ui.pages.panels; +package io.kafbat.ui.screens.panels; import static com.codeborne.selenide.Selenide.$x; import com.codeborne.selenide.SelenideElement; -import io.kafbat.ui.pages.BasePage; +import io.kafbat.ui.screens.BasePage; import java.util.Arrays; import java.util.List; public class TopPanel extends BasePage { - protected SelenideElement kafkaLogo = $x("//a[contains(text(),'Kafbat UI')]"); + protected SelenideElement kafkaLogo = $x("//a[contains(text(), 'kafbat UI')]"); protected SelenideElement kafkaVersion = $x("//a[@title='Current commit']"); protected SelenideElement logOutBtn = $x("//button[contains(text(),'Log out')]"); protected SelenideElement gitBtn = $x("//a[@href='https://github.com/kafbat/kafka-ui']"); diff --git a/e2e-tests/src/main/java/io/kafbat/ui/pages/panels/enums/MenuItem.java b/e2e-tests/src/main/java/io/kafbat/ui/screens/panels/enums/MenuItem.java similarity index 75% rename from e2e-tests/src/main/java/io/kafbat/ui/pages/panels/enums/MenuItem.java rename to e2e-tests/src/main/java/io/kafbat/ui/screens/panels/enums/MenuItem.java index e117a10ee..283d428a1 100644 --- a/e2e-tests/src/main/java/io/kafbat/ui/pages/panels/enums/MenuItem.java +++ b/e2e-tests/src/main/java/io/kafbat/ui/screens/panels/enums/MenuItem.java @@ -1,5 +1,8 @@ -package io.kafbat.ui.pages.panels.enums; +package io.kafbat.ui.screens.panels.enums; +import lombok.Getter; + +@Getter public enum MenuItem { DASHBOARD("Dashboard", "Dashboard"), @@ -17,12 +20,4 @@ public enum MenuItem { this.naviTitle = naviTitle; this.pageTitle = pageTitle; } - - public String getNaviTitle() { - return naviTitle; - } - - public String getPageTitle() { - return pageTitle; - } } diff --git a/e2e-tests/src/main/java/io/kafbat/ui/pages/schemas/SchemaCreateForm.java b/e2e-tests/src/main/java/io/kafbat/ui/screens/schemas/SchemaCreateForm.java similarity index 92% rename from e2e-tests/src/main/java/io/kafbat/ui/pages/schemas/SchemaCreateForm.java rename to e2e-tests/src/main/java/io/kafbat/ui/screens/schemas/SchemaCreateForm.java index fa5084b1f..cb734ba86 100644 --- a/e2e-tests/src/main/java/io/kafbat/ui/pages/schemas/SchemaCreateForm.java +++ b/e2e-tests/src/main/java/io/kafbat/ui/screens/schemas/SchemaCreateForm.java @@ -1,4 +1,4 @@ -package io.kafbat.ui.pages.schemas; +package io.kafbat.ui.screens.schemas; import static com.codeborne.selenide.Selenide.$; import static com.codeborne.selenide.Selenide.$$x; @@ -6,12 +6,13 @@ import static org.openqa.selenium.By.id; import com.codeborne.selenide.Condition; +import com.codeborne.selenide.ElementsCollection; import com.codeborne.selenide.SelenideElement; import com.codeborne.selenide.WebDriverRunner; import io.kafbat.ui.api.model.CompatibilityLevel; import io.kafbat.ui.api.model.SchemaType; -import io.kafbat.ui.pages.BasePage; -import io.kafbat.ui.utilities.WebUtils; +import io.kafbat.ui.screens.BasePage; +import io.kafbat.ui.utilities.WebUtil; import io.qameta.allure.Step; import java.util.List; import java.util.stream.Collectors; @@ -31,9 +32,9 @@ public class SchemaCreateForm extends BasePage { protected SelenideElement latestSchemaTextArea = $x("//div[@id='latestSchema']"); protected SelenideElement leftVersionDdl = $(id("left-select")); protected SelenideElement rightVersionDdl = $(id("right-select")); - protected List visibleMarkers = + protected ElementsCollection visibleMarkers = $$x("//div[@class='ace_scroller']//div[contains(@class,'codeMarker')]"); - protected List elementsCompareVersionDdl = $$x("//ul[@role='listbox']/ul/li"); + protected ElementsCollection elementsCompareVersionDdl = $$x("//ul[@role='listbox']/ul/li"); protected String ddlElementLocator = "//li[@value='%s']"; @Step @@ -126,7 +127,7 @@ public List getAllDetailsPageElements() { @Step public boolean isSubmitBtnEnabled() { - return WebUtils.isEnabled(submitBtn); + return WebUtil.isEnabled(submitBtn); } @Step diff --git a/e2e-tests/src/main/java/io/kafbat/ui/pages/schemas/SchemaDetails.java b/e2e-tests/src/main/java/io/kafbat/ui/screens/schemas/SchemaDetails.java similarity index 89% rename from e2e-tests/src/main/java/io/kafbat/ui/pages/schemas/SchemaDetails.java rename to e2e-tests/src/main/java/io/kafbat/ui/screens/schemas/SchemaDetails.java index 979e080ab..ebfc34697 100644 --- a/e2e-tests/src/main/java/io/kafbat/ui/pages/schemas/SchemaDetails.java +++ b/e2e-tests/src/main/java/io/kafbat/ui/screens/schemas/SchemaDetails.java @@ -1,11 +1,11 @@ -package io.kafbat.ui.pages.schemas; +package io.kafbat.ui.screens.schemas; import static com.codeborne.selenide.Selenide.$x; import com.codeborne.selenide.Condition; import com.codeborne.selenide.SelenideElement; -import io.kafbat.ui.pages.BasePage; -import io.kafbat.ui.utilities.WebUtils; +import io.kafbat.ui.screens.BasePage; +import io.kafbat.ui.utilities.WebUtil; import io.qameta.allure.Step; public class SchemaDetails extends BasePage { @@ -34,7 +34,7 @@ public String getCompatibility() { @Step public boolean isSchemaHeaderVisible(String schemaName) { - return WebUtils.isVisible($x(String.format(schemaHeaderLocator, schemaName))); + return WebUtil.isVisible($x(String.format(schemaHeaderLocator, schemaName))); } @Step @@ -61,7 +61,7 @@ public SchemaDetails openCompareVersionMenu() { @Step public SchemaDetails removeSchema() { - WebUtils.clickByJavaScript(dotMenuBtn); + WebUtil.clickByJavaScript(dotMenuBtn); removeBtn.shouldBe(Condition.enabled).click(); schemaConfirmBtn.shouldBe(Condition.visible).click(); schemaConfirmBtn.shouldBe(Condition.disappear); diff --git a/e2e-tests/src/main/java/io/kafbat/ui/pages/schemas/SchemaRegistryList.java b/e2e-tests/src/main/java/io/kafbat/ui/screens/schemas/SchemaRegistryList.java similarity index 74% rename from e2e-tests/src/main/java/io/kafbat/ui/pages/schemas/SchemaRegistryList.java rename to e2e-tests/src/main/java/io/kafbat/ui/screens/schemas/SchemaRegistryList.java index eed9fa669..6061a70c5 100644 --- a/e2e-tests/src/main/java/io/kafbat/ui/pages/schemas/SchemaRegistryList.java +++ b/e2e-tests/src/main/java/io/kafbat/ui/screens/schemas/SchemaRegistryList.java @@ -1,12 +1,12 @@ -package io.kafbat.ui.pages.schemas; +package io.kafbat.ui.screens.schemas; import static com.codeborne.selenide.Selenide.$x; -import static io.kafbat.ui.pages.panels.enums.MenuItem.SCHEMA_REGISTRY; +import static io.kafbat.ui.screens.panels.enums.MenuItem.SCHEMA_REGISTRY; import com.codeborne.selenide.Condition; import com.codeborne.selenide.SelenideElement; -import io.kafbat.ui.pages.BasePage; -import io.kafbat.ui.utilities.WebUtils; +import io.kafbat.ui.screens.BasePage; +import io.kafbat.ui.utilities.WebUtil; import io.qameta.allure.Step; public class SchemaRegistryList extends BasePage { @@ -22,7 +22,7 @@ public SchemaRegistryList waitUntilScreenReady() { @Step public SchemaRegistryList clickCreateSchema() { - WebUtils.clickByJavaScript(createSchemaBtn); + WebUtil.clickByJavaScript(createSchemaBtn); return this; } @@ -36,7 +36,7 @@ public SchemaRegistryList openSchema(String schemaName) { @Step public boolean isSchemaVisible(String schemaName) { tableGrid.shouldBe(Condition.visible); - return WebUtils.isVisible(getTableElement(schemaName)); + return WebUtil.isVisible(getTableElement(schemaName)); } } diff --git a/e2e-tests/src/main/java/io/kafbat/ui/pages/topics/ProduceMessagePanel.java b/e2e-tests/src/main/java/io/kafbat/ui/screens/topics/ProduceMessagePanel.java similarity index 86% rename from e2e-tests/src/main/java/io/kafbat/ui/pages/topics/ProduceMessagePanel.java rename to e2e-tests/src/main/java/io/kafbat/ui/screens/topics/ProduceMessagePanel.java index 7dbb845fe..678cdfa70 100644 --- a/e2e-tests/src/main/java/io/kafbat/ui/pages/topics/ProduceMessagePanel.java +++ b/e2e-tests/src/main/java/io/kafbat/ui/screens/topics/ProduceMessagePanel.java @@ -1,12 +1,12 @@ -package io.kafbat.ui.pages.topics; +package io.kafbat.ui.screens.topics; import static com.codeborne.selenide.Selenide.$x; import static com.codeborne.selenide.Selenide.refresh; import com.codeborne.selenide.Condition; import com.codeborne.selenide.SelenideElement; -import io.kafbat.ui.pages.BasePage; -import io.kafbat.ui.utilities.WebUtils; +import io.kafbat.ui.screens.BasePage; +import io.kafbat.ui.utilities.WebUtil; import io.qameta.allure.Step; import java.util.Arrays; @@ -29,14 +29,14 @@ public ProduceMessagePanel waitUntilScreenReady() { @Step public ProduceMessagePanel setKeyField(String value) { - WebUtils.clearByKeyboard(keyTextArea); + WebUtil.clearByKeyboard(keyTextArea); keyTextArea.setValue(value); return this; } @Step public ProduceMessagePanel setValueFiled(String value) { - WebUtils.clearByKeyboard(valueTextArea); + WebUtil.clearByKeyboard(valueTextArea); valueTextArea.setValue(value); return this; } @@ -49,7 +49,7 @@ public ProduceMessagePanel setHeadersFld(String value) { @Step public ProduceMessagePanel submitProduceMessage() { - WebUtils.clickByActions(submitProduceMessageBtn); + WebUtil.clickByActions(submitProduceMessageBtn); submitProduceMessageBtn.shouldBe(Condition.disappear); refresh(); return this; diff --git a/e2e-tests/src/main/java/io/kafbat/ui/pages/topics/TopicCreateEditForm.java b/e2e-tests/src/main/java/io/kafbat/ui/screens/topics/TopicCreateEditForm.java similarity index 90% rename from e2e-tests/src/main/java/io/kafbat/ui/pages/topics/TopicCreateEditForm.java rename to e2e-tests/src/main/java/io/kafbat/ui/screens/topics/TopicCreateEditForm.java index a2eaf138f..00a3f65dd 100644 --- a/e2e-tests/src/main/java/io/kafbat/ui/pages/topics/TopicCreateEditForm.java +++ b/e2e-tests/src/main/java/io/kafbat/ui/screens/topics/TopicCreateEditForm.java @@ -1,4 +1,4 @@ -package io.kafbat.ui.pages.topics; +package io.kafbat.ui.screens.topics; import static com.codeborne.selenide.Selenide.$; import static com.codeborne.selenide.Selenide.$$; @@ -10,12 +10,12 @@ import com.codeborne.selenide.Condition; import com.codeborne.selenide.ElementsCollection; import com.codeborne.selenide.SelenideElement; -import io.kafbat.ui.pages.BasePage; -import io.kafbat.ui.pages.topics.enums.CleanupPolicyValue; -import io.kafbat.ui.pages.topics.enums.CustomParameterType; -import io.kafbat.ui.pages.topics.enums.MaxSizeOnDisk; -import io.kafbat.ui.pages.topics.enums.TimeToRetain; -import io.kafbat.ui.utilities.WebUtils; +import io.kafbat.ui.screens.BasePage; +import io.kafbat.ui.screens.topics.enums.CleanupPolicyValue; +import io.kafbat.ui.screens.topics.enums.CustomParameterType; +import io.kafbat.ui.screens.topics.enums.MaxSizeOnDisk; +import io.kafbat.ui.screens.topics.enums.TimeToRetain; +import io.kafbat.ui.utilities.WebUtil; import io.qameta.allure.Step; public class TopicCreateEditForm extends BasePage { @@ -36,6 +36,7 @@ public class TopicCreateEditForm extends BasePage { protected SelenideElement validationCustomParameterValueMsg = $x("//p[contains(text(),'Value is required')]"); protected String ddlElementLocator = "//li[@value='%s']"; protected String btnTimeToRetainLocator = "//button[@class][text()='%s']"; + protected String customParamsElmCss = "ul[role=listbox][name^=customParams][name$=name]"; @Step @@ -46,20 +47,20 @@ public TopicCreateEditForm waitUntilScreenReady() { } public boolean isCreateTopicButtonEnabled() { - return WebUtils.isEnabled(submitBtn); + return WebUtil.isEnabled(submitBtn); } public boolean isDeleteCustomParameterButtonEnabled() { - return WebUtils.isEnabled(deleteCustomParameterBtn); + return WebUtil.isEnabled(deleteCustomParameterBtn); } public boolean isNameFieldEnabled() { - return WebUtils.isEnabled(nameField); + return WebUtil.isEnabled(nameField); } @Step public TopicCreateEditForm setTopicName(String topicName) { - WebUtils.sendKeysAfterClear(nameField, topicName); + WebUtil.sendKeysAfterClear(nameField, topicName); return this; } @@ -115,7 +116,7 @@ public TopicCreateEditForm setCustomParameterType(CustomParameterType customPara @Step public TopicCreateEditForm clearCustomParameterValue() { - WebUtils.clearByKeyboard(customParameterValueField); + WebUtil.clearByKeyboard(customParameterValueField); return this; } @@ -158,8 +159,7 @@ public TopicCreateEditForm clickSaveTopicBtn() { @Step public TopicCreateEditForm addCustomParameter(String customParameterName, String customParameterValue) { - ElementsCollection customParametersElements = - $$("ul[role=listbox][name^=customParams][name$=name]"); + ElementsCollection customParametersElements = $$(customParamsElmCss); KafkaUiSelectElement kafkaUiSelectElement = null; if (customParametersElements.size() == 1) { if ("Select".equals(customParametersElements.first().getText())) { @@ -169,7 +169,7 @@ public TopicCreateEditForm addCustomParameter(String customParameterName, $$("button") .find(Condition.exactText("Add Custom Parameter")) .click(); - customParametersElements = $$("ul[role=listbox][name^=customParams][name$=name]"); + customParametersElements = $$(customParamsElmCss); kafkaUiSelectElement = new KafkaUiSelectElement(customParametersElements.last()); } if (kafkaUiSelectElement != null) { @@ -183,7 +183,7 @@ public TopicCreateEditForm addCustomParameter(String customParameterName, @Step public TopicCreateEditForm updateCustomParameter(String customParameterName, String customParameterValue) { - SelenideElement selenideElement = $$("ul[role=listbox][name^=customParams][name$=name]") + SelenideElement selenideElement = $$(customParamsElmCss) .find(Condition.exactText(customParameterName)); String name = selenideElement.getAttribute("name"); if (name != null) { @@ -226,7 +226,7 @@ public TopicCreateEditForm setMaxMessageBytes(String bytes) { @Step public boolean isValidationMessageCustomParameterValueVisible() { - return WebUtils.isVisible(validationCustomParameterValueMsg); + return WebUtil.isVisible(validationCustomParameterValueMsg); } @Step diff --git a/e2e-tests/src/main/java/io/kafbat/ui/pages/topics/TopicDetails.java b/e2e-tests/src/main/java/io/kafbat/ui/screens/topics/TopicDetails.java similarity index 80% rename from e2e-tests/src/main/java/io/kafbat/ui/pages/topics/TopicDetails.java rename to e2e-tests/src/main/java/io/kafbat/ui/screens/topics/TopicDetails.java index 8303f497d..1bb2756d3 100644 --- a/e2e-tests/src/main/java/io/kafbat/ui/pages/topics/TopicDetails.java +++ b/e2e-tests/src/main/java/io/kafbat/ui/screens/topics/TopicDetails.java @@ -1,17 +1,19 @@ -package io.kafbat.ui.pages.topics; +package io.kafbat.ui.screens.topics; +import static com.codeborne.selenide.Condition.enabled; import static com.codeborne.selenide.Selenide.$$x; import static com.codeborne.selenide.Selenide.$x; import static com.codeborne.selenide.Selenide.sleep; -import static io.kafbat.ui.pages.topics.TopicDetails.TopicMenu.OVERVIEW; -import static org.testcontainers.shaded.org.apache.commons.lang3.RandomUtils.nextInt; +import static io.kafbat.ui.screens.topics.TopicDetails.TopicMenu.OVERVIEW; +import static org.apache.commons.lang3.RandomUtils.nextInt; import com.codeborne.selenide.CollectionCondition; import com.codeborne.selenide.Condition; import com.codeborne.selenide.ElementsCollection; import com.codeborne.selenide.SelenideElement; -import io.kafbat.ui.pages.BasePage; -import io.kafbat.ui.utilities.WebUtils; +import io.kafbat.ui.screens.BasePage; +import io.kafbat.ui.screens.topics.enums.SeekType; +import io.kafbat.ui.utilities.WebUtil; import io.qameta.allure.Step; import java.time.LocalDate; import java.time.LocalDateTime; @@ -25,6 +27,7 @@ import java.util.List; import java.util.Locale; import java.util.Objects; +import lombok.Getter; public class TopicDetails extends BasePage { @@ -34,7 +37,7 @@ public class TopicDetails extends BasePage { protected SelenideElement overviewTab = $x("//a[contains(text(),'Overview')]"); protected SelenideElement messagesTab = $x("//a[contains(text(),'Messages')]"); protected SelenideElement seekTypeDdl = $x("//ul[@id='selectSeekType']//li"); - protected SelenideElement seekTypeField = $x("//label[text()='Seek Type']//..//div/input"); + protected SelenideElement seekTypeField = $x("//ul[@id='selectSeekType']/../..//input"); protected SelenideElement addFiltersBtn = $x("//button[text()='Add Filters']"); protected SelenideElement savedFiltersLink = $x("//div[text()='Saved Filters']"); protected SelenideElement addFilterCodeModalTitle = $x("//label[text()='Filter code']"); @@ -43,17 +46,15 @@ public class TopicDetails extends BasePage { protected SelenideElement saveThisFilterCheckBoxAddFilterMdl = $x("//input[@name='saveFilter']"); protected SelenideElement displayNameInputAddFilterMdl = $x("//input[@placeholder='Enter Name']"); protected SelenideElement cancelBtnAddFilterMdl = $x("//button[text()='Cancel']"); - protected SelenideElement addFilterBtnAddFilterMdl = $x("//button[text()='Add filter']"); - protected SelenideElement saveFilterBtnEditFilterMdl = $x("//button[text()='Save']"); + protected SelenideElement addFilterBtnAddFilterMdl = $x("//button[text()='Add Filter']"); + protected SelenideElement saveFilterBtnEditFilterMdl = $x("//button[text()='Edit Filter']"); protected SelenideElement addFiltersBtnMessages = $x("//button[text()='Add Filters']"); - protected SelenideElement selectFilterBtnAddFilterMdl = $x("//button[text()='Select filter']"); protected SelenideElement editSettingsMenu = $x("//li[@role][contains(text(),'Edit settings')]"); protected SelenideElement removeTopicBtn = $x("//ul[@role='menu']//div[contains(text(),'Remove Topic')]"); protected SelenideElement produceMessageBtn = $x("//div//button[text()='Produce Message']"); protected SelenideElement contentMessageTab = $x("//html//div[@id='root']/div/main//table//p"); protected SelenideElement cleanUpPolicyField = $x("//div[contains(text(),'Clean Up Policy')]/../span/*"); protected SelenideElement partitionsField = $x("//div[contains(text(),'Partitions')]/../span"); - protected SelenideElement backToCreateFiltersLink = $x("//div[text()='Back To create filters']"); protected ElementsCollection messageGridItems = $$x("//tbody//tr"); protected SelenideElement actualCalendarDate = $x("//div[@class='react-datepicker__current-month']"); protected SelenideElement previousMonthButton = $x("//button[@aria-label='Previous Month']"); @@ -66,19 +67,19 @@ public class TopicDetails extends BasePage { protected String consumerIdLocator = "//a[@title='%s']"; protected String topicHeaderLocator = "//h1[contains(text(),'%s')]"; protected String activeFilterNameLocator = "//div[@data-testid='activeSmartFilter']/div[1][contains(text(),'%s')]"; - protected String editActiveFilterBtnLocator = "//div[text()='%s']/../div[@data-testid='editActiveSmartFilterBtn']"; + protected String editActiveFilterBtnLocator = "//div[text()='%s']/../button[1]"; protected String settingsGridValueLocator = "//tbody/tr/td/span[text()='%s']//ancestor::tr/td[2]/span"; @Step public TopicDetails waitUntilScreenReady() { waitUntilSpinnerDisappear(); - $x(String.format(detailsTabLtr, OVERVIEW)).shouldBe(Condition.visible); + $x(String.format(detailsTabLtr, OVERVIEW.getValue())).shouldBe(Condition.visible); return this; } @Step public TopicDetails openDetailsTab(TopicMenu menu) { - $x(String.format(detailsTabLtr, menu.toString())).shouldBe(Condition.enabled).click(); + $x(String.format(detailsTabLtr, menu.getValue())).shouldBe(enabled).click(); waitUntilSpinnerDisappear(); return this; } @@ -90,7 +91,7 @@ public String getSettingsGridValueByKey(String key) { @Step public TopicDetails openDotMenu() { - WebUtils.clickByJavaScript(dotMenuBtn); + WebUtil.clickByJavaScript(dotMenuBtn); return this; } @@ -141,7 +142,7 @@ public int getPartitions() { @Step public boolean isTopicHeaderVisible(String topicName) { - return WebUtils.isVisible($x(String.format(topicHeaderLocator, topicName))); + return WebUtil.isVisible($x(String.format(topicHeaderLocator, topicName))); } @Step @@ -158,40 +159,40 @@ public TopicDetails clickConfirmBtnMdl() { @Step public TopicDetails clickProduceMessageBtn() { - WebUtils.clickByJavaScript(produceMessageBtn); + WebUtil.clickByJavaScript(produceMessageBtn); return this; } @Step - public TopicDetails selectSeekTypeDdlMessagesTab(String seekTypeName) { - seekTypeDdl.shouldBe(Condition.enabled).click(); - $x(String.format(seekFilterDdlLocator, seekTypeName)).shouldBe(Condition.visible).click(); + public TopicDetails selectSeekTypeDdlMessagesTab(SeekType seekType) { + seekTypeDdl.shouldBe(enabled).click(); + $x(String.format(seekFilterDdlLocator, seekType.getValue())).shouldBe(Condition.visible).click(); return this; } @Step public TopicDetails setSeekTypeValueFldMessagesTab(String seekTypeValue) { - seekTypeField.shouldBe(Condition.enabled).sendKeys(seekTypeValue); + seekTypeField.shouldBe(enabled).sendKeys(seekTypeValue); return this; } @Step public TopicDetails clickSubmitFiltersBtnMessagesTab() { - WebUtils.clickByJavaScript(submitBtn); + WebUtil.clickByJavaScript(submitBtn); waitUntilSpinnerDisappear(); return this; } @Step public TopicDetails clickMessagesAddFiltersBtn() { - addFiltersBtn.shouldBe(Condition.enabled).click(); + addFiltersBtn.shouldBe(enabled).click(); return this; } @Step public TopicDetails clickEditActiveFilterBtn(String filterName) { $x(String.format(editActiveFilterBtnLocator, filterName)) - .shouldBe(Condition.enabled).click(); + .shouldBe(enabled).click(); return this; } @@ -202,28 +203,14 @@ public TopicDetails clickNextButton() { return this; } - @Step - public TopicDetails openSavedFiltersListMdl() { - savedFiltersLink.shouldBe(Condition.enabled).click(); - backToCreateFiltersLink.shouldBe(Condition.visible); - return this; - } - @Step public boolean isFilterVisibleAtSavedFiltersMdl(String filterName) { - return WebUtils.isVisible($x(String.format(savedFilterNameLocator, filterName))); + return WebUtil.isVisible($x(String.format(savedFilterNameLocator, filterName))); } @Step public TopicDetails selectFilterAtSavedFiltersMdl(String filterName) { - $x(String.format(savedFilterNameLocator, filterName)).shouldBe(Condition.enabled).click(); - return this; - } - - @Step - public TopicDetails clickSelectFilterBtnAtSavedFiltersMdl() { - selectFilterBtnAddFilterMdl.shouldBe(Condition.enabled).click(); - addFilterCodeModalTitle.shouldBe(Condition.disappear); + $x(String.format(savedFilterNameLocator, filterName)).shouldBe(enabled).click(); return this; } @@ -235,13 +222,14 @@ public TopicDetails waitUntilAddFiltersMdlVisible() { @Step public TopicDetails setFilterCodeFldAddFilterMdl(String filterCode) { - addFilterCodeTextarea.shouldBe(Condition.enabled).setValue(filterCode); + addFilterCodeTextarea.shouldBe(enabled).clear(); + addFilterCodeTextarea.sendKeys(filterCode); return this; } @Step public String getFilterCodeValue() { - addFilterCodeEditor.shouldBe(Condition.enabled).click(); + addFilterCodeEditor.shouldBe(enabled).click(); String value = addFilterCodeTextarea.getValue(); if (value == null) { return null; @@ -252,29 +240,29 @@ public String getFilterCodeValue() { @Step public String getFilterNameValue() { - return displayNameInputAddFilterMdl.shouldBe(Condition.enabled).getValue(); + return displayNameInputAddFilterMdl.shouldBe(enabled).getValue(); } @Step public TopicDetails selectSaveThisFilterCheckboxMdl(boolean select) { - WebUtils.selectElement(saveThisFilterCheckBoxAddFilterMdl, select); + WebUtil.selectElement(saveThisFilterCheckBoxAddFilterMdl, select); return this; } @Step public boolean isSaveThisFilterCheckBoxSelected() { - return WebUtils.isSelected(saveThisFilterCheckBoxAddFilterMdl); + return WebUtil.isSelected(saveThisFilterCheckBoxAddFilterMdl); } @Step public TopicDetails setDisplayNameFldAddFilterMdl(String displayName) { - displayNameInputAddFilterMdl.shouldBe(Condition.enabled).setValue(displayName); + displayNameInputAddFilterMdl.shouldBe(enabled).setValue(displayName); return this; } @Step public TopicDetails clickAddFilterBtnAndCloseMdl(boolean closeModal) { - addFilterBtnAddFilterMdl.shouldBe(Condition.enabled).click(); + addFilterBtnAddFilterMdl.shouldBe(enabled).click(); if (closeModal) { addFilterCodeModalTitle.shouldBe(Condition.hidden); } else { @@ -285,7 +273,7 @@ public TopicDetails clickAddFilterBtnAndCloseMdl(boolean closeModal) { @Step public TopicDetails clickSaveFilterBtnAndCloseMdl(boolean closeModal) { - saveFilterBtnEditFilterMdl.shouldBe(Condition.enabled).click(); + saveFilterBtnEditFilterMdl.shouldBe(enabled).click(); if (closeModal) { addFilterCodeModalTitle.shouldBe(Condition.hidden); } else { @@ -296,22 +284,22 @@ public TopicDetails clickSaveFilterBtnAndCloseMdl(boolean closeModal) { @Step public boolean isAddFilterBtnAddFilterMdlEnabled() { - return WebUtils.isEnabled(addFilterBtnAddFilterMdl); + return WebUtil.isEnabled(addFilterBtnAddFilterMdl); } @Step public boolean isBackButtonEnabled() { - return WebUtils.isEnabled(backBtn); + return WebUtil.isEnabled(backBtn); } @Step public boolean isNextButtonEnabled() { - return WebUtils.isEnabled(nextBtn); + return WebUtil.isEnabled(nextBtn); } @Step public boolean isActiveFilterVisible(String filterName) { - return WebUtils.isVisible($x(String.format(activeFilterNameLocator, filterName))); + return WebUtil.isVisible($x(String.format(activeFilterNameLocator, filterName))); } @Step @@ -340,7 +328,7 @@ public TopicDetails openConsumerGroup(String consumerId) { private void selectYear(int expectedYear) { while (getActualCalendarDate().getYear() > expectedYear) { - WebUtils.clickByJavaScript(previousMonthButton); + WebUtil.clickByJavaScript(previousMonthButton); sleep(1000); if (LocalTime.now().plusMinutes(3).isBefore(LocalTime.now())) { throw new IllegalArgumentException("Unable to select year"); @@ -350,7 +338,7 @@ private void selectYear(int expectedYear) { private void selectMonth(int expectedMonth) { while (getActualCalendarDate().getMonthValue() > expectedMonth) { - WebUtils.clickByJavaScript(previousMonthButton); + WebUtil.clickByJavaScript(previousMonthButton); sleep(1000); if (LocalTime.now().plusMinutes(3).isBefore(LocalTime.now())) { throw new IllegalArgumentException("Unable to select month"); @@ -359,13 +347,13 @@ private void selectMonth(int expectedMonth) { } private void selectDay(int expectedDay) { - Objects.requireNonNull($$x(String.format(dayCellLtr, expectedDay)).stream() + Objects.requireNonNull($$x(String.format(dayCellLtr, expectedDay)).asFixedIterable().stream() .filter(day -> !Objects.requireNonNull(day.getAttribute("class")).contains("outside-month")) - .findFirst().orElseThrow()).shouldBe(Condition.enabled).click(); + .findFirst().orElseThrow()).shouldBe(enabled).click(); } private void setTime(LocalDateTime dateTime) { - calendarTimeFld.shouldBe(Condition.enabled) + calendarTimeFld.shouldBe(enabled) .sendKeys(String.valueOf(dateTime.getHour()), String.valueOf(dateTime.getMinute())); } @@ -390,7 +378,7 @@ private LocalDate getActualCalendarDate() { @Step public TopicDetails openCalendarSeekType() { - seekTypeField.shouldBe(Condition.enabled).click(); + seekTypeField.shouldBe(enabled).click(); actualCalendarDate.shouldBe(Condition.visible); return this; } @@ -431,6 +419,7 @@ public TopicDetails.MessageGridItem getRandomMessage() { return getMessageByOffset(nextInt(0, initItems().size() - 1)); } + @Getter public enum TopicMenu { OVERVIEW("Overview"), MESSAGES("Messages"), @@ -442,10 +431,6 @@ public enum TopicMenu { TopicMenu(String value) { this.value = value; } - - public String toString() { - return value; - } } public static class MessageGridItem extends BasePage { @@ -458,7 +443,7 @@ private MessageGridItem(SelenideElement element) { @Step public MessageGridItem clickExpand() { - WebUtils.clickByJavaScript(element.$x("./td[1]/span")); + WebUtil.clickByJavaScript(element.$x("./td[1]/span")); return this; } @@ -503,14 +488,14 @@ public MessageGridItem openDotMenu() { @Step public MessageGridItem clickCopyToClipBoard() { - WebUtils.clickByJavaScript(element.$x("./td[7]//li[text() = 'Copy to clipboard']") + WebUtil.clickByJavaScript(element.$x("./td[7]//li[text() = 'Copy to clipboard']") .shouldBe(Condition.visible)); return this; } @Step public MessageGridItem clickSaveAsFile() { - WebUtils.clickByJavaScript(element.$x("./td[7]//li[text() = 'Save as a file']") + WebUtil.clickByJavaScript(element.$x("./td[7]//li[text() = 'Save as a file']") .shouldBe(Condition.visible)); return this; } diff --git a/e2e-tests/src/main/java/io/kafbat/ui/pages/topics/TopicSettingsTab.java b/e2e-tests/src/main/java/io/kafbat/ui/screens/topics/TopicSettingsTab.java similarity index 95% rename from e2e-tests/src/main/java/io/kafbat/ui/pages/topics/TopicSettingsTab.java rename to e2e-tests/src/main/java/io/kafbat/ui/screens/topics/TopicSettingsTab.java index 936694ca9..ef32fe352 100644 --- a/e2e-tests/src/main/java/io/kafbat/ui/pages/topics/TopicSettingsTab.java +++ b/e2e-tests/src/main/java/io/kafbat/ui/screens/topics/TopicSettingsTab.java @@ -1,11 +1,11 @@ -package io.kafbat.ui.pages.topics; +package io.kafbat.ui.screens.topics; import static com.codeborne.selenide.Selenide.$x; import com.codeborne.selenide.CollectionCondition; import com.codeborne.selenide.Condition; import com.codeborne.selenide.SelenideElement; -import io.kafbat.ui.pages.BasePage; +import io.kafbat.ui.screens.BasePage; import io.qameta.allure.Step; import java.util.ArrayList; import java.util.List; diff --git a/e2e-tests/src/main/java/io/kafbat/ui/pages/topics/TopicsList.java b/e2e-tests/src/main/java/io/kafbat/ui/screens/topics/TopicsList.java similarity index 90% rename from e2e-tests/src/main/java/io/kafbat/ui/pages/topics/TopicsList.java rename to e2e-tests/src/main/java/io/kafbat/ui/screens/topics/TopicsList.java index faddc9328..46334a6b2 100644 --- a/e2e-tests/src/main/java/io/kafbat/ui/pages/topics/TopicsList.java +++ b/e2e-tests/src/main/java/io/kafbat/ui/screens/topics/TopicsList.java @@ -1,14 +1,14 @@ -package io.kafbat.ui.pages.topics; +package io.kafbat.ui.screens.topics; import static com.codeborne.selenide.Condition.visible; import static com.codeborne.selenide.Selenide.$x; -import static io.kafbat.ui.pages.panels.enums.MenuItem.TOPICS; +import static io.kafbat.ui.screens.panels.enums.MenuItem.TOPICS; import com.codeborne.selenide.CollectionCondition; import com.codeborne.selenide.Condition; import com.codeborne.selenide.SelenideElement; -import io.kafbat.ui.pages.BasePage; -import io.kafbat.ui.utilities.WebUtils; +import io.kafbat.ui.screens.BasePage; +import io.kafbat.ui.utilities.WebUtil; import io.qameta.allure.Step; import java.util.ArrayList; import java.util.Arrays; @@ -38,31 +38,31 @@ public TopicsList waitUntilScreenReady() { @Step public TopicsList clickAddTopicBtn() { - WebUtils.clickByJavaScript(addTopicBtn); + WebUtil.clickByJavaScript(addTopicBtn); return this; } @Step public boolean isTopicVisible(String topicName) { tableGrid.shouldBe(visible); - return WebUtils.isVisible(getTableElement(topicName)); + return WebUtil.isVisible(getTableElement(topicName)); } @Step public boolean isShowInternalRadioBtnSelected() { - return WebUtils.isSelected(showInternalRadioBtn); + return WebUtil.isSelected(showInternalRadioBtn); } @Step public TopicsList setShowInternalRadioButton(boolean select) { if (select) { if (!showInternalRadioBtn.isSelected()) { - WebUtils.clickByJavaScript(showInternalRadioBtn); + WebUtil.clickByJavaScript(showInternalRadioBtn); waitUntilSpinnerDisappear(1); } } else { if (showInternalRadioBtn.isSelected()) { - WebUtils.clickByJavaScript(showInternalRadioBtn); + WebUtil.clickByJavaScript(showInternalRadioBtn); waitUntilSpinnerDisappear(1); } } @@ -94,7 +94,7 @@ public TopicsList openDotMenuByTopicName(String topicName) { @Step public boolean isCopySelectedTopicBtnEnabled() { - return WebUtils.isEnabled(copySelectedTopicBtn); + return WebUtil.isEnabled(copySelectedTopicBtn); } @Step @@ -117,19 +117,19 @@ public TopicsList clickPurgeMessagesOfSelectedTopicsBtn() { @Step public TopicsList clickClearMessagesBtn() { - WebUtils.clickByJavaScript(clearMessagesBtn.shouldBe(visible)); + WebUtil.clickByJavaScript(clearMessagesBtn.shouldBe(visible)); return this; } @Step public TopicsList clickRecreateTopicBtn() { - WebUtils.clickByJavaScript(recreateTopicBtn.shouldBe(visible)); + WebUtil.clickByJavaScript(recreateTopicBtn.shouldBe(visible)); return this; } @Step public TopicsList clickRemoveTopicBtn() { - WebUtils.clickByJavaScript(removeTopicBtn.shouldBe(visible)); + WebUtil.clickByJavaScript(removeTopicBtn.shouldBe(visible)); return this; } @@ -234,7 +234,7 @@ public TopicGridItem(SelenideElement element) { @Step public TopicsList selectItem(boolean select) { - WebUtils.selectElement(element.$x("./td[1]/input"), select); + WebUtil.selectElement(element.$x("./td[1]/input"), select); return new TopicsList(); } diff --git a/e2e-tests/src/main/java/io/kafbat/ui/pages/topics/enums/CleanupPolicyValue.java b/e2e-tests/src/main/java/io/kafbat/ui/screens/topics/enums/CleanupPolicyValue.java similarity index 68% rename from e2e-tests/src/main/java/io/kafbat/ui/pages/topics/enums/CleanupPolicyValue.java rename to e2e-tests/src/main/java/io/kafbat/ui/screens/topics/enums/CleanupPolicyValue.java index 3cf893cf5..eaa887157 100644 --- a/e2e-tests/src/main/java/io/kafbat/ui/pages/topics/enums/CleanupPolicyValue.java +++ b/e2e-tests/src/main/java/io/kafbat/ui/screens/topics/enums/CleanupPolicyValue.java @@ -1,5 +1,8 @@ -package io.kafbat.ui.pages.topics.enums; +package io.kafbat.ui.screens.topics.enums; +import lombok.Getter; + +@Getter public enum CleanupPolicyValue { DELETE("delete", "Delete"), @@ -13,13 +16,4 @@ public enum CleanupPolicyValue { this.optionValue = optionValue; this.visibleText = visibleText; } - - public String getOptionValue() { - return optionValue; - } - - public String getVisibleText() { - return visibleText; - } } - diff --git a/e2e-tests/src/main/java/io/kafbat/ui/pages/topics/enums/CustomParameterType.java b/e2e-tests/src/main/java/io/kafbat/ui/screens/topics/enums/CustomParameterType.java similarity index 92% rename from e2e-tests/src/main/java/io/kafbat/ui/pages/topics/enums/CustomParameterType.java rename to e2e-tests/src/main/java/io/kafbat/ui/screens/topics/enums/CustomParameterType.java index f0f868829..2e6e7e0f8 100644 --- a/e2e-tests/src/main/java/io/kafbat/ui/pages/topics/enums/CustomParameterType.java +++ b/e2e-tests/src/main/java/io/kafbat/ui/screens/topics/enums/CustomParameterType.java @@ -1,5 +1,8 @@ -package io.kafbat.ui.pages.topics.enums; +package io.kafbat.ui.screens.topics.enums; +import lombok.Getter; + +@Getter public enum CustomParameterType { COMPRESSION_TYPE("compression.type"), @@ -30,8 +33,4 @@ public enum CustomParameterType { CustomParameterType(String optionValue) { this.optionValue = optionValue; } - - public String getOptionValue() { - return optionValue; - } } diff --git a/e2e-tests/src/main/java/io/kafbat/ui/pages/topics/enums/MaxSizeOnDisk.java b/e2e-tests/src/main/java/io/kafbat/ui/screens/topics/enums/MaxSizeOnDisk.java similarity index 71% rename from e2e-tests/src/main/java/io/kafbat/ui/pages/topics/enums/MaxSizeOnDisk.java rename to e2e-tests/src/main/java/io/kafbat/ui/screens/topics/enums/MaxSizeOnDisk.java index 043e0dcb0..415f071be 100644 --- a/e2e-tests/src/main/java/io/kafbat/ui/pages/topics/enums/MaxSizeOnDisk.java +++ b/e2e-tests/src/main/java/io/kafbat/ui/screens/topics/enums/MaxSizeOnDisk.java @@ -1,5 +1,8 @@ -package io.kafbat.ui.pages.topics.enums; +package io.kafbat.ui.screens.topics.enums; +import lombok.Getter; + +@Getter public enum MaxSizeOnDisk { NOT_SET("-1", "Not Set"), @@ -15,13 +18,4 @@ public enum MaxSizeOnDisk { this.optionValue = optionValue; this.visibleText = visibleText; } - - public String getOptionValue() { - return optionValue; - } - - public String getVisibleText() { - return visibleText; - } } - diff --git a/e2e-tests/src/main/java/io/kafbat/ui/screens/topics/enums/SeekType.java b/e2e-tests/src/main/java/io/kafbat/ui/screens/topics/enums/SeekType.java new file mode 100644 index 000000000..d731ea266 --- /dev/null +++ b/e2e-tests/src/main/java/io/kafbat/ui/screens/topics/enums/SeekType.java @@ -0,0 +1,21 @@ +package io.kafbat.ui.screens.topics.enums; + +import lombok.Getter; + +@Getter +public enum SeekType { + + OLDEST("Oldest"), + NEWEST("Newest"), + LIVE("Live"), + FROM_OFFSET("From offset"), + TO_OFFSET("To offset"), + SINCE_TIME("Since time"), + TO_TIME("To time"); + + private final String value; + + SeekType(String value) { + this.value = value; + } +} diff --git a/e2e-tests/src/main/java/io/kafbat/ui/pages/topics/enums/TimeToRetain.java b/e2e-tests/src/main/java/io/kafbat/ui/screens/topics/enums/TimeToRetain.java similarity index 72% rename from e2e-tests/src/main/java/io/kafbat/ui/pages/topics/enums/TimeToRetain.java rename to e2e-tests/src/main/java/io/kafbat/ui/screens/topics/enums/TimeToRetain.java index cedc94309..9ff0cc0c1 100644 --- a/e2e-tests/src/main/java/io/kafbat/ui/pages/topics/enums/TimeToRetain.java +++ b/e2e-tests/src/main/java/io/kafbat/ui/screens/topics/enums/TimeToRetain.java @@ -1,5 +1,8 @@ -package io.kafbat.ui.pages.topics.enums; +package io.kafbat.ui.screens.topics.enums; +import lombok.Getter; + +@Getter public enum TimeToRetain { BTN_12_HOURS("12 hours", "43200000"), @@ -15,12 +18,4 @@ public enum TimeToRetain { this.button = button; this.value = value; } - - public String getButton() { - return button; - } - - public String getValue() { - return value; - } } diff --git a/e2e-tests/src/main/java/io/kafbat/ui/services/ApiService.java b/e2e-tests/src/main/java/io/kafbat/ui/services/ApiService.java index 09bfb7fde..4a4e8e1a2 100644 --- a/e2e-tests/src/main/java/io/kafbat/ui/services/ApiService.java +++ b/e2e-tests/src/main/java/io/kafbat/ui/services/ApiService.java @@ -1,7 +1,7 @@ package io.kafbat.ui.services; import static com.codeborne.selenide.Selenide.sleep; -import static io.kafbat.ui.utilities.FileUtils.fileToString; +import static io.kafbat.ui.utilities.FileUtil.fileToString; import com.fasterxml.jackson.databind.ObjectMapper; import io.kafbat.ui.api.ApiClient; @@ -20,8 +20,8 @@ import io.kafbat.ui.models.Connector; import io.kafbat.ui.models.Schema; import io.kafbat.ui.models.Topic; -import io.kafbat.ui.pages.ksqldb.models.Stream; -import io.kafbat.ui.pages.ksqldb.models.Table; +import io.kafbat.ui.screens.ksqldb.models.Stream; +import io.kafbat.ui.screens.ksqldb.models.Table; import io.kafbat.ui.settings.BaseSource; import io.qameta.allure.Step; import java.util.HashMap; diff --git a/e2e-tests/src/main/java/io/kafbat/ui/settings/BaseSource.java b/e2e-tests/src/main/java/io/kafbat/ui/settings/BaseSource.java index 8aec487e1..12063750a 100644 --- a/e2e-tests/src/main/java/io/kafbat/ui/settings/BaseSource.java +++ b/e2e-tests/src/main/java/io/kafbat/ui/settings/BaseSource.java @@ -1,28 +1,18 @@ package io.kafbat.ui.settings; -import io.kafbat.ui.settings.configs.Config; -import io.kafbat.ui.variables.Browser; -import org.aeonbits.owner.ConfigFactory; +import static io.kafbat.ui.utilities.BooleanUtil.parseBoolean; +import static io.kafbat.ui.utilities.StringUtil.getOptionalString; +import static org.apache.commons.lang3.BooleanUtils.TRUE; public abstract class BaseSource { + public static final boolean HEADLESS = parseBoolean(getOptionalString(TRUE, System.getProperty("headless"))); + public static final boolean SELENOID = parseBoolean(getOptionalString(TRUE, System.getProperty("selenoid"))); public static final String CLUSTER_NAME = "local"; public static final String CONNECT_NAME = "first"; private static final String LOCAL_HOST = "localhost"; public static final String REMOTE_URL = String.format("http://%s:4444/wd/hub", LOCAL_HOST); public static final String BASE_API_URL = String.format("http://%s:8080", LOCAL_HOST); - private static Config config; - public static final String BROWSER = config().browser(); - public static final String BASE_HOST = BROWSER.equals(Browser.LOCAL) - ? LOCAL_HOST - : "host.docker.internal"; + public static final String BASE_HOST = SELENOID ? "host.docker.internal" : LOCAL_HOST; public static final String BASE_UI_URL = String.format("http://%s:8080", BASE_HOST); - public static final String SUITE_NAME = config().suite(); - - private static Config config() { - if (config == null) { - config = ConfigFactory.create(Config.class, System.getProperties()); - } - return config; - } } diff --git a/e2e-tests/src/main/java/io/kafbat/ui/settings/configs/Config.java b/e2e-tests/src/main/java/io/kafbat/ui/settings/configs/Config.java deleted file mode 100644 index f45da7f21..000000000 --- a/e2e-tests/src/main/java/io/kafbat/ui/settings/configs/Config.java +++ /dev/null @@ -1,4 +0,0 @@ -package io.kafbat.ui.settings.configs; - -public interface Config extends Profiles { -} diff --git a/e2e-tests/src/main/java/io/kafbat/ui/settings/configs/Profiles.java b/e2e-tests/src/main/java/io/kafbat/ui/settings/configs/Profiles.java deleted file mode 100644 index fcae8c7c3..000000000 --- a/e2e-tests/src/main/java/io/kafbat/ui/settings/configs/Profiles.java +++ /dev/null @@ -1,16 +0,0 @@ -package io.kafbat.ui.settings.configs; - -import io.kafbat.ui.variables.Browser; -import io.kafbat.ui.variables.Suite; -import org.aeonbits.owner.Config; - -public interface Profiles extends Config { - - @Key("browser") - @DefaultValue(Browser.CONTAINER) - String browser(); - - @Key("suite") - @DefaultValue(Suite.CUSTOM) - String suite(); -} diff --git a/e2e-tests/src/main/java/io/kafbat/ui/settings/drivers/WebDriver.java b/e2e-tests/src/main/java/io/kafbat/ui/settings/drivers/WebDriver.java index 7d9bdad34..d956a0dd4 100644 --- a/e2e-tests/src/main/java/io/kafbat/ui/settings/drivers/WebDriver.java +++ b/e2e-tests/src/main/java/io/kafbat/ui/settings/drivers/WebDriver.java @@ -9,7 +9,6 @@ import com.codeborne.selenide.WebDriverRunner; import com.codeborne.selenide.logevents.SelenideLogger; import io.kafbat.ui.settings.BaseSource; -import io.kafbat.ui.variables.Browser; import io.qameta.allure.Step; import io.qameta.allure.selenide.AllureSelenide; import java.util.HashMap; @@ -20,34 +19,40 @@ @Slf4j public abstract class WebDriver { + private static final String MAC_OS_CHROME_BIN_PATH = "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"; + private static final String SELENIDE_RESULTS_PATH = "target/selenide-results"; + @Step public static void browserSetup() { - Configuration.headless = false; + Configuration.headless = BaseSource.HEADLESS; Configuration.browser = "chrome"; Configuration.browserSize = "1920x1080"; + Configuration.pageLoadTimeout = 180000; + Configuration.savePageSource = true; Configuration.screenshots = true; - Configuration.savePageSource = false; - Configuration.pageLoadTimeout = 120000; + Configuration.downloadsFolder = String.format("%s/downloads", SELENIDE_RESULTS_PATH); + Configuration.reportsFolder = String.format("%s/reports", SELENIDE_RESULTS_PATH); ChromeOptions chromeOptions = new ChromeOptions() - .addArguments("--no-sandbox") - .addArguments("--verbose") - .addArguments("--remote-allow-origins=*") + //.addArguments("--remote-allow-origins=*") .addArguments("--disable-dev-shm-usage") + .addArguments("--disable-extensions") .addArguments("--disable-gpu") + .addArguments("--no-sandbox") .addArguments("--lang=en_US"); - switch (BaseSource.BROWSER) { - case (Browser.LOCAL) -> Configuration.browserCapabilities = chromeOptions; - case (Browser.CONTAINER) -> { - Configuration.remote = BaseSource.REMOTE_URL; - Configuration.remoteConnectionTimeout = 180000; - Map selenoidOptions = new HashMap<>(); - selenoidOptions.put("enableVNC", true); - selenoidOptions.put("enableVideo", false); - chromeOptions.setCapability("selenoid:options", selenoidOptions); - Configuration.browserCapabilities = chromeOptions; - } - default -> throw new IllegalStateException("Unexpected value: " + BaseSource.BROWSER); + if (BaseSource.SELENOID) { + Configuration.remote = BaseSource.REMOTE_URL; + Configuration.remoteConnectionTimeout = 180000; + Configuration.remoteReadTimeout = 180000; + Map selenoidOptions = new HashMap<>(); + selenoidOptions.put("enableVNC", true); + selenoidOptions.put("enableLog", true); + selenoidOptions.put("enableVideo", false); + selenoidOptions.put("sessionTimeout", "30m"); + chromeOptions.setCapability("selenoid:options", selenoidOptions); + } else if (System.getProperty("os.name").equals("Mac OS X")) { + Configuration.browserBinary = MAC_OS_CHROME_BIN_PATH; } + Configuration.browserCapabilities = chromeOptions; } private static org.openqa.selenium.WebDriver getWebDriver() { @@ -68,15 +73,14 @@ public static void openUrl(String url) { } } - @Step - public static void browserInit() { - getWebDriver(); - } - @Step public static void browserClear() { - clearBrowserLocalStorage(); - clearBrowserCookies(); + getWebDriver(); + try { + clearBrowserCookies(); + clearBrowserLocalStorage(); + } catch (Throwable ignored) { + } refresh(); } @@ -93,9 +97,9 @@ public static void browserQuit() { } @Step - public static void loggerSetup() { + public static void selenideLoggerSetup() { SelenideLogger.addListener("AllureSelenide", new AllureSelenide() - .screenshots(true) - .savePageSource(false)); + .savePageSource(true) + .screenshots(true)); } } diff --git a/e2e-tests/src/main/java/io/kafbat/ui/settings/listeners/AllureListener.java b/e2e-tests/src/main/java/io/kafbat/ui/settings/listeners/AllureListener.java index 67e24fb90..6bab8f9f9 100644 --- a/e2e-tests/src/main/java/io/kafbat/ui/settings/listeners/AllureListener.java +++ b/e2e-tests/src/main/java/io/kafbat/ui/settings/listeners/AllureListener.java @@ -1,29 +1,30 @@ package io.kafbat.ui.settings.listeners; import static java.nio.file.Files.newInputStream; +import static org.apache.commons.lang3.ObjectUtils.isEmpty; import com.codeborne.selenide.Screenshots; import io.qameta.allure.Allure; +import io.qameta.allure.AllureLifecycle; import io.qameta.allure.testng.AllureTestNg; import java.io.File; import java.io.IOException; -import lombok.extern.slf4j.Slf4j; +import org.slf4j.LoggerFactory; import org.testng.ITestListener; import org.testng.ITestResult; -@Slf4j public class AllureListener extends AllureTestNg implements ITestListener { private void takeScreenshot() { File screenshot = Screenshots.takeScreenShotAsFile(); try { - if (screenshot != null) { + if (!isEmpty(screenshot)) { Allure.addAttachment(screenshot.getName(), newInputStream(screenshot.toPath())); } else { - log.warn("Unable to take screenshot"); + LoggerFactory.getLogger(AllureLifecycle.class).error("Could not take screenshot"); } - } catch (IOException e) { - throw new RuntimeException(e); + } catch (IOException exception) { + throw new RuntimeException(exception); } } diff --git a/e2e-tests/src/main/java/io/kafbat/ui/settings/listeners/LoggerListener.java b/e2e-tests/src/main/java/io/kafbat/ui/settings/listeners/LoggerListener.java deleted file mode 100644 index e92b117e8..000000000 --- a/e2e-tests/src/main/java/io/kafbat/ui/settings/listeners/LoggerListener.java +++ /dev/null @@ -1,37 +0,0 @@ -package io.kafbat.ui.settings.listeners; - -import lombok.extern.slf4j.Slf4j; -import org.testng.ITestResult; -import org.testng.TestListenerAdapter; - -@Slf4j -public class LoggerListener extends TestListenerAdapter { - - @Override - public void onTestStart(final ITestResult testResult) { - log.info(String.format("\n------------------------------------------------------------------------ " - + "\nTEST STARTED: %s.%s \n------------------------------------------------------------------------ \n", - testResult.getInstanceName(), testResult.getName())); - } - - @Override - public void onTestSuccess(final ITestResult testResult) { - log.info(String.format("\n------------------------------------------------------------------------ " - + "\nTEST PASSED: %s.%s \n------------------------------------------------------------------------ \n", - testResult.getInstanceName(), testResult.getName())); - } - - @Override - public void onTestFailure(final ITestResult testResult) { - log.info(String.format("\n------------------------------------------------------------------------ " - + "\nTEST FAILED: %s.%s \n------------------------------------------------------------------------ \n", - testResult.getInstanceName(), testResult.getName())); - } - - @Override - public void onTestSkipped(final ITestResult testResult) { - log.info(String.format("\n------------------------------------------------------------------------ " - + "\nTEST SKIPPED: %s.%s \n------------------------------------------------------------------------ \n", - testResult.getInstanceName(), testResult.getName())); - } -} diff --git a/e2e-tests/src/main/java/io/kafbat/ui/settings/listeners/QaseCreateListener.java b/e2e-tests/src/main/java/io/kafbat/ui/settings/listeners/QaseCreateListener.java deleted file mode 100644 index 7ae2709ae..000000000 --- a/e2e-tests/src/main/java/io/kafbat/ui/settings/listeners/QaseCreateListener.java +++ /dev/null @@ -1,136 +0,0 @@ -package io.kafbat.ui.settings.listeners; - -import static io.qase.api.utils.IntegrationUtils.getCaseTitle; - -import io.kafbat.ui.utilities.qase.annotations.Automation; -import io.kafbat.ui.utilities.qase.annotations.Status; -import io.kafbat.ui.utilities.qase.annotations.Suite; -import io.qase.api.QaseClient; -import io.qase.api.StepStorage; -import io.qase.api.annotation.QaseId; -import io.qase.client.ApiClient; -import io.qase.client.api.CasesApi; -import io.qase.client.model.GetCasesFiltersParameter; -import io.qase.client.model.ResultCreateStepsInner; -import io.qase.client.model.TestCase; -import io.qase.client.model.TestCaseCreate; -import io.qase.client.model.TestCaseCreateStepsInner; -import io.qase.client.model.TestCaseListResponse; -import io.qase.client.model.TestCaseListResponseAllOfResult; -import java.lang.reflect.Method; -import java.util.HashMap; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import lombok.SneakyThrows; -import lombok.extern.slf4j.Slf4j; -import org.testng.Assert; -import org.testng.ITestListener; -import org.testng.ITestResult; -import org.testng.TestListenerAdapter; - -@Slf4j -public class QaseCreateListener extends TestListenerAdapter implements ITestListener { - - private static final CasesApi QASE_API = getQaseApi(); - - private static CasesApi getQaseApi() { - ApiClient apiClient = QaseClient.getApiClient(); - apiClient.setApiKey(System.getProperty("QASEIO_API_TOKEN")); - return new CasesApi(apiClient); - } - - private static int getStatus(Method method) { - if (method.isAnnotationPresent(Status.class)) { - return method.getDeclaredAnnotation(Status.class).status().getValue(); - } - return 1; - } - - private static int getAutomation(Method method) { - if (method.isAnnotationPresent(Automation.class)) { - return method.getDeclaredAnnotation(Automation.class).state().getValue(); - } - return 0; - } - - @SneakyThrows - private static HashMap getCaseTitlesAndIdsFromQase() { - HashMap cases = new HashMap<>(); - boolean getCases = true; - int offSet = 0; - while (getCases) { - getCases = false; - TestCaseListResponse response = QASE_API.getCases(System.getProperty("QASE_PROJECT_CODE"), - new GetCasesFiltersParameter().status(GetCasesFiltersParameter.SERIALIZED_NAME_STATUS), 100, offSet); - TestCaseListResponseAllOfResult result = response.getResult(); - Assert.assertNotNull(result); - List entities = result.getEntities(); - Assert.assertNotNull(entities); - if (entities.size() > 0) { - for (TestCase testCase : entities) { - cases.put(testCase.getId(), testCase.getTitle()); - } - offSet = offSet + 100; - getCases = true; - } - } - return cases; - } - - private static boolean isCaseWithTitleExistInQase(Method method) { - HashMap cases = getCaseTitlesAndIdsFromQase(); - String title = getCaseTitle(method); - if (cases.containsValue(title)) { - for (Map.Entry map : cases.entrySet()) { - if (map.getValue().matches(title)) { - long id = map.getKey(); - log.warn(String.format("Test case with @QaseTitle='%s' already exists with @QaseId=%d. " - + "Please verify @QaseTitle annotation", title, id)); - return true; - } - } - } - return false; - } - - @Override - @SneakyThrows - public void onTestSuccess(final ITestResult testResult) { - Method method = testResult.getMethod() - .getConstructorOrMethod() - .getMethod(); - String title = getCaseTitle(method); - if (!method.isAnnotationPresent(QaseId.class)) { - if (title != null) { - if (!isCaseWithTitleExistInQase(method)) { - LinkedList resultSteps = StepStorage.stopSteps(); - LinkedList createSteps = new LinkedList<>(); - resultSteps.forEach(step -> { - TestCaseCreateStepsInner caseStep = new TestCaseCreateStepsInner(); - caseStep.setAction(step.getAction()); - caseStep.setExpectedResult(step.getExpectedResult()); - createSteps.add(caseStep); - }); - TestCaseCreate newCase = new TestCaseCreate(); - newCase.setTitle(title); - newCase.setStatus(getStatus(method)); - newCase.setAutomation(getAutomation(method)); - newCase.setSteps(createSteps); - if (method.isAnnotationPresent(Suite.class)) { - long suiteId = method.getDeclaredAnnotation(Suite.class).id(); - newCase.suiteId(suiteId); - } - Long id = Objects.requireNonNull(QASE_API.createCase(System.getProperty("QASE_PROJECT_CODE"), - newCase).getResult()).getId(); - log.info(String.format("New test case '%s' was created with @QaseId=%d", title, id)); - } - } else { - log.warn("To create new test case in Qase.io please add @QaseTitle annotation"); - } - } else { - log.warn("To create new test case in Qase.io please remove @QaseId annotation"); - } - } -} diff --git a/e2e-tests/src/main/java/io/kafbat/ui/settings/listeners/QaseResultListener.java b/e2e-tests/src/main/java/io/kafbat/ui/settings/listeners/QaseResultListener.java deleted file mode 100644 index 1ac6bd076..000000000 --- a/e2e-tests/src/main/java/io/kafbat/ui/settings/listeners/QaseResultListener.java +++ /dev/null @@ -1,105 +0,0 @@ -package io.kafbat.ui.settings.listeners; - -import static io.qase.api.utils.IntegrationUtils.getCaseId; -import static io.qase.api.utils.IntegrationUtils.getCaseTitle; -import static io.qase.api.utils.IntegrationUtils.getStacktrace; -import static io.qase.client.model.ResultCreate.StatusEnum.FAILED; -import static io.qase.client.model.ResultCreate.StatusEnum.PASSED; -import static io.qase.client.model.ResultCreate.StatusEnum.SKIPPED; - -import io.qase.api.StepStorage; -import io.qase.api.config.QaseConfig; -import io.qase.api.services.QaseTestCaseListener; -import io.qase.client.model.ResultCreate; -import io.qase.client.model.ResultCreateCase; -import io.qase.client.model.ResultCreateStepsInner; -import io.qase.testng.guice.module.TestNgModule; -import java.lang.reflect.Method; -import java.util.LinkedList; -import java.util.Optional; -import lombok.AccessLevel; -import lombok.Getter; -import lombok.extern.slf4j.Slf4j; -import org.testng.ITestContext; -import org.testng.ITestListener; -import org.testng.ITestResult; -import org.testng.TestListenerAdapter; - -@Slf4j -public class QaseResultListener extends TestListenerAdapter implements ITestListener { - - private static final String REPORTER_NAME = "TestNG"; - - static { - System.setProperty(QaseConfig.QASE_CLIENT_REPORTER_NAME_KEY, REPORTER_NAME); - } - - @Getter(lazy = true, value = AccessLevel.PRIVATE) - private final QaseTestCaseListener qaseTestCaseListener = createQaseListener(); - - private static QaseTestCaseListener createQaseListener() { - return TestNgModule.getInjector().getInstance(QaseTestCaseListener.class); - } - - @Override - public void onTestStart(ITestResult tr) { - getQaseTestCaseListener().onTestCaseStarted(); - super.onTestStart(tr); - } - - @Override - public void onTestSuccess(ITestResult tr) { - getQaseTestCaseListener() - .onTestCaseFinished(resultCreate -> setupResultItem(resultCreate, tr, PASSED)); - super.onTestSuccess(tr); - } - - @Override - public void onTestSkipped(ITestResult tr) { - getQaseTestCaseListener() - .onTestCaseFinished(resultCreate -> setupResultItem(resultCreate, tr, SKIPPED)); - super.onTestSuccess(tr); - } - - @Override - public void onTestFailure(ITestResult tr) { - getQaseTestCaseListener() - .onTestCaseFinished(resultCreate -> setupResultItem(resultCreate, tr, FAILED)); - super.onTestFailure(tr); - } - - @Override - public void onFinish(ITestContext testContext) { - getQaseTestCaseListener().onTestCasesSetFinished(); - super.onFinish(testContext); - } - - private void setupResultItem(ResultCreate resultCreate, ITestResult result, ResultCreate.StatusEnum status) { - Optional resultThrowable = Optional.ofNullable(result.getThrowable()); - String comment = resultThrowable - .flatMap(throwable -> Optional.of(throwable.toString())).orElse(null); - Boolean isDefect = resultThrowable - .flatMap(throwable -> Optional.of(throwable instanceof AssertionError)) - .orElse(false); - String stacktrace = resultThrowable - .flatMap(throwable -> Optional.of(getStacktrace(throwable))) - .orElse(null); - Method method = result.getMethod() - .getConstructorOrMethod() - .getMethod(); - Long caseId = getCaseId(method); - String caseTitle = null; - if (caseId == null) { - caseTitle = getCaseTitle(method); - } - LinkedList steps = StepStorage.stopSteps(); - resultCreate - ._case(caseTitle == null ? null : new ResultCreateCase().title(caseTitle)) - .caseId(caseId) - .status(status) - .comment(comment) - .stacktrace(stacktrace) - .steps(steps.isEmpty() ? null : steps) - .defect(isDefect); - } -} diff --git a/e2e-tests/src/main/java/io/kafbat/ui/settings/listeners/ResultsLogger.java b/e2e-tests/src/main/java/io/kafbat/ui/settings/listeners/ResultsLogger.java new file mode 100644 index 000000000..a6291eee0 --- /dev/null +++ b/e2e-tests/src/main/java/io/kafbat/ui/settings/listeners/ResultsLogger.java @@ -0,0 +1,93 @@ +package io.kafbat.ui.settings.listeners; + +import static io.kafbat.ui.utilities.StringUtil.getDuplicates; + +import java.text.DecimalFormat; +import java.util.Set; +import lombok.extern.slf4j.Slf4j; +import org.testng.ITestContext; +import org.testng.ITestResult; +import org.testng.TestListenerAdapter; + +@Slf4j +public class ResultsLogger extends TestListenerAdapter { + + private static final String PREFIX = "[INFO] "; + private static final String PASSED_STATUS = "PASSED"; + private static final String FAILED_STATUS = "FAILED"; + private static final String SKIPPED_STATUS = "SKIPPED"; + + private static void logTestStatus(String status, ITestResult result) { + String testStatus = String.format("\n[INFO] TEST %s: %s", + status, result.getMethod().getQualifiedName()); + int dashCount = testStatus.length() - PREFIX.length(); + String separator = String.format("\n%s%s", PREFIX, + getDuplicates("-", dashCount - 1)); + log.info("{}{}{}", separator, testStatus, separator); + } + + private static String alignTitleToLength(String title, int target) { + int indentDiff = (title.length() - target) / 2; + String result = title.substring(indentDiff, title.length() - indentDiff); + if (result.length() > target) { + result = result.substring(1); + } + return result; + } + + private static int appendResults(StringBuilder suiteResults, Set testResults, String testStatus) { + if (testResults.isEmpty()) { + return 0; + } + StringBuilder subResults = new StringBuilder(); + subResults.append(String.format("\n%s\n%s%s TESTS: %d", PREFIX, PREFIX, testStatus, testResults.size())); + if (!testStatus.equals(PASSED_STATUS)) { + testResults.forEach(result -> + subResults.append(String.format("\n%s%s", PREFIX, result.getMethod().getQualifiedName()))); + } + suiteResults.append(subResults); + return testResults.size(); + } + + @Override + public void onTestStart(final ITestResult testResult) { + logTestStatus("STARTED", testResult); + } + + @Override + public void onTestSuccess(final ITestResult testResult) { + logTestStatus(PASSED_STATUS, testResult); + } + + @Override + public void onTestFailure(final ITestResult testResult) { + logTestStatus(FAILED_STATUS, testResult); + } + + @Override + public void onTestSkipped(final ITestResult testResult) { + logTestStatus(SKIPPED_STATUS, testResult); + } + + @Override + public void onFinish(ITestContext context) { + String separator = getDuplicates("=", 72); + String titleIndent = getDuplicates("-", separator.length() / 2); + String header = String.format("%s< %s >%s", titleIndent, context.getName(), titleIndent); + header = alignTitleToLength(header, separator.length()); + String logHeader = String.format("\n%s%s\n%s%s", PREFIX, separator, PREFIX, header); + StringBuilder suiteResults = new StringBuilder(); + suiteResults.append(logHeader); + int testCount = 0; + Set passedResults = context.getPassedTests().getAllResults(); + testCount += appendResults(suiteResults, passedResults, PASSED_STATUS); + testCount += appendResults(suiteResults, context.getFailedTests().getAllResults(), FAILED_STATUS); + testCount += appendResults(suiteResults, context.getSkippedTests().getAllResults(), SKIPPED_STATUS); + String total = new DecimalFormat("##0.00%").format((double) passedResults.size() / testCount); + String footer = String.format("%s[ %s ]%s", titleIndent, total, titleIndent); + footer = alignTitleToLength(footer, separator.length()); + String logFooter = String.format("\n%s\n%s%s\n%s%s", PREFIX, PREFIX, footer, PREFIX, separator); + suiteResults.append(logFooter); + log.info(suiteResults.toString()); + } +} diff --git a/e2e-tests/src/main/java/io/kafbat/ui/utilities/BooleanUtil.java b/e2e-tests/src/main/java/io/kafbat/ui/utilities/BooleanUtil.java new file mode 100644 index 000000000..38b4179b5 --- /dev/null +++ b/e2e-tests/src/main/java/io/kafbat/ui/utilities/BooleanUtil.java @@ -0,0 +1,28 @@ +package io.kafbat.ui.utilities; + +import static io.kafbat.ui.utilities.StringUtil.clearString; +import static org.apache.commons.lang3.BooleanUtils.FALSE; +import static org.apache.commons.lang3.BooleanUtils.TRUE; +import static org.apache.commons.lang3.ObjectUtils.isEmpty; + +import org.apache.commons.lang3.StringUtils; + +public class BooleanUtil { + + public static boolean getOptionalBoolean(boolean defaultValue, boolean... customValue) { + return !isEmpty(customValue) ? customValue[0] : defaultValue; + } + + public static boolean parseBoolean(String original) { + String cleanStr = clearString(original); + if (StringUtils.isEmpty(cleanStr)) { + throw new IllegalStateException("Unexpected value: " + original); + } else if (cleanStr.equalsIgnoreCase(TRUE)) { + return true; + } else if (cleanStr.equalsIgnoreCase(FALSE)) { + return false; + } else { + throw new IllegalStateException("Unexpected value: " + original); + } + } +} diff --git a/e2e-tests/src/main/java/io/kafbat/ui/utilities/FileUtil.java b/e2e-tests/src/main/java/io/kafbat/ui/utilities/FileUtil.java new file mode 100644 index 000000000..85c277158 --- /dev/null +++ b/e2e-tests/src/main/java/io/kafbat/ui/utilities/FileUtil.java @@ -0,0 +1,26 @@ +package io.kafbat.ui.utilities; + +import static org.apache.kafka.common.utils.Utils.readFileAsString; + +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import org.apache.commons.io.IOUtils; + +public class FileUtil { + + public static String resourceToString(String resourcePath) { + try { + return IOUtils.resourceToString("/" + resourcePath, StandardCharsets.UTF_8); + } catch (IOException exception) { + throw new RuntimeException(exception); + } + } + + public static String fileToString(String filePath) { + try { + return readFileAsString(filePath); + } catch (IOException exception) { + throw new RuntimeException(exception); + } + } +} diff --git a/e2e-tests/src/main/java/io/kafbat/ui/utilities/FileUtils.java b/e2e-tests/src/main/java/io/kafbat/ui/utilities/FileUtils.java deleted file mode 100644 index d88a92d7d..000000000 --- a/e2e-tests/src/main/java/io/kafbat/ui/utilities/FileUtils.java +++ /dev/null @@ -1,26 +0,0 @@ -package io.kafbat.ui.utilities; - -import static org.apache.kafka.common.utils.Utils.readFileAsString; - -import java.io.IOException; -import java.nio.charset.StandardCharsets; -import org.testcontainers.shaded.org.apache.commons.io.IOUtils; - -public class FileUtils { - - public static String getResourceAsString(String resourceFileName) { - try { - return IOUtils.resourceToString("/" + resourceFileName, StandardCharsets.UTF_8); - } catch (IOException e) { - throw new RuntimeException(e); - } - } - - public static String fileToString(String path) { - try { - return readFileAsString(path); - } catch (IOException e) { - throw new RuntimeException(e); - } - } -} diff --git a/e2e-tests/src/main/java/io/kafbat/ui/utilities/IntUtil.java b/e2e-tests/src/main/java/io/kafbat/ui/utilities/IntUtil.java new file mode 100644 index 000000000..d2d8c3064 --- /dev/null +++ b/e2e-tests/src/main/java/io/kafbat/ui/utilities/IntUtil.java @@ -0,0 +1,22 @@ +package io.kafbat.ui.utilities; + +import static org.apache.commons.lang3.ObjectUtils.isEmpty; + +import java.util.Objects; + +public class IntUtil { + + public static int getIntegerFromString(String original, boolean validate) { + String cleanStr = isEmpty(original) ? null + : original.replaceAll("(\\D+)", ""); + int result = 0; + try { + result = Integer.parseInt(Objects.requireNonNull(cleanStr)); + } catch (Throwable throwable) { + if (validate) { + throw new IllegalArgumentException(String.format("Unable to parse string '%s'", original)); + } + } + return result; + } +} diff --git a/e2e-tests/src/main/java/io/kafbat/ui/utilities/StringUtil.java b/e2e-tests/src/main/java/io/kafbat/ui/utilities/StringUtil.java new file mode 100644 index 000000000..487832494 --- /dev/null +++ b/e2e-tests/src/main/java/io/kafbat/ui/utilities/StringUtil.java @@ -0,0 +1,44 @@ +package io.kafbat.ui.utilities; + +import static org.apache.commons.lang3.ObjectUtils.isEmpty; + +import java.util.stream.IntStream; + +public class StringUtil { + + public static String getOptionalString(String defaultValue, String... customValue) { + return !isEmpty(customValue) && !isEmpty(customValue[0]) ? customValue[0] : defaultValue; + } + + public static String clearString(String original) { + if (original != null) { + String cleanStr = original + .replaceAll("\n", " ") + .replaceAll("\r", " ") + .replaceAll("\t", " ") + .trim(); + while (cleanStr.contains(" ")) { + cleanStr = cleanStr.replace(" ", " "); + } + return cleanStr; + } else { + return null; + } + } + + public static String getMixedCase(String original) { + return IntStream.range(0, original.length()) + .mapToObj(i -> i % 2 == 0 ? Character.toUpperCase(original.charAt(i)) : original.charAt(i)) + .collect(StringBuilder::new, StringBuilder::appendCodePoint, StringBuilder::append) + .toString(); + } + + public static String getDuplicates(String toDuplicate, int count) { + StringBuilder result = new StringBuilder(); + while (count > 0) { + result.append(toDuplicate); + count--; + } + return result.toString(); + } +} diff --git a/e2e-tests/src/main/java/io/kafbat/ui/utilities/StringUtils.java b/e2e-tests/src/main/java/io/kafbat/ui/utilities/StringUtils.java deleted file mode 100644 index ba5f25480..000000000 --- a/e2e-tests/src/main/java/io/kafbat/ui/utilities/StringUtils.java +++ /dev/null @@ -1,15 +0,0 @@ -package io.kafbat.ui.utilities; - -import java.util.stream.IntStream; -import lombok.extern.slf4j.Slf4j; - -@Slf4j -public class StringUtils { - - public static String getMixedCase(String original) { - return IntStream.range(0, original.length()) - .mapToObj(i -> i % 2 == 0 ? Character.toUpperCase(original.charAt(i)) : original.charAt(i)) - .collect(StringBuilder::new, StringBuilder::appendCodePoint, StringBuilder::append) - .toString(); - } -} diff --git a/e2e-tests/src/main/java/io/kafbat/ui/utilities/TimeUtils.java b/e2e-tests/src/main/java/io/kafbat/ui/utilities/TimeUtil.java similarity index 71% rename from e2e-tests/src/main/java/io/kafbat/ui/utilities/TimeUtils.java rename to e2e-tests/src/main/java/io/kafbat/ui/utilities/TimeUtil.java index f926ef6a8..99d03404e 100644 --- a/e2e-tests/src/main/java/io/kafbat/ui/utilities/TimeUtils.java +++ b/e2e-tests/src/main/java/io/kafbat/ui/utilities/TimeUtil.java @@ -1,16 +1,15 @@ package io.kafbat.ui.utilities; -import static com.codeborne.selenide.Selenide.sleep; - +import com.codeborne.selenide.Selenide; import java.time.LocalTime; import lombok.extern.slf4j.Slf4j; @Slf4j -public class TimeUtils { +public class TimeUtil { public static void waitUntilNewMinuteStarted() { int secondsLeft = 60 - LocalTime.now().getSecond(); log.debug("\nwaitUntilNewMinuteStarted: {}s", secondsLeft); - sleep(secondsLeft * 1000); + Selenide.sleep(secondsLeft * 1000); } } diff --git a/e2e-tests/src/main/java/io/kafbat/ui/utilities/WebUtils.java b/e2e-tests/src/main/java/io/kafbat/ui/utilities/WebUtil.java similarity index 65% rename from e2e-tests/src/main/java/io/kafbat/ui/utilities/WebUtils.java rename to e2e-tests/src/main/java/io/kafbat/ui/utilities/WebUtil.java index 6c02f658f..5c7ab20d6 100644 --- a/e2e-tests/src/main/java/io/kafbat/ui/utilities/WebUtils.java +++ b/e2e-tests/src/main/java/io/kafbat/ui/utilities/WebUtil.java @@ -1,24 +1,23 @@ package io.kafbat.ui.utilities; -import static com.codeborne.selenide.Selenide.executeJavaScript; +import static io.kafbat.ui.variables.Common.LOG_RESULT; import com.codeborne.selenide.Condition; +import com.codeborne.selenide.Selenide; import com.codeborne.selenide.SelenideElement; -import com.codeborne.selenide.WebDriverRunner; import java.time.Duration; import lombok.extern.slf4j.Slf4j; import org.openqa.selenium.Keys; -import org.openqa.selenium.interactions.Actions; @Slf4j -public class WebUtils { +public class WebUtil { - public static int getTimeout(int... timeoutInSeconds) { + private static int getTimeout(int... timeoutInSeconds) { return (timeoutInSeconds != null && timeoutInSeconds.length > 0) ? timeoutInSeconds[0] : 4; } public static void sendKeysAfterClear(SelenideElement element, String keys) { - log.debug("\nsendKeysAfterClear: {} \nsend keys '{}'", element.getSearchCriteria(), keys); + log.debug("\nsendKeysAfterClear: {{}} \nsend keys '{}'", element.getSearchCriteria(), keys); element.shouldBe(Condition.enabled).clear(); if (keys != null) { element.sendKeys(keys); @@ -26,76 +25,77 @@ public static void sendKeysAfterClear(SelenideElement element, String keys) { } public static void clickByActions(SelenideElement element) { - log.debug("\nclickByActions: {}", element.getSearchCriteria()); + log.debug("\nclickByActions: {{}}", element.getSearchCriteria()); element.shouldBe(Condition.enabled); - new Actions(WebDriverRunner.getWebDriver()) + Selenide.actions() .moveToElement(element) .click(element) .perform(); } public static void sendKeysByActions(SelenideElement element, String keys) { - log.debug("\nsendKeysByActions: {} \nsend keys '{}'", element.getSearchCriteria(), keys); + log.debug("\nsendKeysByActions: {{}} \nsend keys '{}'", element.getSearchCriteria(), keys); element.shouldBe(Condition.enabled); - new Actions(WebDriverRunner.getWebDriver()) + Selenide.actions() .moveToElement(element) .sendKeys(element, keys) .perform(); } public static void clickByJavaScript(SelenideElement element) { - log.debug("\nclickByJavaScript: {}", element.getSearchCriteria()); + log.debug("\nclickByJavaScript: {{}}", element.getSearchCriteria()); element.shouldBe(Condition.enabled); String script = "arguments[0].click();"; - executeJavaScript(script, element); + Selenide.executeJavaScript(script, element); } public static void clearByKeyboard(SelenideElement field) { - log.debug("\nclearByKeyboard: {}", field.getSearchCriteria()); + log.debug("\nclearByKeyboard: {{}}", field.getSearchCriteria()); field.shouldBe(Condition.enabled).sendKeys(Keys.END); field.sendKeys(Keys.chord(Keys.CONTROL + "a"), Keys.DELETE); } public static boolean isVisible(SelenideElement element, int... timeoutInSeconds) { - log.debug("\nisVisible: {}", element.getSearchCriteria()); + log.debug("\nisVisible: {{}}", element.getSearchCriteria()); boolean isVisible = false; try { element.shouldBe(Condition.visible, Duration.ofSeconds(getTimeout(timeoutInSeconds))); isVisible = true; - } catch (Throwable e) { - log.debug("{} is not visible", element.getSearchCriteria()); + } catch (Throwable ignored) { } + log.debug(LOG_RESULT, isVisible); return isVisible; } public static boolean isEnabled(SelenideElement element, int... timeoutInSeconds) { - log.debug("\nisEnabled: {}", element.getSearchCriteria()); + log.debug("\nisEnabled: {{}}", element.getSearchCriteria()); boolean isEnabled = false; try { element.shouldBe(Condition.enabled, Duration.ofSeconds(getTimeout(timeoutInSeconds))); isEnabled = true; - } catch (Throwable e) { - log.debug("{} is not enabled", element.getSearchCriteria()); + } catch (Throwable ignored) { } + log.debug(LOG_RESULT, isEnabled); return isEnabled; } public static boolean isSelected(SelenideElement element, int... timeoutInSeconds) { - log.debug("\nisSelected: {}", element.getSearchCriteria()); + log.debug("\nisSelected: {{}}", element.getSearchCriteria()); boolean isSelected = false; try { element.shouldBe(Condition.selected, Duration.ofSeconds(getTimeout(timeoutInSeconds))); isSelected = true; - } catch (Throwable e) { - log.debug("{} is not selected", element.getSearchCriteria()); + } catch (Throwable ignored) { } + log.debug(LOG_RESULT, isSelected); return isSelected; } public static void selectElement(SelenideElement element, boolean select) { + log.debug("\nselectElement: {{}} \nselect '{}'", element.getSearchCriteria(), select); if (select) { if (!element.isSelected()) { clickByJavaScript(element); diff --git a/e2e-tests/src/main/java/io/kafbat/ui/utilities/qase/QaseSetup.java b/e2e-tests/src/main/java/io/kafbat/ui/utilities/qase/QaseSetup.java deleted file mode 100644 index 405a9ecee..000000000 --- a/e2e-tests/src/main/java/io/kafbat/ui/utilities/qase/QaseSetup.java +++ /dev/null @@ -1,34 +0,0 @@ -package io.kafbat.ui.utilities.qase; - -import static io.kafbat.ui.settings.BaseSource.SUITE_NAME; -import static org.apache.commons.lang3.BooleanUtils.FALSE; -import static org.apache.commons.lang3.BooleanUtils.TRUE; -import static org.apache.commons.lang3.StringUtils.isEmpty; - -import io.kafbat.ui.settings.BaseSource; -import io.kafbat.ui.variables.Suite; -import java.time.OffsetDateTime; -import java.time.ZoneOffset; -import java.time.format.DateTimeFormatter; -import lombok.extern.slf4j.Slf4j; - -@Slf4j -public class QaseSetup { - - public static void qaseIntegrationSetup() { - String qaseApiToken = System.getProperty("QASEIO_API_TOKEN"); - if (isEmpty(qaseApiToken)) { - log.warn("Integration with Qase is disabled due to run config or token wasn't defined."); - System.setProperty("QASE_ENABLE", FALSE); - } else { - log.warn("Integration with Qase is enabled. Find this run at https://app.qase.io/run/KAFKAUI."); - String automation = SUITE_NAME.equalsIgnoreCase(Suite.MANUAL) ? "" : "Automation "; - System.setProperty("QASE_ENABLE", TRUE); - System.setProperty("QASE_PROJECT_CODE", "KAFKAUI"); - System.setProperty("QASE_API_TOKEN", qaseApiToken); - System.setProperty("QASE_USE_BULK", TRUE); - System.setProperty("QASE_RUN_NAME", DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm") - .format(OffsetDateTime.now(ZoneOffset.UTC)) + ": " + automation + SUITE_NAME.toUpperCase() + " suite"); - } - } -} diff --git a/e2e-tests/src/main/java/io/kafbat/ui/utilities/qase/annotations/Automation.java b/e2e-tests/src/main/java/io/kafbat/ui/utilities/qase/annotations/Automation.java deleted file mode 100644 index a384f70ee..000000000 --- a/e2e-tests/src/main/java/io/kafbat/ui/utilities/qase/annotations/Automation.java +++ /dev/null @@ -1,14 +0,0 @@ -package io.kafbat.ui.utilities.qase.annotations; - -import io.kafbat.ui.utilities.qase.enums.State; -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -@Target(ElementType.METHOD) -@Retention(RetentionPolicy.RUNTIME) -public @interface Automation { - - State state(); -} diff --git a/e2e-tests/src/main/java/io/kafbat/ui/utilities/qase/annotations/Status.java b/e2e-tests/src/main/java/io/kafbat/ui/utilities/qase/annotations/Status.java deleted file mode 100644 index 446b2cfbb..000000000 --- a/e2e-tests/src/main/java/io/kafbat/ui/utilities/qase/annotations/Status.java +++ /dev/null @@ -1,13 +0,0 @@ -package io.kafbat.ui.utilities.qase.annotations; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -@Target(ElementType.METHOD) -@Retention(RetentionPolicy.RUNTIME) -public @interface Status { - - io.kafbat.ui.utilities.qase.enums.Status status(); -} diff --git a/e2e-tests/src/main/java/io/kafbat/ui/utilities/qase/annotations/Suite.java b/e2e-tests/src/main/java/io/kafbat/ui/utilities/qase/annotations/Suite.java deleted file mode 100644 index 2f13ace63..000000000 --- a/e2e-tests/src/main/java/io/kafbat/ui/utilities/qase/annotations/Suite.java +++ /dev/null @@ -1,13 +0,0 @@ -package io.kafbat.ui.utilities.qase.annotations; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -@Target(ElementType.METHOD) -@Retention(RetentionPolicy.RUNTIME) -public @interface Suite { - - long id(); -} diff --git a/e2e-tests/src/main/java/io/kafbat/ui/utilities/qase/enums/State.java b/e2e-tests/src/main/java/io/kafbat/ui/utilities/qase/enums/State.java deleted file mode 100644 index b4f7bb814..000000000 --- a/e2e-tests/src/main/java/io/kafbat/ui/utilities/qase/enums/State.java +++ /dev/null @@ -1,18 +0,0 @@ -package io.kafbat.ui.utilities.qase.enums; - -public enum State { - - NOT_AUTOMATED(0), - TO_BE_AUTOMATED(1), - AUTOMATED(2); - - private final int value; - - State(int value) { - this.value = value; - } - - public int getValue() { - return value; - } -} diff --git a/e2e-tests/src/main/java/io/kafbat/ui/utilities/qase/enums/Status.java b/e2e-tests/src/main/java/io/kafbat/ui/utilities/qase/enums/Status.java deleted file mode 100644 index 2e98d7d1b..000000000 --- a/e2e-tests/src/main/java/io/kafbat/ui/utilities/qase/enums/Status.java +++ /dev/null @@ -1,18 +0,0 @@ -package io.kafbat.ui.utilities.qase.enums; - -public enum Status { - - ACTUAL(0), - DRAFT(1), - DEPRECATED(2); - - private final int value; - - Status(int value) { - this.value = value; - } - - public int getValue() { - return value; - } -} diff --git a/e2e-tests/src/main/java/io/kafbat/ui/variables/Common.java b/e2e-tests/src/main/java/io/kafbat/ui/variables/Common.java new file mode 100644 index 000000000..33517d7dc --- /dev/null +++ b/e2e-tests/src/main/java/io/kafbat/ui/variables/Common.java @@ -0,0 +1,19 @@ +package io.kafbat.ui.variables; + +public interface Common { + + String LOG_RESULT = "-> {}"; + String BROKER_SOURCE_INFO_TOOLTIP = + """ + Dynamic topic config = dynamic topic config that is configured for a specific topic + Dynamic broker logger config = dynamic broker logger config that is configured for a specific broker + Dynamic broker config = dynamic broker config that is configured for a specific broker + Dynamic default broker config = dynamic broker config that is configured as default \ + for all brokers in the cluster + Static broker config = static broker config provided as broker properties at start up \ + (e.g. server.properties file) + Default config = built-in default configuration for configs that have a default value + Unknown = source unknown e.g. in the ConfigEntry used for alter requests where source is not set"""; + String FILTER_CODE_STRING = "has(record.keyAsText) && record.keyAsText.matches(\".*[Gg]roovy.*\")"; + String FILTER_CODE_JSON = "has(record.key.name.first) && record.key.name.first == 'user1'"; +} diff --git a/e2e-tests/src/main/java/io/kafbat/ui/variables/Expected.java b/e2e-tests/src/main/java/io/kafbat/ui/variables/Expected.java deleted file mode 100644 index 3bd4ee7c0..000000000 --- a/e2e-tests/src/main/java/io/kafbat/ui/variables/Expected.java +++ /dev/null @@ -1,15 +0,0 @@ -package io.kafbat.ui.variables; - -public interface Expected { - - String BROKER_SOURCE_INFO_TOOLTIP = - "DYNAMIC_TOPIC_CONFIG = dynamic topic config that is configured for a specific topic\n" - + "DYNAMIC_BROKER_LOGGER_CONFIG = dynamic broker logger config that is configured for a specific broker\n" - + "DYNAMIC_BROKER_CONFIG = dynamic broker config that is configured for a specific broker\n" - + "DYNAMIC_DEFAULT_BROKER_CONFIG = dynamic broker config that is configured as default " - + "for all brokers in the cluster\n" - + "STATIC_BROKER_CONFIG = static broker config provided as broker properties at start up " - + "(e.g. server.properties file)\n" - + "DEFAULT_CONFIG = built-in default configuration for configs that have a default value\n" - + "UNKNOWN = source unknown e.g. in the ConfigEntry used for alter requests where source is not set"; -} diff --git a/e2e-tests/src/main/java/io/kafbat/ui/variables/Suite.java b/e2e-tests/src/main/java/io/kafbat/ui/variables/Suite.java deleted file mode 100644 index 635336f0b..000000000 --- a/e2e-tests/src/main/java/io/kafbat/ui/variables/Suite.java +++ /dev/null @@ -1,10 +0,0 @@ -package io.kafbat.ui.variables; - -public interface Suite { - - String CUSTOM = "custom"; - String MANUAL = "manual"; - String REGRESSION = "regression"; - String SANITY = "sanity"; - String SMOKE = "smoke"; -} diff --git a/e2e-tests/src/main/resources/allure.properties b/e2e-tests/src/main/resources/allure.properties deleted file mode 100644 index bdab607a4..000000000 --- a/e2e-tests/src/main/resources/allure.properties +++ /dev/null @@ -1,2 +0,0 @@ -allure.results.directory=allure-results -allure.link.issue.pattern=https://github.com/kafbat/kafka-ui/issues/{} diff --git a/e2e-tests/src/main/resources/testData/connectors/config_for_create_connector.json b/e2e-tests/src/main/resources/testdata/connectors/create_config.json similarity index 100% rename from e2e-tests/src/main/resources/testData/connectors/config_for_create_connector.json rename to e2e-tests/src/main/resources/testdata/connectors/create_config.json diff --git a/e2e-tests/src/main/resources/testData/connectors/config_for_create_connector_via_api.json b/e2e-tests/src/main/resources/testdata/connectors/create_config_api.json similarity index 100% rename from e2e-tests/src/main/resources/testData/connectors/config_for_create_connector_via_api.json rename to e2e-tests/src/main/resources/testdata/connectors/create_config_api.json diff --git a/e2e-tests/src/main/resources/testData/connectors/delete_connector_config.json b/e2e-tests/src/main/resources/testdata/connectors/delete_config.json similarity index 100% rename from e2e-tests/src/main/resources/testData/connectors/delete_connector_config.json rename to e2e-tests/src/main/resources/testdata/connectors/delete_config.json diff --git a/e2e-tests/src/main/resources/testData/connectors/config_for_update_connector.json b/e2e-tests/src/main/resources/testdata/connectors/update_config.json similarity index 100% rename from e2e-tests/src/main/resources/testData/connectors/config_for_update_connector.json rename to e2e-tests/src/main/resources/testdata/connectors/update_config.json diff --git a/e2e-tests/src/main/resources/testData/schemas/schema_avro_for_update.json b/e2e-tests/src/main/resources/testdata/schemas/schema_avro_update.json similarity index 100% rename from e2e-tests/src/main/resources/testData/schemas/schema_avro_for_update.json rename to e2e-tests/src/main/resources/testdata/schemas/schema_avro_update.json diff --git a/e2e-tests/src/main/resources/testData/schemas/schema_avro_value.json b/e2e-tests/src/main/resources/testdata/schemas/schema_avro_value.json similarity index 100% rename from e2e-tests/src/main/resources/testData/schemas/schema_avro_value.json rename to e2e-tests/src/main/resources/testdata/schemas/schema_avro_value.json diff --git a/e2e-tests/src/main/resources/testData/schemas/schema_json_Value.json b/e2e-tests/src/main/resources/testdata/schemas/schema_json_value.json similarity index 100% rename from e2e-tests/src/main/resources/testData/schemas/schema_json_Value.json rename to e2e-tests/src/main/resources/testdata/schemas/schema_json_value.json diff --git a/e2e-tests/src/main/resources/testData/schemas/schema_protobuf_value.txt b/e2e-tests/src/main/resources/testdata/schemas/schema_protobuf_value.txt similarity index 100% rename from e2e-tests/src/main/resources/testData/schemas/schema_protobuf_value.txt rename to e2e-tests/src/main/resources/testdata/schemas/schema_protobuf_value.txt diff --git a/e2e-tests/src/main/resources/testData/topics/message_content_create_topic.json b/e2e-tests/src/main/resources/testdata/topics/create_topic_content.json similarity index 100% rename from e2e-tests/src/main/resources/testData/topics/message_content_create_topic.json rename to e2e-tests/src/main/resources/testdata/topics/create_topic_content.json diff --git a/e2e-tests/src/test/java/io/kafbat/ui/BaseTest.java b/e2e-tests/src/test/java/io/kafbat/ui/BaseTest.java index f7489c6cc..15e7a84ec 100644 --- a/e2e-tests/src/test/java/io/kafbat/ui/BaseTest.java +++ b/e2e-tests/src/test/java/io/kafbat/ui/BaseTest.java @@ -1,15 +1,13 @@ package io.kafbat.ui; -import com.codeborne.selenide.Condition; -import com.codeborne.selenide.Selenide; import com.codeborne.selenide.SelenideElement; -import io.kafbat.ui.pages.panels.enums.MenuItem; +import com.codeborne.selenide.WebElementCondition; +import io.github.bonigarcia.wdm.WebDriverManager; +import io.kafbat.ui.screens.panels.enums.MenuItem; import io.kafbat.ui.settings.BaseSource; import io.kafbat.ui.settings.drivers.WebDriver; import io.kafbat.ui.settings.listeners.AllureListener; -import io.kafbat.ui.settings.listeners.LoggerListener; -import io.kafbat.ui.settings.listeners.QaseResultListener; -import io.kafbat.ui.utilities.qase.QaseSetup; +import io.kafbat.ui.settings.listeners.ResultsLogger; import io.qameta.allure.Step; import java.util.List; import lombok.extern.slf4j.Slf4j; @@ -21,13 +19,13 @@ import org.testng.asserts.SoftAssert; @Slf4j -@Listeners({AllureListener.class, LoggerListener.class, QaseResultListener.class}) +@Listeners({AllureListener.class, ResultsLogger.class}) public abstract class BaseTest extends Facade { @BeforeSuite(alwaysRun = true) public void beforeSuite() { - QaseSetup.qaseIntegrationSetup(); - WebDriver.loggerSetup(); + WebDriverManager.chromedriver().setup(); + WebDriver.selenideLoggerSetup(); WebDriver.browserSetup(); } @@ -38,7 +36,7 @@ public void afterSuite() { @BeforeMethod(alwaysRun = true) public void beforeMethod() { - Selenide.open(BaseSource.BASE_UI_URL); + WebDriver.openUrl(BaseSource.BASE_UI_URL); naviSideBar.waitUntilScreenReady(); } @@ -57,10 +55,8 @@ protected void navigateToBrokers() { @Step protected void navigateToBrokersAndOpenDetails(int brokerId) { - naviSideBar - .openSideMenu(MenuItem.BROKERS); + navigateToBrokers(); brokersList - .waitUntilScreenReady() .openBroker(brokerId); brokersDetails .waitUntilScreenReady(); @@ -135,7 +131,7 @@ protected void navigateToKsqlDb() { } @Step - protected void verifyElementsCondition(List elementList, Condition expectedCondition) { + protected void verifyElementsCondition(List elementList, WebElementCondition expectedCondition) { SoftAssert softly = new SoftAssert(); elementList.forEach(element -> softly.assertTrue(element.is(expectedCondition), element.getSearchCriteria() + " is " + expectedCondition)); diff --git a/e2e-tests/src/test/java/io/kafbat/ui/Facade.java b/e2e-tests/src/test/java/io/kafbat/ui/Facade.java index 3b9433ee3..e740753e5 100644 --- a/e2e-tests/src/test/java/io/kafbat/ui/Facade.java +++ b/e2e-tests/src/test/java/io/kafbat/ui/Facade.java @@ -1,25 +1,25 @@ package io.kafbat.ui; -import io.kafbat.ui.pages.brokers.BrokersConfigTab; -import io.kafbat.ui.pages.brokers.BrokersDetails; -import io.kafbat.ui.pages.brokers.BrokersList; -import io.kafbat.ui.pages.connectors.ConnectorCreateForm; -import io.kafbat.ui.pages.connectors.ConnectorDetails; -import io.kafbat.ui.pages.connectors.KafkaConnectList; -import io.kafbat.ui.pages.consumers.ConsumersDetails; -import io.kafbat.ui.pages.consumers.ConsumersList; -import io.kafbat.ui.pages.ksqldb.KsqlDbList; -import io.kafbat.ui.pages.ksqldb.KsqlQueryForm; -import io.kafbat.ui.pages.panels.NaviSideBar; -import io.kafbat.ui.pages.panels.TopPanel; -import io.kafbat.ui.pages.schemas.SchemaCreateForm; -import io.kafbat.ui.pages.schemas.SchemaDetails; -import io.kafbat.ui.pages.schemas.SchemaRegistryList; -import io.kafbat.ui.pages.topics.ProduceMessagePanel; -import io.kafbat.ui.pages.topics.TopicCreateEditForm; -import io.kafbat.ui.pages.topics.TopicDetails; -import io.kafbat.ui.pages.topics.TopicSettingsTab; -import io.kafbat.ui.pages.topics.TopicsList; +import io.kafbat.ui.screens.brokers.BrokersConfigTab; +import io.kafbat.ui.screens.brokers.BrokersDetails; +import io.kafbat.ui.screens.brokers.BrokersList; +import io.kafbat.ui.screens.connectors.ConnectorCreateForm; +import io.kafbat.ui.screens.connectors.ConnectorDetails; +import io.kafbat.ui.screens.connectors.KafkaConnectList; +import io.kafbat.ui.screens.consumers.ConsumersDetails; +import io.kafbat.ui.screens.consumers.ConsumersList; +import io.kafbat.ui.screens.ksqldb.KsqlDbList; +import io.kafbat.ui.screens.ksqldb.KsqlQueryForm; +import io.kafbat.ui.screens.panels.NaviSideBar; +import io.kafbat.ui.screens.panels.TopPanel; +import io.kafbat.ui.screens.schemas.SchemaCreateForm; +import io.kafbat.ui.screens.schemas.SchemaDetails; +import io.kafbat.ui.screens.schemas.SchemaRegistryList; +import io.kafbat.ui.screens.topics.ProduceMessagePanel; +import io.kafbat.ui.screens.topics.TopicCreateEditForm; +import io.kafbat.ui.screens.topics.TopicDetails; +import io.kafbat.ui.screens.topics.TopicSettingsTab; +import io.kafbat.ui.screens.topics.TopicsList; import io.kafbat.ui.services.ApiService; public abstract class Facade { diff --git a/e2e-tests/src/test/java/io/kafbat/ui/manualsuite/BaseManualTest.java b/e2e-tests/src/test/java/io/kafbat/ui/manualsuite/BaseManualTest.java deleted file mode 100644 index 8c46b682b..000000000 --- a/e2e-tests/src/test/java/io/kafbat/ui/manualsuite/BaseManualTest.java +++ /dev/null @@ -1,28 +0,0 @@ -package io.kafbat.ui.manualsuite; - -import io.kafbat.ui.settings.listeners.QaseResultListener; -import io.kafbat.ui.utilities.qase.QaseSetup; -import io.kafbat.ui.utilities.qase.annotations.Automation; -import io.kafbat.ui.utilities.qase.enums.State; -import java.lang.reflect.Method; -import org.testng.SkipException; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.BeforeSuite; -import org.testng.annotations.Listeners; - -@Listeners(QaseResultListener.class) -public abstract class BaseManualTest { - - @BeforeSuite - public void beforeSuite() { - QaseSetup.qaseIntegrationSetup(); - } - - @BeforeMethod - public void beforeMethod(Method method) { - if (method.getAnnotation(Automation.class).state().equals(State.NOT_AUTOMATED) - || method.getAnnotation(Automation.class).state().equals(State.TO_BE_AUTOMATED)) { - throw new SkipException("Skip test exception"); - } - } -} diff --git a/e2e-tests/src/test/java/io/kafbat/ui/manualsuite/backlog/SanityBacklog.java b/e2e-tests/src/test/java/io/kafbat/ui/manualsuite/backlog/SanityBacklog.java deleted file mode 100644 index a3c7e4963..000000000 --- a/e2e-tests/src/test/java/io/kafbat/ui/manualsuite/backlog/SanityBacklog.java +++ /dev/null @@ -1,7 +0,0 @@ -package io.kafbat.ui.manualsuite.backlog; - -import io.kafbat.ui.manualsuite.BaseManualTest; - -public class SanityBacklog extends BaseManualTest { - -} diff --git a/e2e-tests/src/test/java/io/kafbat/ui/manualsuite/backlog/SmokeBacklog.java b/e2e-tests/src/test/java/io/kafbat/ui/manualsuite/backlog/SmokeBacklog.java deleted file mode 100644 index 6001f10fa..000000000 --- a/e2e-tests/src/test/java/io/kafbat/ui/manualsuite/backlog/SmokeBacklog.java +++ /dev/null @@ -1,68 +0,0 @@ -package io.kafbat.ui.manualsuite.backlog; - -import io.kafbat.ui.manualsuite.BaseManualTest; -import io.kafbat.ui.qasesuite.BaseQaseTest; -import io.kafbat.ui.utilities.qase.annotations.Automation; -import io.kafbat.ui.utilities.qase.annotations.Suite; -import io.kafbat.ui.utilities.qase.enums.State; -import io.qase.api.annotation.QaseId; -import org.testng.annotations.Test; - -public class SmokeBacklog extends BaseManualTest { - - @Automation(state = State.TO_BE_AUTOMATED) - @Suite(id = BaseQaseTest.TOPICS_PROFILE_SUITE_ID) - @QaseId(335) - @Test - public void testCaseA() { - } - - @Automation(state = State.TO_BE_AUTOMATED) - @Suite(id = BaseQaseTest.TOPICS_PROFILE_SUITE_ID) - @QaseId(336) - @Test - public void testCaseB() { - } - - @Automation(state = State.TO_BE_AUTOMATED) - @Suite(id = BaseQaseTest.TOPICS_PROFILE_SUITE_ID) - @QaseId(343) - @Test - public void testCaseC() { - } - - @Automation(state = State.TO_BE_AUTOMATED) - @Suite(id = BaseQaseTest.SCHEMAS_SUITE_ID) - @QaseId(345) - @Test - public void testCaseD() { - } - - @Automation(state = State.TO_BE_AUTOMATED) - @Suite(id = BaseQaseTest.SCHEMAS_SUITE_ID) - @QaseId(346) - @Test - public void testCaseE() { - } - - @Automation(state = State.TO_BE_AUTOMATED) - @Suite(id = BaseQaseTest.TOPICS_PROFILE_SUITE_ID) - @QaseId(347) - @Test - public void testCaseF() { - } - - @Automation(state = State.NOT_AUTOMATED) - @Suite(id = BaseQaseTest.TOPICS_SUITE_ID) - @QaseId(50) - @Test - public void testCaseG() { - } - - @Automation(state = State.NOT_AUTOMATED) - @Suite(id = BaseQaseTest.SCHEMAS_SUITE_ID) - @QaseId(351) - @Test - public void testCaseH() { - } -} diff --git a/e2e-tests/src/test/java/io/kafbat/ui/manualsuite/suite/DataMaskingTest.java b/e2e-tests/src/test/java/io/kafbat/ui/manualsuite/suite/DataMaskingTest.java deleted file mode 100644 index 108dc84fd..000000000 --- a/e2e-tests/src/test/java/io/kafbat/ui/manualsuite/suite/DataMaskingTest.java +++ /dev/null @@ -1,28 +0,0 @@ -package io.kafbat.ui.manualsuite.suite; - -import io.kafbat.ui.manualsuite.BaseManualTest; -import io.kafbat.ui.utilities.qase.annotations.Automation; -import io.kafbat.ui.utilities.qase.enums.State; -import io.qase.api.annotation.QaseId; -import org.testng.annotations.Test; - -public class DataMaskingTest extends BaseManualTest { - - @Automation(state = State.NOT_AUTOMATED) - @QaseId(262) - @Test - public void testCaseA() { - } - - @Automation(state = State.NOT_AUTOMATED) - @QaseId(264) - @Test - public void testCaseB() { - } - - @Automation(state = State.NOT_AUTOMATED) - @QaseId(265) - @Test - public void testCaseC() { - } -} diff --git a/e2e-tests/src/test/java/io/kafbat/ui/manualsuite/suite/RbacTest.java b/e2e-tests/src/test/java/io/kafbat/ui/manualsuite/suite/RbacTest.java deleted file mode 100644 index 4e84c24f2..000000000 --- a/e2e-tests/src/test/java/io/kafbat/ui/manualsuite/suite/RbacTest.java +++ /dev/null @@ -1,52 +0,0 @@ -package io.kafbat.ui.manualsuite.suite; - -import io.kafbat.ui.manualsuite.BaseManualTest; -import io.kafbat.ui.utilities.qase.annotations.Automation; -import io.kafbat.ui.utilities.qase.enums.State; -import io.qase.api.annotation.QaseId; -import org.testng.annotations.Test; - -public class RbacTest extends BaseManualTest { - - @Automation(state = State.NOT_AUTOMATED) - @QaseId(249) - @Test - public void testCaseA() { - } - - @Automation(state = State.NOT_AUTOMATED) - @QaseId(251) - @Test - public void testCaseB() { - } - - @Automation(state = State.NOT_AUTOMATED) - @QaseId(257) - @Test - public void testCaseC() { - } - - @Automation(state = State.NOT_AUTOMATED) - @QaseId(258) - @Test - public void testCaseD() { - } - - @Automation(state = State.NOT_AUTOMATED) - @QaseId(259) - @Test - public void testCaseE() { - } - - @Automation(state = State.NOT_AUTOMATED) - @QaseId(260) - @Test - public void testCaseF() { - } - - @Automation(state = State.NOT_AUTOMATED) - @QaseId(261) - @Test - public void testCaseG() { - } -} diff --git a/e2e-tests/src/test/java/io/kafbat/ui/manualsuite/suite/TopicsTest.java b/e2e-tests/src/test/java/io/kafbat/ui/manualsuite/suite/TopicsTest.java deleted file mode 100644 index a6f548f9b..000000000 --- a/e2e-tests/src/test/java/io/kafbat/ui/manualsuite/suite/TopicsTest.java +++ /dev/null @@ -1,112 +0,0 @@ -package io.kafbat.ui.manualsuite.suite; - -import io.kafbat.ui.manualsuite.BaseManualTest; -import io.kafbat.ui.utilities.qase.annotations.Automation; -import io.kafbat.ui.utilities.qase.enums.State; -import io.qase.api.annotation.QaseId; -import org.testng.annotations.Test; - -public class TopicsTest extends BaseManualTest { - - @Automation(state = State.NOT_AUTOMATED) - @QaseId(17) - @Test - public void testCaseA() { - } - - @Automation(state = State.NOT_AUTOMATED) - @QaseId(18) - @Test - public void testCaseB() { - } - - @Automation(state = State.NOT_AUTOMATED) - @QaseId(21) - @Test() - public void testCaseC() { - } - - @Automation(state = State.NOT_AUTOMATED) - @QaseId(22) - @Test - public void testCaseD() { - } - - @Automation(state = State.NOT_AUTOMATED) - @QaseId(47) - @Test - public void testCaseE() { - } - - @Automation(state = State.NOT_AUTOMATED) - @QaseId(48) - @Test - public void testCaseF() { - } - - @Automation(state = State.NOT_AUTOMATED) - @QaseId(49) - @Test - public void testCaseG() { - } - - @Automation(state = State.NOT_AUTOMATED) - @QaseId(57) - @Test - public void testCaseH() { - } - - @Automation(state = State.NOT_AUTOMATED) - @QaseId(58) - @Test - public void testCaseI() { - } - - @Automation(state = State.NOT_AUTOMATED) - @QaseId(269) - @Test - public void testCaseJ() { - } - - @Automation(state = State.NOT_AUTOMATED) - @QaseId(270) - @Test - public void testCaseK() { - } - - @Automation(state = State.NOT_AUTOMATED) - @QaseId(271) - @Test - public void testCaseL() { - } - - @Automation(state = State.NOT_AUTOMATED) - @QaseId(272) - @Test - public void testCaseM() { - } - - @Automation(state = State.NOT_AUTOMATED) - @QaseId(337) - @Test - public void testCaseN() { - } - - @Automation(state = State.NOT_AUTOMATED) - @QaseId(339) - @Test - public void testCaseO() { - } - - @Automation(state = State.NOT_AUTOMATED) - @QaseId(341) - @Test - public void testCaseP() { - } - - @Automation(state = State.NOT_AUTOMATED) - @QaseId(342) - @Test - public void testCaseQ() { - } -} diff --git a/e2e-tests/src/test/java/io/kafbat/ui/manualsuite/suite/WizardTest.java b/e2e-tests/src/test/java/io/kafbat/ui/manualsuite/suite/WizardTest.java deleted file mode 100644 index 700351558..000000000 --- a/e2e-tests/src/test/java/io/kafbat/ui/manualsuite/suite/WizardTest.java +++ /dev/null @@ -1,28 +0,0 @@ -package io.kafbat.ui.manualsuite.suite; - -import io.kafbat.ui.manualsuite.BaseManualTest; -import io.kafbat.ui.utilities.qase.annotations.Automation; -import io.kafbat.ui.utilities.qase.enums.State; -import io.qase.api.annotation.QaseId; -import org.testng.annotations.Test; - -public class WizardTest extends BaseManualTest { - - @Automation(state = State.NOT_AUTOMATED) - @QaseId(333) - @Test - public void testCaseA() { - } - - @Automation(state = State.NOT_AUTOMATED) - @QaseId(338) - @Test - public void testCaseB() { - } - - @Automation(state = State.NOT_AUTOMATED) - @QaseId(340) - @Test - public void testCaseC() { - } -} diff --git a/e2e-tests/src/test/java/io/kafbat/ui/qasesuite/BaseQaseTest.java b/e2e-tests/src/test/java/io/kafbat/ui/qasesuite/BaseQaseTest.java deleted file mode 100644 index 4424c7ab7..000000000 --- a/e2e-tests/src/test/java/io/kafbat/ui/qasesuite/BaseQaseTest.java +++ /dev/null @@ -1,24 +0,0 @@ -package io.kafbat.ui.qasesuite; - -import io.kafbat.ui.settings.listeners.QaseCreateListener; -import io.kafbat.ui.utilities.qase.QaseSetup; -import org.testng.annotations.BeforeSuite; -import org.testng.annotations.Listeners; - -@Listeners(QaseCreateListener.class) -public abstract class BaseQaseTest { - - public static final long BROKERS_SUITE_ID = 1; - public static final long CONNECTORS_SUITE_ID = 10; - public static final long KSQL_DB_SUITE_ID = 8; - public static final long SANITY_SUITE_ID = 19; - public static final long SCHEMAS_SUITE_ID = 11; - public static final long TOPICS_SUITE_ID = 2; - public static final long TOPICS_CREATE_SUITE_ID = 4; - public static final long TOPICS_PROFILE_SUITE_ID = 5; - - @BeforeSuite - public void beforeSuite() { - QaseSetup.qaseIntegrationSetup(); - } -} diff --git a/e2e-tests/src/test/java/io/kafbat/ui/qasesuite/Template.java b/e2e-tests/src/test/java/io/kafbat/ui/qasesuite/Template.java deleted file mode 100644 index 9903ee50e..000000000 --- a/e2e-tests/src/test/java/io/kafbat/ui/qasesuite/Template.java +++ /dev/null @@ -1,56 +0,0 @@ -package io.kafbat.ui.qasesuite; - -import io.kafbat.ui.utilities.qase.annotations.Automation; -import io.kafbat.ui.utilities.qase.annotations.Status; -import io.kafbat.ui.utilities.qase.annotations.Suite; -import io.kafbat.ui.utilities.qase.enums.State; -import io.qase.api.annotation.QaseTitle; -import io.qase.api.annotation.Step; - -public class Template extends BaseQaseTest { - - /** - * this class is a kind of placeholder or example, use is as template to create new one - * copy Template into e2e-tests/src/test/java/io/kafbat/ui/qaseSuite/ - * place it into regarding folder and rename according to test case summary from Qase.io - * uncomment @Test and set all annotations according to e2e-tests/QASE.md - */ - - @Automation(state = State.NOT_AUTOMATED) - @QaseTitle("testCaseA title") - @Status(status = io.kafbat.ui.utilities.qase.enums.Status.DRAFT) - @Suite(id = 0) - // @org.testng.annotations.Test - public void testCaseA() { - stepA(); - stepB(); - stepC(); - stepD(); - stepE(); - stepF(); - } - - @Step("stepA action") - private void stepA() { - } - - @Step("stepB action") - private void stepB() { - } - - @Step("stepC action") - private void stepC() { - } - - @Step("stepD action") - private void stepD() { - } - - @Step("stepE action") - private void stepE() { - } - - @Step("stepF action") - private void stepF() { - } -} diff --git a/e2e-tests/src/test/java/io/kafbat/ui/sanitysuite/TopicsTest.java b/e2e-tests/src/test/java/io/kafbat/ui/sanitysuite/TopicsTest.java index d1cbb80fe..96ca8a90d 100644 --- a/e2e-tests/src/test/java/io/kafbat/ui/sanitysuite/TopicsTest.java +++ b/e2e-tests/src/test/java/io/kafbat/ui/sanitysuite/TopicsTest.java @@ -1,11 +1,9 @@ package io.kafbat.ui.sanitysuite; -import static org.apache.commons.lang3.RandomStringUtils.randomAlphabetic; - import io.kafbat.ui.BaseTest; import io.kafbat.ui.models.Topic; -import io.kafbat.ui.pages.topics.enums.CleanupPolicyValue; -import io.qase.api.annotation.QaseId; +import io.kafbat.ui.screens.topics.enums.CleanupPolicyValue; +import io.qameta.allure.Step; import java.util.ArrayList; import java.util.List; import org.testng.Assert; @@ -16,12 +14,9 @@ public class TopicsTest extends BaseTest { private static final List TOPIC_LIST = new ArrayList<>(); - @QaseId(285) @Test() public void verifyClearMessagesMenuStateAfterTopicUpdate() { - Topic topic = new Topic() - .setName("topic-" + randomAlphabetic(5)) - .setNumberOfPartitions(1) + Topic topic = Topic.createTopic() .setCleanupPolicyValue(CleanupPolicyValue.DELETE); navigateToTopics(); topicsList @@ -37,15 +32,16 @@ public void verifyClearMessagesMenuStateAfterTopicUpdate() { TOPIC_LIST.add(topic); topicDetails .openDotMenu(); - Assert.assertTrue(topicDetails.isClearMessagesMenuEnabled(), "isClearMessagesMenuEnabled"); + Assert.assertTrue(topicDetails.isClearMessagesMenuEnabled(), "isClearMessagesMenuEnabled()"); topic.setCleanupPolicyValue(CleanupPolicyValue.COMPACT); editCleanUpPolicyAndOpenDotMenu(topic); - Assert.assertFalse(topicDetails.isClearMessagesMenuEnabled(), "isClearMessagesMenuEnabled"); + Assert.assertFalse(topicDetails.isClearMessagesMenuEnabled(), "isClearMessagesMenuEnabled()"); topic.setCleanupPolicyValue(CleanupPolicyValue.DELETE); editCleanUpPolicyAndOpenDotMenu(topic); - Assert.assertTrue(topicDetails.isClearMessagesMenuEnabled(), "isClearMessagesMenuEnabled"); + Assert.assertTrue(topicDetails.isClearMessagesMenuEnabled(), "isClearMessagesMenuEnabled()"); } + @Step private void editCleanUpPolicyAndOpenDotMenu(Topic topic) { topicDetails .clickEditSettingsMenu(); diff --git a/e2e-tests/src/test/java/io/kafbat/ui/smokesuite/SmokeTest.java b/e2e-tests/src/test/java/io/kafbat/ui/smokesuite/SmokeTest.java index 4fe2a6188..b70bce4f8 100644 --- a/e2e-tests/src/test/java/io/kafbat/ui/smokesuite/SmokeTest.java +++ b/e2e-tests/src/test/java/io/kafbat/ui/smokesuite/SmokeTest.java @@ -1,6 +1,6 @@ package io.kafbat.ui.smokesuite; -import static org.apache.commons.lang3.RandomStringUtils.randomAlphabetic; +import static io.kafbat.ui.utilities.FileUtil.resourceToString; import com.codeborne.selenide.Condition; import com.codeborne.selenide.WebDriverRunner; @@ -8,12 +8,10 @@ import io.kafbat.ui.models.Connector; import io.kafbat.ui.models.Schema; import io.kafbat.ui.models.Topic; -import io.kafbat.ui.pages.panels.enums.MenuItem; +import io.kafbat.ui.screens.panels.enums.MenuItem; import io.kafbat.ui.settings.BaseSource; -import io.kafbat.ui.utilities.FileUtils; import io.kafbat.ui.variables.Url; import io.qameta.allure.Step; -import io.qase.api.annotation.QaseId; import java.util.stream.Collectors; import java.util.stream.Stream; import org.testng.Assert; @@ -25,12 +23,9 @@ public class SmokeTest extends BaseTest { private static final int BROKER_ID = 1; private static final Schema TEST_SCHEMA = Schema.createSchemaAvro(); - private static final Topic TEST_TOPIC = new Topic() - .setName("new-topic-" + randomAlphabetic(5)) - .setNumberOfPartitions(1); - private static final Connector TEST_CONNECTOR = new Connector() - .setName("new-connector-" + randomAlphabetic(5)) - .setConfig(FileUtils.getResourceAsString("testData/connectors/config_for_create_connector_via_api.json")); + private static final Topic TEST_TOPIC = Topic.createTopic(); + private static final Connector TEST_CONNECTOR = + Connector.createConnector(resourceToString("testdata/connectors/create_config_api.json")); @BeforeClass(alwaysRun = true) public void beforeClass() { @@ -40,9 +35,8 @@ public void beforeClass() { .createConnector(TEST_CONNECTOR); } - @QaseId(198) @Test - public void checkBasePageElements() { + public void basePageElementsCheck() { verifyElementsCondition( Stream.concat(topPanel.getAllVisibleElements().stream(), naviSideBar.getAllMenuButtons().stream()) .collect(Collectors.toList()), Condition.visible); @@ -51,9 +45,8 @@ public void checkBasePageElements() { .collect(Collectors.toList()), Condition.enabled); } - @QaseId(45) @Test - public void checkUrlWhileNavigating() { + public void urlWhileNavigationCheck() { navigateToBrokers(); verifyCurrentUrl(Url.BROKERS_LIST_URL); navigateToTopics(); @@ -68,9 +61,8 @@ public void checkUrlWhileNavigating() { verifyCurrentUrl(Url.KSQL_DB_LIST_URL); } - @QaseId(46) @Test - public void checkPathWhileNavigating() { + public void pathWhileNavigationCheck() { navigateToBrokersAndOpenDetails(BROKER_ID); verifyComponentsPath(MenuItem.BROKERS, String.format("Broker %d", BROKER_ID)); navigateToTopicsAndOpenDetails(TEST_TOPIC.getName()); @@ -93,7 +85,7 @@ private void verifyCurrentUrl(String expectedUrl) { @Step private void verifyComponentsPath(MenuItem menuItem, String expectedPath) { Assert.assertEquals(naviSideBar.getPagePath(menuItem), expectedPath, - String.format("getPagePath() for %s", menuItem.getPageTitle().toUpperCase())); + String.format("getPagePath()[%s]", menuItem.getPageTitle().toUpperCase())); } @AfterClass(alwaysRun = true) diff --git a/e2e-tests/src/test/java/io/kafbat/ui/smokesuite/brokers/BrokersTest.java b/e2e-tests/src/test/java/io/kafbat/ui/smokesuite/brokers/BrokersTest.java index 47a042694..2e41623ea 100644 --- a/e2e-tests/src/test/java/io/kafbat/ui/smokesuite/brokers/BrokersTest.java +++ b/e2e-tests/src/test/java/io/kafbat/ui/smokesuite/brokers/BrokersTest.java @@ -1,13 +1,14 @@ package io.kafbat.ui.smokesuite.brokers; +import static io.kafbat.ui.utilities.IntUtil.getIntegerFromString; + import com.codeborne.selenide.Condition; import io.kafbat.ui.BaseTest; -import io.kafbat.ui.pages.brokers.BrokersConfigTab; -import io.kafbat.ui.pages.brokers.BrokersDetails; -import io.kafbat.ui.utilities.StringUtils; -import io.kafbat.ui.variables.Expected; +import io.kafbat.ui.screens.brokers.BrokersConfigTab; +import io.kafbat.ui.screens.brokers.BrokersDetails; +import io.kafbat.ui.utilities.StringUtil; +import io.kafbat.ui.variables.Common; import io.qameta.allure.Issue; -import io.qase.api.annotation.QaseId; import java.util.List; import org.testng.Assert; import org.testng.annotations.Ignore; @@ -18,20 +19,18 @@ public class BrokersTest extends BaseTest { public static final int DEFAULT_BROKER_ID = 1; - @QaseId(1) @Test - public void checkBrokersOverview() { + public void brokersOverviewCheck() { navigateToBrokers(); - Assert.assertTrue(brokersList.getAllBrokers().size() > 0, "getAllBrokers()"); + Assert.assertFalse(brokersList.getAllBrokers().isEmpty(), "getAllBrokers()"); verifyElementsCondition(brokersList.getAllVisibleElements(), Condition.visible); verifyElementsCondition(brokersList.getAllEnabledElements(), Condition.enabled); } - @QaseId(85) @Test - public void checkExistingBrokersInCluster() { + public void existingBrokersInClusterCheck() { navigateToBrokers(); - Assert.assertTrue(brokersList.getAllBrokers().size() > 0, "getAllBrokers()"); + Assert.assertFalse(brokersList.getAllBrokers().isEmpty(), "getAllBrokers().isEmpty()"); brokersList .openBroker(DEFAULT_BROKER_ID); brokersDetails @@ -43,13 +42,11 @@ public void checkExistingBrokersInCluster() { brokersConfigTab .waitUntilScreenReady(); verifyElementsCondition(brokersConfigTab.getColumnHeaders(), Condition.visible); - verifyElementsCondition(brokersConfigTab.getEditButtons(), Condition.enabled); Assert.assertTrue(brokersConfigTab.isSearchByKeyVisible(), "isSearchByKeyVisible()"); } @Ignore - @Issue("https://github.com/kafbat/kafka-ui/issues/3347") - @QaseId(330) + @Issue("https://github.com/kafbat/kafka-ui/issues/209") @Test public void brokersConfigFirstPageSearchCheck() { navigateToBrokersAndOpenDetails(DEFAULT_BROKER_ID); @@ -64,18 +61,17 @@ public void brokersConfigFirstPageSearchCheck() { Assert.assertFalse(brokersConfigTab.getAllConfigs().stream() .map(BrokersConfigTab.BrokersConfigItem::getKey) .toList().contains(anyConfigKeyFirstPage), - String.format("getAllConfigs().contains(%s)", anyConfigKeyFirstPage)); + String.format("getAllConfigs().contains()[%s]", anyConfigKeyFirstPage)); brokersConfigTab .searchConfig(anyConfigKeyFirstPage); Assert.assertTrue(brokersConfigTab.getAllConfigs().stream() .map(BrokersConfigTab.BrokersConfigItem::getKey) .toList().contains(anyConfigKeyFirstPage), - String.format("getAllConfigs().contains(%s)", anyConfigKeyFirstPage)); + String.format("getAllConfigs().contains()[%s]", anyConfigKeyFirstPage)); } @Ignore - @Issue("https://github.com/kafbat/kafka-ui/issues/3347") - @QaseId(350) + @Issue("https://github.com/kafbat/kafka-ui/issues/209") @Test public void brokersConfigSecondPageSearchCheck() { navigateToBrokersAndOpenDetails(DEFAULT_BROKER_ID); @@ -92,18 +88,17 @@ public void brokersConfigSecondPageSearchCheck() { Assert.assertFalse(brokersConfigTab.getAllConfigs().stream() .map(BrokersConfigTab.BrokersConfigItem::getKey) .toList().contains(anyConfigKeySecondPage), - String.format("getAllConfigs().contains(%s)", anyConfigKeySecondPage)); + String.format("getAllConfigs().contains()[%s]", anyConfigKeySecondPage)); brokersConfigTab .searchConfig(anyConfigKeySecondPage); Assert.assertTrue(brokersConfigTab.getAllConfigs().stream() .map(BrokersConfigTab.BrokersConfigItem::getKey) .toList().contains(anyConfigKeySecondPage), - String.format("getAllConfigs().contains(%s)", anyConfigKeySecondPage)); + String.format("getAllConfigs().contains()[%s]", anyConfigKeySecondPage)); } @Ignore - @Issue("https://github.com/kafbat/kafka-ui/issues/3347") - @QaseId(348) + @Issue("https://github.com/kafbat/kafka-ui/issues/209") @Test public void brokersConfigCaseInsensitiveSearchCheck() { navigateToBrokersAndOpenDetails(DEFAULT_BROKER_ID); @@ -118,22 +113,21 @@ public void brokersConfigCaseInsensitiveSearchCheck() { Assert.assertFalse(brokersConfigTab.getAllConfigs().stream() .map(BrokersConfigTab.BrokersConfigItem::getKey) .toList().contains(anyConfigKeyFirstPage), - String.format("getAllConfigs().contains(%s)", anyConfigKeyFirstPage)); + String.format("getAllConfigs().contains()[%s]", anyConfigKeyFirstPage)); SoftAssert softly = new SoftAssert(); List.of(anyConfigKeyFirstPage.toLowerCase(), anyConfigKeyFirstPage.toUpperCase(), - StringUtils.getMixedCase(anyConfigKeyFirstPage)) + StringUtil.getMixedCase(anyConfigKeyFirstPage)) .forEach(configCase -> { brokersConfigTab .searchConfig(configCase); softly.assertTrue(brokersConfigTab.getAllConfigs().stream() .map(BrokersConfigTab.BrokersConfigItem::getKey) .toList().contains(anyConfigKeyFirstPage), - String.format("getAllConfigs().contains(%s)", configCase)); + String.format("getAllConfigs().contains()[%s]", configCase)); }); softly.assertAll(); } - @QaseId(331) @Test public void brokersSourceInfoCheck() { navigateToBrokersAndOpenDetails(DEFAULT_BROKER_ID); @@ -142,10 +136,9 @@ public void brokersSourceInfoCheck() { String sourceInfoTooltip = brokersConfigTab .hoverOnSourceInfoIcon() .getSourceInfoTooltipText(); - Assert.assertEquals(sourceInfoTooltip, Expected.BROKER_SOURCE_INFO_TOOLTIP, "brokerSourceInfoTooltip"); + Assert.assertEquals(sourceInfoTooltip, Common.BROKER_SOURCE_INFO_TOOLTIP, "getSourceInfoTooltipText()"); } - @QaseId(332) @Test public void brokersConfigEditCheck() { navigateToBrokersAndOpenDetails(DEFAULT_BROKER_ID); @@ -155,7 +148,7 @@ public void brokersConfigEditCheck() { BrokersConfigTab.BrokersConfigItem configItem = brokersConfigTab .searchConfig(configKey) .getConfig(configKey); - int defaultValue = Integer.parseInt(configItem.getValue()); + int defaultValue = getIntegerFromString(configItem.getValue(), false); configItem .clickEditBtn(); SoftAssert softly = new SoftAssert(); @@ -167,7 +160,8 @@ public void brokersConfigEditCheck() { configItem .setValue(String.valueOf(newValue)) .clickCancelBtn(); - Assert.assertEquals(Integer.parseInt(configItem.getValue()), defaultValue, "getValue()"); + Assert.assertEquals(getIntegerFromString(configItem.getValue(), false), defaultValue, + "configItem.getValue()"); configItem .clickEditBtn() .setValue(String.valueOf(newValue)) @@ -179,7 +173,8 @@ public void brokersConfigEditCheck() { softly.assertFalse(configItem.getSaveBtn().isDisplayed(), "getSaveBtn().isDisplayed()"); softly.assertFalse(configItem.getCancelBtn().isDisplayed(), "getCancelBtn().isDisplayed()"); softly.assertTrue(configItem.getEditBtn().isDisplayed(), "getEditBtn().isDisplayed()"); - softly.assertEquals(Integer.parseInt(configItem.getValue()), newValue, "getValue()"); + softly.assertEquals(getIntegerFromString(configItem.getValue(), false), newValue, + "configItem.getValue()"); softly.assertAll(); } } diff --git a/e2e-tests/src/test/java/io/kafbat/ui/smokesuite/connectors/ConnectorsTest.java b/e2e-tests/src/test/java/io/kafbat/ui/smokesuite/connectors/ConnectorsTest.java index fdbf097bf..78cbc3ecf 100644 --- a/e2e-tests/src/test/java/io/kafbat/ui/smokesuite/connectors/ConnectorsTest.java +++ b/e2e-tests/src/test/java/io/kafbat/ui/smokesuite/connectors/ConnectorsTest.java @@ -1,15 +1,12 @@ package io.kafbat.ui.smokesuite.connectors; -import static io.kafbat.ui.pages.BasePage.AlertHeader.SUCCESS; -import static io.kafbat.ui.utilities.FileUtils.getResourceAsString; -import static org.apache.commons.lang3.RandomStringUtils.randomAlphabetic; +import static io.kafbat.ui.models.Topic.createTopic; +import static io.kafbat.ui.screens.BasePage.AlertHeader.SUCCESS; +import static io.kafbat.ui.utilities.FileUtil.resourceToString; import io.kafbat.ui.BaseTest; import io.kafbat.ui.models.Connector; import io.kafbat.ui.models.Topic; -import io.kafbat.ui.pages.BasePage; -import io.kafbat.ui.utilities.FileUtils; -import io.qase.api.annotation.QaseId; import java.util.ArrayList; import java.util.List; import org.testng.Assert; @@ -19,85 +16,73 @@ public class ConnectorsTest extends BaseTest { + private static final String MESSAGE_CONTENT = resourceToString("testdata/topics/create_topic_content.json"); + private static final Topic CREATE_TOPIC = createTopic().setMessageValue(MESSAGE_CONTENT); + private static final Topic DELETE_TOPIC = createTopic().setMessageValue(MESSAGE_CONTENT); + private static final Topic UPDATE_TOPIC = createTopic().setMessageValue(MESSAGE_CONTENT); + private static final Connector DELETE_CONNECTOR = + Connector.createConnector(resourceToString("testdata/connectors/delete_config.json")); + private static final Connector UPDATE_CONNECTOR = + Connector.createConnector(resourceToString("testdata/connectors/create_config_api.json")); private static final List TOPIC_LIST = new ArrayList<>(); private static final List CONNECTOR_LIST = new ArrayList<>(); - private static final String MESSAGE_CONTENT = "testData/topics/message_content_create_topic.json"; - private static final String MESSAGE_KEY = " "; - private static final Topic TOPIC_FOR_CREATE = new Topic() - .setName("topic-for-create-connector-" + randomAlphabetic(5)) - .setMessageValue(MESSAGE_CONTENT).setMessageKey(MESSAGE_KEY); - private static final Topic TOPIC_FOR_DELETE = new Topic() - .setName("topic-for-delete-connector-" + randomAlphabetic(5)) - .setMessageValue(MESSAGE_CONTENT).setMessageKey(MESSAGE_KEY); - private static final Topic TOPIC_FOR_UPDATE = new Topic() - .setName("topic-for-update-connector-" + randomAlphabetic(5)) - .setMessageValue(MESSAGE_CONTENT).setMessageKey(MESSAGE_KEY); - private static final Connector CONNECTOR_FOR_DELETE = new Connector() - .setName("connector-for-delete-" + randomAlphabetic(5)) - .setConfig(getResourceAsString("testData/connectors/delete_connector_config.json")); - private static final Connector CONNECTOR_FOR_UPDATE = new Connector() - .setName("connector-for-update-and-delete-" + randomAlphabetic(5)) - .setConfig(getResourceAsString("testData/connectors/config_for_create_connector_via_api.json")); @BeforeClass(alwaysRun = true) public void beforeClass() { - TOPIC_LIST.addAll(List.of(TOPIC_FOR_CREATE, TOPIC_FOR_DELETE, TOPIC_FOR_UPDATE)); + TOPIC_LIST.addAll(List.of(CREATE_TOPIC, DELETE_TOPIC, UPDATE_TOPIC)); TOPIC_LIST.forEach(topic -> apiService .createTopic(topic) - .sendMessage(topic) - ); - CONNECTOR_LIST.addAll(List.of(CONNECTOR_FOR_DELETE, CONNECTOR_FOR_UPDATE)); + .sendMessage(topic)); + CONNECTOR_LIST.addAll(List.of(DELETE_CONNECTOR, UPDATE_CONNECTOR)); CONNECTOR_LIST.forEach(connector -> apiService.createConnector(connector)); } - @QaseId(42) @Test - public void createConnector() { - Connector connectorForCreate = new Connector() - .setName("connector-for-create-" + randomAlphabetic(5)) - .setConfig(getResourceAsString("testData/connectors/config_for_create_connector.json")); + public void createConnectorCheck() { + Connector createConnector = + Connector.createConnector(resourceToString("testdata/connectors/create_config.json")); navigateToConnectors(); kafkaConnectList .clickCreateConnectorBtn(); connectorCreateForm .waitUntilScreenReady() - .setConnectorDetails(connectorForCreate.getName(), connectorForCreate.getConfig()) + .setConnectorDetails(createConnector.getName(), createConnector.getConfig()) .clickSubmitButton(); connectorDetails .waitUntilScreenReady(); - navigateToConnectorsAndOpenDetails(connectorForCreate.getName()); - Assert.assertTrue(connectorDetails.isConnectorHeaderVisible(connectorForCreate.getName()), - "isConnectorTitleVisible()"); + navigateToConnectorsAndOpenDetails(createConnector.getName()); + Assert.assertTrue(connectorDetails.isConnectorHeaderVisible(createConnector.getName()), + String.format("isConnectorHeaderVisible()[%s]", createConnector.getName())); navigateToConnectors(); - Assert.assertTrue(kafkaConnectList.isConnectorVisible(CONNECTOR_FOR_DELETE.getName()), "isConnectorVisible()"); - CONNECTOR_LIST.add(connectorForCreate); + Assert.assertTrue(kafkaConnectList.isConnectorVisible(DELETE_CONNECTOR.getName()), + String.format("isConnectorVisible()[%s]", DELETE_CONNECTOR.getName())); + CONNECTOR_LIST.add(createConnector); } - @QaseId(196) @Test - public void updateConnector() { - navigateToConnectorsAndOpenDetails(CONNECTOR_FOR_UPDATE.getName()); + public void updateConnectorCheck() { + navigateToConnectorsAndOpenDetails(UPDATE_CONNECTOR.getName()); connectorDetails .openConfigTab() - .setConfig(CONNECTOR_FOR_UPDATE.getConfig()) + .setConfig(UPDATE_CONNECTOR.getConfig()) .clickSubmitButton(); Assert.assertTrue(connectorDetails.isAlertWithMessageVisible(SUCCESS, "Config successfully updated."), "isAlertWithMessageVisible()"); navigateToConnectors(); - Assert.assertTrue(kafkaConnectList.isConnectorVisible(CONNECTOR_FOR_UPDATE.getName()), "isConnectorVisible()"); + Assert.assertTrue(kafkaConnectList.isConnectorVisible(UPDATE_CONNECTOR.getName()), + String.format("isConnectorVisible()[%s]", UPDATE_CONNECTOR.getName())); } - @QaseId(195) @Test - public void deleteConnector() { - navigateToConnectorsAndOpenDetails(CONNECTOR_FOR_DELETE.getName()); + public void deleteConnectorCheck() { + navigateToConnectorsAndOpenDetails(DELETE_CONNECTOR.getName()); connectorDetails .openDotMenu() .clickDeleteBtn() .clickConfirmBtn(); navigateToConnectors(); - Assert.assertFalse(kafkaConnectList.isConnectorVisible(CONNECTOR_FOR_DELETE.getName()), "isConnectorVisible()"); - CONNECTOR_LIST.remove(CONNECTOR_FOR_DELETE); + Assert.assertFalse(kafkaConnectList.isConnectorVisible(DELETE_CONNECTOR.getName()), + String.format("isConnectorVisible()[%s]", DELETE_CONNECTOR.getName())); } @AfterClass(alwaysRun = true) diff --git a/e2e-tests/src/test/java/io/kafbat/ui/smokesuite/ksqldb/KsqlDbTest.java b/e2e-tests/src/test/java/io/kafbat/ui/smokesuite/ksqldb/KsqlDbTest.java index ab9591da7..59277603f 100644 --- a/e2e-tests/src/test/java/io/kafbat/ui/smokesuite/ksqldb/KsqlDbTest.java +++ b/e2e-tests/src/test/java/io/kafbat/ui/smokesuite/ksqldb/KsqlDbTest.java @@ -3,12 +3,11 @@ import static org.apache.commons.lang3.RandomStringUtils.randomAlphabetic; import io.kafbat.ui.BaseTest; -import io.kafbat.ui.pages.ksqldb.enums.KsqlMenuTabs; -import io.kafbat.ui.pages.ksqldb.enums.KsqlQueryConfig; -import io.kafbat.ui.pages.ksqldb.models.Stream; -import io.kafbat.ui.pages.ksqldb.models.Table; +import io.kafbat.ui.screens.ksqldb.enums.KsqlMenuTabs; +import io.kafbat.ui.screens.ksqldb.enums.KsqlQueryConfig; +import io.kafbat.ui.screens.ksqldb.models.Stream; +import io.kafbat.ui.screens.ksqldb.models.Table; import io.qameta.allure.Step; -import io.qase.api.annotation.QaseId; import java.util.ArrayList; import java.util.List; import org.testng.Assert; @@ -20,50 +19,50 @@ public class KsqlDbTest extends BaseTest { private static final Stream DEFAULT_STREAM = new Stream() - .setName("DEFAULT_STREAM_" + randomAlphabetic(4).toUpperCase()) - .setTopicName("DEFAULT_TOPIC_" + randomAlphabetic(4).toUpperCase()); + .setName("DEFAULT_STREAM_" + randomAlphabetic(5).toUpperCase()) + .setTopicName("DEFAULT_TOPIC_" + randomAlphabetic(5).toUpperCase()); private static final Table FIRST_TABLE = new Table() - .setName("FIRST_TABLE_" + randomAlphabetic(4).toUpperCase()) + .setName("FIRST_TABLE_" + randomAlphabetic(5).toUpperCase()) .setStreamName(DEFAULT_STREAM.getName()); private static final Table SECOND_TABLE = new Table() - .setName("SECOND_TABLE_" + randomAlphabetic(4).toUpperCase()) + .setName("SECOND_TABLE_" + randomAlphabetic(5).toUpperCase()) .setStreamName(DEFAULT_STREAM.getName()); - private static final List TOPIC_NAMES_LIST = new ArrayList<>(); + private static final List TOPIC_NAME_LIST = new ArrayList<>(); @BeforeClass(alwaysRun = true) public void beforeClass() { apiService .createStream(DEFAULT_STREAM) .createTables(FIRST_TABLE, SECOND_TABLE); - TOPIC_NAMES_LIST.addAll(List.of(DEFAULT_STREAM.getTopicName(), + TOPIC_NAME_LIST.addAll(List.of(DEFAULT_STREAM.getTopicName(), FIRST_TABLE.getName(), SECOND_TABLE.getName())); } - @QaseId(284) @Test(priority = 1) public void streamsAndTablesVisibilityCheck() { navigateToKsqlDb(); SoftAssert softly = new SoftAssert(); - softly.assertTrue(ksqlDbList.getTableByName(FIRST_TABLE.getName()).isVisible(), "getTableByName()"); - softly.assertTrue(ksqlDbList.getTableByName(SECOND_TABLE.getName()).isVisible(), "getTableByName()"); + softly.assertTrue(ksqlDbList.getTableByName(FIRST_TABLE.getName()).isVisible(), + String.format("getTableByName().isVisible()[%s]", FIRST_TABLE.getName())); + softly.assertTrue(ksqlDbList.getTableByName(SECOND_TABLE.getName()).isVisible(), + String.format("getTableByName().isVisible()[%s]", SECOND_TABLE.getName())); softly.assertAll(); ksqlDbList .openDetailsTab(KsqlMenuTabs.STREAMS) .waitUntilScreenReady(); - Assert.assertTrue(ksqlDbList.getStreamByName(DEFAULT_STREAM.getName()).isVisible(), "getStreamByName()"); + Assert.assertTrue(ksqlDbList.getStreamByName(DEFAULT_STREAM.getName()).isVisible(), + String.format("getStreamByName().isVisible()[%s]", DEFAULT_STREAM.getName())); } - @QaseId(276) @Test(priority = 2) public void clearEnteredQueryCheck() { navigateToKsqlDbAndExecuteRequest(KsqlQueryConfig.SHOW_TABLES.getQuery()); - Assert.assertFalse(ksqlQueryForm.getEnteredQuery().isEmpty(), "getEnteredQuery()"); + Assert.assertFalse(ksqlQueryForm.getEnteredQuery().isEmpty(), "getEnteredQuery().isEmpty()"); ksqlQueryForm .clickClearBtn(); - Assert.assertTrue(ksqlQueryForm.getEnteredQuery().isEmpty(), "getEnteredQuery()"); + Assert.assertTrue(ksqlQueryForm.getEnteredQuery().isEmpty(), "getEnteredQuery().isEmpty()"); } - @QaseId(344) @Test(priority = 3) public void clearResultsButtonCheck() { String notValidQuery = "some not valid request"; @@ -79,33 +78,30 @@ public void clearResultsButtonCheck() { Assert.assertFalse(ksqlQueryForm.isClearResultsBtnEnabled(), "isClearResultsBtnEnabled()"); } - @QaseId(41) @Test(priority = 4) - public void checkShowTablesRequestExecution() { + public void showTablesRequestExecutionCheck() { navigateToKsqlDbAndExecuteRequest(KsqlQueryConfig.SHOW_TABLES.getQuery()); SoftAssert softly = new SoftAssert(); softly.assertTrue(ksqlQueryForm.areResultsVisible(), "areResultsVisible()"); softly.assertTrue(ksqlQueryForm.getItemByName(FIRST_TABLE.getName()).isVisible(), - String.format("getItemByName(%s)", FIRST_TABLE.getName())); + String.format("getItemByName().isVisible()[%s]", FIRST_TABLE.getName())); softly.assertTrue(ksqlQueryForm.getItemByName(SECOND_TABLE.getName()).isVisible(), - String.format("getItemByName(%s)", SECOND_TABLE.getName())); + String.format("getItemByName().isVisible()[%s]", SECOND_TABLE.getName())); softly.assertAll(); } - @QaseId(278) @Test(priority = 5) - public void checkShowStreamsRequestExecution() { + public void showStreamsRequestExecutionCheck() { navigateToKsqlDbAndExecuteRequest(KsqlQueryConfig.SHOW_STREAMS.getQuery()); SoftAssert softly = new SoftAssert(); softly.assertTrue(ksqlQueryForm.areResultsVisible(), "areResultsVisible()"); softly.assertTrue(ksqlQueryForm.getItemByName(DEFAULT_STREAM.getName()).isVisible(), - String.format("getItemByName(%s)", FIRST_TABLE.getName())); + String.format("getItemByName().isVisible()[%s]", FIRST_TABLE.getName())); softly.assertAll(); } - @QaseId(86) @Test(priority = 6) - public void clearResultsForExecutedRequest() { + public void clearResultsOfExecutedRequestCheck() { navigateToKsqlDbAndExecuteRequest(KsqlQueryConfig.SHOW_TABLES.getQuery()); SoftAssert softly = new SoftAssert(); softly.assertTrue(ksqlQueryForm.areResultsVisible(), "areResultsVisible()"); @@ -116,7 +112,6 @@ public void clearResultsForExecutedRequest() { softly.assertAll(); } - @QaseId(277) @Test(priority = 7) public void stopQueryFunctionalCheck() { navigateToKsqlDbAndExecuteRequest(String.format(KsqlQueryConfig.SELECT_ALL_FROM.getQuery(), FIRST_TABLE.getName())); @@ -128,7 +123,7 @@ public void stopQueryFunctionalCheck() { @AfterClass(alwaysRun = true) public void afterClass() { - TOPIC_NAMES_LIST.forEach(topicName -> apiService.deleteTopic(topicName)); + TOPIC_NAME_LIST.forEach(topicName -> apiService.deleteTopic(topicName)); } @Step diff --git a/e2e-tests/src/test/java/io/kafbat/ui/smokesuite/schemas/SchemasTest.java b/e2e-tests/src/test/java/io/kafbat/ui/smokesuite/schemas/SchemasTest.java index d174ff591..3b140018e 100644 --- a/e2e-tests/src/test/java/io/kafbat/ui/smokesuite/schemas/SchemasTest.java +++ b/e2e-tests/src/test/java/io/kafbat/ui/smokesuite/schemas/SchemasTest.java @@ -4,8 +4,7 @@ import io.kafbat.ui.BaseTest; import io.kafbat.ui.api.model.CompatibilityLevel; import io.kafbat.ui.models.Schema; -import io.kafbat.ui.utilities.FileUtils; -import io.qase.api.annotation.QaseId; +import io.kafbat.ui.utilities.FileUtil; import java.util.ArrayList; import java.util.List; import org.testng.Assert; @@ -16,48 +15,48 @@ public class SchemasTest extends BaseTest { + private static final Schema AVRO_SCHEMA = Schema.createSchemaAvro(); + private static final Schema JSON_SCHEMA = Schema.createSchemaJson(); + private static final Schema PROTOBUF_SCHEMA = Schema.createSchemaProtobuf(); private static final List SCHEMA_LIST = new ArrayList<>(); - private static final Schema AVRO_API = Schema.createSchemaAvro(); - private static final Schema JSON_API = Schema.createSchemaJson(); - private static final Schema PROTOBUF_API = Schema.createSchemaProtobuf(); @BeforeClass(alwaysRun = true) public void beforeClass() { - SCHEMA_LIST.addAll(List.of(AVRO_API, JSON_API, PROTOBUF_API)); + SCHEMA_LIST.addAll(List.of(AVRO_SCHEMA, JSON_SCHEMA, PROTOBUF_SCHEMA)); SCHEMA_LIST.forEach(schema -> apiService.createSchema(schema)); } - @QaseId(43) @Test(priority = 1) - public void createSchemaAvro() { + public void createSchemaAvroCheck() { Schema schemaAvro = Schema.createSchemaAvro(); navigateToSchemaRegistry(); schemaRegistryList .clickCreateSchema(); schemaCreateForm .setSubjectName(schemaAvro.getName()) - .setSchemaField(FileUtils.fileToString(schemaAvro.getValuePath())) + .setSchemaField(FileUtil.fileToString(schemaAvro.getValuePath())) .selectSchemaTypeFromDropdown(schemaAvro.getType()) .clickSubmitButton(); schemaDetails .waitUntilScreenReady(); SoftAssert softly = new SoftAssert(); - softly.assertTrue(schemaDetails.isSchemaHeaderVisible(schemaAvro.getName()), "isSchemaHeaderVisible()"); + softly.assertTrue(schemaDetails.isSchemaHeaderVisible(schemaAvro.getName()), + String.format("isSchemaHeaderVisible()[%s]", schemaAvro.getName())); softly.assertEquals(schemaDetails.getSchemaType(), schemaAvro.getType().getValue(), "getSchemaType()"); softly.assertEquals(schemaDetails.getCompatibility(), CompatibilityLevel.CompatibilityEnum.BACKWARD.getValue(), "getCompatibility()"); softly.assertAll(); navigateToSchemaRegistry(); - Assert.assertTrue(schemaRegistryList.isSchemaVisible(AVRO_API.getName()), "isSchemaVisible()"); + Assert.assertTrue(schemaRegistryList.isSchemaVisible(AVRO_SCHEMA.getName()), + String.format("isSchemaVisible()[%s]", AVRO_SCHEMA.getName())); SCHEMA_LIST.add(schemaAvro); } - @QaseId(186) @Test(priority = 2) - public void updateSchemaAvro() { - AVRO_API.setValuePath( - System.getProperty("user.dir") + "/src/main/resources/testData/schemas/schema_avro_for_update.json"); - navigateToSchemaRegistryAndOpenDetails(AVRO_API.getName()); + public void updateSchemaAvroCheck() { + AVRO_SCHEMA.setValuePath( + System.getProperty("user.dir") + "/src/main/resources/testdata/schemas/schema_avro_update.json"); + navigateToSchemaRegistryAndOpenDetails(AVRO_SCHEMA.getName()); schemaDetails .openEditSchema(); schemaCreateForm @@ -69,7 +68,7 @@ public void updateSchemaAvro() { softly.assertAll(); schemaCreateForm .selectCompatibilityLevelFromDropdown(CompatibilityLevel.CompatibilityEnum.NONE) - .setNewSchemaValue(FileUtils.fileToString(AVRO_API.getValuePath())) + .setNewSchemaValue(FileUtil.fileToString(AVRO_SCHEMA.getValuePath())) .clickSubmitButton(); schemaDetails .waitUntilScreenReady(); @@ -77,10 +76,9 @@ public void updateSchemaAvro() { "getCompatibility()"); } - @QaseId(44) @Test(priority = 3) - public void compareVersionsOperation() { - navigateToSchemaRegistryAndOpenDetails(AVRO_API.getName()); + public void compareVersionsCheck() { + navigateToSchemaRegistryAndOpenDetails(AVRO_SCHEMA.getName()); int latestVersion = schemaDetails .waitUntilScreenReady() .getLatestVersion(); @@ -93,93 +91,95 @@ public void compareVersionsOperation() { Assert.assertEquals(versionsNumberFromDdl, latestVersion, "Versions number is not matched"); schemaCreateForm .selectVersionFromDropDown(1); - Assert.assertEquals(schemaCreateForm.getMarkedLinesNumber(), 42, "getAllMarkedLines()"); + Assert.assertEquals(schemaCreateForm.getMarkedLinesNumber(), 42, "getMarkedLinesNumber()"); } - @QaseId(187) @Test(priority = 4) - public void deleteSchemaAvro() { - navigateToSchemaRegistryAndOpenDetails(AVRO_API.getName()); + public void deleteSchemaAvroCheck() { + navigateToSchemaRegistryAndOpenDetails(AVRO_SCHEMA.getName()); schemaDetails .removeSchema(); schemaRegistryList .waitUntilScreenReady(); - Assert.assertFalse(schemaRegistryList.isSchemaVisible(AVRO_API.getName()), "isSchemaVisible()"); - SCHEMA_LIST.remove(AVRO_API); + Assert.assertFalse(schemaRegistryList.isSchemaVisible(AVRO_SCHEMA.getName()), + String.format("isSchemaVisible()[%s]", AVRO_SCHEMA.getName())); + SCHEMA_LIST.remove(AVRO_SCHEMA); } - @QaseId(89) @Test(priority = 5) - public void createSchemaJson() { + public void createSchemaJsonCheck() { Schema schemaJson = Schema.createSchemaJson(); navigateToSchemaRegistry(); schemaRegistryList .clickCreateSchema(); schemaCreateForm .setSubjectName(schemaJson.getName()) - .setSchemaField(FileUtils.fileToString(schemaJson.getValuePath())) + .setSchemaField(FileUtil.fileToString(schemaJson.getValuePath())) .selectSchemaTypeFromDropdown(schemaJson.getType()) .clickSubmitButton(); schemaDetails .waitUntilScreenReady(); SoftAssert softly = new SoftAssert(); - softly.assertTrue(schemaDetails.isSchemaHeaderVisible(schemaJson.getName()), "isSchemaHeaderVisible()"); + softly.assertTrue(schemaDetails.isSchemaHeaderVisible(schemaJson.getName()), + String.format("isSchemaHeaderVisible()[%s]", schemaJson.getName())); softly.assertEquals(schemaDetails.getSchemaType(), schemaJson.getType().getValue(), "getSchemaType()"); softly.assertEquals(schemaDetails.getCompatibility(), CompatibilityLevel.CompatibilityEnum.BACKWARD.getValue(), "getCompatibility()"); softly.assertAll(); navigateToSchemaRegistry(); - Assert.assertTrue(schemaRegistryList.isSchemaVisible(JSON_API.getName()), "isSchemaVisible()"); + Assert.assertTrue(schemaRegistryList.isSchemaVisible(JSON_SCHEMA.getName()), + String.format("isSchemaVisible()[%s]", JSON_SCHEMA.getName())); SCHEMA_LIST.add(schemaJson); } - @QaseId(189) @Test(priority = 6) - public void deleteSchemaJson() { - navigateToSchemaRegistryAndOpenDetails(JSON_API.getName()); + public void deleteSchemaJsonCheck() { + navigateToSchemaRegistryAndOpenDetails(JSON_SCHEMA.getName()); schemaDetails .removeSchema(); schemaRegistryList .waitUntilScreenReady(); - Assert.assertFalse(schemaRegistryList.isSchemaVisible(JSON_API.getName()), "isSchemaVisible()"); - SCHEMA_LIST.remove(JSON_API); + Assert.assertFalse(schemaRegistryList.isSchemaVisible(JSON_SCHEMA.getName()), + String.format("isSchemaVisible()[%s]", JSON_SCHEMA.getName())); + SCHEMA_LIST.remove(JSON_SCHEMA); } - @QaseId(91) @Test(priority = 7) - public void createSchemaProtobuf() { + public void createSchemaProtobufCheck() { Schema schemaProtobuf = Schema.createSchemaProtobuf(); navigateToSchemaRegistry(); schemaRegistryList .clickCreateSchema(); schemaCreateForm .setSubjectName(schemaProtobuf.getName()) - .setSchemaField(FileUtils.fileToString(schemaProtobuf.getValuePath())) + .setSchemaField(FileUtil.fileToString(schemaProtobuf.getValuePath())) .selectSchemaTypeFromDropdown(schemaProtobuf.getType()) .clickSubmitButton(); schemaDetails .waitUntilScreenReady(); SoftAssert softly = new SoftAssert(); - softly.assertTrue(schemaDetails.isSchemaHeaderVisible(schemaProtobuf.getName()), "isSchemaHeaderVisible()"); + softly.assertTrue(schemaDetails.isSchemaHeaderVisible(schemaProtobuf.getName()), + String.format("isSchemaHeaderVisible()[%s]", schemaProtobuf.getName())); softly.assertEquals(schemaDetails.getSchemaType(), schemaProtobuf.getType().getValue(), "getSchemaType()"); softly.assertEquals(schemaDetails.getCompatibility(), CompatibilityLevel.CompatibilityEnum.BACKWARD.getValue(), "getCompatibility()"); softly.assertAll(); navigateToSchemaRegistry(); - Assert.assertTrue(schemaRegistryList.isSchemaVisible(PROTOBUF_API.getName()), "isSchemaVisible()"); + Assert.assertTrue(schemaRegistryList.isSchemaVisible(PROTOBUF_SCHEMA.getName()), + String.format("isSchemaVisible()[%s]", PROTOBUF_SCHEMA.getName())); SCHEMA_LIST.add(schemaProtobuf); } - @QaseId(223) @Test(priority = 8) - public void deleteSchemaProtobuf() { - navigateToSchemaRegistryAndOpenDetails(PROTOBUF_API.getName()); + public void deleteSchemaProtobufCheck() { + navigateToSchemaRegistryAndOpenDetails(PROTOBUF_SCHEMA.getName()); schemaDetails .removeSchema(); schemaRegistryList .waitUntilScreenReady(); - Assert.assertFalse(schemaRegistryList.isSchemaVisible(PROTOBUF_API.getName()), "isSchemaVisible()"); - SCHEMA_LIST.remove(PROTOBUF_API); + Assert.assertFalse(schemaRegistryList.isSchemaVisible(PROTOBUF_SCHEMA.getName()), + String.format("isSchemaVisible()[%s]", PROTOBUF_SCHEMA.getName())); + SCHEMA_LIST.remove(PROTOBUF_SCHEMA); } @AfterClass(alwaysRun = true) diff --git a/e2e-tests/src/test/java/io/kafbat/ui/smokesuite/topics/MessagesTest.java b/e2e-tests/src/test/java/io/kafbat/ui/smokesuite/topics/MessagesTest.java index d15e9bad6..9622d9ef4 100644 --- a/e2e-tests/src/test/java/io/kafbat/ui/smokesuite/topics/MessagesTest.java +++ b/e2e-tests/src/test/java/io/kafbat/ui/smokesuite/topics/MessagesTest.java @@ -1,15 +1,15 @@ package io.kafbat.ui.smokesuite.topics; -import static org.apache.commons.lang3.RandomStringUtils.randomAlphabetic; +import static io.kafbat.ui.models.Topic.createTopic; import io.kafbat.ui.BaseTest; import io.kafbat.ui.models.Topic; -import io.kafbat.ui.pages.BasePage; -import io.kafbat.ui.pages.topics.TopicDetails; -import io.kafbat.ui.utilities.TimeUtils; +import io.kafbat.ui.screens.BasePage; +import io.kafbat.ui.screens.topics.TopicDetails; +import io.kafbat.ui.screens.topics.enums.SeekType; +import io.kafbat.ui.utilities.TimeUtil; import io.qameta.allure.Issue; import io.qameta.allure.Step; -import io.qase.api.annotation.QaseId; import java.time.LocalDateTime; import java.util.ArrayList; import java.util.List; @@ -23,58 +23,41 @@ public class MessagesTest extends BaseTest { - private static final Topic TOPIC_FOR_MESSAGES = new Topic() - .setName("topic-with-clean-message-attribute-" + randomAlphabetic(5)) - .setMessageKey(randomAlphabetic(5)) - .setMessageValue(randomAlphabetic(10)); - private static final Topic TOPIC_TO_CLEAR_AND_PURGE_MESSAGES = new Topic() - .setName("topic-to-clear-and-purge-messages-" + randomAlphabetic(5)) - .setMessageKey(randomAlphabetic(5)) - .setMessageValue(randomAlphabetic(10)); - private static final Topic TOPIC_FOR_CHECK_FILTERS = new Topic() - .setName("topic-for-check-filters-" + randomAlphabetic(5)) - .setMessageKey(randomAlphabetic(5)) - .setMessageValue(randomAlphabetic(10)); - private static final Topic TOPIC_TO_RECREATE = new Topic() - .setName("topic-to-recreate-attribute-" + randomAlphabetic(5)) - .setMessageKey(randomAlphabetic(5)) - .setMessageValue(randomAlphabetic(10)); - private static final Topic TOPIC_FOR_CHECK_MESSAGES_COUNT = new Topic() - .setName("topic-for-check-messages-count" + randomAlphabetic(5)) - .setMessageKey(randomAlphabetic(5)) - .setMessageValue(randomAlphabetic(10)); + private static final Topic PRODUCE_MESSAGE_TOPIC = createTopic(); + private static final Topic CLEAR_MESSAGE_TOPIC = createTopic(); + private static final Topic CHECK_FILTERS_TOPIC = createTopic(); + private static final Topic RECREATE_TOPIC = createTopic(); + private static final Topic MESSAGES_COUNT_TOPIC = createTopic(); private static final List TOPIC_LIST = new ArrayList<>(); @BeforeClass(alwaysRun = true) public void beforeClass() { - TOPIC_LIST.addAll(List.of(TOPIC_FOR_MESSAGES, TOPIC_FOR_CHECK_FILTERS, TOPIC_TO_CLEAR_AND_PURGE_MESSAGES, - TOPIC_TO_RECREATE, TOPIC_FOR_CHECK_MESSAGES_COUNT)); + TOPIC_LIST.addAll(List.of(PRODUCE_MESSAGE_TOPIC, CHECK_FILTERS_TOPIC, CLEAR_MESSAGE_TOPIC, + RECREATE_TOPIC, MESSAGES_COUNT_TOPIC)); TOPIC_LIST.forEach(topic -> apiService.createTopic(topic)); - IntStream.range(1, 3).forEach(i -> apiService.sendMessage(TOPIC_FOR_CHECK_FILTERS)); - TimeUtils.waitUntilNewMinuteStarted(); - IntStream.range(1, 3).forEach(i -> apiService.sendMessage(TOPIC_FOR_CHECK_FILTERS)); - IntStream.range(1, 110).forEach(i -> apiService.sendMessage(TOPIC_FOR_CHECK_MESSAGES_COUNT)); + IntStream.range(1, 3).forEach(i -> apiService.sendMessage(CHECK_FILTERS_TOPIC)); + TimeUtil.waitUntilNewMinuteStarted(); + IntStream.range(1, 3).forEach(i -> apiService.sendMessage(CHECK_FILTERS_TOPIC)); + IntStream.range(1, 110).forEach(i -> apiService.sendMessage(MESSAGES_COUNT_TOPIC)); } - @QaseId(222) @Test(priority = 1) public void produceMessageCheck() { - navigateToTopicsAndOpenDetails(TOPIC_FOR_MESSAGES.getName()); + navigateToTopicsAndOpenDetails(PRODUCE_MESSAGE_TOPIC.getName()); topicDetails .openDetailsTab(TopicDetails.TopicMenu.MESSAGES); - produceMessage(TOPIC_FOR_MESSAGES); - Assert.assertEquals(topicDetails.getMessageByKey(TOPIC_FOR_MESSAGES.getMessageKey()).getValue(), - TOPIC_FOR_MESSAGES.getMessageValue(), "message.getValue()"); + produceMessage(PRODUCE_MESSAGE_TOPIC); + Assert.assertEquals(topicDetails.getMessageByKey(PRODUCE_MESSAGE_TOPIC.getMessageKey()).getValue(), + PRODUCE_MESSAGE_TOPIC.getMessageValue(), "message.getValue()"); } - @QaseId(19) @Test(priority = 2) public void clearMessageCheck() { - navigateToTopicsAndOpenDetails(TOPIC_FOR_MESSAGES.getName()); + navigateToTopicsAndOpenDetails(PRODUCE_MESSAGE_TOPIC.getName()); topicDetails .openDetailsTab(TopicDetails.TopicMenu.OVERVIEW); int messageAmount = topicDetails.getMessageCountAmount(); - produceMessage(TOPIC_FOR_MESSAGES); + produceMessage(PRODUCE_MESSAGE_TOPIC); Assert.assertEquals(topicDetails.getMessageCountAmount(), messageAmount + 1, "getMessageCountAmount()"); topicDetails .openDotMenu() @@ -84,44 +67,42 @@ public void clearMessageCheck() { Assert.assertEquals(topicDetails.getMessageCountAmount(), 0, "getMessageCountAmount()"); } - @QaseId(239) @Test(priority = 3) - public void checkClearTopicMessage() { - navigateToTopicsAndOpenDetails(TOPIC_TO_CLEAR_AND_PURGE_MESSAGES.getName()); + public void clearTopicMessageCheck() { + navigateToTopicsAndOpenDetails(CLEAR_MESSAGE_TOPIC.getName()); topicDetails .openDetailsTab(TopicDetails.TopicMenu.OVERVIEW); - produceMessage(TOPIC_TO_CLEAR_AND_PURGE_MESSAGES); + produceMessage(CLEAR_MESSAGE_TOPIC); navigateToTopics(); - Assert.assertEquals(topicsList.getTopicItem(TOPIC_TO_CLEAR_AND_PURGE_MESSAGES.getName()).getNumberOfMessages(), 1, + Assert.assertEquals(topicsList.getTopicItem(CLEAR_MESSAGE_TOPIC.getName()).getNumberOfMessages(), 1, "getNumberOfMessages()"); topicsList - .openDotMenuByTopicName(TOPIC_TO_CLEAR_AND_PURGE_MESSAGES.getName()) + .openDotMenuByTopicName(CLEAR_MESSAGE_TOPIC.getName()) .clickClearMessagesBtn() .clickConfirmBtnMdl(); SoftAssert softly = new SoftAssert(); softly.assertTrue(topicsList.isAlertWithMessageVisible(BasePage.AlertHeader.SUCCESS, - String.format("%s messages have been successfully cleared!", TOPIC_TO_CLEAR_AND_PURGE_MESSAGES.getName())), + String.format("%s messages have been successfully cleared!", CLEAR_MESSAGE_TOPIC.getName())), "isAlertWithMessageVisible()"); - softly.assertEquals(topicsList.getTopicItem(TOPIC_TO_CLEAR_AND_PURGE_MESSAGES.getName()).getNumberOfMessages(), 0, + softly.assertEquals(topicsList.getTopicItem(CLEAR_MESSAGE_TOPIC.getName()).getNumberOfMessages(), 0, "getNumberOfMessages()"); softly.assertAll(); } - @QaseId(10) @Test(priority = 4) - public void checkPurgeMessagePossibility() { + public void purgeMessagePossibilityCheck() { navigateToTopics(); - int messageAmount = topicsList.getTopicItem(TOPIC_TO_CLEAR_AND_PURGE_MESSAGES.getName()).getNumberOfMessages(); + int messageAmount = topicsList.getTopicItem(CLEAR_MESSAGE_TOPIC.getName()).getNumberOfMessages(); topicsList - .openTopic(TOPIC_TO_CLEAR_AND_PURGE_MESSAGES.getName()); + .openTopic(CLEAR_MESSAGE_TOPIC.getName()); topicDetails .openDetailsTab(TopicDetails.TopicMenu.OVERVIEW); - produceMessage(TOPIC_TO_CLEAR_AND_PURGE_MESSAGES); + produceMessage(CLEAR_MESSAGE_TOPIC); navigateToTopics(); - Assert.assertEquals(topicsList.getTopicItem(TOPIC_TO_CLEAR_AND_PURGE_MESSAGES.getName()).getNumberOfMessages(), + Assert.assertEquals(topicsList.getTopicItem(CLEAR_MESSAGE_TOPIC.getName()).getNumberOfMessages(), messageAmount + 1, "getNumberOfMessages()"); topicsList - .getTopicItem(TOPIC_TO_CLEAR_AND_PURGE_MESSAGES.getName()) + .getTopicItem(CLEAR_MESSAGE_TOPIC.getName()) .selectItem(true) .clickPurgeMessagesOfSelectedTopicsBtn(); Assert.assertTrue(topicsList.isConfirmationMdlVisible(), "isConfirmationMdlVisible()"); @@ -131,23 +112,22 @@ public void checkPurgeMessagePossibility() { .clickConfirmBtnMdl(); SoftAssert softly = new SoftAssert(); softly.assertTrue(topicsList.isAlertWithMessageVisible(BasePage.AlertHeader.SUCCESS, - String.format("%s messages have been successfully cleared!", TOPIC_TO_CLEAR_AND_PURGE_MESSAGES.getName())), + String.format("%s messages have been successfully cleared!", CLEAR_MESSAGE_TOPIC.getName())), "isAlertWithMessageVisible()"); - softly.assertEquals(topicsList.getTopicItem(TOPIC_TO_CLEAR_AND_PURGE_MESSAGES.getName()).getNumberOfMessages(), 0, + softly.assertEquals(topicsList.getTopicItem(CLEAR_MESSAGE_TOPIC.getName()).getNumberOfMessages(), 0, "getNumberOfMessages()"); softly.assertAll(); } - @QaseId(15) @Test(priority = 6) - public void checkMessageFilteringByOffset() { - navigateToTopicsAndOpenDetails(TOPIC_FOR_CHECK_FILTERS.getName()); + public void messageFilteringByOffsetCheck() { + navigateToTopicsAndOpenDetails(CHECK_FILTERS_TOPIC.getName()); int nextOffset = topicDetails .openDetailsTab(TopicDetails.TopicMenu.MESSAGES) + .selectSeekTypeDdlMessagesTab(SeekType.FROM_OFFSET) .getAllMessages().stream() .findFirst().orElseThrow().getOffset() + 1; topicDetails - .selectSeekTypeDdlMessagesTab("Offset") .setSeekTypeValueFldMessagesTab(String.valueOf(nextOffset)) .clickSubmitFiltersBtnMessagesTab(); SoftAssert softly = new SoftAssert(); @@ -158,12 +138,11 @@ public void checkMessageFilteringByOffset() { } @Ignore - @Issue("https://github.com/kafbat/kafka-ui/issues/3215") - @Issue("https://github.com/kafbat/kafka-ui/issues/2345") - @QaseId(16) + @Issue("https://github.com/kafbat/kafka-ui/issues/281") + @Issue("https://github.com/kafbat/kafka-ui/issues/282") @Test(priority = 7) - public void checkMessageFilteringByTimestamp() { - navigateToTopicsAndOpenDetails(TOPIC_FOR_CHECK_FILTERS.getName()); + public void messageFilteringByTimestampCheck() { + navigateToTopicsAndOpenDetails(CHECK_FILTERS_TOPIC.getName()); LocalDateTime firstTimestamp = topicDetails .openDetailsTab(TopicDetails.TopicMenu.MESSAGES) .getMessageByOffset(0).getTimestamp(); @@ -171,7 +150,7 @@ public void checkMessageFilteringByTimestamp() { .filter(message -> message.getTimestamp().getMinute() != firstTimestamp.getMinute()) .findFirst().orElseThrow().getTimestamp(); topicDetails - .selectSeekTypeDdlMessagesTab("Timestamp") + .selectSeekTypeDdlMessagesTab(SeekType.SINCE_TIME) .openCalendarSeekType() .selectDateAndTimeByCalendar(nextTimestamp) .clickSubmitFiltersBtnMessagesTab(); @@ -182,10 +161,9 @@ public void checkMessageFilteringByTimestamp() { softly.assertAll(); } - @QaseId(246) @Test(priority = 8) - public void checkClearTopicMessageFromOverviewTab() { - navigateToTopicsAndOpenDetails(TOPIC_FOR_CHECK_FILTERS.getName()); + public void clearTopicMessageFromOverviewTabCheck() { + navigateToTopicsAndOpenDetails(CHECK_FILTERS_TOPIC.getName()); topicDetails .openDetailsTab(TopicDetails.TopicMenu.OVERVIEW) .openDotMenu() @@ -193,42 +171,39 @@ public void checkClearTopicMessageFromOverviewTab() { .clickConfirmBtnMdl(); SoftAssert softly = new SoftAssert(); softly.assertTrue(topicDetails.isAlertWithMessageVisible(BasePage.AlertHeader.SUCCESS, - String.format("%s messages have been successfully cleared!", TOPIC_FOR_CHECK_FILTERS.getName())), + String.format("%s messages have been successfully cleared!", CHECK_FILTERS_TOPIC.getName())), "isAlertWithMessageVisible()"); - softly.assertEquals(topicDetails.getMessageCountAmount(), 0, - "getMessageCountAmount()= " + topicDetails.getMessageCountAmount()); + softly.assertEquals(topicDetails.getMessageCountAmount(), 0, "getMessageCountAmount()"); softly.assertAll(); } - @QaseId(240) @Test(priority = 9) - public void checkRecreateTopic() { - navigateToTopicsAndOpenDetails(TOPIC_TO_RECREATE.getName()); + public void recreateTopicCheck() { + navigateToTopicsAndOpenDetails(RECREATE_TOPIC.getName()); topicDetails .openDetailsTab(TopicDetails.TopicMenu.OVERVIEW); - produceMessage(TOPIC_TO_RECREATE); + produceMessage(RECREATE_TOPIC); navigateToTopics(); - Assert.assertEquals(topicsList.getTopicItem(TOPIC_TO_RECREATE.getName()).getNumberOfMessages(), 1, + Assert.assertEquals(topicsList.getTopicItem(RECREATE_TOPIC.getName()).getNumberOfMessages(), 1, "getNumberOfMessages()"); topicsList - .openDotMenuByTopicName(TOPIC_TO_RECREATE.getName()) + .openDotMenuByTopicName(RECREATE_TOPIC.getName()) .clickRecreateTopicBtn() .clickConfirmBtnMdl(); SoftAssert softly = new SoftAssert(); softly.assertTrue(topicDetails.isAlertWithMessageVisible(BasePage.AlertHeader.SUCCESS, - String.format("Topic %s successfully recreated!", TOPIC_TO_RECREATE.getName())), + String.format("Topic %s successfully recreated!", RECREATE_TOPIC.getName())), "isAlertWithMessageVisible()"); - softly.assertEquals(topicsList.getTopicItem(TOPIC_TO_RECREATE.getName()).getNumberOfMessages(), 0, + softly.assertEquals(topicsList.getTopicItem(RECREATE_TOPIC.getName()).getNumberOfMessages(), 0, "getNumberOfMessages()"); softly.assertAll(); } @Ignore - @Issue("https://github.com/kafbat/kafka-ui/issues/3129") - @QaseId(267) + @Issue("https://github.com/kafbat/kafka-ui/issues/270") @Test(priority = 10) - public void checkMessagesCountPerPageWithinTopic() { - navigateToTopicsAndOpenDetails(TOPIC_FOR_CHECK_MESSAGES_COUNT.getName()); + public void messagesCountPerPageCheck() { + navigateToTopicsAndOpenDetails(MESSAGES_COUNT_TOPIC.getName()); topicDetails .openDetailsTab(TopicDetails.TopicMenu.MESSAGES); int messagesPerPage = topicDetails.getAllMessages().size(); @@ -242,7 +217,7 @@ public void checkMessagesCountPerPageWithinTopic() { topicDetails .clickNextButton(); softly.assertEquals(topicDetails.getAllMessages().stream().findFirst().orElseThrow().getOffset(), - lastOffsetOnPage + 1, "findFirst().getOffset()"); + lastOffsetOnPage - 1, "getAllMessages().findFirst().getOffset()"); softly.assertTrue(topicDetails.isBackButtonEnabled(), "isBackButtonEnabled()"); softly.assertFalse(topicDetails.isNextButtonEnabled(), "isNextButtonEnabled()"); softly.assertAll(); diff --git a/e2e-tests/src/test/java/io/kafbat/ui/smokesuite/topics/TopicsTest.java b/e2e-tests/src/test/java/io/kafbat/ui/smokesuite/topics/TopicsTest.java index 1b4b0f40d..1fa5d0b3d 100644 --- a/e2e-tests/src/test/java/io/kafbat/ui/smokesuite/topics/TopicsTest.java +++ b/e2e-tests/src/test/java/io/kafbat/ui/smokesuite/topics/TopicsTest.java @@ -1,20 +1,20 @@ package io.kafbat.ui.smokesuite.topics; -import static io.kafbat.ui.pages.BasePage.AlertHeader.SUCCESS; +import static io.kafbat.ui.screens.BasePage.AlertHeader.SUCCESS; +import static io.kafbat.ui.variables.Common.FILTER_CODE_JSON; +import static io.kafbat.ui.variables.Common.FILTER_CODE_STRING; import static org.apache.commons.lang3.RandomStringUtils.randomAlphabetic; import static org.apache.commons.lang3.RandomUtils.nextInt; import com.codeborne.selenide.Condition; import io.kafbat.ui.BaseTest; import io.kafbat.ui.models.Topic; -import io.kafbat.ui.pages.BasePage; -import io.kafbat.ui.pages.topics.TopicDetails; -import io.kafbat.ui.pages.topics.enums.CleanupPolicyValue; -import io.kafbat.ui.pages.topics.enums.CustomParameterType; -import io.kafbat.ui.pages.topics.enums.MaxSizeOnDisk; -import io.kafbat.ui.pages.topics.enums.TimeToRetain; +import io.kafbat.ui.screens.topics.TopicDetails; +import io.kafbat.ui.screens.topics.enums.CleanupPolicyValue; +import io.kafbat.ui.screens.topics.enums.CustomParameterType; +import io.kafbat.ui.screens.topics.enums.MaxSizeOnDisk; +import io.kafbat.ui.screens.topics.enums.TimeToRetain; import io.qameta.allure.Issue; -import io.qase.api.annotation.QaseId; import java.util.ArrayList; import java.util.List; import org.testng.Assert; @@ -26,82 +26,73 @@ public class TopicsTest extends BaseTest { - private static final Topic TOPIC_TO_CREATE = new Topic() - .setName("new-topic-" + randomAlphabetic(5)) - .setNumberOfPartitions(1) + private static final Topic CREATE_TOPIC = Topic.createTopic() .setCustomParameterType(CustomParameterType.COMPRESSION_TYPE) .setCustomParameterValue("producer") .setCleanupPolicyValue(CleanupPolicyValue.DELETE); - private static final Topic TOPIC_TO_UPDATE_AND_DELETE = new Topic() - .setName("topic-to-update-and-delete-" + randomAlphabetic(5)) - .setNumberOfPartitions(1) + private static final Topic UPDATE_TOPIC = Topic.createTopic() .setCleanupPolicyValue(CleanupPolicyValue.DELETE) .setTimeToRetain(TimeToRetain.BTN_7_DAYS) .setMaxSizeOnDisk(MaxSizeOnDisk.NOT_SET) .setMaxMessageBytes("1048588") .setMessageKey(randomAlphabetic(5)) .setMessageValue(randomAlphabetic(10)); - private static final Topic TOPIC_TO_CHECK_SETTINGS = new Topic() - .setName("new-topic-" + randomAlphabetic(5)) - .setNumberOfPartitions(1) + private static final Topic DELETE_TOPIC = Topic.createTopic(); + private static final Topic SETTINGS_TOPIC = Topic.createTopic() .setMaxMessageBytes("1000012") .setMaxSizeOnDisk(MaxSizeOnDisk.NOT_SET); - private static final Topic TOPIC_FOR_CHECK_FILTERS = new Topic() - .setName("topic-for-check-filters-" + randomAlphabetic(5)); - private static final Topic TOPIC_FOR_DELETE = new Topic() - .setName("topic-to-delete-" + randomAlphabetic(5)); + private static final Topic FILTERS_TOPIC = Topic.createTopic(); private static final List TOPIC_LIST = new ArrayList<>(); @BeforeClass(alwaysRun = true) public void beforeClass() { - TOPIC_LIST.addAll(List.of(TOPIC_TO_UPDATE_AND_DELETE, TOPIC_FOR_DELETE, TOPIC_FOR_CHECK_FILTERS)); + TOPIC_LIST.addAll(List.of(UPDATE_TOPIC, DELETE_TOPIC, FILTERS_TOPIC)); TOPIC_LIST.forEach(topic -> apiService.createTopic(topic)); } - @QaseId(199) @Test(priority = 1) - public void createTopic() { + public void createTopicCheck() { navigateToTopics(); topicsList .clickAddTopicBtn(); topicCreateEditForm .waitUntilScreenReady() - .setTopicName(TOPIC_TO_CREATE.getName()) - .setNumberOfPartitions(TOPIC_TO_CREATE.getNumberOfPartitions()) - .selectCleanupPolicy(TOPIC_TO_CREATE.getCleanupPolicyValue()) + .setTopicName(CREATE_TOPIC.getName()) + .setNumberOfPartitions(CREATE_TOPIC.getNumberOfPartitions()) + .selectCleanupPolicy(CREATE_TOPIC.getCleanupPolicyValue()) .clickSaveTopicBtn(); - navigateToTopicsAndOpenDetails(TOPIC_TO_CREATE.getName()); + navigateToTopicsAndOpenDetails(CREATE_TOPIC.getName()); SoftAssert softly = new SoftAssert(); - softly.assertTrue(topicDetails.isTopicHeaderVisible(TOPIC_TO_CREATE.getName()), "isTopicHeaderVisible()"); - softly.assertEquals(topicDetails.getCleanUpPolicy(), TOPIC_TO_CREATE.getCleanupPolicyValue().toString(), + softly.assertTrue(topicDetails.isTopicHeaderVisible(CREATE_TOPIC.getName()), + String.format("isTopicHeaderVisible()[%s]", CREATE_TOPIC.getName())); + softly.assertEquals(topicDetails.getCleanUpPolicy(), CREATE_TOPIC.getCleanupPolicyValue().toString(), "getCleanUpPolicy()"); - softly.assertEquals(topicDetails.getPartitions(), TOPIC_TO_CREATE.getNumberOfPartitions(), "getPartitions()"); + softly.assertEquals(topicDetails.getPartitions(), CREATE_TOPIC.getNumberOfPartitions(), "getPartitions()"); softly.assertAll(); navigateToTopics(); - Assert.assertTrue(topicsList.isTopicVisible(TOPIC_TO_CREATE.getName()), "isTopicVisible()"); - TOPIC_LIST.add(TOPIC_TO_CREATE); + Assert.assertTrue(topicsList.isTopicVisible(CREATE_TOPIC.getName()), + String.format("isTopicVisible()[%s]", CREATE_TOPIC.getName())); + TOPIC_LIST.add(CREATE_TOPIC); } - @QaseId(7) @Test(priority = 2) - void checkAvailableOperations() { + void availableOperationsCheck() { navigateToTopics(); topicsList - .getTopicItem(TOPIC_TO_UPDATE_AND_DELETE.getName()) + .getTopicItem(UPDATE_TOPIC.getName()) .selectItem(true); verifyElementsCondition(topicsList.getActionButtons(), Condition.enabled); topicsList - .getTopicItem(TOPIC_FOR_CHECK_FILTERS.getName()) + .getTopicItem(FILTERS_TOPIC.getName()) .selectItem(true); Assert.assertFalse(topicsList.isCopySelectedTopicBtnEnabled(), "isCopySelectedTopicBtnEnabled()"); } @Ignore - @Issue("https://github.com/kafbat/kafka-ui/issues/3071") - @QaseId(268) + @Issue("https://github.com/kafbat/kafka-ui/issues/279") @Test(priority = 3) - public void checkCustomParametersWithinEditExistingTopic() { - navigateToTopicsAndOpenDetails(TOPIC_TO_UPDATE_AND_DELETE.getName()); + public void customParametersWithinEditExistingTopicCheck() { + navigateToTopicsAndOpenDetails(UPDATE_TOPIC.getName()); topicDetails .openDotMenu() .clickEditSettingsMenu(); @@ -111,16 +102,16 @@ public void checkCustomParametersWithinEditExistingTopic() { .clickAddCustomParameterTypeButton() .openCustomParameterTypeDdl() .getAllDdlOptions() + .asFixedIterable() .forEach(option -> softly.assertTrue(!option.is(Condition.attribute("disabled")), option.getText() + " is enabled:")); softly.assertAll(); } - @QaseId(197) @Test(priority = 4) - public void updateTopic() { - navigateToTopicsAndOpenDetails(TOPIC_TO_UPDATE_AND_DELETE.getName()); + public void updateTopicCheck() { + navigateToTopicsAndOpenDetails(UPDATE_TOPIC.getName()); topicDetails .openDotMenu() .clickEditSettingsMenu(); @@ -128,77 +119,75 @@ public void updateTopic() { .waitUntilScreenReady(); SoftAssert softly = new SoftAssert(); softly.assertEquals(topicCreateEditForm.getCleanupPolicy(), - TOPIC_TO_UPDATE_AND_DELETE.getCleanupPolicyValue().getVisibleText(), "getCleanupPolicy()"); + UPDATE_TOPIC.getCleanupPolicyValue().getVisibleText(), "getCleanupPolicy()"); softly.assertEquals(topicCreateEditForm.getTimeToRetain(), - TOPIC_TO_UPDATE_AND_DELETE.getTimeToRetain().getValue(), "getTimeToRetain()"); + UPDATE_TOPIC.getTimeToRetain().getValue(), "getTimeToRetain()"); softly.assertEquals(topicCreateEditForm.getMaxSizeOnDisk(), - TOPIC_TO_UPDATE_AND_DELETE.getMaxSizeOnDisk().getVisibleText(), "getMaxSizeOnDisk()"); + UPDATE_TOPIC.getMaxSizeOnDisk().getVisibleText(), "getMaxSizeOnDisk()"); softly.assertEquals(topicCreateEditForm.getMaxMessageBytes(), - TOPIC_TO_UPDATE_AND_DELETE.getMaxMessageBytes(), "getMaxMessageBytes()"); + UPDATE_TOPIC.getMaxMessageBytes(), "getMaxMessageBytes()"); softly.assertAll(); - TOPIC_TO_UPDATE_AND_DELETE + UPDATE_TOPIC .setCleanupPolicyValue(CleanupPolicyValue.COMPACT) .setTimeToRetain(TimeToRetain.BTN_2_DAYS) .setMaxSizeOnDisk(MaxSizeOnDisk.SIZE_50_GB).setMaxMessageBytes("1048589"); topicCreateEditForm - .selectCleanupPolicy((TOPIC_TO_UPDATE_AND_DELETE.getCleanupPolicyValue())) - .setTimeToRetainDataByButtons(TOPIC_TO_UPDATE_AND_DELETE.getTimeToRetain()) - .setMaxSizeOnDiskInGB(TOPIC_TO_UPDATE_AND_DELETE.getMaxSizeOnDisk()) - .setMaxMessageBytes(TOPIC_TO_UPDATE_AND_DELETE.getMaxMessageBytes()) + .selectCleanupPolicy((UPDATE_TOPIC.getCleanupPolicyValue())) + .setTimeToRetainDataByButtons(UPDATE_TOPIC.getTimeToRetain()) + .setMaxSizeOnDiskInGB(UPDATE_TOPIC.getMaxSizeOnDisk()) + .setMaxMessageBytes(UPDATE_TOPIC.getMaxMessageBytes()) .clickSaveTopicBtn(); softly.assertTrue(topicDetails.isAlertWithMessageVisible(SUCCESS, "Topic successfully updated."), "isAlertWithMessageVisible()"); - softly.assertTrue(topicDetails.isTopicHeaderVisible(TOPIC_TO_UPDATE_AND_DELETE.getName()), - "isTopicHeaderVisible()"); + softly.assertTrue(topicDetails.isTopicHeaderVisible(UPDATE_TOPIC.getName()), + String.format("isTopicHeaderVisible()[%s]", UPDATE_TOPIC.getName())); softly.assertAll(); topicDetails .waitUntilScreenReady(); - navigateToTopicsAndOpenDetails(TOPIC_TO_UPDATE_AND_DELETE.getName()); + navigateToTopicsAndOpenDetails(UPDATE_TOPIC.getName()); topicDetails .openDotMenu() .clickEditSettingsMenu(); softly.assertFalse(topicCreateEditForm.isNameFieldEnabled(), "isNameFieldEnabled()"); softly.assertEquals(topicCreateEditForm.getCleanupPolicy(), - TOPIC_TO_UPDATE_AND_DELETE.getCleanupPolicyValue().getVisibleText(), "getCleanupPolicy()"); + UPDATE_TOPIC.getCleanupPolicyValue().getVisibleText(), "getCleanupPolicy()"); softly.assertEquals(topicCreateEditForm.getTimeToRetain(), - TOPIC_TO_UPDATE_AND_DELETE.getTimeToRetain().getValue(), "getTimeToRetain()"); + UPDATE_TOPIC.getTimeToRetain().getValue(), "getTimeToRetain()"); softly.assertEquals(topicCreateEditForm.getMaxSizeOnDisk(), - TOPIC_TO_UPDATE_AND_DELETE.getMaxSizeOnDisk().getVisibleText(), "getMaxSizeOnDisk()"); + UPDATE_TOPIC.getMaxSizeOnDisk().getVisibleText(), "getMaxSizeOnDisk()"); softly.assertEquals(topicCreateEditForm.getMaxMessageBytes(), - TOPIC_TO_UPDATE_AND_DELETE.getMaxMessageBytes(), "getMaxMessageBytes()"); + UPDATE_TOPIC.getMaxMessageBytes(), "getMaxMessageBytes()"); softly.assertAll(); } - @QaseId(242) @Test(priority = 5) - public void removeTopicFromTopicList() { + public void removeTopicFromListCheck() { navigateToTopics(); topicsList - .openDotMenuByTopicName(TOPIC_TO_UPDATE_AND_DELETE.getName()) + .openDotMenuByTopicName(UPDATE_TOPIC.getName()) .clickRemoveTopicBtn() .clickConfirmBtnMdl(); Assert.assertTrue(topicsList.isAlertWithMessageVisible(SUCCESS, - String.format("Topic %s successfully deleted!", TOPIC_TO_UPDATE_AND_DELETE.getName())), + String.format("Topic %s successfully deleted!", UPDATE_TOPIC.getName())), "isAlertWithMessageVisible()"); - TOPIC_LIST.remove(TOPIC_TO_UPDATE_AND_DELETE); + TOPIC_LIST.remove(UPDATE_TOPIC); } - @QaseId(207) @Test(priority = 6) - public void deleteTopic() { - navigateToTopicsAndOpenDetails(TOPIC_FOR_DELETE.getName()); + public void deleteTopicCheck() { + navigateToTopicsAndOpenDetails(DELETE_TOPIC.getName()); topicDetails .openDotMenu() .clickDeleteTopicMenu() .clickConfirmBtnMdl(); navigateToTopics(); - Assert.assertFalse(topicsList.isTopicVisible(TOPIC_FOR_DELETE.getName()), "isTopicVisible"); - TOPIC_LIST.remove(TOPIC_FOR_DELETE); + Assert.assertFalse(topicsList.isTopicVisible(DELETE_TOPIC.getName()), + String.format("isTopicVisible()[%s]", DELETE_TOPIC.getName())); + TOPIC_LIST.remove(DELETE_TOPIC); } - @QaseId(20) @Test(priority = 7) - public void redirectToConsumerFromTopic() { + public void redirectToConsumerFromTopicCheck() { String topicName = "source-activities"; String consumerGroupId = "connect-sink_postgres_activities"; navigateToTopicsAndOpenDetails(topicName); @@ -215,9 +204,8 @@ public void redirectToConsumerFromTopic() { softly.assertAll(); } - @QaseId(4) @Test(priority = 8) - public void checkTopicCreatePossibility() { + public void createTopicPossibilityCheck() { navigateToTopics(); topicsList .clickAddTopicBtn(); @@ -236,48 +224,45 @@ public void checkTopicCreatePossibility() { Assert.assertTrue(topicCreateEditForm.isCreateTopicButtonEnabled(), "isCreateTopicButtonEnabled()"); } - @QaseId(266) @Test(priority = 9) - public void checkTimeToRetainDataCustomValueWithEditingTopic() { - Topic topicToRetainData = new Topic() - .setName("topic-to-retain-data-" + randomAlphabetic(5)) + public void timeToRetainDataCustomValueWithEditingTopicCheck() { + Topic retainDataTopic = Topic.createTopic() .setTimeToRetainData("86400000"); navigateToTopics(); topicsList .clickAddTopicBtn(); topicCreateEditForm .waitUntilScreenReady() - .setTopicName(topicToRetainData.getName()) + .setTopicName(retainDataTopic.getName()) .setNumberOfPartitions(1) .setTimeToRetainDataInMs("604800000"); Assert.assertEquals(topicCreateEditForm.getTimeToRetain(), "604800000", "getTimeToRetain()"); topicCreateEditForm - .setTimeToRetainDataInMs(topicToRetainData.getTimeToRetainData()) + .setTimeToRetainDataInMs(retainDataTopic.getTimeToRetainData()) .clickSaveTopicBtn(); topicDetails .waitUntilScreenReady() .openDotMenu() .clickEditSettingsMenu(); - Assert.assertEquals(topicCreateEditForm.getTimeToRetain(), topicToRetainData.getTimeToRetainData(), + Assert.assertEquals(topicCreateEditForm.getTimeToRetain(), retainDataTopic.getTimeToRetainData(), "getTimeToRetain()"); topicDetails .openDetailsTab(TopicDetails.TopicMenu.SETTINGS); - Assert.assertEquals(topicDetails.getSettingsGridValueByKey("retention.ms"), topicToRetainData.getTimeToRetainData(), - "getSettingsGridValueByKey()"); - TOPIC_LIST.add(topicToRetainData); + Assert.assertEquals(topicDetails.getSettingsGridValueByKey("retention.ms"), retainDataTopic.getTimeToRetainData(), + "getTimeToRetainData()"); + TOPIC_LIST.add(retainDataTopic); } - @QaseId(6) @Test(priority = 10) - public void checkCustomParametersWithinCreateNewTopic() { + public void customParametersWithinCreateNewTopicCheck() { navigateToTopics(); topicsList .clickAddTopicBtn(); topicCreateEditForm .waitUntilScreenReady() - .setTopicName(TOPIC_TO_CREATE.getName()) + .setTopicName(CREATE_TOPIC.getName()) .clickAddCustomParameterTypeButton() - .setCustomParameterType(TOPIC_TO_CREATE.getCustomParameterType()); + .setCustomParameterType(CREATE_TOPIC.getCustomParameterType()); Assert.assertTrue(topicCreateEditForm.isDeleteCustomParameterButtonEnabled(), "isDeleteCustomParameterButtonEnabled()"); topicCreateEditForm @@ -286,19 +271,17 @@ public void checkCustomParametersWithinCreateNewTopic() { "isValidationMessageCustomParameterValueVisible()"); } - @QaseId(2) @Test(priority = 11) - public void checkTopicListElements() { + public void topicListElementsCheck() { navigateToTopics(); verifyElementsCondition(topicsList.getAllVisibleElements(), Condition.visible); verifyElementsCondition(topicsList.getAllEnabledElements(), Condition.enabled); } - @QaseId(12) @Test(priority = 12) - public void addNewFilterWithinTopic() { + public void addNewFilterWithinTopicCheck() { String filterName = randomAlphabetic(5); - navigateToTopicsAndOpenDetails(TOPIC_FOR_CHECK_FILTERS.getName()); + navigateToTopicsAndOpenDetails(FILTERS_TOPIC.getName()); topicDetails .openDetailsTab(TopicDetails.TopicMenu.MESSAGES) .clickMessagesAddFiltersBtn() @@ -308,18 +291,19 @@ public void addNewFilterWithinTopic() { verifyElementsCondition(topicDetails.getAllAddFilterModalDisabledElements(), Condition.disabled); Assert.assertFalse(topicDetails.isSaveThisFilterCheckBoxSelected(), "isSaveThisFilterCheckBoxSelected()"); topicDetails - .setFilterCodeFldAddFilterMdl(filterName); + .setFilterCodeFldAddFilterMdl(FILTER_CODE_STRING) + .setDisplayNameFldAddFilterMdl(filterName); Assert.assertTrue(topicDetails.isAddFilterBtnAddFilterMdlEnabled(), "isAddFilterBtnAddFilterMdlEnabled()"); topicDetails.clickAddFilterBtnAndCloseMdl(true); - Assert.assertTrue(topicDetails.isActiveFilterVisible(filterName), "isActiveFilterVisible()"); + Assert.assertTrue(topicDetails.isActiveFilterVisible(filterName), + String.format("isActiveFilterVisible()[%s]", filterName)); } - @QaseId(352) @Test(priority = 13) public void editActiveSmartFilterCheck() { + String filterCode = FILTER_CODE_STRING; String filterName = randomAlphabetic(5); - String filterCode = randomAlphabetic(5); - navigateToTopicsAndOpenDetails(TOPIC_FOR_CHECK_FILTERS.getName()); + navigateToTopicsAndOpenDetails(FILTERS_TOPIC.getName()); topicDetails .openDetailsTab(TopicDetails.TopicMenu.MESSAGES) .clickMessagesAddFiltersBtn() @@ -334,77 +318,69 @@ public void editActiveSmartFilterCheck() { softly.assertEquals(topicDetails.getFilterNameValue(), filterName, "getFilterNameValue()"); softly.assertAll(); String newFilterName = randomAlphabetic(5); - String newFilterCode = randomAlphabetic(5); topicDetails - .setFilterCodeFldAddFilterMdl(newFilterCode) + .setFilterCodeFldAddFilterMdl(FILTER_CODE_JSON) .setDisplayNameFldAddFilterMdl(newFilterName) .clickSaveFilterBtnAndCloseMdl(true); - softly.assertTrue(topicDetails.isActiveFilterVisible(newFilterName), "isActiveFilterVisible()"); - softly.assertEquals(topicDetails.getSearchFieldValue(), newFilterCode, "getSearchFieldValue()"); - softly.assertAll(); + Assert.assertTrue(topicDetails.isActiveFilterVisible(newFilterName), + String.format("isActiveFilterVisible()[%s]", newFilterName)); } - @QaseId(13) @Test(priority = 14) - public void checkFilterSavingWithinSavedFilters() { - String displayName = randomAlphabetic(5); - navigateToTopicsAndOpenDetails(TOPIC_FOR_CHECK_FILTERS.getName()); + public void saveSmartFilterCheck() { + String filterName = randomAlphabetic(5); + navigateToTopicsAndOpenDetails(FILTERS_TOPIC.getName()); topicDetails .openDetailsTab(TopicDetails.TopicMenu.MESSAGES) .clickMessagesAddFiltersBtn() .waitUntilAddFiltersMdlVisible() - .setFilterCodeFldAddFilterMdl(randomAlphabetic(4)) + .setFilterCodeFldAddFilterMdl(FILTER_CODE_JSON) .selectSaveThisFilterCheckboxMdl(true) - .setDisplayNameFldAddFilterMdl(displayName); + .setDisplayNameFldAddFilterMdl(filterName); Assert.assertTrue(topicDetails.isAddFilterBtnAddFilterMdlEnabled(), "isAddFilterBtnAddFilterMdlEnabled()"); topicDetails - .clickAddFilterBtnAndCloseMdl(false) - .openSavedFiltersListMdl(); - Assert.assertTrue(topicDetails.isFilterVisibleAtSavedFiltersMdl(displayName), - "isFilterVisibleAtSavedFiltersMdl()"); + .clickAddFilterBtnAndCloseMdl(false); + Assert.assertTrue(topicDetails.isFilterVisibleAtSavedFiltersMdl(filterName), + String.format("isFilterVisibleAtSavedFiltersMdl()[%s]", filterName)); } - @QaseId(14) @Test(priority = 15) - public void checkApplyingSavedFilterWithinTopicMessages() { - String displayName = randomAlphabetic(5); - navigateToTopicsAndOpenDetails(TOPIC_FOR_CHECK_FILTERS.getName()); + public void applySavedFilterWithinTopicMessagesCheck() { + String filterName = randomAlphabetic(5); + navigateToTopicsAndOpenDetails(FILTERS_TOPIC.getName()); topicDetails .openDetailsTab(TopicDetails.TopicMenu.MESSAGES) .clickMessagesAddFiltersBtn() .waitUntilAddFiltersMdlVisible() - .setFilterCodeFldAddFilterMdl(randomAlphabetic(4)) + .setFilterCodeFldAddFilterMdl(FILTER_CODE_JSON) .selectSaveThisFilterCheckboxMdl(true) - .setDisplayNameFldAddFilterMdl(displayName) + .setDisplayNameFldAddFilterMdl(filterName) .clickAddFilterBtnAndCloseMdl(false) - .openSavedFiltersListMdl() - .selectFilterAtSavedFiltersMdl(displayName) - .clickSelectFilterBtnAtSavedFiltersMdl(); - Assert.assertTrue(topicDetails.isActiveFilterVisible(displayName), "isActiveFilterVisible()"); + .selectFilterAtSavedFiltersMdl(filterName); + Assert.assertTrue(topicDetails.isActiveFilterVisible(filterName), + String.format("isActiveFilterVisible()[%s]", filterName)); } - @QaseId(11) @Test(priority = 16) - public void checkShowInternalTopicsButton() { + public void showInternalTopicsButtonCheck() { navigateToTopics(); topicsList .setShowInternalRadioButton(true); - Assert.assertTrue(topicsList.getInternalTopics().size() > 0, "getInternalTopics()"); + Assert.assertFalse(topicsList.getInternalTopics().isEmpty(), "getInternalTopics().isEmpty()"); topicsList .goToLastPage(); - Assert.assertTrue(topicsList.getNonInternalTopics().size() > 0, "getNonInternalTopics()"); + Assert.assertFalse(topicsList.getNonInternalTopics().isEmpty(), "getNonInternalTopics().isEmpty()"); topicsList .setShowInternalRadioButton(false); SoftAssert softly = new SoftAssert(); - softly.assertEquals(topicsList.getInternalTopics().size(), 0, "getInternalTopics()"); - softly.assertTrue(topicsList.getNonInternalTopics().size() > 0, "getNonInternalTopics()"); + softly.assertEquals(topicsList.getInternalTopics().size(), 0, "getInternalTopics().size()"); + softly.assertTrue(!topicsList.getNonInternalTopics().isEmpty(), "getNonInternalTopics().isEmpty()"); softly.assertAll(); } - @QaseId(334) @Test(priority = 17) - public void checkInternalTopicsNaming() { + public void internalTopicsNamingCheck() { navigateToTopics(); SoftAssert softly = new SoftAssert(); topicsList @@ -415,32 +391,31 @@ public void checkInternalTopicsNaming() { softly.assertAll(); } - @QaseId(56) @Test(priority = 18) - public void checkRetentionBytesAccordingToMaxSizeOnDisk() { + public void retentionBytesAccordingToMaxSizeOnDiskCheck() { navigateToTopics(); topicsList .clickAddTopicBtn(); topicCreateEditForm .waitUntilScreenReady() - .setTopicName(TOPIC_TO_CHECK_SETTINGS.getName()) - .setNumberOfPartitions(TOPIC_TO_CHECK_SETTINGS.getNumberOfPartitions()) - .setMaxMessageBytes(TOPIC_TO_CHECK_SETTINGS.getMaxMessageBytes()) + .setTopicName(SETTINGS_TOPIC.getName()) + .setNumberOfPartitions(SETTINGS_TOPIC.getNumberOfPartitions()) + .setMaxMessageBytes(SETTINGS_TOPIC.getMaxMessageBytes()) .clickSaveTopicBtn(); topicDetails .waitUntilScreenReady(); - TOPIC_LIST.add(TOPIC_TO_CHECK_SETTINGS); + TOPIC_LIST.add(SETTINGS_TOPIC); topicDetails .openDetailsTab(TopicDetails.TopicMenu.SETTINGS); topicSettingsTab .waitUntilScreenReady(); SoftAssert softly = new SoftAssert(); softly.assertEquals(topicSettingsTab.getValueByKey("retention.bytes"), - TOPIC_TO_CHECK_SETTINGS.getMaxSizeOnDisk().getOptionValue(), "getValueOfKey(retention.bytes)"); + SETTINGS_TOPIC.getMaxSizeOnDisk().getOptionValue(), "getValueOfKey(retention.bytes)"); softly.assertEquals(topicSettingsTab.getValueByKey("max.message.bytes"), - TOPIC_TO_CHECK_SETTINGS.getMaxMessageBytes(), "getValueOfKey(max.message.bytes)"); + SETTINGS_TOPIC.getMaxMessageBytes(), "getValueOfKey(max.message.bytes)"); softly.assertAll(); - TOPIC_TO_CHECK_SETTINGS + SETTINGS_TOPIC .setMaxSizeOnDisk(MaxSizeOnDisk.SIZE_1_GB) .setMaxMessageBytes("1000056"); topicDetails @@ -448,8 +423,8 @@ public void checkRetentionBytesAccordingToMaxSizeOnDisk() { .clickEditSettingsMenu(); topicCreateEditForm .waitUntilScreenReady() - .setMaxSizeOnDiskInGB(TOPIC_TO_CHECK_SETTINGS.getMaxSizeOnDisk()) - .setMaxMessageBytes(TOPIC_TO_CHECK_SETTINGS.getMaxMessageBytes()) + .setMaxSizeOnDiskInGB(SETTINGS_TOPIC.getMaxSizeOnDisk()) + .setMaxMessageBytes(SETTINGS_TOPIC.getMaxMessageBytes()) .clickSaveTopicBtn(); topicDetails .waitUntilScreenReady() @@ -457,29 +432,26 @@ public void checkRetentionBytesAccordingToMaxSizeOnDisk() { topicSettingsTab .waitUntilScreenReady(); softly.assertEquals(topicSettingsTab.getValueByKey("retention.bytes"), - TOPIC_TO_CHECK_SETTINGS.getMaxSizeOnDisk().getOptionValue(), "getValueOfKey(retention.bytes)"); + SETTINGS_TOPIC.getMaxSizeOnDisk().getOptionValue(), "getMaxSizeOnDisk()"); softly.assertEquals(topicSettingsTab.getValueByKey("max.message.bytes"), - TOPIC_TO_CHECK_SETTINGS.getMaxMessageBytes(), "getValueOfKey(max.message.bytes)"); + SETTINGS_TOPIC.getMaxMessageBytes(), "getMaxMessageBytes()"); softly.assertAll(); } - @QaseId(247) @Test(priority = 19) - public void recreateTopicFromTopicProfile() { - Topic topicToRecreate = new Topic() - .setName("topic-to-recreate-" + randomAlphabetic(5)) - .setNumberOfPartitions(1); + public void recreateTopicFromTopicProfileCheck() { + Topic recreateTopic = Topic.createTopic(); navigateToTopics(); topicsList .clickAddTopicBtn(); topicCreateEditForm .waitUntilScreenReady() - .setTopicName(topicToRecreate.getName()) - .setNumberOfPartitions(topicToRecreate.getNumberOfPartitions()) + .setTopicName(recreateTopic.getName()) + .setNumberOfPartitions(recreateTopic.getNumberOfPartitions()) .clickSaveTopicBtn(); topicDetails .waitUntilScreenReady(); - TOPIC_LIST.add(topicToRecreate); + TOPIC_LIST.add(recreateTopic); topicDetails .openDotMenu() .clickRecreateTopicMenu(); @@ -487,16 +459,13 @@ public void recreateTopicFromTopicProfile() { topicDetails .clickConfirmBtnMdl(); Assert.assertTrue(topicDetails.isAlertWithMessageVisible(SUCCESS, - String.format("Topic %s successfully recreated!", topicToRecreate.getName())), + String.format("Topic %s successfully recreated!", recreateTopic.getName())), "isAlertWithMessageVisible()"); } - @QaseId(8) @Test(priority = 20) - public void checkCopyTopicPossibility() { - Topic topicToCopy = new Topic() - .setName("topic-to-copy-" + randomAlphabetic(5)) - .setNumberOfPartitions(1); + public void copyTopicPossibilityCheck() { + Topic copyTopic = Topic.createTopic(); navigateToTopics(); topicsList .getAnyNonInternalTopic() @@ -506,13 +475,14 @@ public void checkCopyTopicPossibility() { .waitUntilScreenReady(); Assert.assertFalse(topicCreateEditForm.isCreateTopicButtonEnabled(), "isCreateTopicButtonEnabled()"); topicCreateEditForm - .setTopicName(topicToCopy.getName()) - .setNumberOfPartitions(topicToCopy.getNumberOfPartitions()) + .setTopicName(copyTopic.getName()) + .setNumberOfPartitions(copyTopic.getNumberOfPartitions()) .clickSaveTopicBtn(); topicDetails .waitUntilScreenReady(); - TOPIC_LIST.add(topicToCopy); - Assert.assertTrue(topicDetails.isTopicHeaderVisible(topicToCopy.getName()), "isTopicHeaderVisible()"); + TOPIC_LIST.add(copyTopic); + Assert.assertTrue(topicDetails.isTopicHeaderVisible(copyTopic.getName()), + String.format("isTopicHeaderVisible()[%s]", copyTopic.getName())); } @AfterClass(alwaysRun = true) diff --git a/e2e-tests/src/test/resources/manual.xml b/e2e-tests/src/test/resources/manual.xml deleted file mode 100644 index f39b81c0a..000000000 --- a/e2e-tests/src/test/resources/manual.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/e2e-tests/src/test/resources/qase.xml b/e2e-tests/src/test/resources/qase.xml deleted file mode 100644 index b30184f46..000000000 --- a/e2e-tests/src/test/resources/qase.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/e2e-tests/src/test/resources/regression.xml b/e2e-tests/src/test/resources/regression.xml index 443744224..65977da9f 100644 --- a/e2e-tests/src/test/resources/regression.xml +++ b/e2e-tests/src/test/resources/regression.xml @@ -1,10 +1,9 @@ - + - diff --git a/e2e-tests/src/test/resources/sanity.xml b/e2e-tests/src/test/resources/sanity.xml index 5b219a2fa..c4c4ac5a2 100644 --- a/e2e-tests/src/test/resources/sanity.xml +++ b/e2e-tests/src/test/resources/sanity.xml @@ -1,6 +1,6 @@ - + diff --git a/e2e-tests/src/test/resources/smoke.xml b/e2e-tests/src/test/resources/smoke.xml index e2a9d9b70..0916aa18d 100644 --- a/e2e-tests/src/test/resources/smoke.xml +++ b/e2e-tests/src/test/resources/smoke.xml @@ -1,6 +1,6 @@ - + diff --git a/pom.xml b/pom.xml index 26eeaf215..1b4bdb599 100644 --- a/pom.xml +++ b/pom.xml @@ -40,7 +40,7 @@ 2.14.0 3.5.2 1.5.5.Final - 1.18.30 + 1.18.32 3.23.3 2.13.9 2.0