diff --git a/kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/pages/consumer/ConsumersDetails.java b/kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/pages/consumer/ConsumersDetails.java new file mode 100644 index 0000000000..37b020d935 --- /dev/null +++ b/kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/pages/consumer/ConsumersDetails.java @@ -0,0 +1,32 @@ +package com.provectus.kafka.ui.pages.consumer; + +import com.codeborne.selenide.Condition; +import com.codeborne.selenide.SelenideElement; +import io.qameta.allure.Step; + +import static com.codeborne.selenide.Selenide.$x; +import static com.provectus.kafka.ui.utilities.WebUtils.isVisible; + +public class ConsumersDetails { + + protected SelenideElement loadingSpinner = $x("//*[contains(text(),'Loading')]"); + protected SelenideElement topicGrid = $x("//table"); + protected String consumerIdHeaderLocator = "//h1[contains(text(),'%s')]"; + protected String topicElementLocator = "//tbody//td//a[text()='%s']"; + @Step + public ConsumersDetails waitUntilScreenReady() { + loadingSpinner.shouldBe(Condition.disappear); + topicGrid.shouldBe(Condition.visible); + return this; + } + @Step + public boolean isRedirectedConsumerTitleVisible(String consumerGroupId) { + return isVisible($x(String.format(consumerIdHeaderLocator, consumerGroupId))); + } + @Step + public boolean isTopicInConsumersDetailsVisible(String topicName) { + topicGrid.shouldBe(Condition.visible); + return isVisible($x(String.format(topicElementLocator, topicName))); + } + +} diff --git a/kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/pages/consumer/ConsumersList.java b/kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/pages/consumer/ConsumersList.java new file mode 100644 index 0000000000..0797d12195 --- /dev/null +++ b/kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/pages/consumer/ConsumersList.java @@ -0,0 +1,11 @@ +package com.provectus.kafka.ui.pages.consumer; + +import com.codeborne.selenide.SelenideElement; +import com.provectus.kafka.ui.utilities.WaitUtils; +import lombok.experimental.ExtensionMethod; + +import static com.codeborne.selenide.Selenide.$x; +public class ConsumersList { + + protected SelenideElement consumerListHeader = $x("//h1[text()='Consumers']"); +} 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 5b4f1d3c96..73ce320a48 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 @@ -26,6 +26,7 @@ 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 String consumerIdLocator = "//a[@title='%s']"; @Step public TopicDetails waitUntilScreenReady() { @@ -74,6 +75,12 @@ public class TopicDetails { return this; } + @Step + public TopicDetails openConsumerGroup(String consumerId) { + $x(String.format(consumerIdLocator, consumerId)).click(); + return this; + } + @Step public boolean isKeyMessageVisible(String keyMessage) { return keyMessage.equals($("td[title]").getText()); diff --git a/kafka-ui-e2e-checks/src/test/java/com/provectus/kafka/ui/base/Facade.java b/kafka-ui-e2e-checks/src/test/java/com/provectus/kafka/ui/base/Facade.java index 8d3aea55d4..ac223c62b1 100644 --- a/kafka-ui-e2e-checks/src/test/java/com/provectus/kafka/ui/base/Facade.java +++ b/kafka-ui-e2e-checks/src/test/java/com/provectus/kafka/ui/base/Facade.java @@ -5,6 +5,8 @@ import com.provectus.kafka.ui.pages.NaviSideBar; import com.provectus.kafka.ui.pages.connector.ConnectorCreateForm; import com.provectus.kafka.ui.pages.connector.ConnectorDetails; import com.provectus.kafka.ui.pages.connector.KafkaConnectList; +import com.provectus.kafka.ui.pages.consumer.ConsumersDetails; +import com.provectus.kafka.ui.pages.consumer.ConsumersList; import com.provectus.kafka.ui.pages.schema.SchemaCreateForm; import com.provectus.kafka.ui.pages.schema.SchemaDetails; import com.provectus.kafka.ui.pages.schema.SchemaRegistryList; @@ -25,5 +27,7 @@ public abstract class Facade { protected TopicCreateEditForm topicCreateEditForm = new TopicCreateEditForm(); protected TopicsList topicsList = new TopicsList(); protected TopicDetails topicDetails = new TopicDetails(); + protected ConsumersDetails consumersDetails = new ConsumersDetails(); + protected ConsumersList consumersList = new ConsumersList(); protected NaviSideBar naviSideBar = new NaviSideBar(); } 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 2b596a9e54..33ad3d015a 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,14 +15,15 @@ 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.TopicDetails.DotPartitionIdMenu.CLEAR_MESSAGES; import static com.provectus.kafka.ui.settings.Source.CLUSTER_NAME; import static com.provectus.kafka.ui.utilities.FileUtils.fileToString; +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_FOR_UPDATE = new Topic() .setName("topic-to-update") .setCleanupPolicyValue("Compact") @@ -186,11 +187,38 @@ public class TopicTests extends BaseTest { topicDetails .waitUntilScreenReady(); String messageAmount = topicDetails.MessageCountAmount(); - Assertions.assertEquals(messageAmount,topicDetails.MessageCountAmount()); + assertThat(messageAmount) + .withFailMessage("message amount not equals").isEqualTo(topicDetails.MessageCountAmount()); topicDetails .openDotPartitionIdMenu() .clickClearMessagesBtn(); -// Assertions.assertEquals(Integer.toString(Integer.valueOf(messageAmount)-1),topicDetails.MessageCountAmount()); +// assertThat(Integer.toString(Integer.valueOf(messageAmount)-1)) +// .withFailMessage("message amount not decrease by one").isEqualTo(topicDetails.MessageCountAmount()); + } + + @DisplayName("Redirect to consumer from topic profile") + @Suite(suiteId = SUITE_ID, title = SUITE_TITLE) + @AutomationStatus(status = Status.AUTOMATED) + @CaseId(20) + @Test + void redirectToConsumerFromTopic() { + String topicName = "source-activities"; + String consumerGroupId = "connect-sink_postgres_activities"; + naviSideBar + .openSideMenu(TOPICS); + topicsList + .waitUntilScreenReady() + .openTopic(topicName); + topicDetails + .waitUntilScreenReady() + .openTopicMenu(TopicDetails.TopicMenu.CONSUMERS) + .openConsumerGroup(consumerGroupId); + consumersDetails + .waitUntilScreenReady(); + assertThat(consumersDetails.isRedirectedConsumerTitleVisible(consumerGroupId)) + .withFailMessage("isRedirectedConsumerTitleVisible").isTrue(); + assertThat(consumersDetails.isTopicInConsumersDetailsVisible(topicName)) + .withFailMessage("isTopicInConsumersDetailsVisible").isTrue(); } @AfterAll