Browse Source

[e2e] Checking Filter adding within Topics/Topic/Messages with filled required fields (#2939)

* soft assertion method refactored

* getFilterName() method refactored

* soft assertions refactoring

* add softAssertions

* add softAssertions

Co-authored-by: Vlad Senyuta <66071557+VladSenyuta@users.noreply.github.com>
Co-authored-by: VladSenyuta <vlad.senyuta@gmail.com>
Anton Mnykh 2 years ago
parent
commit
d1013b69da

+ 79 - 17
kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/pages/topic/TopicDetails.java

@@ -13,6 +13,7 @@ import com.provectus.kafka.ui.pages.BasePage;
 import com.provectus.kafka.ui.utilities.WaitUtils;
 import io.qameta.allure.Step;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 import lombok.experimental.ExtensionMethod;
 import org.openqa.selenium.By;
@@ -24,6 +25,14 @@ public class TopicDetails extends BasePage {
   protected SelenideElement messageAmountCell = $x("//tbody/tr/td[5]");
   protected SelenideElement overviewTab = $x("//a[contains(text(),'Overview')]");
   protected SelenideElement messagesTab = $x("//a[contains(text(),'Messages')]");
+  protected SelenideElement addFiltersBtn = $x("//button[text()='Add Filters']");
+  protected SelenideElement savedFiltersField = $x("//div[text()='Saved Filters']");
+  protected SelenideElement addFilterCodeModalTitle = $x("//label[text()='Filter code']");
+  protected SelenideElement addFilterCodeInput = $x("//div[@id='ace-editor']//textarea");
+  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 editSettingsMenu = $x("//li[@role][contains(text(),'Edit settings')]");
   protected SelenideElement removeTopicBtn = $x("//ul[@role='menu']//div[contains(text(),'Remove Topic')]");
   protected SelenideElement confirmBtn = $x("//div[@role='dialog']//button[contains(text(),'Confirm')]");
@@ -34,6 +43,7 @@ public class TopicDetails extends BasePage {
   protected ElementsCollection messageGridItems = $$x("//tbody//tr");
   protected String consumerIdLocator = "//a[@title='%s']";
   protected String topicHeaderLocator = "//h1[contains(text(),'%s')]";
+  protected String filterNameLocator = "//*[@data-testid='activeSmartFilter']";
 
   @Step
   public TopicDetails waitUntilScreenReady() {
@@ -106,6 +116,58 @@ public class TopicDetails extends BasePage {
     return this;
   }
 
+  @Step
+  public TopicDetails clickMessagesAddFiltersBtn() {
+    addFiltersBtn.shouldBe(Condition.enabled).click();
+    return this;
+  }
+
+  @Step
+  public TopicDetails waitUntilAddFiltersMdlVisible() {
+    addFilterCodeModalTitle.shouldBe(Condition.visible);
+    return this;
+  }
+
+  @Step
+  public TopicDetails clickAddFilterBtnAddFilterMdl() {
+    addFilterBtnAddFilterMdl.shouldBe(Condition.enabled).click();
+    addFilterCodeModalTitle.shouldBe(Condition.hidden);
+    return this;
+  }
+
+  @Step
+  public TopicDetails setFilterCodeFieldAddFilterMdl(String filterCode) {
+    addFilterCodeInput.shouldBe(Condition.enabled).sendKeys(filterCode);
+    return this;
+  }
+
+  @Step
+  public boolean isSaveThisFilterCheckBoxSelected() {
+    return isSelected(saveThisFilterCheckBoxAddFilterMdl);
+  }
+
+  @Step
+  public boolean isAddFilterBtnAddFilterMdlEnabled() {
+    return isEnabled(addFilterBtnAddFilterMdl);
+  }
+
+  @Step
+  public String getFilterName() {
+    return $x(filterNameLocator).getText();
+  }
+
+  public List<SelenideElement> getAllAddFilterModalVisibleElements() {
+    return Arrays.asList(savedFiltersField, displayNameInputAddFilterMdl, addFilterBtnAddFilterMdl, cancelBtnAddFilterMdl);
+  }
+
+  public List<SelenideElement> getAllAddFilterModalEnabledElements() {
+    return Arrays.asList(displayNameInputAddFilterMdl, cancelBtnAddFilterMdl);
+  }
+
+  public List<SelenideElement> getAllAddFilterModalDisabledElements() {
+    return Arrays.asList(addFilterBtnAddFilterMdl);
+  }
+
   @Step
   public TopicDetails openConsumerGroup(String consumerId) {
     $x(String.format(consumerIdLocator, consumerId)).click();
@@ -146,6 +208,23 @@ public class TopicDetails extends BasePage {
     return getMessage(nextInt(initItems().size() - 1));
   }
 
+  public enum TopicMenu {
+    OVERVIEW("Overview"),
+    MESSAGES("Messages"),
+    CONSUMERS("Consumers"),
+    SETTINGS("Settings");
+
+    private final String value;
+
+    TopicMenu(String value) {
+      this.value = value;
+    }
+
+    public String toString() {
+      return value;
+    }
+  }
+
   public static class MessageGridItem extends BasePage {
 
     private final SelenideElement element;
@@ -211,21 +290,4 @@ public class TopicDetails extends BasePage {
       return this;
     }
   }
-
-  public enum TopicMenu {
-    OVERVIEW("Overview"),
-    MESSAGES("Messages"),
-    CONSUMERS("Consumers"),
-    SETTINGS("Settings");
-
-    private final String value;
-
-    TopicMenu(String value) {
-      this.value = value;
-    }
-
-    public String toString() {
-      return value;
-    }
-  }
 }

+ 1 - 1
kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/pages/topic/TopicsList.java

@@ -17,7 +17,7 @@ import lombok.experimental.ExtensionMethod;
 @ExtensionMethod(WaitUtils.class)
 public class TopicsList extends BasePage {
 
-    protected SelenideElement topicListHeader = $x("//h1[text()='Topics']");
+    protected SelenideElement topicListHeader = $x("//*[text()='Topics']");
     protected SelenideElement addTopicBtn = $x("//button[normalize-space(text()) ='Add a Topic']");
     protected SelenideElement searchField = $x("//input[@placeholder='Search by Topic Name']");
     protected SelenideElement showInternalRadioBtn = $x("//input[@name='ShowInternalTopics']");

+ 12 - 0
kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/utilities/WebUtils.java

@@ -57,4 +57,16 @@ public class WebUtils {
     }
     return isEnabled;
   }
+
+  public static boolean isSelected(SelenideElement element) {
+    log.debug("\nisSelected: {}", element.getSearchCriteria());
+    boolean isSelected = false;
+    try {
+      element.shouldBe(Condition.selected);
+      isSelected = true;
+    } catch (Throwable e) {
+      log.debug("{} is not selected", element.getSearchCriteria());
+    }
+    return isSelected;
+  }
 }

+ 54 - 9
kafka-ui-e2e-checks/src/test/java/com/provectus/kafka/ui/suite/topics/TopicActionsTests.java → kafka-ui-e2e-checks/src/test/java/com/provectus/kafka/ui/suite/topics/TopicsTests.java

@@ -31,11 +31,11 @@ import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.TestInstance;
 
 @TestInstance(TestInstance.Lifecycle.PER_CLASS)
-public class TopicActionsTests extends BaseTest {
+public class TopicsTests 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))
+      .setName("new-topic-" + randomAlphabetic(5))
       .setPartitions("1")
       .setCustomParameterType(COMPRESSION_TYPE)
       .setCustomParameterValue("producer")
@@ -83,8 +83,10 @@ public class TopicActionsTests extends BaseTest {
         .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.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
@@ -132,10 +134,14 @@ public class TopicActionsTests extends BaseTest {
         .openDotMenu()
         .clickEditSettingsMenu();
     SoftAssertions softly = new SoftAssertions();
-    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.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();
   }
 
@@ -237,7 +243,7 @@ public class TopicActionsTests extends BaseTest {
   @AutomationStatus(status = Status.AUTOMATED)
   @CaseId(2)
   @Test
-  void checkTopicListElements(){
+  void checkTopicListElements() {
     naviSideBar
         .openSideMenu(TOPICS);
     topicsList
@@ -252,6 +258,45 @@ public class TopicActionsTests extends BaseTest {
     softly.assertAll();
   }
 
+  @DisplayName("Filter adding within Topic")
+  @Suite(suiteId = SUITE_ID, title = SUITE_TITLE)
+  @AutomationStatus(status = Status.AUTOMATED)
+  @CaseId(12)
+  @Test
+  void addingNewFilterWithinTopic() {
+    String topicName = "_schemas";
+    String filterName = "123ABC";
+    naviSideBar
+        .openSideMenu(TOPICS);
+    topicsList
+        .waitUntilScreenReady()
+        .openTopic(topicName);
+    topicDetails
+        .openDetailsTab(TopicDetails.TopicMenu.MESSAGES)
+        .clickMessagesAddFiltersBtn()
+        .waitUntilAddFiltersMdlVisible();
+    SoftAssertions softly = new SoftAssertions();
+    topicDetails.getAllAddFilterModalVisibleElements().forEach(element ->
+        softly.assertThat(element.is(Condition.visible))
+            .as(element.getSearchCriteria() + " isVisible()").isTrue());
+    topicDetails.getAllAddFilterModalEnabledElements().forEach(element ->
+        softly.assertThat(element.is(Condition.enabled))
+            .as(element.getSearchCriteria() + " isEnabled()").isTrue());
+    topicDetails.getAllAddFilterModalDisabledElements().forEach(element ->
+        softly.assertThat(element.is(Condition.enabled))
+            .as(element.getSearchCriteria() + " isEnabled()").isFalse());
+    softly.assertThat(topicDetails.isSaveThisFilterCheckBoxSelected()).as("isSaveThisFilterCheckBoxSelected()")
+        .isFalse();
+    softly.assertAll();
+    topicDetails
+        .setFilterCodeFieldAddFilterMdl(filterName);
+    assertThat(topicDetails.isAddFilterBtnAddFilterMdlEnabled()).as("isMessagesAddFilterTabAddFilterBtnEnabled()")
+        .isTrue();
+    topicDetails.clickAddFilterBtnAddFilterMdl();
+    assertThat(topicDetails.getFilterName()).as("isFilterNameVisible(filterName)")
+        .isEqualTo(filterName);
+  }
+
   @AfterAll
   public void afterAll() {
     TOPIC_LIST.forEach(topic -> apiHelper.deleteTopic(CLUSTER_NAME, topic.getName()));