create object models and implement them into tests (#2606)

* Update object models

* SchemaLastUpdate

* Added fileToString in ApiHelper

* Added Connector model

* Update ConnectorsTests

* Added Topic model

* Update TopicTests

* Update SchemasTests

* Added Schema model

* Update TopicTests

* refactor of Schema

* Refactored TestClasses

* TopicTests update

* Topic update

* ConnectorsTests update

* Revert changes in QaseExtension

* Refactored steps of ApiHelper with object models

* Resolve conversation in ConnectorsTests

* Resolve conversation in SchemasTests

* Resolve conversation in TopicTests

* Delete unused object message
This commit is contained in:
Alexandr Nezboretskiy 2022-09-20 12:11:32 +03:00 committed by GitHub
parent e621a172d5
commit 93852b2600
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
13 changed files with 244 additions and 191 deletions

View file

@ -6,7 +6,13 @@ import com.provectus.kafka.ui.api.api.KafkaConnectApi;
import com.provectus.kafka.ui.api.api.MessagesApi; import com.provectus.kafka.ui.api.api.MessagesApi;
import com.provectus.kafka.ui.api.api.SchemasApi; import com.provectus.kafka.ui.api.api.SchemasApi;
import com.provectus.kafka.ui.api.api.TopicsApi; import com.provectus.kafka.ui.api.api.TopicsApi;
import com.provectus.kafka.ui.api.model.*; import com.provectus.kafka.ui.api.model.CreateTopicMessage;
import com.provectus.kafka.ui.api.model.NewConnector;
import com.provectus.kafka.ui.api.model.NewSchemaSubject;
import com.provectus.kafka.ui.api.model.TopicCreation;
import com.provectus.kafka.ui.models.Connector;
import com.provectus.kafka.ui.models.Schema;
import com.provectus.kafka.ui.models.Topic;
import lombok.SneakyThrows; import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.web.reactive.function.client.WebClientResponseException; import org.springframework.web.reactive.function.client.WebClientResponseException;
@ -15,6 +21,7 @@ import java.util.HashMap;
import java.util.Map; import java.util.Map;
import static com.codeborne.selenide.Selenide.sleep; import static com.codeborne.selenide.Selenide.sleep;
import static com.provectus.kafka.ui.extensions.FileUtils.fileToString;
@Slf4j @Slf4j
@ -67,11 +74,11 @@ public class ApiHelper {
} }
@SneakyThrows @SneakyThrows
public void createSchema(String clusterName, String schemaName, SchemaType type, String schemaValue) { public void createSchema(String clusterName, Schema schema) {
NewSchemaSubject schemaSubject = new NewSchemaSubject(); NewSchemaSubject schemaSubject = new NewSchemaSubject();
schemaSubject.setSubject(schemaName); schemaSubject.setSubject(schema.getName());
schemaSubject.setSchema(schemaValue); schemaSubject.setSchema(fileToString(schema.getValuePath()));
schemaSubject.setSchemaType(type); schemaSubject.setSchemaType(schema.getType());
try { try {
schemaApi().createNewSchema(clusterName, schemaSubject).block(); schemaApi().createNewSchema(clusterName, schemaSubject).block();
} catch (WebClientResponseException ex) { } catch (WebClientResponseException ex) {
@ -96,16 +103,16 @@ public class ApiHelper {
} }
@SneakyThrows @SneakyThrows
public void createConnector(String clusterName, String connectName, String connectorName, String configJson) { public void createConnector(String clusterName, String connectName, Connector connector) {
NewConnector connector = new NewConnector(); NewConnector connectorProperties = new NewConnector();
connector.setName(connectorName); connectorProperties.setName(connector.getName());
Map<String, Object> configMap = new ObjectMapper().readValue(configJson, HashMap.class); Map<String, Object> configMap = new ObjectMapper().readValue(connector.getConfig(), HashMap.class);
connector.setConfig(configMap); connectorProperties.setConfig(configMap);
try { try {
connectorApi().deleteConnector(clusterName, connectName, connectorName).block(); connectorApi().deleteConnector(clusterName, connectName, connector.getName()).block();
} catch (WebClientResponseException ignored) { } catch (WebClientResponseException ignored) {
} }
connectorApi().createConnector(clusterName, connectName, connector).block(); connectorApi().createConnector(clusterName, connectName, connectorProperties).block();
} }
public String getFirstConnectName(String clusterName) { public String getFirstConnectName(String clusterName) {
@ -113,14 +120,13 @@ public class ApiHelper {
} }
@SneakyThrows @SneakyThrows
public void sendMessage(String clusterName, String topicName, String messageContentJson, public void sendMessage(String clusterName, Topic topic) {
String messageKey) {
CreateTopicMessage createMessage = new CreateTopicMessage(); CreateTopicMessage createMessage = new CreateTopicMessage();
createMessage.partition(0); createMessage.partition(0);
createMessage.setContent(messageContentJson); createMessage.setContent(topic.getMessageContent());
createMessage.setKey(messageKey); createMessage.setKey(topic.getMessageKey());
try { try {
messageApi().sendTopicMessages(clusterName, topicName, createMessage).block(); messageApi().sendTopicMessages(clusterName, topic.getName(), createMessage).block();
} catch (WebClientResponseException ex) { } catch (WebClientResponseException ex) {
ex.getRawStatusCode(); ex.getRawStatusCode();
} }

View file

@ -0,0 +1,12 @@
package com.provectus.kafka.ui.models;
import lombok.Data;
import lombok.experimental.Accessors;
@Data
@Accessors(chain = true)
public class Connector {
private String name, config;
}

View file

@ -0,0 +1,33 @@
package com.provectus.kafka.ui.models;
import com.provectus.kafka.ui.api.model.SchemaType;
import lombok.Data;
import lombok.experimental.Accessors;
import static org.apache.commons.lang.RandomStringUtils.randomAlphabetic;
@Data
@Accessors(chain = true)
public class Schema {
private String name,valuePath;
private SchemaType type;
public static Schema createSchemaAvro(){
return new Schema().setName(randomAlphabetic(10))
.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))
.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))
.setType(SchemaType.PROTOBUF)
.setValuePath(System.getProperty("user.dir") + "/src/main/resources/testData/schema_protobuf_value.txt");
}
}

View file

@ -0,0 +1,10 @@
package com.provectus.kafka.ui.models;
import lombok.Data;
import lombok.experimental.Accessors;
@Data
@Accessors(chain = true)
public class Topic {
private String name, compactPolicyValue, timeToRetainData, maxSizeOnDisk, maxMessageBytes, messageKey, messageContent ;
}

View file

@ -1,6 +1,7 @@
package com.provectus.kafka.ui.pages.schema; package com.provectus.kafka.ui.pages.schema;
import com.codeborne.selenide.SelenideElement; import com.codeborne.selenide.SelenideElement;
import com.provectus.kafka.ui.api.model.SchemaType;
import com.provectus.kafka.ui.utils.BrowserUtils; import com.provectus.kafka.ui.utils.BrowserUtils;
import io.qameta.allure.Step; import io.qameta.allure.Step;
import org.openqa.selenium.By; import org.openqa.selenium.By;
@ -34,19 +35,4 @@ public class SchemaCreateView {
schemaField.setValue(text); schemaField.setValue(text);
return this; return this;
} }
public enum SchemaType {
AVRO("AVRO"),
JSON("JSON"),
PROTOBUF("PROTOBUF");
final String value;
SchemaType(String value) {
this.value = value;
}
public String getValue(){
return value;
}
}
} }

