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