diff --git a/kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/models/Schema.java b/kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/models/Schema.java index 8097c2e7d7..a9c7dca75b 100644 --- a/kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/models/Schema.java +++ b/kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/models/Schema.java @@ -14,19 +14,19 @@ public class Schema { private SchemaType type; public static Schema createSchemaAvro(){ - return new Schema().setName(randomAlphabetic(10)) + return new Schema().setName("schema_avro-" + randomAlphabetic(5)) .setType(SchemaType.AVRO) .setValuePath(System.getProperty("user.dir") + "/src/main/resources/testData/schema_avro_value.json"); } public static Schema createSchemaJson(){ - return new Schema().setName(randomAlphabetic(10)) + return new Schema().setName("schema_json-" + randomAlphabetic(5)) .setType(SchemaType.JSON) .setValuePath(System.getProperty("user.dir") + "/src/main/resources/testData/schema_Json_Value.json"); } public static Schema createSchemaProtobuf(){ - return new Schema().setName(randomAlphabetic(10)) + return new Schema().setName("schema_protobuf-" + randomAlphabetic(5)) .setType(SchemaType.PROTOBUF) .setValuePath(System.getProperty("user.dir") + "/src/main/resources/testData/schema_protobuf_value.txt"); } diff --git a/kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/models/Topic.java b/kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/models/Topic.java index 18763e3719..d9a306a4f5 100644 --- a/kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/models/Topic.java +++ b/kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/models/Topic.java @@ -1,10 +1,14 @@ package com.provectus.kafka.ui.models; +import com.provectus.kafka.ui.pages.topic.TopicCreateEditForm; import lombok.Data; import lombok.experimental.Accessors; @Data @Accessors(chain = true) public class Topic { - private String name, cleanupPolicyValue, timeToRetainData, maxSizeOnDisk, maxMessageBytes, messageKey, messageContent ; -} + private String name, timeToRetainData, maxMessageBytes, messageKey, messageContent, + partitions, customParameter; + private TopicCreateEditForm.CleanupPolicyValue cleanupPolicyValue; + private TopicCreateEditForm.MaxSizeOnDisk maxSizeOnDisk; +} \ No newline at end of file diff --git a/kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/pages/NaviSideBar.java b/kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/pages/NaviSideBar.java index 0f6f4c2260..565bbd24e5 100644 --- a/kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/pages/NaviSideBar.java +++ b/kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/pages/NaviSideBar.java @@ -11,6 +11,7 @@ import java.util.stream.Stream; import static com.codeborne.selenide.Selenide.$x; import static com.provectus.kafka.ui.settings.Source.CLUSTER_NAME; +import static com.provectus.kafka.ui.utilities.WebUtils.clickByActions; public class NaviSideBar { @@ -22,7 +23,7 @@ public class NaviSideBar { private SelenideElement expandCluster(String clusterName) { SelenideElement clusterElement = $x(String.format(clusterElementLocator, clusterName)).shouldBe(Condition.visible); if (clusterElement.parent().$$x(".//ul").size() == 0) { - clusterElement.click(); + clickByActions(clusterElement); } return clusterElement; } @@ -36,10 +37,8 @@ public class NaviSideBar { @Step public NaviSideBar openSideMenu(String clusterName, SideMenuOption option) { - expandCluster(clusterName) - .parent() - .$x(String.format(sideMenuOptionElementLocator, option.value)) - .click(); + clickByActions(expandCluster(clusterName).parent() + .$x(String.format(sideMenuOptionElementLocator, option.value))); return this; } diff --git a/kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/pages/connector/ConnectorCreateForm.java b/kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/pages/connector/ConnectorCreateForm.java index 5c00713746..26cab86f63 100644 --- a/kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/pages/connector/ConnectorCreateForm.java +++ b/kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/pages/connector/ConnectorCreateForm.java @@ -5,6 +5,7 @@ import com.codeborne.selenide.SelenideElement; import io.qameta.allure.Step; import static com.codeborne.selenide.Selenide.$x; +import static com.codeborne.selenide.Selenide.refresh; import static com.provectus.kafka.ui.utilities.WebUtils.clickByJavaScript; public class ConnectorCreateForm { @@ -23,13 +24,18 @@ public class ConnectorCreateForm { } @Step - public ConnectorCreateForm setConnectorConfig(String connectName, String configJson) { + public ConnectorCreateForm setConnectorDetails(String connectName, String configJson) { nameField.shouldBe(Condition.enabled).setValue(connectName); configField.shouldBe(Condition.enabled).click(); contentTextArea.setValue(configJson); nameField.shouldBe(Condition.enabled).click(); - clickByJavaScript(submitBtn); - loadingSpinner.shouldBe(Condition.disappear); return this; } -} \ No newline at end of file + + @Step + public ConnectorCreateForm clickSubmitButton() { + clickByJavaScript(submitBtn); + loadingSpinner.shouldBe(Condition.disappear); + return this; + } +} diff --git a/kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/pages/connector/ConnectorDetails.java b/kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/pages/connector/ConnectorDetails.java index c099c60563..e5e6b4cbd3 100644 --- a/kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/pages/connector/ConnectorDetails.java +++ b/kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/pages/connector/ConnectorDetails.java @@ -1,35 +1,36 @@ package com.provectus.kafka.ui.pages.connector; -import com.codeborne.selenide.Condition; -import com.codeborne.selenide.SelenideElement; -import io.qameta.allure.Step; - -import java.util.Arrays; - import static com.codeborne.selenide.Selenide.$x; import static com.provectus.kafka.ui.utilities.WebUtils.clearByKeyboard; import static com.provectus.kafka.ui.utilities.WebUtils.clickByJavaScript; +import static com.provectus.kafka.ui.utilities.WebUtils.isVisible; + +import com.codeborne.selenide.Condition; +import com.codeborne.selenide.SelenideElement; +import io.qameta.allure.Step; +import java.time.Duration; +import java.util.Arrays; public class ConnectorDetails { - protected SelenideElement loadingSpinner = $x("//*[contains(text(),'Loading')]"); - protected SelenideElement dotMenuBtn = $x("//button[@aria-label='Dropdown Toggle']"); - protected SelenideElement deleteBtn = $x("//li/div[contains(text(),'Delete')]"); - protected SelenideElement confirmBtnMdl = $x("//div[@role='dialog']//button[contains(text(),'Confirm')]"); - protected SelenideElement submitBtn = $x("//button[@type='submit']"); - protected SelenideElement contentTextArea = $x("//textarea[@class='ace_text-input']"); - protected SelenideElement taskTab = $x("//a[contains(text(),'Tasks')]"); - protected SelenideElement configTab = $x("//a[contains(text(),'Config')]"); - protected SelenideElement configField = $x("//div[@id='config']"); - protected SelenideElement successAlertMessage = $x("//div[contains(text(),'Config successfully updated')]"); + protected SelenideElement loadingSpinner = $x("//*[contains(text(),'Loading')]"); + protected SelenideElement dotMenuBtn = $x("//button[@aria-label='Dropdown Toggle']"); + protected SelenideElement deleteBtn = $x("//li/div[contains(text(),'Delete')]"); + protected SelenideElement confirmBtnMdl = $x("//div[@role='dialog']//button[contains(text(),'Confirm')]"); + protected SelenideElement submitBtn = $x("//button[@type='submit']"); + protected SelenideElement contentTextArea = $x("//textarea[@class='ace_text-input']"); + protected SelenideElement taskTab = $x("//a[contains(text(),'Tasks')]"); + protected SelenideElement configTab = $x("//a[contains(text(),'Config')]"); + protected SelenideElement configField = $x("//div[@id='config']"); + protected SelenideElement successAlertMessage = $x("//div[contains(text(),'Config successfully updated')]"); + protected String connectorHeaderLocator = "//h1[contains(text(),'%s')]"; - - @Step - public ConnectorDetails waitUntilScreenReady() { - loadingSpinner.shouldBe(Condition.disappear); - Arrays.asList(taskTab,configTab).forEach(elementsMenu -> elementsMenu.shouldBe(Condition.visible)); - return this; - } + @Step + public ConnectorDetails waitUntilScreenReady() { + loadingSpinner.shouldBe(Condition.disappear); + dotMenuBtn.shouldBe(Condition.visible); + return this; + } @Step public ConnectorDetails openConfigTab() { @@ -43,11 +44,16 @@ public class ConnectorDetails { clearByKeyboard(contentTextArea); contentTextArea.setValue(configJson); configField.shouldBe(Condition.enabled).click(); - clickByJavaScript(submitBtn); - successAlertMessage.shouldBe(Condition.visible); return this; } + @Step + public ConnectorDetails clickSubmitButton() { + clickByJavaScript(submitBtn); + successAlertMessage.shouldBe(Condition.visible); + return this; + } + @Step public ConnectorDetails openDotMenu() { clickByJavaScript(dotMenuBtn); @@ -74,4 +80,9 @@ public class ConnectorDetails { clickConfirmBtn(); return this; } -} \ No newline at end of file + + @Step + public boolean isConnectorHeaderVisible(String connectorName) { + return isVisible($x(String.format(connectorHeaderLocator,connectorName))); + } +} diff --git a/kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/pages/connector/KafkaConnectList.java b/kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/pages/connector/KafkaConnectList.java index 36a905d2d9..16104ac1ca 100644 --- a/kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/pages/connector/KafkaConnectList.java +++ b/kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/pages/connector/KafkaConnectList.java @@ -15,16 +15,15 @@ import static com.provectus.kafka.ui.utilities.WebUtils.isVisible; public class KafkaConnectList { protected SelenideElement loadingSpinner = $x("//*[contains(text(),'Loading')]"); - protected SelenideElement pageTitle = $x("//h1[text()='Connectors']"); protected SelenideElement createConnectorBtn = $x("//button[contains(text(),'Create Connector')]"); protected SelenideElement connectorsGrid = $x("//table"); - protected String tabElementLocator = "//td[contains(text(),'%s')]"; + protected String connectorNameLocator = "//td[contains(text(),'%s')]"; @Step public KafkaConnectList waitUntilScreenReady() { - loadingSpinner.shouldBe(Condition.disappear); - pageTitle.shouldBe(Condition.visible); - return this; + loadingSpinner.shouldBe(Condition.disappear); + createConnectorBtn.shouldBe(Condition.visible); + return this; } @Step @@ -35,7 +34,7 @@ public class KafkaConnectList { @Step public KafkaConnectList openConnector(String connectorName) { - $x(String.format(tabElementLocator,connectorName)) + $x(String.format(connectorNameLocator, connectorName)) .shouldBe(Condition.enabled).click(); return this; } @@ -43,13 +42,13 @@ public class KafkaConnectList { @Step public boolean isConnectorVisible(String connectorName) { connectorsGrid.shouldBe(Condition.visible); - return isVisible($x(String.format(tabElementLocator,connectorName))); + return isVisible($x(String.format(connectorNameLocator,connectorName))); } @Step public KafkaConnectList connectorIsUpdatedInList(String connectorName, String topicName) { - $x(String.format(tabElementLocator,connectorName)).shouldBe(Condition.visible); - By.xpath(String.format(tabElementLocator,topicName)).refreshUntil(Condition.visible); + $x(String.format(connectorNameLocator,connectorName)).shouldBe(Condition.visible); + By.xpath(String.format(connectorNameLocator,topicName)).refreshUntil(Condition.visible); return this; } } diff --git a/kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/pages/schema/SchemaDetails.java b/kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/pages/schema/SchemaDetails.java index e3f392514b..981de748e9 100644 --- a/kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/pages/schema/SchemaDetails.java +++ b/kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/pages/schema/SchemaDetails.java @@ -7,6 +7,7 @@ import io.qameta.allure.Step; import static com.codeborne.selenide.Selenide.$$x; import static com.codeborne.selenide.Selenide.$x; import static com.provectus.kafka.ui.utilities.WebUtils.clickByJavaScript; +import static com.provectus.kafka.ui.utilities.WebUtils.isVisible; public class SchemaDetails { @@ -17,6 +18,8 @@ public class SchemaDetails { protected SelenideElement editSchemaBtn = $x("//button[contains(text(),'Edit Schema')]"); protected SelenideElement removeBtn = $x("//*[contains(text(),'Remove')]"); protected SelenideElement confirmBtn = $x("//div[@role='dialog']//button[contains(text(),'Confirm')]"); + protected SelenideElement schemaTypeDdl = $x("//h4[contains(text(),'Type')]/../p"); + protected String schemaHeaderLocator = "//h1[contains(text(),'%s')]"; @Step public SchemaDetails waitUntilScreenReady() { @@ -30,6 +33,16 @@ public class SchemaDetails { return compatibilityField.getText(); } + @Step + public boolean isSchemaHeaderVisible(String schemaName) { + return isVisible($x(String.format(schemaHeaderLocator,schemaName))); + } + + @Step + public String getSchemaType() { + return schemaTypeDdl.getText(); + } + @Step public SchemaDetails openEditSchema(){ editSchemaBtn.shouldBe(Condition.visible).click(); diff --git a/kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/pages/topic/TopicCreateEditForm.java b/kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/pages/topic/TopicCreateEditForm.java index 8a71ddb6ff..539520445e 100644 --- a/kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/pages/topic/TopicCreateEditForm.java +++ b/kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/pages/topic/TopicCreateEditForm.java @@ -14,12 +14,14 @@ public class TopicCreateEditForm { protected SelenideElement loadingSpinner = $x("//*[contains(text(),'Loading')]"); protected SelenideElement timeToRetainField = $x("//input[@id='timeToRetain']"); + protected SelenideElement partitionsField = $x("//input[@name='partitions']"); protected SelenideElement nameField = $x("//input[@name='name']"); protected SelenideElement maxMessageBytesField = $x("//input[@name='maxMessageBytes']"); protected SelenideElement minInSyncReplicasField = $x("//input[@name='minInSyncReplicas']"); protected SelenideElement cleanUpPolicyDdl = $x("//ul[@id='topicFormCleanupPolicy']"); + protected SelenideElement maxSizeOnDiscDdl = $x("//ul[@id='topicFormRetentionBytes']"); protected SelenideElement createTopicBtn = $x("//button[@type='submit']"); - protected String cleanUpPolicyTypeLocator = "//li[text()='%s']"; + protected String ddlElementLocator = "//li[@value='%s']"; @Step public TopicCreateEditForm waitUntilScreenReady(){ @@ -53,8 +55,9 @@ public class TopicCreateEditForm { } @Step - public TopicCreateEditForm setMaxSizeOnDiskInGB(String value) { - new KafkaUISelectElement("retentionBytes").selectByVisibleText(value); + public TopicCreateEditForm setMaxSizeOnDiskInGB(MaxSizeOnDisk MaxSizeOnDisk) { + maxSizeOnDiscDdl.shouldBe(Condition.visible).click(); + $x(String.format(ddlElementLocator, MaxSizeOnDisk.getOptionValue())).shouldBe(Condition.visible).click(); return this; } @@ -69,6 +72,12 @@ public class TopicCreateEditForm { return setMaxMessageBytes(Long.parseLong(bytes)); } + @Step + public TopicCreateEditForm setPartitions(String partitions){ + partitionsField.setValue(partitions); + return this; + } + @Step public TopicCreateEditForm setTimeToRetainDataInMsUsingButtons(String value) { timeToRetainField @@ -81,15 +90,9 @@ public class TopicCreateEditForm { } @Step - public TopicCreateEditForm selectCleanupPolicy(CleanupPolicyValue cleanupPolicyValue) { - return selectFromDropDownByOptionValue("cleanupPolicy", - cleanupPolicyValue.getOptionValue()); - } - - @Step - public TopicCreateEditForm selectCleanupPolicy(String cleanupPolicyOptionValue) { + public TopicCreateEditForm selectCleanupPolicy(CleanupPolicyValue cleanupPolicyOptionValue) { cleanUpPolicyDdl.shouldBe(Condition.visible).click(); - $x(String.format(cleanUpPolicyTypeLocator,cleanupPolicyOptionValue)).shouldBe(Condition.visible).click(); + $x(String.format(ddlElementLocator,cleanupPolicyOptionValue.getOptionValue())).shouldBe(Condition.visible).click(); return this; } @@ -242,6 +245,30 @@ public class TopicCreateEditForm { } } + public enum MaxSizeOnDisk { + NOT_SET("-1", "Not Set"), + SIZE_1_GB("1073741824", "1 GB"), + SIZE_10_GB("10737418240", "10 GB"), + SIZE_20_GB("21474836480", "20 GB"), + SIZE_50_GB("53687091200", "50 GB"); + + private final String optionValue; + private final String visibleText; + + MaxSizeOnDisk(String optionValue, String visibleText) { + this.optionValue = optionValue; + this.visibleText = visibleText; + } + + public String getOptionValue() { + return optionValue; + } + + public String getVisibleText() { + return visibleText; + } + } + private TopicCreateEditForm selectFromDropDownByOptionValue(String dropDownElementName, String optionValue) { KafkaUISelectElement select = new KafkaUISelectElement(dropDownElementName); diff --git a/kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/pages/topic/TopicDetails.java b/kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/pages/topic/TopicDetails.java index 73ce320a48..a065169c0c 100644 --- a/kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/pages/topic/TopicDetails.java +++ b/kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/pages/topic/TopicDetails.java @@ -11,6 +11,7 @@ import java.util.Arrays; import static com.codeborne.selenide.Selenide.*; import static com.provectus.kafka.ui.utilities.WebUtils.clickByJavaScript; +import static com.provectus.kafka.ui.utilities.WebUtils.isVisible; @ExtensionMethod({WaitUtils.class}) public class TopicDetails { @@ -26,7 +27,10 @@ public class TopicDetails { protected SelenideElement confirmBtn = $x("//div[@role='dialog']//button[contains(text(),'Confirm')]"); 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 String consumerIdLocator = "//a[@title='%s']"; + protected String topicHeaderLocator = "//h1[contains(text(),'%s')]"; @Step public TopicDetails waitUntilScreenReady() { @@ -54,6 +58,21 @@ public class TopicDetails { return this; } + @Step + public String getCleanUpPolicy(){ + return cleanUpPolicyField.getText(); + } + + @Step + public String getPartitions(){ + return partitionsField.getText(); + } + + @Step + public boolean isTopicHeaderVisible(String topicName) { + return isVisible($x(String.format(topicHeaderLocator,topicName))); + } + @Step public TopicDetails clickClearMessagesBtn() { clearMessagesBtn.shouldBe(Condition.visible.because("Clear Messages invisible")).click(); @@ -74,7 +93,6 @@ public class TopicDetails { clickByJavaScript(produceMessageBtn); return this; } - @Step public TopicDetails openConsumerGroup(String consumerId) { $x(String.format(consumerIdLocator, consumerId)).click(); @@ -158,4 +176,4 @@ public class TopicDetails { return "TopicMenu{" + "value='" + value + '\'' + '}'; } } -} \ No newline at end of file +} diff --git a/kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/utilities/WebUtils.java b/kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/utilities/WebUtils.java index 7215cb7b86..ad93bfbc77 100644 --- a/kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/utilities/WebUtils.java +++ b/kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/utilities/WebUtils.java @@ -2,14 +2,25 @@ package com.provectus.kafka.ui.utilities; import com.codeborne.selenide.Condition; import com.codeborne.selenide.SelenideElement; +import com.codeborne.selenide.WebDriverRunner; import lombok.extern.slf4j.Slf4j; import org.openqa.selenium.Keys; +import org.openqa.selenium.interactions.Actions; import static com.codeborne.selenide.Selenide.executeJavaScript; @Slf4j public class WebUtils { + public static void clickByActions(SelenideElement element) { + log.debug("\nclickByActions: {}", element.getSearchCriteria()); + element.shouldBe(Condition.enabled); + new Actions(WebDriverRunner.getWebDriver()) + .moveToElement(element) + .click(element) + .perform(); + } + public static void clickByJavaScript(SelenideElement element) { log.debug("\nclickByJavaScript: {}", element.getSearchCriteria()); element.shouldBe(Condition.enabled); @@ -34,4 +45,5 @@ public class WebUtils { } return isVisible; } + } \ No newline at end of file diff --git a/kafka-ui-e2e-checks/src/test/java/com/provectus/kafka/ui/tests/ConnectorsTests.java b/kafka-ui-e2e-checks/src/test/java/com/provectus/kafka/ui/tests/ConnectorsTests.java index bd06882887..1203fc9ebc 100644 --- a/kafka-ui-e2e-checks/src/test/java/com/provectus/kafka/ui/tests/ConnectorsTests.java +++ b/kafka-ui-e2e-checks/src/test/java/com/provectus/kafka/ui/tests/ConnectorsTests.java @@ -15,6 +15,7 @@ import java.util.List; import static com.provectus.kafka.ui.pages.NaviSideBar.SideMenuOption.KAFKA_CONNECT; import static com.provectus.kafka.ui.settings.Source.CLUSTER_NAME; import static com.provectus.kafka.ui.utilities.FileUtils.getResourceAsString; +import static org.apache.commons.lang.RandomStringUtils.randomAlphabetic; @TestInstance(TestInstance.Lifecycle.PER_CLASS) public class ConnectorsTests extends BaseTest { @@ -26,19 +27,19 @@ public class ConnectorsTests extends BaseTest { private static final String MESSAGE_CONTENT = "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") + .setName("topic_for_create_connector-" + randomAlphabetic(5)) .setMessageContent(MESSAGE_CONTENT).setMessageKey(MESSAGE_KEY); private static final Topic TOPIC_FOR_DELETE = new Topic() - .setName("topic_for_delete_connector") + .setName("topic_for_delete_connector-" + randomAlphabetic(5)) .setMessageContent(MESSAGE_CONTENT).setMessageKey(MESSAGE_KEY); private static final Topic TOPIC_FOR_UPDATE = new Topic() - .setName("topic_for_update_connector") + .setName("topic_for_update_connector-" + randomAlphabetic(5)) .setMessageContent(MESSAGE_CONTENT).setMessageKey(MESSAGE_KEY); private static final Connector CONNECTOR_FOR_DELETE = new Connector() - .setName("sink_postgres_activities_e2e_checks_for_delete") + .setName("sink_postgres_activities_e2e_checks_for_delete-" + randomAlphabetic(5)) .setConfig(getResourceAsString("delete_connector_config.json")); private static final Connector CONNECTOR_FOR_UPDATE = new Connector() - .setName("sink_postgres_activities_e2e_checks_for_update") + .setName("sink_postgres_activities_e2e_checks_for_update-" + randomAlphabetic(5)) .setConfig(getResourceAsString("config_for_create_connector_via_api.json")); @BeforeAll @@ -60,7 +61,7 @@ public class ConnectorsTests extends BaseTest { @Test public void createConnector() { Connector connectorForCreate = new Connector() - .setName("sink_postgres_activities_e2e_checks") + .setName("sink_postgres_activities_e2e_checks-" + randomAlphabetic(5)) .setConfig(getResourceAsString("config_for_create_connector.json")); naviSideBar .openSideMenu(KAFKA_CONNECT); @@ -69,12 +70,23 @@ public class ConnectorsTests extends BaseTest { .clickCreateConnectorBtn(); connectorCreateForm .waitUntilScreenReady() - .setConnectorConfig(connectorForCreate.getName(), connectorForCreate.getConfig()); + .setConnectorDetails(connectorForCreate.getName(), connectorForCreate.getConfig()) + .clickSubmitButton(); + connectorDetails + .waitUntilScreenReady(); + naviSideBar + .openSideMenu(KAFKA_CONNECT); + kafkaConnectList + .waitUntilScreenReady() + .openConnector(connectorForCreate.getName()); + connectorDetails + .waitUntilScreenReady(); + Assertions.assertTrue(connectorDetails.isConnectorHeaderVisible(connectorForCreate.getName()),"isConnectorTitleVisible()"); naviSideBar .openSideMenu(KAFKA_CONNECT); kafkaConnectList .waitUntilScreenReady(); - Assertions.assertTrue(kafkaConnectList.isConnectorVisible(connectorForCreate.getName()), "isConnectorVisible()"); + Assertions.assertTrue(kafkaConnectList.isConnectorVisible(CONNECTOR_FOR_DELETE.getName()), "isConnectorVisible()"); CONNECTOR_LIST.add(connectorForCreate); } @@ -92,7 +104,8 @@ public class ConnectorsTests extends BaseTest { connectorDetails .waitUntilScreenReady() .openConfigTab() - .setConfig(CONNECTOR_FOR_UPDATE.getConfig()); + .setConfig(CONNECTOR_FOR_UPDATE.getConfig()) + .clickSubmitButton(); naviSideBar .openSideMenu(KAFKA_CONNECT); kafkaConnectList diff --git a/kafka-ui-e2e-checks/src/test/java/com/provectus/kafka/ui/tests/SchemasTests.java b/kafka-ui-e2e-checks/src/test/java/com/provectus/kafka/ui/tests/SchemasTests.java index e76f28728e..e0c33e2f3c 100644 --- a/kafka-ui-e2e-checks/src/test/java/com/provectus/kafka/ui/tests/SchemasTests.java +++ b/kafka-ui-e2e-checks/src/test/java/com/provectus/kafka/ui/tests/SchemasTests.java @@ -8,6 +8,7 @@ import com.provectus.kafka.ui.utilities.qaseIoUtils.annotations.Suite; import com.provectus.kafka.ui.utilities.qaseIoUtils.enums.Status; import io.qase.api.annotation.CaseId; import lombok.SneakyThrows; +import org.assertj.core.api.SoftAssertions; import org.junit.jupiter.api.*; import java.util.ArrayList; @@ -54,11 +55,16 @@ public class SchemasTests extends BaseTest { .clickSubmitBtn(); schemaDetails .waitUntilScreenReady(); + SoftAssertions softly = new SoftAssertions(); + softly.assertThat(schemaDetails.isSchemaHeaderVisible(schemaAvro.getName())).as("isSchemaHeaderVisible()").isTrue(); + softly.assertThat(schemaDetails.getSchemaType()).as("getSchemaType()").isEqualTo(schemaAvro.getType().getValue()); + softly.assertThat(schemaDetails.getCompatibility()).as("getCompatibility()").isEqualTo(CompatibilityLevel.CompatibilityEnum.BACKWARD.getValue()); + softly.assertAll(); naviSideBar .openSideMenu(SCHEMA_REGISTRY); schemaRegistryList .waitUntilScreenReady(); - Assertions.assertTrue(schemaRegistryList.isSchemaVisible(schemaAvro.getName()),"isSchemaVisible()"); + Assertions.assertTrue(schemaRegistryList.isSchemaVisible(AVRO_API.getName()),"isSchemaVisible()"); SCHEMA_LIST.add(schemaAvro); } @@ -131,11 +137,16 @@ public class SchemasTests extends BaseTest { .clickSubmitBtn(); schemaDetails .waitUntilScreenReady(); + SoftAssertions softly = new SoftAssertions(); + softly.assertThat(schemaDetails.isSchemaHeaderVisible(schemaJson.getName())).as("isSchemaHeaderVisible()").isTrue(); + softly.assertThat(schemaDetails.getSchemaType()).as("getSchemaType()").isEqualTo(schemaJson.getType().getValue()); + softly.assertThat(schemaDetails.getCompatibility()).as("getCompatibility()").isEqualTo(CompatibilityLevel.CompatibilityEnum.BACKWARD.getValue()); + softly.assertAll(); naviSideBar .openSideMenu(SCHEMA_REGISTRY); schemaRegistryList .waitUntilScreenReady(); - Assertions.assertTrue(schemaRegistryList.isSchemaVisible(schemaJson.getName()),"isSchemaVisible()"); + Assertions.assertTrue(schemaRegistryList.isSchemaVisible(JSON_API.getName()),"isSchemaVisible()"); SCHEMA_LIST.add(schemaJson); } @@ -180,11 +191,16 @@ public class SchemasTests extends BaseTest { .clickSubmitBtn(); schemaDetails .waitUntilScreenReady(); + SoftAssertions softly = new SoftAssertions(); + softly.assertThat(schemaDetails.isSchemaHeaderVisible(schemaProtobuf.getName())).as("isSchemaHeaderVisible()").isTrue(); + softly.assertThat(schemaDetails.getSchemaType()).as("getSchemaType()").isEqualTo(schemaProtobuf.getType().getValue()); + softly.assertThat(schemaDetails.getCompatibility()).as("getCompatibility()").isEqualTo(CompatibilityLevel.CompatibilityEnum.BACKWARD.getValue()); + softly.assertAll(); naviSideBar .openSideMenu(SCHEMA_REGISTRY); schemaRegistryList .waitUntilScreenReady(); - Assertions.assertTrue(schemaRegistryList.isSchemaVisible(schemaProtobuf.getName()),"isSchemaVisible()"); + Assertions.assertTrue(schemaRegistryList.isSchemaVisible(PROTOBUF_API.getName()),"isSchemaVisible()"); SCHEMA_LIST.add(schemaProtobuf); } diff --git a/kafka-ui-e2e-checks/src/test/java/com/provectus/kafka/ui/tests/TopicTests.java b/kafka-ui-e2e-checks/src/test/java/com/provectus/kafka/ui/tests/TopicTests.java index 33ad3d015a..97f70c194e 100644 --- a/kafka-ui-e2e-checks/src/test/java/com/provectus/kafka/ui/tests/TopicTests.java +++ b/kafka-ui-e2e-checks/src/test/java/com/provectus/kafka/ui/tests/TopicTests.java @@ -15,29 +15,36 @@ import java.util.ArrayList; import java.util.List; import static com.provectus.kafka.ui.pages.NaviSideBar.SideMenuOption.TOPICS; +import static com.provectus.kafka.ui.pages.topic.TopicCreateEditForm.CleanupPolicyValue.COMPACT; +import static com.provectus.kafka.ui.pages.topic.TopicCreateEditForm.CleanupPolicyValue.DELETE; +import static com.provectus.kafka.ui.pages.topic.TopicCreateEditForm.MaxSizeOnDisk.SIZE_20_GB; import static com.provectus.kafka.ui.settings.Source.CLUSTER_NAME; import static com.provectus.kafka.ui.utilities.FileUtils.fileToString; +import static org.apache.commons.lang.RandomStringUtils.randomAlphabetic; import static org.assertj.core.api.Assertions.assertThat; @TestInstance(TestInstance.Lifecycle.PER_CLASS) public class TopicTests extends BaseTest { private static final long SUITE_ID = 2; private static final String SUITE_TITLE = "Topics"; - + private static final Topic TOPIC_TO_CREATE = new Topic() + .setName("new-topic-"+ randomAlphabetic(5)) + .setPartitions("1") + .setCleanupPolicyValue(DELETE); private static final Topic TOPIC_FOR_UPDATE = new Topic() - .setName("topic-to-update") - .setCleanupPolicyValue("Compact") + .setName("topic-to-update-" + randomAlphabetic(5)) + .setCleanupPolicyValue(COMPACT) .setTimeToRetainData("604800001") - .setMaxSizeOnDisk("20 GB") + .setMaxSizeOnDisk(SIZE_20_GB) .setMaxMessageBytes("1000020") .setMessageKey(fileToString(System.getProperty("user.dir") + "/src/test/resources/producedkey.txt")) .setMessageContent(fileToString(System.getProperty("user.dir") + "/src/test/resources/testData.txt")); private static final Topic TOPIC_FOR_MESSAGES = new Topic() - .setName("topic-with-clean-message-attribute") + .setName("topic-with-clean-message-attribute-" + randomAlphabetic(5)) .setMessageKey(fileToString(System.getProperty("user.dir") + "/src/test/resources/producedkey.txt")) .setMessageContent(fileToString(System.getProperty("user.dir") + "/src/test/resources/testData.txt")); - private static final Topic TOPIC_FOR_DELETE = new Topic().setName("topic-to-delete"); + private static final Topic TOPIC_FOR_DELETE = new Topic().setName("topic-to-delete-" + randomAlphabetic(5)); private static final List TOPIC_LIST = new ArrayList<>(); @BeforeAll @@ -52,7 +59,6 @@ public class TopicTests extends BaseTest { @CaseId(199) @Test public void createTopic() { - Topic topicToCreate = new Topic().setName("new-topic"); naviSideBar .openSideMenu(TOPICS); topicsList @@ -60,16 +66,28 @@ public class TopicTests extends BaseTest { .clickAddTopicBtn(); topicCreateEditForm .waitUntilScreenReady() - .setTopicName(topicToCreate.getName()) + .setTopicName(TOPIC_TO_CREATE.getName()) + .setPartitions(TOPIC_TO_CREATE.getPartitions()) + .selectCleanupPolicy(TOPIC_TO_CREATE.getCleanupPolicyValue()) .clickCreateTopicBtn(); topicDetails .waitUntilScreenReady(); + naviSideBar + .openSideMenu(TOPICS); + topicsList + .waitUntilScreenReady() + .openTopic(TOPIC_TO_CREATE.getName()); + SoftAssertions softly = new SoftAssertions(); + softly.assertThat(topicDetails.isTopicHeaderVisible(TOPIC_TO_CREATE.getName())).as("isTopicHeaderVisible()").isTrue(); + softly.assertThat(topicDetails.getCleanUpPolicy()).as("getCleanUpPolicy()").isEqualTo(TOPIC_TO_CREATE.getCleanupPolicyValue().toString()); + softly.assertThat(topicDetails.getPartitions()).as("getPartitions()").isEqualTo(TOPIC_TO_CREATE.getPartitions()); + softly.assertAll(); naviSideBar .openSideMenu(TOPICS); topicsList .waitUntilScreenReady(); - Assertions.assertTrue(topicsList.isTopicVisible(topicToCreate.getName()), "isTopicVisible"); - TOPIC_LIST.add(topicToCreate); + Assertions.assertTrue(topicsList.isTopicVisible(TOPIC_TO_CREATE.getName()), "isTopicVisible"); + TOPIC_LIST.add(TOPIC_TO_CREATE); } @Disabled("https://github.com/provectus/kafka-ui/issues/2625") @@ -89,7 +107,7 @@ public class TopicTests extends BaseTest { .openEditSettings(); topicCreateEditForm .waitUntilScreenReady() - .selectCleanupPolicy(TOPIC_FOR_UPDATE.getCleanupPolicyValue()) + .selectCleanupPolicy((TOPIC_FOR_UPDATE.getCleanupPolicyValue())) .setMinInsyncReplicas(10) .setTimeToRetainDataInMs(TOPIC_FOR_UPDATE.getTimeToRetainData()) .setMaxSizeOnDiskInGB(TOPIC_FOR_UPDATE.getMaxSizeOnDisk()) @@ -106,10 +124,10 @@ public class TopicTests extends BaseTest { .waitUntilScreenReady() .openEditSettings(); SoftAssertions softly = new SoftAssertions(); - softly.assertThat(topicCreateEditForm.getCleanupPolicy()).as("Cleanup Policy").isEqualTo(TOPIC_FOR_UPDATE.getCleanupPolicyValue()); - softly.assertThat(topicCreateEditForm.getTimeToRetain()).as("Time to retain").isEqualTo(TOPIC_FOR_UPDATE.getTimeToRetainData()); - softly.assertThat(topicCreateEditForm.getMaxSizeOnDisk()).as("Max size on disk").isEqualTo(TOPIC_FOR_UPDATE.getMaxSizeOnDisk()); - softly.assertThat(topicCreateEditForm.getMaxMessageBytes()).as("Max message bytes").isEqualTo(TOPIC_FOR_UPDATE.getMaxMessageBytes()); + softly.assertThat(topicCreateEditForm.getCleanupPolicy()).as("getCleanupPolicy()").isEqualTo(TOPIC_FOR_UPDATE.getCleanupPolicyValue().getVisibleText()); + softly.assertThat(topicCreateEditForm.getTimeToRetain()).as("getTimeToRetain()").isEqualTo(TOPIC_FOR_UPDATE.getTimeToRetainData()); + softly.assertThat(topicCreateEditForm.getMaxSizeOnDisk()).as("getMaxSizeOnDisk()").isEqualTo(TOPIC_FOR_UPDATE.getMaxSizeOnDisk().getVisibleText()); + softly.assertThat(topicCreateEditForm.getMaxMessageBytes()).as("getMaxMessageBytes()").isEqualTo(TOPIC_FOR_UPDATE.getMaxMessageBytes()); softly.assertAll(); } @@ -134,7 +152,7 @@ public class TopicTests extends BaseTest { Assertions.assertFalse(topicsList.isTopicVisible(TOPIC_FOR_DELETE.getName()), "isTopicVisible"); TOPIC_LIST.remove(TOPIC_FOR_DELETE); } - + @DisplayName("produce message") @Suite(suiteId = SUITE_ID, title = SUITE_TITLE) @AutomationStatus(status = Status.AUTOMATED)