View file

@ -4,6 +4,7 @@ import com.codeborne.selenide.Condition;
import com.codeborne.selenide.Selenide; import com.codeborne.selenide.Selenide;
import com.codeborne.selenide.SelenideElement; import com.codeborne.selenide.SelenideElement;
import com.provectus.kafka.ui.api.model.CompatibilityLevel; import com.provectus.kafka.ui.api.model.CompatibilityLevel;
import com.provectus.kafka.ui.api.model.SchemaType;
import com.provectus.kafka.ui.utils.BrowserUtils; import com.provectus.kafka.ui.utils.BrowserUtils;
import io.qameta.allure.Step; import io.qameta.allure.Step;
import org.openqa.selenium.By; import org.openqa.selenium.By;
@ -18,7 +19,7 @@ public class SchemaEditView {
protected SelenideElement schemaTypeDropDown = $x("//ul[@name='schemaType']"); protected SelenideElement schemaTypeDropDown = $x("//ul[@name='schemaType']");
@Step @Step
public SchemaEditView selectSchemaTypeFromDropdown(SchemaCreateView.SchemaType schemaType) { public SchemaEditView selectSchemaTypeFromDropdown(SchemaType schemaType) {
$x("//ul[@name='schemaType']").click(); $x("//ul[@name='schemaType']").click();
$x("//li[text()='" + schemaType.getValue() + "']").click(); $x("//li[text()='" + schemaType.getValue() + "']").click();
return this; return this;

View file

@ -1,8 +1,9 @@
package com.provectus.kafka.ui.tests; package com.provectus.kafka.ui.tests;
import com.provectus.kafka.ui.base.BaseTest; import com.provectus.kafka.ui.base.BaseTest;
import com.provectus.kafka.ui.helpers.ApiHelper;
import com.provectus.kafka.ui.helpers.Helpers; import com.provectus.kafka.ui.helpers.Helpers;
import com.provectus.kafka.ui.models.Connector;
import com.provectus.kafka.ui.models.Topic;
import com.provectus.kafka.ui.utils.qaseIO.Status; import com.provectus.kafka.ui.utils.qaseIO.Status;
import com.provectus.kafka.ui.utils.qaseIO.annotation.AutomationStatus; import com.provectus.kafka.ui.utils.qaseIO.annotation.AutomationStatus;
import com.provectus.kafka.ui.utils.qaseIO.annotation.Suite; import com.provectus.kafka.ui.utils.qaseIO.annotation.Suite;
@ -12,98 +13,102 @@ import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import java.util.ArrayList;
import java.util.List;
import static com.provectus.kafka.ui.extensions.FileUtils.getResourceAsString; import static com.provectus.kafka.ui.extensions.FileUtils.getResourceAsString;
public class ConnectorsTests extends BaseTest { public class ConnectorsTests extends BaseTest {
private static final long SUITE_ID = 10;
private final long suiteId = 10; private static final String SUITE_TITLE = "Kafka Connect";
private final String suiteTitle = "Kafka Connect"; private static final String CONNECT_NAME = "first";
public static final String SINK_CONNECTOR = "sink_postgres_activities_e2e_checks"; private static final List<Topic> TOPIC_LIST = new ArrayList<>();
public static final String TOPIC_FOR_CONNECTOR = "topic_for_connector"; private static final List<Connector> CONNECTOR_LIST = new ArrayList<>();
public static final String TOPIC_FOR_DELETE_CONNECTOR = "topic_for_delete_connector"; private static final String MESSAGE_CONTENT = "message_content_create_topic.json";
public static final String TOPIC_FOR_UPDATE_CONNECTOR = "topic_for_update_connector"; private static final String MESSAGE_KEY = " ";
public static final String FIRST_CONNECTOR = "first"; private static final Topic TOPIC_FOR_CREATE = new Topic()
public static final String CONNECTOR_FOR_DELETE = "sink_postgres_activities_e2e_checks_for_delete"; .setName("topic_for_create_connector")
public static final String CONNECTOR_FOR_UPDATE = "sink_postgres_activities_e2e_checks_for_update"; .setMessageContent(MESSAGE_CONTENT).setMessageKey(MESSAGE_KEY);
private static final Topic TOPIC_FOR_DELETE = new Topic()
.setName("topic_for_delete_connector")
.setMessageContent(MESSAGE_CONTENT).setMessageKey(MESSAGE_KEY);
private static final Topic TOPIC_FOR_UPDATE = new Topic()
.setName("topic_for_update_connector")
.setMessageContent(MESSAGE_CONTENT).setMessageKey(MESSAGE_KEY);
private static final Connector CONNECTOR_FOR_DELETE = new Connector()
.setName("sink_postgres_activities_e2e_checks_for_delete")
.setConfig(getResourceAsString("delete_connector_config.json"));
private static final Connector CONNECTOR_FOR_UPDATE = new Connector()
.setName("sink_postgres_activities_e2e_checks_for_update")
.setConfig(getResourceAsString("config_for_create_connector_via_api.json"));
@BeforeAll @BeforeAll
public static void beforeAll() { public static void beforeAll() {
ApiHelper apiHelper = Helpers.INSTANCE.apiHelper; TOPIC_LIST.addAll(List.of(TOPIC_FOR_CREATE, TOPIC_FOR_DELETE, TOPIC_FOR_UPDATE));
TOPIC_LIST.forEach(topic -> {
String connectorToDelete = getResourceAsString("delete_connector_config.json"); Helpers.INSTANCE.apiHelper.createTopic(CLUSTER_NAME, topic.getName());
String connectorToUpdate = getResourceAsString("config_for_create_connector_via_api.json"); Helpers.INSTANCE.apiHelper.sendMessage(CLUSTER_NAME, topic);
String message = getResourceAsString("message_content_create_topic.json"); });
CONNECTOR_LIST.addAll(List.of(CONNECTOR_FOR_DELETE, CONNECTOR_FOR_UPDATE));
apiHelper.deleteTopic(CLUSTER_NAME, CONNECTOR_FOR_DELETE); CONNECTOR_LIST.forEach(connector -> Helpers.INSTANCE.apiHelper
.createConnector(CLUSTER_NAME, CONNECT_NAME, connector));
apiHelper.createTopic(CLUSTER_NAME, TOPIC_FOR_CONNECTOR);
apiHelper.sendMessage(CLUSTER_NAME, TOPIC_FOR_CONNECTOR, message, " ");
apiHelper.createTopic(CLUSTER_NAME, TOPIC_FOR_DELETE_CONNECTOR);
apiHelper.sendMessage(CLUSTER_NAME, TOPIC_FOR_DELETE_CONNECTOR, message, " ");
apiHelper.createTopic(CLUSTER_NAME, TOPIC_FOR_UPDATE_CONNECTOR);
apiHelper.sendMessage(CLUSTER_NAME, TOPIC_FOR_UPDATE_CONNECTOR, message, " ");
apiHelper.createConnector(CLUSTER_NAME, FIRST_CONNECTOR, CONNECTOR_FOR_DELETE, connectorToDelete);
apiHelper.createConnector(CLUSTER_NAME, FIRST_CONNECTOR, CONNECTOR_FOR_UPDATE, connectorToUpdate);
}
@AfterAll
public static void afterAll() {
ApiHelper apiHelper = Helpers.INSTANCE.apiHelper;
apiHelper.deleteConnector(CLUSTER_NAME, FIRST_CONNECTOR, SINK_CONNECTOR);
apiHelper.deleteConnector(CLUSTER_NAME, FIRST_CONNECTOR, CONNECTOR_FOR_UPDATE);
apiHelper.deleteTopic(CLUSTER_NAME, TOPIC_FOR_CONNECTOR);
apiHelper.deleteTopic(CLUSTER_NAME, TOPIC_FOR_DELETE_CONNECTOR);
apiHelper.deleteTopic(CLUSTER_NAME, TOPIC_FOR_UPDATE_CONNECTOR);
} }
@DisplayName("should create a connector") @DisplayName("should create a connector")
@Suite(suiteId = suiteId, title = suiteTitle) @Suite(suiteId = SUITE_ID, title = SUITE_TITLE)
@AutomationStatus(status = Status.AUTOMATED) @AutomationStatus(status = Status.AUTOMATED)
@CaseId(42) @CaseId(42)
@Test @Test
public void createConnector() { public void createConnector() {
Connector connectorForCreate = new Connector()
.setName("sink_postgres_activities_e2e_checks")
.setConfig(getResourceAsString("config_for_create_connector.json"));
pages.openConnectorsList(CLUSTER_NAME) pages.openConnectorsList(CLUSTER_NAME)
.waitUntilScreenReady() .waitUntilScreenReady()
.clickCreateConnectorButton() .clickCreateConnectorButton()
.waitUntilScreenReady() .waitUntilScreenReady()
.setConnectorConfig( .setConnectorConfig(connectorForCreate.getName(), connectorForCreate.getConfig());
SINK_CONNECTOR,
getResourceAsString("config_for_create_connector.json"));
pages.openConnectorsList(CLUSTER_NAME) pages.openConnectorsList(CLUSTER_NAME)
.waitUntilScreenReady() .waitUntilScreenReady()
.connectorIsVisibleInList(SINK_CONNECTOR, TOPIC_FOR_CONNECTOR); .connectorIsVisibleInList(connectorForCreate.getName(), TOPIC_FOR_CREATE.getName());
CONNECTOR_LIST.add(connectorForCreate);
} }
@DisplayName("should update a connector") @DisplayName("should update a connector")
@Suite(suiteId = suiteId, title = suiteTitle) @Suite(suiteId = SUITE_ID, title = SUITE_TITLE)
@AutomationStatus(status = Status.AUTOMATED) @AutomationStatus(status = Status.AUTOMATED)
@CaseId(196) @CaseId(196)
@Test @Test
public void updateConnector() { public void updateConnector() {
pages.openConnectorsList(CLUSTER_NAME) pages.openConnectorsList(CLUSTER_NAME)
.waitUntilScreenReady() .waitUntilScreenReady()
.openConnector(CONNECTOR_FOR_UPDATE); .openConnector(CONNECTOR_FOR_UPDATE.getName());
pages.connectorsView.connectorIsVisibleOnOverview(); pages.connectorsView.connectorIsVisibleOnOverview();
pages.connectorsView.openEditConfig() pages.connectorsView.openEditConfig()
.updConnectorConfig(getResourceAsString("config_for_update_connector.json")); .updConnectorConfig(CONNECTOR_FOR_UPDATE.getConfig());
pages.openConnectorsList(CLUSTER_NAME) pages.openConnectorsList(CLUSTER_NAME)
.connectorIsVisibleInList(CONNECTOR_FOR_UPDATE, TOPIC_FOR_UPDATE_CONNECTOR); .connectorIsVisibleInList(CONNECTOR_FOR_UPDATE.getName(), TOPIC_FOR_UPDATE.getName());
} }
@DisplayName("should delete connector") @DisplayName("should delete connector")
@Suite(suiteId = suiteId, title = suiteTitle) @Suite(suiteId = SUITE_ID, title = SUITE_TITLE)
@AutomationStatus(status = Status.AUTOMATED) @AutomationStatus(status = Status.AUTOMATED)
@CaseId(195) @CaseId(195)
@Test @Test
public void deleteConnector() { public void deleteConnector() {
pages.openConnectorsList(CLUSTER_NAME) pages.openConnectorsList(CLUSTER_NAME)
.waitUntilScreenReady() .waitUntilScreenReady()
.openConnector(CONNECTOR_FOR_DELETE); .openConnector(CONNECTOR_FOR_DELETE.getName());
pages.connectorsView.clickDeleteButton(); pages.connectorsView.clickDeleteButton();
pages.openConnectorsList(CLUSTER_NAME) pages.openConnectorsList(CLUSTER_NAME)
.isNotVisible(CONNECTOR_FOR_DELETE); .isNotVisible(CONNECTOR_FOR_DELETE.getName());
CONNECTOR_LIST.remove(CONNECTOR_FOR_DELETE);
}
@AfterAll
public static void afterAll() {
CONNECTOR_LIST.forEach(connector ->
Helpers.INSTANCE.apiHelper.deleteConnector(CLUSTER_NAME, CONNECT_NAME, connector.getName()));
TOPIC_LIST.forEach(topic -> Helpers.INSTANCE.apiHelper.deleteTopic(CLUSTER_NAME, topic.getName()));
} }
} }

View file

@ -1,99 +1,85 @@
package com.provectus.kafka.ui.tests; package com.provectus.kafka.ui.tests;
import com.provectus.kafka.ui.api.model.CompatibilityLevel; import com.provectus.kafka.ui.api.model.CompatibilityLevel;
import com.provectus.kafka.ui.api.model.SchemaType;
import com.provectus.kafka.ui.base.BaseTest; import com.provectus.kafka.ui.base.BaseTest;
import com.provectus.kafka.ui.helpers.Helpers; import com.provectus.kafka.ui.helpers.Helpers;
import com.provectus.kafka.ui.models.Schema;
import com.provectus.kafka.ui.pages.MainPage; import com.provectus.kafka.ui.pages.MainPage;
import com.provectus.kafka.ui.pages.schema.SchemaCreateView;
import com.provectus.kafka.ui.pages.schema.SchemaEditView; import com.provectus.kafka.ui.pages.schema.SchemaEditView;
import com.provectus.kafka.ui.utils.qaseIO.Status; import com.provectus.kafka.ui.utils.qaseIO.Status;
import com.provectus.kafka.ui.utils.qaseIO.annotation.AutomationStatus; import com.provectus.kafka.ui.utils.qaseIO.annotation.AutomationStatus;
import com.provectus.kafka.ui.utils.qaseIO.annotation.Suite; import com.provectus.kafka.ui.utils.qaseIO.annotation.Suite;
import io.qase.api.annotation.CaseId; import io.qase.api.annotation.CaseId;
import lombok.SneakyThrows;
import org.junit.jupiter.api.*; import org.junit.jupiter.api.*;
import java.util.ArrayList;
import java.util.List;
import static com.provectus.kafka.ui.extensions.FileUtils.fileToString; import static com.provectus.kafka.ui.extensions.FileUtils.fileToString;
@TestMethodOrder(MethodOrderer.OrderAnnotation.class) @TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class SchemasTests extends BaseTest { public class SchemasTests extends BaseTest {
private static final long SUITE_ID = 11;
private final long suiteId = 11; private static final String SUITE_TITLE = "Schema Registry";
private final String suiteTitle = "Schema Registry"; private static final List<Schema> SCHEMA_LIST = new ArrayList<>();
public static final String SCHEMA_AVRO_CREATE = "avro_schema"; private static final Schema AVRO_API = Schema.createSchemaAvro();
public static final String SCHEMA_JSON_CREATE = "json_schema"; private static final Schema JSON_API = Schema.createSchemaJson();
public static final String SCHEMA_PROTOBUF_CREATE = "protobuf_schema"; private static final Schema PROTOBUF_API = Schema.createSchemaProtobuf();
public static final String SCHEMA_AVRO_API_UPDATE = "avro_schema_for_update_api";
public static final String SCHEMA_AVRO_API = "avro_schema_api";
public static final String SCHEMA_JSON_API = "json_schema_api";
public static final String SCHEMA_PROTOBUF_API = "protobuf_schema_api";
private static final String PATH_AVRO_VALUE = System.getProperty("user.dir") + "/src/test/resources/schema_avro_value.json";
private static final String PATH_AVRO_FOR_UPDATE = System.getProperty("user.dir") + "/src/test/resources/schema_avro_for_update.json";
private static final String PATH_PROTOBUF_VALUE = System.getProperty("user.dir") + "/src/test/resources/schema_protobuf_value.txt";
private static final String PATH_JSON_VALUE = System.getProperty("user.dir") + "/src/test/resources/schema_Json_Value.json";
@BeforeAll @BeforeAll
@SneakyThrows
public static void beforeAll() { public static void beforeAll() {
Helpers.INSTANCE.apiHelper.createSchema(CLUSTER_NAME, SCHEMA_AVRO_API_UPDATE, SchemaType.AVRO, fileToString(PATH_AVRO_VALUE)); SCHEMA_LIST.addAll(List.of(AVRO_API, JSON_API, PROTOBUF_API));
Helpers.INSTANCE.apiHelper.createSchema(CLUSTER_NAME, SCHEMA_AVRO_API, SchemaType.AVRO, fileToString(PATH_AVRO_VALUE)); SCHEMA_LIST.forEach(schema -> Helpers.INSTANCE.apiHelper.createSchema(CLUSTER_NAME, schema));
Helpers.INSTANCE.apiHelper.createSchema(CLUSTER_NAME, SCHEMA_JSON_API, SchemaType.JSON, fileToString(PATH_JSON_VALUE));
Helpers.INSTANCE.apiHelper.createSchema(CLUSTER_NAME, SCHEMA_PROTOBUF_API, SchemaType.PROTOBUF, fileToString(PATH_PROTOBUF_VALUE));
}
@AfterAll
public static void afterAll() {
Helpers.INSTANCE.apiHelper.deleteSchema(CLUSTER_NAME, SCHEMA_AVRO_CREATE);
Helpers.INSTANCE.apiHelper.deleteSchema(CLUSTER_NAME, SCHEMA_JSON_CREATE);
Helpers.INSTANCE.apiHelper.deleteSchema(CLUSTER_NAME, SCHEMA_PROTOBUF_CREATE);
Helpers.INSTANCE.apiHelper.deleteSchema(CLUSTER_NAME, SCHEMA_AVRO_API_UPDATE);
Helpers.INSTANCE.apiHelper.deleteSchema(CLUSTER_NAME, SCHEMA_AVRO_API);
Helpers.INSTANCE.apiHelper.deleteSchema(CLUSTER_NAME, SCHEMA_JSON_API);
Helpers.INSTANCE.apiHelper.deleteSchema(CLUSTER_NAME, SCHEMA_PROTOBUF_API);
} }
@DisplayName("should create AVRO schema") @DisplayName("should create AVRO schema")
@Suite(suiteId = suiteId, title = suiteTitle) @Suite(suiteId = SUITE_ID, title = SUITE_TITLE)
@AutomationStatus(status = Status.AUTOMATED) @AutomationStatus(status = Status.AUTOMATED)
@CaseId(43) @CaseId(43)
@Test @Test
@Order(1) @Order(1)
void createSchemaAvro() { void createSchemaAvro() {
Schema schemaAvro = Schema.createSchemaAvro();
pages.openMainPage() pages.openMainPage()
.goToSideMenu(CLUSTER_NAME, MainPage.SideMenuOptions.SCHEMA_REGISTRY); .goToSideMenu(CLUSTER_NAME, MainPage.SideMenuOptions.SCHEMA_REGISTRY);
pages.schemaRegistry.clickCreateSchema() pages.schemaRegistry.clickCreateSchema()
.setSubjectName(SCHEMA_AVRO_CREATE) .setSubjectName(schemaAvro.getName())
.setSchemaField(fileToString(PATH_AVRO_VALUE)) .setSchemaField(fileToString(schemaAvro.getValuePath()))
.selectSchemaTypeFromDropdown(SchemaCreateView.SchemaType.AVRO) .selectSchemaTypeFromDropdown(schemaAvro.getType())
.clickSubmit() .clickSubmit()
.waitUntilScreenReady(); .waitUntilScreenReady();
pages.mainPage pages.mainPage
.goToSideMenu(CLUSTER_NAME, MainPage.SideMenuOptions.SCHEMA_REGISTRY); .goToSideMenu(CLUSTER_NAME, MainPage.SideMenuOptions.SCHEMA_REGISTRY);
pages.schemaRegistry.isSchemaVisible(SCHEMA_AVRO_CREATE); pages.schemaRegistry.isSchemaVisible(schemaAvro.getName());
SCHEMA_LIST.add(schemaAvro);
} }
@DisplayName("should update AVRO schema") @DisplayName("should update AVRO schema")
@Suite(suiteId = suiteId, title = suiteTitle) @Suite(suiteId = SUITE_ID, title = SUITE_TITLE)
@AutomationStatus(status = Status.AUTOMATED) @AutomationStatus(status = Status.AUTOMATED)
@CaseId(186) @CaseId(186)
@Test @Test
@Order(2) @Order(2)
void updateSchemaAvro() { void updateSchemaAvro() {
AVRO_API.setValuePath(System.getProperty("user.dir") + "/src/main/resources/testData/schema_avro_for_update.json");
pages.openMainPage() pages.openMainPage()
.goToSideMenu(CLUSTER_NAME, MainPage.SideMenuOptions.SCHEMA_REGISTRY); .goToSideMenu(CLUSTER_NAME, MainPage.SideMenuOptions.SCHEMA_REGISTRY);
pages.schemaRegistry.openSchema(SCHEMA_AVRO_API_UPDATE) pages.schemaRegistry.openSchema(AVRO_API.getName())
.waitUntilScreenReady() .waitUntilScreenReady()
.openEditSchema(); .openEditSchema();
Assertions.assertTrue(new SchemaEditView().isSchemaDropDownDisabled(),"isSchemaDropDownDisabled()"); Assertions.assertTrue(new SchemaEditView().isSchemaDropDownDisabled(),"isSchemaDropDownDisabled()");
new SchemaEditView().selectCompatibilityLevelFromDropdown(CompatibilityLevel.CompatibilityEnum.NONE) new SchemaEditView().selectCompatibilityLevelFromDropdown(CompatibilityLevel.CompatibilityEnum.NONE)
.setNewSchemaValue(fileToString(PATH_AVRO_FOR_UPDATE)) .setNewSchemaValue(fileToString(AVRO_API.getValuePath()))
.clickSubmit() .clickSubmit()
.waitUntilScreenReady() .waitUntilScreenReady()
.isCompatibility(CompatibilityLevel.CompatibilityEnum.NONE); .isCompatibility(CompatibilityLevel.CompatibilityEnum.NONE);
} }
@DisplayName("should delete AVRO schema") @DisplayName("should delete AVRO schema")
@Suite(suiteId = suiteId, title = suiteTitle) @Suite(suiteId = SUITE_ID, title = SUITE_TITLE)
@AutomationStatus(status = Status.AUTOMATED) @AutomationStatus(status = Status.AUTOMATED)
@CaseId(187) @CaseId(187)
@Test @Test
@ -101,34 +87,37 @@ public class SchemasTests extends BaseTest {
void deleteSchemaAvro() { void deleteSchemaAvro() {
pages.openMainPage() pages.openMainPage()
.goToSideMenu(CLUSTER_NAME, MainPage.SideMenuOptions.SCHEMA_REGISTRY); .goToSideMenu(CLUSTER_NAME, MainPage.SideMenuOptions.SCHEMA_REGISTRY);
pages.schemaRegistry.openSchema(SCHEMA_AVRO_API) pages.schemaRegistry.openSchema(AVRO_API.getName())
.waitUntilScreenReady() .waitUntilScreenReady()
.removeSchema() .removeSchema()
.isNotVisible(SCHEMA_AVRO_API); .isNotVisible(AVRO_API.getName());
SCHEMA_LIST.remove(AVRO_API);
} }
@DisplayName("should create JSON schema") @DisplayName("should create JSON schema")
@Suite(suiteId = suiteId, title = suiteTitle) @Suite(suiteId = SUITE_ID, title = SUITE_TITLE)
@AutomationStatus(status = Status.AUTOMATED) @AutomationStatus(status = Status.AUTOMATED)
@CaseId(89) @CaseId(89)
@Test @Test
@Order(4) @Order(4)
void createSchemaJson() { void createSchemaJson() {
Schema schemaJson = Schema.createSchemaJson();
pages.openMainPage() pages.openMainPage()
.goToSideMenu(CLUSTER_NAME, MainPage.SideMenuOptions.SCHEMA_REGISTRY); .goToSideMenu(CLUSTER_NAME, MainPage.SideMenuOptions.SCHEMA_REGISTRY);
pages.schemaRegistry.clickCreateSchema() pages.schemaRegistry.clickCreateSchema()
.setSubjectName(SCHEMA_JSON_CREATE) .setSubjectName(schemaJson.getName())
.setSchemaField(fileToString(PATH_JSON_VALUE)) .setSchemaField(fileToString(schemaJson.getValuePath()))
.selectSchemaTypeFromDropdown(SchemaCreateView.SchemaType.JSON) .selectSchemaTypeFromDropdown(schemaJson.getType())
.clickSubmit() .clickSubmit()
.waitUntilScreenReady(); .waitUntilScreenReady();
pages.mainPage pages.mainPage
.goToSideMenu(CLUSTER_NAME, MainPage.SideMenuOptions.SCHEMA_REGISTRY); .goToSideMenu(CLUSTER_NAME, MainPage.SideMenuOptions.SCHEMA_REGISTRY);
pages.schemaRegistry.isSchemaVisible(SCHEMA_JSON_CREATE); pages.schemaRegistry.isSchemaVisible(schemaJson.getName());
SCHEMA_LIST.add(schemaJson);
} }
@DisplayName("should delete JSON schema") @DisplayName("should delete JSON schema")
@Suite(suiteId = suiteId, title = suiteTitle) @Suite(suiteId = SUITE_ID, title = SUITE_TITLE)
@AutomationStatus(status = Status.AUTOMATED) @AutomationStatus(status = Status.AUTOMATED)
@CaseId(189) @CaseId(189)
@Test @Test
@ -136,34 +125,37 @@ public class SchemasTests extends BaseTest {
void deleteSchemaJson() { void deleteSchemaJson() {
pages.openMainPage() pages.openMainPage()
.goToSideMenu(CLUSTER_NAME, MainPage.SideMenuOptions.SCHEMA_REGISTRY); .goToSideMenu(CLUSTER_NAME, MainPage.SideMenuOptions.SCHEMA_REGISTRY);
pages.schemaRegistry.openSchema(SCHEMA_JSON_API) pages.schemaRegistry.openSchema(JSON_API.getName())
.waitUntilScreenReady() .waitUntilScreenReady()
.removeSchema() .removeSchema()
.isNotVisible(SCHEMA_JSON_API); .isNotVisible(JSON_API.getName());
SCHEMA_LIST.remove(JSON_API);
} }
@DisplayName("should create PROTOBUF schema") @DisplayName("should create PROTOBUF schema")
@Suite(suiteId = suiteId, title = suiteTitle) @Suite(suiteId = SUITE_ID, title = SUITE_TITLE)
@AutomationStatus(status = Status.AUTOMATED) @AutomationStatus(status = Status.AUTOMATED)
@CaseId(91) @CaseId(91)
@Test @Test
@Order(6) @Order(6)
void createSchemaProtobuf() { void createSchemaProtobuf() {
Schema schemaProtobuf = Schema.createSchemaProtobuf();
pages.openMainPage() pages.openMainPage()
.goToSideMenu(CLUSTER_NAME, MainPage.SideMenuOptions.SCHEMA_REGISTRY); .goToSideMenu(CLUSTER_NAME, MainPage.SideMenuOptions.SCHEMA_REGISTRY);
pages.schemaRegistry.clickCreateSchema() pages.schemaRegistry.clickCreateSchema()
.setSubjectName(SCHEMA_PROTOBUF_CREATE) .setSubjectName(schemaProtobuf.getName())
.setSchemaField(fileToString(PATH_PROTOBUF_VALUE)) .setSchemaField(fileToString(schemaProtobuf.getValuePath()))
.selectSchemaTypeFromDropdown(SchemaCreateView.SchemaType.PROTOBUF) .selectSchemaTypeFromDropdown(schemaProtobuf.getType())
.clickSubmit() .clickSubmit()
.waitUntilScreenReady(); .waitUntilScreenReady();
pages.mainPage pages.mainPage
.goToSideMenu(CLUSTER_NAME, MainPage.SideMenuOptions.SCHEMA_REGISTRY); .goToSideMenu(CLUSTER_NAME, MainPage.SideMenuOptions.SCHEMA_REGISTRY);
pages.schemaRegistry.isSchemaVisible(SCHEMA_PROTOBUF_CREATE); pages.schemaRegistry.isSchemaVisible(schemaProtobuf.getName());
SCHEMA_LIST.add(schemaProtobuf);
} }
@DisplayName("should delete PROTOBUF schema") @DisplayName("should delete PROTOBUF schema")
@Suite(suiteId = suiteId, title = suiteTitle) @Suite(suiteId = SUITE_ID, title = SUITE_TITLE)
@AutomationStatus(status = Status.AUTOMATED) @AutomationStatus(status = Status.AUTOMATED)
@CaseId(223) @CaseId(223)
@Test @Test
@ -171,9 +163,15 @@ public class SchemasTests extends BaseTest {
void deleteSchemaProtobuf() { void deleteSchemaProtobuf() {
pages.openMainPage() pages.openMainPage()
.goToSideMenu(CLUSTER_NAME, MainPage.SideMenuOptions.SCHEMA_REGISTRY); .goToSideMenu(CLUSTER_NAME, MainPage.SideMenuOptions.SCHEMA_REGISTRY);
pages.schemaRegistry.openSchema(SCHEMA_PROTOBUF_API) pages.schemaRegistry.openSchema(PROTOBUF_API.getName())
.waitUntilScreenReady() .waitUntilScreenReady()
.removeSchema() .removeSchema()
.isNotVisible(SCHEMA_PROTOBUF_API); .isNotVisible(PROTOBUF_API.getName());
SCHEMA_LIST.remove(PROTOBUF_API);
}
@AfterAll
public static void afterAll() {
SCHEMA_LIST.forEach(schema -> Helpers.INSTANCE.apiHelper.deleteSchema(CLUSTER_NAME, schema.getName()));
} }
} }

View file

@ -2,6 +2,7 @@ package com.provectus.kafka.ui.tests;
import com.provectus.kafka.ui.base.BaseTest; import com.provectus.kafka.ui.base.BaseTest;
import com.provectus.kafka.ui.helpers.Helpers; import com.provectus.kafka.ui.helpers.Helpers;
import com.provectus.kafka.ui.models.Topic;
import com.provectus.kafka.ui.pages.MainPage; import com.provectus.kafka.ui.pages.MainPage;
import com.provectus.kafka.ui.pages.topic.TopicView; import com.provectus.kafka.ui.pages.topic.TopicView;
import com.provectus.kafka.ui.utils.qaseIO.Status; import com.provectus.kafka.ui.utils.qaseIO.Status;
@ -11,32 +12,29 @@ import io.qameta.allure.Issue;
import io.qase.api.annotation.CaseId; import io.qase.api.annotation.CaseId;
import org.junit.jupiter.api.*; import org.junit.jupiter.api.*;
import java.util.ArrayList;
import java.util.List;
import static com.provectus.kafka.ui.extensions.FileUtils.fileToString; import static com.provectus.kafka.ui.extensions.FileUtils.fileToString;
public class TopicTests extends BaseTest { public class TopicTests extends BaseTest {
private static final long SUITE_ID = 2;
public static final String NEW_TOPIC = "new-topic"; private static final String SUITE_TITLE = "Topics";
public static final String TOPIC_TO_UPDATE = "topic-to-update"; private static final Topic TOPIC_FOR_UPDATE = new Topic()
public static final String TOPIC_TO_DELETE = "topic-to-delete"; .setName("topic-to-update")
public static final String COMPACT_POLICY_VALUE = "Compact"; .setCompactPolicyValue("Compact")
public static final String UPDATED_TIME_TO_RETAIN_VALUE = "604800001"; .setTimeToRetainData("604800001")
public static final String UPDATED_MAX_SIZE_ON_DISK = "20 GB"; .setMaxSizeOnDisk("20 GB")
public static final String UPDATED_MAX_MESSAGE_BYTES = "1000020"; .setMaxMessageBytes("1000020")
private static final String KEY_TO_PRODUCE_MESSAGE = System.getProperty("user.dir") + "/src/test/resources/producedkey.txt"; .setMessageKey(fileToString(System.getProperty("user.dir") + "/src/test/resources/producedkey.txt"))
private static final String CONTENT_TO_PRODUCE_MESSAGE = System.getProperty("user.dir") + "/src/test/resources/testData.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 List<Topic> TOPIC_LIST = new ArrayList<>();
@BeforeAll @BeforeAll
public static void beforeAll() { public static void beforeAll() {
Helpers.INSTANCE.apiHelper.createTopic(CLUSTER_NAME, TOPIC_TO_UPDATE); TOPIC_LIST.addAll(List.of(TOPIC_FOR_UPDATE, TOPIC_FOR_DELETE));
Helpers.INSTANCE.apiHelper.createTopic(CLUSTER_NAME, TOPIC_TO_DELETE); TOPIC_LIST.forEach(topic -> Helpers.INSTANCE.apiHelper.createTopic(CLUSTER_NAME, topic.getName()));
}
@AfterAll
public static void afterAll() {
Helpers.INSTANCE.apiHelper.deleteTopic(CLUSTER_NAME, TOPIC_TO_UPDATE);
Helpers.INSTANCE.apiHelper.deleteTopic(CLUSTER_NAME, TOPIC_TO_DELETE);
Helpers.INSTANCE.apiHelper.deleteTopic(CLUSTER_NAME, NEW_TOPIC);
} }
@DisplayName("should create a topic") @DisplayName("should create a topic")
@ -45,84 +43,88 @@ public class TopicTests extends BaseTest {
@CaseId(199) @CaseId(199)
@Test @Test
public void createTopic() { public void createTopic() {
Topic topicToCreate = new Topic().setName("new-topic");
pages.open() pages.open()
.goToSideMenu(CLUSTER_NAME, MainPage.SideMenuOptions.TOPICS); .goToSideMenu(CLUSTER_NAME, MainPage.SideMenuOptions.TOPICS);
pages.topicsList.pressCreateNewTopic() pages.topicsList.pressCreateNewTopic()
.setTopicName(NEW_TOPIC) .setTopicName(topicToCreate.getName())
.sendData() .sendData()
.waitUntilScreenReady(); .waitUntilScreenReady();
pages.open() pages.open()
.goToSideMenu(CLUSTER_NAME, MainPage.SideMenuOptions.TOPICS) .goToSideMenu(CLUSTER_NAME, MainPage.SideMenuOptions.TOPICS)
.topicIsVisible(NEW_TOPIC); .topicIsVisible(topicToCreate.getName());
helpers.apiHelper.deleteTopic(CLUSTER_NAME, NEW_TOPIC); TOPIC_LIST.add(topicToCreate);
pages.open()
.goToSideMenu(CLUSTER_NAME, MainPage.SideMenuOptions.TOPICS)
.topicIsNotVisible(NEW_TOPIC);
} }
@Disabled("Due to issue https://github.com/provectus/kafka-ui/issues/1500 ignore this test") @Disabled("Due to issue https://github.com/provectus/kafka-ui/issues/1500 ignore this test")
@DisplayName("should update a topic") @DisplayName("should update a topic")
@Issue("1500") @Issue("1500")
@Suite(suiteId = 2, title = "Topics") @Suite(suiteId = SUITE_ID, title = SUITE_TITLE)
@AutomationStatus(status = Status.AUTOMATED) @AutomationStatus(status = Status.AUTOMATED)
@CaseId(197) @CaseId(197)
@Test @Test
public void updateTopic() { public void updateTopic() {
pages.openTopicsList(CLUSTER_NAME) pages.openTopicsList(CLUSTER_NAME)
.waitUntilScreenReady(); .waitUntilScreenReady();
pages.openTopicView(CLUSTER_NAME, TOPIC_TO_UPDATE) pages.openTopicView(CLUSTER_NAME, TOPIC_FOR_UPDATE.getName())
.waitUntilScreenReady() .waitUntilScreenReady()
.openEditSettings() .openEditSettings()
.selectCleanupPolicy(COMPACT_POLICY_VALUE) .selectCleanupPolicy(TOPIC_FOR_UPDATE.getCompactPolicyValue())
.setMinInsyncReplicas(10) .setMinInsyncReplicas(10)
.setTimeToRetainDataInMs(UPDATED_TIME_TO_RETAIN_VALUE) .setTimeToRetainDataInMs(TOPIC_FOR_UPDATE.getTimeToRetainData())
.setMaxSizeOnDiskInGB(UPDATED_MAX_SIZE_ON_DISK) .setMaxSizeOnDiskInGB(TOPIC_FOR_UPDATE.getMaxSizeOnDisk())
.setMaxMessageBytes(UPDATED_MAX_MESSAGE_BYTES) .setMaxMessageBytes(TOPIC_FOR_UPDATE.getMaxMessageBytes())
.sendData() .sendData()
.waitUntilScreenReady(); .waitUntilScreenReady();
pages.openTopicsList(CLUSTER_NAME) pages.openTopicsList(CLUSTER_NAME)
.waitUntilScreenReady(); .waitUntilScreenReady();
pages.openTopicView(CLUSTER_NAME, TOPIC_TO_UPDATE) pages.openTopicView(CLUSTER_NAME, TOPIC_FOR_UPDATE.getName())
.openEditSettings() .openEditSettings()
// Assertions // Assertions
.cleanupPolicyIs(COMPACT_POLICY_VALUE) .cleanupPolicyIs(TOPIC_FOR_UPDATE.getCompactPolicyValue())
.timeToRetainIs(UPDATED_TIME_TO_RETAIN_VALUE) .timeToRetainIs(TOPIC_FOR_UPDATE.getTimeToRetainData())
.maxSizeOnDiskIs(UPDATED_MAX_SIZE_ON_DISK) .maxSizeOnDiskIs(TOPIC_FOR_UPDATE.getMaxSizeOnDisk())
.maxMessageBytesIs(UPDATED_MAX_MESSAGE_BYTES); .maxMessageBytesIs(TOPIC_FOR_UPDATE.getMaxMessageBytes());
} }
@DisplayName("should delete topic") @DisplayName("should delete topic")
@Suite(suiteId = 2, title = "Topics") @Suite(suiteId = SUITE_ID, title = SUITE_TITLE)
@AutomationStatus(status = Status.AUTOMATED) @AutomationStatus(status = Status.AUTOMATED)
@CaseId(207) @CaseId(207)
@Test @Test
public void deleteTopic() { public void deleteTopic() {
pages.openTopicsList(CLUSTER_NAME) pages.openTopicsList(CLUSTER_NAME)
.waitUntilScreenReady() .waitUntilScreenReady()
.openTopic(TOPIC_TO_DELETE) .openTopic(TOPIC_FOR_DELETE.getName())
.waitUntilScreenReady() .waitUntilScreenReady()
.deleteTopic(); .deleteTopic();
pages.openTopicsList(CLUSTER_NAME) pages.openTopicsList(CLUSTER_NAME)
.waitUntilScreenReady() .waitUntilScreenReady()
.isTopicNotVisible(TOPIC_TO_DELETE); .isTopicNotVisible(TOPIC_FOR_DELETE.getName());
TOPIC_LIST.remove(TOPIC_FOR_DELETE);
} }
@DisplayName("produce message") @DisplayName("produce message")
@Suite(suiteId = 2, title = "Topics") @Suite(suiteId = SUITE_ID, title = SUITE_TITLE)
@AutomationStatus(status = Status.AUTOMATED) @AutomationStatus(status = Status.AUTOMATED)
@CaseId(222) @CaseId(222)
@Test @Test
void produceMessage() { void produceMessage() {
pages.openTopicsList(CLUSTER_NAME) pages.openTopicsList(CLUSTER_NAME)
.waitUntilScreenReady() .waitUntilScreenReady()
.openTopic(TOPIC_TO_UPDATE) .openTopic(TOPIC_FOR_UPDATE.getName())
.waitUntilScreenReady() .waitUntilScreenReady()
.openTopicMenu(TopicView.TopicMenu.MESSAGES) .openTopicMenu(TopicView.TopicMenu.MESSAGES)
.clickOnButton("Produce Message") .clickOnButton("Produce Message")
.setContentFiled(fileToString(CONTENT_TO_PRODUCE_MESSAGE)) .setContentFiled(TOPIC_FOR_UPDATE.getMessageContent())
.setKeyField(fileToString(KEY_TO_PRODUCE_MESSAGE)) .setKeyField(TOPIC_FOR_UPDATE.getMessageKey())
.submitProduceMessage(); .submitProduceMessage();
Assertions.assertTrue(pages.topicView.isKeyMessageVisible(fileToString(KEY_TO_PRODUCE_MESSAGE))); Assertions.assertTrue(pages.topicView.isKeyMessageVisible(TOPIC_FOR_UPDATE.getMessageKey()));
Assertions.assertTrue(pages.topicView.isContentMessageVisible(fileToString(CONTENT_TO_PRODUCE_MESSAGE).trim())); Assertions.assertTrue(pages.topicView.isContentMessageVisible(TOPIC_FOR_UPDATE.getMessageContent().trim()));
}
@AfterAll
public static void afterAll() {
TOPIC_LIST.forEach(topic -> Helpers.INSTANCE.apiHelper.deleteTopic(CLUSTER_NAME, topic.getName()));
} }
} }