initial commit
This commit is contained in:
commit
71ea421eac
1076 changed files with 279211 additions and 0 deletions
201
test/pom.xml
Normal file
201
test/pom.xml
Normal file
|
|
@ -0,0 +1,201 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<parent>
|
||||
<groupId>ru.micord.ervu</groupId>
|
||||
<artifactId>dashboard</artifactId>
|
||||
<version>1.0.0-SNAPSHOT</version>
|
||||
</parent>
|
||||
|
||||
<groupId>ru.micord.ervu.dashboard</groupId>
|
||||
<artifactId>test</artifactId>
|
||||
|
||||
<properties>
|
||||
<application.url>http://localhost:8080/test</application.url>
|
||||
<selenium.grid.url>http://127.0.0.1:4444/wd/hub</selenium.grid.url>
|
||||
</properties>
|
||||
|
||||
<dependencyManagement>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>com.google.guava</groupId>
|
||||
<artifactId>guava</artifactId>
|
||||
<version>31.0.1-jre</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</dependencyManagement>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>ru.cg.webbpm</groupId>
|
||||
<artifactId>web-tests-core</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.httpcomponents</groupId>
|
||||
<artifactId>httpcore</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.google.code.gson</groupId>
|
||||
<artifactId>gson</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.postgresql</groupId>
|
||||
<artifactId>postgresql</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>ru.micord.fias</groupId>
|
||||
<artifactId>client</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!--JWT-->
|
||||
<dependency>
|
||||
<groupId>org.springframework.security</groupId>
|
||||
<artifactId>spring-security-jwt</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.security</groupId>
|
||||
<artifactId>spring-security-core</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.jsonwebtoken</groupId>
|
||||
<artifactId>jjwt-api</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.jsonwebtoken</groupId>
|
||||
<artifactId>jjwt-impl</artifactId>
|
||||
<scope>runtime</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.jsonwebtoken</groupId>
|
||||
<artifactId>jjwt-jackson</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>ru.cg.webbpm.modules.database</groupId>
|
||||
<artifactId>database-impl</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>ru.cg.webbpm.modules.security</groupId>
|
||||
<artifactId>security-api</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.slf4j</groupId>
|
||||
<artifactId>slf4j-simple</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.junit.jupiter</groupId>
|
||||
<artifactId>junit-jupiter</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.junit.platform</groupId>
|
||||
<artifactId>junit-platform-suite-engine</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.junit.jupiter</groupId>
|
||||
<artifactId>junit-jupiter-params</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.seleniumhq.selenium</groupId>
|
||||
<artifactId>selenium-java</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.google.guava</groupId>
|
||||
<artifactId>guava</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>commons-lang</groupId>
|
||||
<artifactId>commons-lang</artifactId>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<pluginManagement>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-failsafe-plugin</artifactId>
|
||||
<version>3.2.5</version>
|
||||
<inherited>true</inherited>
|
||||
<configuration>
|
||||
<trimStackTrace>false</trimStackTrace>
|
||||
<systemPropertyVariables>
|
||||
<application.url>${application.url}</application.url>
|
||||
<selenium.grid.url>${selenium.grid.url}</selenium.grid.url>
|
||||
</systemPropertyVariables>
|
||||
<failIfNoTests>true</failIfNoTests>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</pluginManagement>
|
||||
</build>
|
||||
|
||||
<profiles>
|
||||
|
||||
<profile>
|
||||
<id>chrome</id>
|
||||
<activation>
|
||||
<activeByDefault>true</activeByDefault>
|
||||
</activation>
|
||||
<properties>
|
||||
<browsers>chrome</browsers>
|
||||
</properties>
|
||||
</profile>
|
||||
<profile>
|
||||
<id>all-browsers</id>
|
||||
<properties>
|
||||
<browsers>all</browsers>
|
||||
</properties>
|
||||
</profile>
|
||||
|
||||
<profile>
|
||||
<id>integration-tests-admin</id>
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-failsafe-plugin</artifactId>
|
||||
<executions>
|
||||
<execution>
|
||||
<goals>
|
||||
<goal>integration-test</goal>
|
||||
<goal>verify</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<includes>
|
||||
<include>SuiteAdmin.java</include>
|
||||
</includes>
|
||||
<argLine>-Xmx4g -XX:+HeapDumpOnOutOfMemoryError
|
||||
-XX:HeapDumpPath=/tmp/integration-tests-admin-dump.hprof
|
||||
</argLine>
|
||||
<systemPropertyVariables>
|
||||
<browsers>${browsers}</browsers>
|
||||
</systemPropertyVariables>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
<reporting>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-surefire-report-plugin</artifactId>
|
||||
<version>2.22.2</version>
|
||||
<reportSets>
|
||||
<reportSet>
|
||||
<id>integration-tests-admin</id>
|
||||
<reports>
|
||||
<report>failsafe-report-only</report>
|
||||
</reports>
|
||||
</reportSet>
|
||||
</reportSets>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</reporting>
|
||||
</profile>
|
||||
</profiles>
|
||||
|
||||
</project>
|
||||
27
test/src/test/java/SuiteAdmin.java
Normal file
27
test/src/test/java/SuiteAdmin.java
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
import old.*;
|
||||
import org.junit.platform.suite.api.SelectClasses;
|
||||
import org.junit.platform.suite.api.Suite;
|
||||
import tests.AuthoritiesIT;
|
||||
import tests.LoginIT;
|
||||
import tests.OrganizationsIT;
|
||||
import tests.ProcessesIT;
|
||||
|
||||
/**
|
||||
* @author gulnaz
|
||||
*/
|
||||
@Suite
|
||||
@SelectClasses({
|
||||
AuthoritiesIT.class,
|
||||
LoginIT.class,
|
||||
OrganizationsIT.class,
|
||||
ProcessesIT.class,
|
||||
AdminGroupIT.class,
|
||||
AdminRoleIT.class,
|
||||
AdminUserIT.class,
|
||||
JWTokensIT.class
|
||||
})
|
||||
|
||||
public class SuiteAdmin {
|
||||
SuiteAdmin() {
|
||||
}
|
||||
}
|
||||
332
test/src/test/java/old/AdminGroupIT.java
Normal file
332
test/src/test/java/old/AdminGroupIT.java
Normal file
|
|
@ -0,0 +1,332 @@
|
|||
package old;
|
||||
|
||||
import com.google.common.collect.Comparators;
|
||||
import old.core.Browser;
|
||||
import old.core.BrowserArgumentProvider;
|
||||
import org.junit.jupiter.api.AfterEach;
|
||||
import org.junit.jupiter.api.Disabled;
|
||||
import org.junit.jupiter.api.TestInfo;
|
||||
import org.junit.jupiter.params.ParameterizedTest;
|
||||
import org.junit.jupiter.params.provider.ArgumentsSource;
|
||||
|
||||
import old.page.AdminGroupPage;
|
||||
import old.page.AdminUserPage;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertFalse;
|
||||
import static org.junit.jupiter.api.Assertions.assertNotEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
|
||||
/**
|
||||
* @author kote
|
||||
*/
|
||||
public class AdminGroupIT extends BaseComponentIT {
|
||||
|
||||
private static final String GROUP_ACCESS_LEVEL = "user access level";
|
||||
private static final String ROLE = "BPMN User";
|
||||
private static final String ROLE_2 = "BPMN Admin";
|
||||
private static final String ROLE_3 = "BPMN Superuser";
|
||||
private static final String COL_ID = "group$name";
|
||||
private static final String COL_ID_CREATED = "group$created";
|
||||
private static final String COL_ID_UPDATED = "group$updated";
|
||||
private static final String BPMN_ADMIN_ROLE_ID = "aa14ba1d-0b61-4e33-8474-7c2d98944b12";
|
||||
private static final String BPMN_USER_ROLE_ID = "767ae8cf-af01-44d4-86ef-fcb143373407";
|
||||
private static final String BPMN_SUPERUSER_ROLE_ID = "2569ba58-1f8f-43ea-8b2c-0d373cf501fe";
|
||||
|
||||
private AdminGroupPage adminGroupPage;
|
||||
private String oldName;
|
||||
private String groupId;
|
||||
private String roleId;
|
||||
|
||||
public AdminGroupIT() {
|
||||
super();
|
||||
}
|
||||
|
||||
@AfterEach
|
||||
public void afterEachTest(TestInfo testInfo) {
|
||||
String testName = testInfo.getTestMethod().toString();
|
||||
|
||||
if (testName.contains("User")) {
|
||||
EXECUTION_MANAGER.deleteTestUser(name);
|
||||
}
|
||||
|
||||
if (testName.contains("edit")) {
|
||||
EXECUTION_MANAGER.deleteTestGroup(oldName);
|
||||
}
|
||||
|
||||
if (testName.contains("linked")) {
|
||||
EXECUTION_MANAGER.deleteUserGroupRole(name, groupId, roleId);
|
||||
}
|
||||
|
||||
if (testName.contains("Sorting")) {
|
||||
String groupIdToDelete = EXECUTION_MANAGER.getGroupIdByName(name);
|
||||
EXECUTION_MANAGER.deleteLinkedRolesFromGroup(groupIdToDelete);
|
||||
}
|
||||
|
||||
EXECUTION_MANAGER.deleteTestGroup(name);
|
||||
}
|
||||
|
||||
@ParameterizedTest
|
||||
@ArgumentsSource(BrowserArgumentProvider.class)
|
||||
public void createGroup(Browser browser) {
|
||||
openBrowserAndAdminPage(browser);
|
||||
adminGroupPage.clickCreateButton();
|
||||
|
||||
adminGroupPage.waitForPageLoad();
|
||||
adminGroupPage.waitForVisibilityOf(adminGroupPage.nameField);
|
||||
adminGroupPage.typeText(adminGroupPage.nameField, name);
|
||||
adminGroupPage.typeAndSelectLevel(GROUP_ACCESS_LEVEL);
|
||||
adminGroupPage.addRole(ROLE, false);
|
||||
adminGroupPage.clickSaveButton();
|
||||
String dateOfCreation = adminGroupPage.getLocalDate();
|
||||
|
||||
adminGroupPage.waitForPageLoad();
|
||||
adminGroupPage.searchGroup(name);
|
||||
assertEquals(1, adminGroupPage.getListOfGroupsNamesFromTable(name).size());
|
||||
assertTrue(adminGroupPage.getActionTime(COL_ID, name, COL_ID_CREATED).getText().contains(dateOfCreation));
|
||||
}
|
||||
|
||||
@ParameterizedTest
|
||||
@ArgumentsSource(BrowserArgumentProvider.class)
|
||||
public void searchGroup(Browser browser) {
|
||||
openBrowserAndAdminPage(browser);
|
||||
EXECUTION_MANAGER.createTestGroup(name, ACCESS_LEVEL_ID);
|
||||
adminGroupPage.searchGroup(name);
|
||||
|
||||
adminGroupPage.waitForPageLoad();
|
||||
assertEquals(1, adminGroupPage.getListOfGroupsNamesFromTable(name).size());
|
||||
}
|
||||
|
||||
@ParameterizedTest
|
||||
@ArgumentsSource(BrowserArgumentProvider.class)
|
||||
public void editGroup(Browser browser) {
|
||||
openBrowserAndAdminPage(browser);
|
||||
oldName = "old" + name;
|
||||
EXECUTION_MANAGER.createTestGroup(oldName, ACCESS_LEVEL_ID);
|
||||
|
||||
adminGroupPage.chooseGroup(oldName);
|
||||
adminGroupPage.clickEditButton();
|
||||
adminGroupPage.waitForVisibilityOf(adminGroupPage.nameField);
|
||||
adminGroupPage.typeText(adminGroupPage.nameField, name);
|
||||
adminGroupPage.addRole(ROLE, false);
|
||||
adminGroupPage.clickSaveButton();
|
||||
adminGroupPage.searchGroup(oldName);
|
||||
assertEquals(0, adminGroupPage.getListOfGroupsNamesFromTable(oldName).size());
|
||||
|
||||
adminGroupPage.chooseGroup(name);
|
||||
assertEquals(1, adminGroupPage.getListOfGroupsNamesFromTable(name).size());
|
||||
String timeOfCreate = adminGroupPage.getActionTime(COL_ID, name, COL_ID_CREATED).getText();
|
||||
String timeOfUpdate = adminGroupPage.getActionTime(COL_ID, name, COL_ID_UPDATED).getText();
|
||||
assertNotEquals(timeOfCreate, timeOfUpdate);
|
||||
|
||||
adminGroupPage.clickEditButton();
|
||||
assertTrue(adminGroupPage.hasRolesInTable(AdminGroupPage.GroupPageGrids.ADDED_ROLES_GRID, ROLE));
|
||||
}
|
||||
|
||||
@ParameterizedTest
|
||||
@ArgumentsSource(BrowserArgumentProvider.class)
|
||||
public void deleteGroup(Browser browser) {
|
||||
openBrowserAndAdminPage(browser);
|
||||
EXECUTION_MANAGER.createTestGroup(name, ACCESS_LEVEL_ID);
|
||||
|
||||
adminGroupPage.chooseGroup(name);
|
||||
adminGroupPage.deleteGroup();
|
||||
assertTrue(adminGroupPage.isGridEmpty());
|
||||
}
|
||||
|
||||
@ParameterizedTest
|
||||
@ArgumentsSource(BrowserArgumentProvider.class)
|
||||
public void linkedRolesTable(Browser browser) {
|
||||
openBrowserAndAdminPage(browser);
|
||||
roleId = EXECUTION_MANAGER.generateId();
|
||||
groupId = EXECUTION_MANAGER.generateId();
|
||||
EXECUTION_MANAGER.createBindGroupRole(name, groupId, ACCESS_LEVEL_ID, roleId);
|
||||
|
||||
adminGroupPage.chooseGroup(name);
|
||||
assertEquals(1, adminGroupPage.getListOfRolesFromLinkedTable().size());
|
||||
assertEquals(name, adminGroupPage.getListOfRolesFromLinkedTable().get(0).getText());
|
||||
}
|
||||
|
||||
@ParameterizedTest
|
||||
@ArgumentsSource(BrowserArgumentProvider.class)
|
||||
public void attachRemoveRoleToGroup(Browser browser) {
|
||||
openBrowserAndAdminPage(browser);
|
||||
EXECUTION_MANAGER.createTestGroup(name, ACCESS_LEVEL_ID);
|
||||
adminGroupPage.chooseGroup(name);
|
||||
assertTrue(adminGroupPage.getListOfRolesFromLinkedTable().isEmpty());
|
||||
|
||||
adminGroupPage.clickEditButton();
|
||||
assertFalse(adminGroupPage.getListOfRolesToAdd().isEmpty());
|
||||
assertTrue(adminGroupPage.getListOfAddedRoles().isEmpty());
|
||||
|
||||
adminGroupPage.addRole(ROLE, false);
|
||||
assertFalse(adminGroupPage.getWebElementTexts(adminGroupPage.getListOfRolesToAdd()).contains(ROLE));
|
||||
assertTrue(adminGroupPage.getWebElementTexts(adminGroupPage.getListOfAddedRoles()).contains(ROLE));
|
||||
assertEquals(1, adminGroupPage.getListOfAddedRoles().size());
|
||||
|
||||
adminGroupPage.clickSaveButton();
|
||||
adminGroupPage.chooseGroup(name);
|
||||
assertEquals(1, adminGroupPage.getListOfRolesFromLinkedTable().size());
|
||||
assertTrue(adminGroupPage.getWebElementTexts(adminGroupPage.getListOfRolesFromLinkedTable()).contains(ROLE));
|
||||
|
||||
adminGroupPage.clickEditButton();
|
||||
adminGroupPage.removeRole(ROLE);
|
||||
assertTrue(adminGroupPage.getWebElementTexts(adminGroupPage.getListOfRolesToAdd()).contains(ROLE));
|
||||
assertTrue(adminGroupPage.getListOfAddedRoles().isEmpty());
|
||||
|
||||
adminGroupPage.clickSaveButton();
|
||||
adminGroupPage.chooseGroup(name);
|
||||
assertTrue(adminGroupPage.getListOfRolesFromLinkedTable().isEmpty());
|
||||
}
|
||||
|
||||
@ParameterizedTest
|
||||
@ArgumentsSource(BrowserArgumentProvider.class)
|
||||
public void attachRemoveAllRolesToGroup(Browser browser) {
|
||||
openBrowserAndAdminPage(browser);
|
||||
EXECUTION_MANAGER.createTestGroup(name, ACCESS_LEVEL_ID);
|
||||
List<String> roleNames = EXECUTION_MANAGER.getRoleNamesFromUserRole();
|
||||
List<String> expectedRoles = Arrays.asList(ROLE, ROLE_2, ROLE_3);
|
||||
|
||||
adminGroupPage.chooseGroup(name);
|
||||
adminGroupPage.clickEditButton();
|
||||
assertFalse(adminGroupPage.getListOfRolesToAdd().isEmpty());
|
||||
assertTrue(adminGroupPage.getListOfAddedRoles().isEmpty());
|
||||
|
||||
adminGroupPage.addAllRoles();
|
||||
assertTrue(adminGroupPage.isAvailableGridEmpty(roleNames));
|
||||
assertFalse(adminGroupPage.getListOfAddedRoles().isEmpty());
|
||||
/*
|
||||
Нет возможности проверить сохранение привязки всех ролей к группе из-за создания/удаление ролей
|
||||
параллельными тестами.
|
||||
*/
|
||||
|
||||
adminGroupPage.removeAllRoles();
|
||||
assertFalse(adminGroupPage.getListOfRolesToAdd().isEmpty());
|
||||
assertTrue(adminGroupPage.getListOfAddedRoles().isEmpty());
|
||||
|
||||
adminGroupPage.addRole(ROLE, false);
|
||||
adminGroupPage.addRole(ROLE_2, false);
|
||||
adminGroupPage.addRole(ROLE_3, false);
|
||||
adminGroupPage.clickSaveButton();
|
||||
adminGroupPage.chooseGroup(name);
|
||||
assertEquals(expectedRoles.size(), adminGroupPage.getListOfRolesFromLinkedTable().size());
|
||||
assertTrue(adminGroupPage.getWebElementTexts(adminGroupPage.getListOfRolesFromLinkedTable())
|
||||
.containsAll(expectedRoles));
|
||||
|
||||
adminGroupPage.clickEditButton();
|
||||
adminGroupPage.removeAllRoles();
|
||||
adminGroupPage.clickSaveButton();
|
||||
adminGroupPage.chooseGroup(name);
|
||||
assertTrue(adminGroupPage.getListOfRolesFromLinkedTable().isEmpty());
|
||||
}
|
||||
|
||||
@ParameterizedTest
|
||||
@ArgumentsSource(BrowserArgumentProvider.class)
|
||||
public void addNewGroupToUser(Browser browser) {
|
||||
openBrowserAndAdminPage(browser);
|
||||
String userName = name;
|
||||
EXECUTION_MANAGER.createUser(userName, ORGANIZATION_ID);
|
||||
adminGroupPage.clickCreateButton();
|
||||
|
||||
adminGroupPage.waitForPageLoad();
|
||||
adminGroupPage.waitForVisibilityOf(adminGroupPage.nameField);
|
||||
adminGroupPage.typeText(adminGroupPage.nameField, name);
|
||||
adminGroupPage.typeAndSelectLevel(GROUP_ACCESS_LEVEL);
|
||||
adminGroupPage.clickSaveButton();
|
||||
|
||||
AdminUserPage adminUserPage = inboxPage.startAdminUser();
|
||||
adminUserPage.searchUser(userName);
|
||||
adminUserPage.clickOnUserInTable(userName);
|
||||
adminUserPage.clickEditButton();
|
||||
adminUserPage.fillPassAndEmail(userName, userName + "@test.ru");
|
||||
adminUserPage.bindGroup(name);
|
||||
assertTrue(adminUserPage.getWebElementTexts(adminUserPage.getListOfAddedGroups()).contains(name));
|
||||
|
||||
adminUserPage.clickSaveButton();
|
||||
adminUserPage.searchUser(userName);
|
||||
adminUserPage.clickOnUserInTable(userName);
|
||||
assertEquals(1, adminUserPage.getListOfGroupsFromTable().size());
|
||||
assertEquals(name, adminUserPage.getListOfGroupsFromTable().get(0).getText());
|
||||
}
|
||||
|
||||
@Disabled("dev WEBBPMNEXT-7837")
|
||||
@ParameterizedTest
|
||||
@ArgumentsSource(BrowserArgumentProvider.class)
|
||||
public void groupRolesGridsSorting(Browser browser) {
|
||||
openBrowserAndAdminPage(browser);
|
||||
EXECUTION_MANAGER.createGroupBindRoles(name, ACCESS_LEVEL_ID, BPMN_ADMIN_ROLE_ID,
|
||||
BPMN_USER_ROLE_ID, BPMN_SUPERUSER_ROLE_ID);
|
||||
|
||||
//main group page sorting
|
||||
List<String> groupNamesNatural = adminGroupPage.getWebElementTexts(adminGroupPage.getListOfGroupNames());
|
||||
assertTrue(Comparators.isInOrder(groupNamesNatural, String.CASE_INSENSITIVE_ORDER),
|
||||
"Grid wasn't sorted");
|
||||
|
||||
adminGroupPage.changeGroupPageGridSort(AdminGroupPage.GroupPageGrids.GROUP_NAMES_GRID);
|
||||
List<String> groupNamesReverse = adminGroupPage.getWebElementTexts(adminGroupPage.getListOfGroupNames());
|
||||
assertTrue(Comparators.isInOrder(groupNamesReverse, String.CASE_INSENSITIVE_ORDER.reversed()),
|
||||
"Grid wasn't sorted");
|
||||
|
||||
adminGroupPage.chooseGroup(name);
|
||||
List<String> linkedRolesNatural = adminGroupPage.getWebElementTexts(adminGroupPage.getListOfRolesFromLinkedTable());
|
||||
assertTrue(Comparators.isInOrder(linkedRolesNatural, String.CASE_INSENSITIVE_ORDER),
|
||||
"Grid wasn't sorted");
|
||||
|
||||
adminGroupPage.changeGroupPageGridSort(AdminGroupPage.GroupPageGrids.LINKED_ROLES_GRID);
|
||||
List<String> linkedRolesReverse = adminGroupPage.getWebElementTexts(adminGroupPage.getListOfRolesFromLinkedTable());
|
||||
assertTrue(Comparators.isInOrder(linkedRolesReverse, String.CASE_INSENSITIVE_ORDER.reversed()),
|
||||
"Grid wasn't sorted");
|
||||
|
||||
//edit group page sorting
|
||||
adminGroupPage.clickEditButton();
|
||||
List<String> availableToAddRolesNatural = adminGroupPage.getWebElementTexts(adminGroupPage.getListOfRolesToAdd());
|
||||
assertTrue(Comparators.isInOrder(availableToAddRolesNatural, String.CASE_INSENSITIVE_ORDER),
|
||||
"Grid wasn't sorted");
|
||||
|
||||
adminGroupPage.changeGroupPageGridSort(AdminGroupPage.GroupPageGrids.ROLES_TO_ADD_GRID);
|
||||
List<String> availableToAddRolesReverse = adminGroupPage.getWebElementTexts(adminGroupPage.getListOfRolesToAdd());
|
||||
assertTrue(Comparators.isInOrder(availableToAddRolesReverse,
|
||||
String.CASE_INSENSITIVE_ORDER.reversed()), "Grid wasn't sorted");
|
||||
|
||||
adminGroupPage.removeAllRoles();
|
||||
List<String> addedRolesNatural = adminGroupPage.getWebElementTexts(adminGroupPage.getListOfAddedRoles());
|
||||
assertTrue(Comparators.isInOrder(addedRolesNatural, String.CASE_INSENSITIVE_ORDER),
|
||||
"Grid wasn't sorted");
|
||||
|
||||
adminGroupPage.changeGroupPageGridSort(AdminGroupPage.GroupPageGrids.ADDED_ROLES_GRID);
|
||||
List<String> addedRolesReverse = adminGroupPage.getWebElementTexts(adminGroupPage.getListOfAddedRoles());
|
||||
assertTrue(Comparators.isInOrder(addedRolesReverse, String.CASE_INSENSITIVE_ORDER.reversed()),
|
||||
"Grid wasn't sorted");
|
||||
|
||||
//create group page sorting
|
||||
adminGroupPage.cancelAction();
|
||||
adminGroupPage.clickCreateButton();
|
||||
List<String> rolesToAddNatural = adminGroupPage.getWebElementTexts(adminGroupPage.getListOfRolesToAdd());
|
||||
assertTrue(Comparators.isInOrder(rolesToAddNatural, String.CASE_INSENSITIVE_ORDER),
|
||||
"Grid wasn't sorted");
|
||||
|
||||
adminGroupPage.changeGroupPageGridSort(AdminGroupPage.GroupPageGrids.ROLES_TO_ADD_GRID);
|
||||
List<String> rolesToAddReverse = adminGroupPage.getWebElementTexts(adminGroupPage.getListOfRolesToAdd());
|
||||
assertTrue(Comparators.isInOrder(rolesToAddReverse, String.CASE_INSENSITIVE_ORDER.reversed()),
|
||||
"Grid wasn't sorted");
|
||||
|
||||
adminGroupPage.removeAllRoles();
|
||||
List<String> addedRolesNaturalSort = adminGroupPage.getWebElementTexts(adminGroupPage.getListOfAddedRoles());
|
||||
assertTrue(Comparators.isInOrder(addedRolesNaturalSort, String.CASE_INSENSITIVE_ORDER),
|
||||
"Grid wasn't sorted");
|
||||
|
||||
adminGroupPage.changeGroupPageGridSort(AdminGroupPage.GroupPageGrids.ADDED_ROLES_GRID);
|
||||
List<String> addedRolesReverseSort = adminGroupPage.getWebElementTexts(adminGroupPage.getListOfAddedRoles());
|
||||
assertTrue(Comparators.isInOrder(addedRolesReverseSort, String.CASE_INSENSITIVE_ORDER.reversed()),
|
||||
"Grid wasn't sorted");
|
||||
}
|
||||
|
||||
private void openBrowserAndAdminPage(Browser browser) {
|
||||
openBrowserAndLoginForAdmin(browser);
|
||||
initAdminName();
|
||||
adminGroupPage = inboxPage.startAdminGroup();
|
||||
}
|
||||
}
|
||||
184
test/src/test/java/old/AdminRoleIT.java
Normal file
184
test/src/test/java/old/AdminRoleIT.java
Normal file
|
|
@ -0,0 +1,184 @@
|
|||
package old;
|
||||
|
||||
import com.google.common.collect.Comparators;
|
||||
import old.core.Browser;
|
||||
import old.core.BrowserArgumentProvider;
|
||||
import org.junit.jupiter.api.AfterEach;
|
||||
import org.junit.jupiter.api.Disabled;
|
||||
import org.junit.jupiter.api.TestInfo;
|
||||
import org.junit.jupiter.params.ParameterizedTest;
|
||||
import org.junit.jupiter.params.provider.ArgumentsSource;
|
||||
import org.openqa.selenium.WebElement;
|
||||
import old.page.AdminGroupPage;
|
||||
import old.page.AdminRolePage;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertNotEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
|
||||
/**
|
||||
* @author kote
|
||||
*/
|
||||
public class AdminRoleIT extends BaseComponentIT {
|
||||
|
||||
private static final String COL_ID = "role$name";
|
||||
private static final String COL_ID_CREATED = "role$created";
|
||||
private static final String COL_ID_UPDATED = "role$updated";
|
||||
|
||||
private AdminRolePage adminRolePage;
|
||||
private String oldName;
|
||||
|
||||
public AdminRoleIT() {
|
||||
super();
|
||||
}
|
||||
|
||||
@AfterEach
|
||||
public void afterEachTest(TestInfo testInfo) {
|
||||
String testName = testInfo.getTestMethod().toString();
|
||||
|
||||
if (testName.contains("Group")) {
|
||||
EXECUTION_MANAGER.deleteTestGroup(name);
|
||||
}
|
||||
|
||||
if (testName.contains("edit")) {
|
||||
EXECUTION_MANAGER.deleteTestRole(oldName);
|
||||
}
|
||||
|
||||
if (testName.contains("Sorting")) {
|
||||
String roleId = EXECUTION_MANAGER.getRoleIdByName(name);
|
||||
EXECUTION_MANAGER.deleteLinkedGroupsFromRole(roleId);
|
||||
}
|
||||
|
||||
EXECUTION_MANAGER.deleteTestRole(name);
|
||||
}
|
||||
|
||||
@ParameterizedTest
|
||||
@ArgumentsSource(BrowserArgumentProvider.class)
|
||||
public void createRole(Browser browser) {
|
||||
openBrowserAndAdminPage(browser);
|
||||
adminRolePage.clickCreateButton();
|
||||
adminRolePage.typeText(adminRolePage.nameField, name);
|
||||
adminRolePage.clickSaveButton();
|
||||
String dateOfCreation = adminRolePage.getLocalDate();
|
||||
adminRolePage.searchRole(name);
|
||||
assertEquals(1, adminRolePage.getListOfRolesNamesFromTable(name).size());
|
||||
assertTrue(adminRolePage.getActionTime(COL_ID, name, COL_ID_CREATED).getText().contains(dateOfCreation));
|
||||
}
|
||||
|
||||
@ParameterizedTest
|
||||
@ArgumentsSource(BrowserArgumentProvider.class)
|
||||
public void searchRole(Browser browser) {
|
||||
openBrowserAndAdminPage(browser);
|
||||
EXECUTION_MANAGER.createTestRole(name);
|
||||
|
||||
adminRolePage.searchRole(name);
|
||||
assertEquals(1, adminRolePage.getListOfRolesNamesFromTable(name).size());
|
||||
}
|
||||
|
||||
@ParameterizedTest
|
||||
@ArgumentsSource(BrowserArgumentProvider.class)
|
||||
public void editRole(Browser browser) {
|
||||
openBrowserAndAdminPage(browser);
|
||||
oldName = "old" + name;
|
||||
EXECUTION_MANAGER.createTestRole(oldName);
|
||||
|
||||
adminRolePage.chooseRole(oldName);
|
||||
adminRolePage.clickEditButton();
|
||||
adminRolePage.typeText(adminRolePage.nameField, name);
|
||||
adminRolePage.clickSaveButton();
|
||||
adminRolePage.searchRole(oldName);
|
||||
assertEquals(0, adminRolePage.getListOfRolesNamesFromTable(oldName).size());
|
||||
|
||||
adminRolePage.searchRole(name);
|
||||
assertEquals(1, adminRolePage.getListOfRolesNamesFromTable(name).size());
|
||||
|
||||
String timeOfCreate = adminRolePage.getActionTime(COL_ID, name, COL_ID_CREATED).getText();
|
||||
String timeOfUpdate = adminRolePage.getActionTime(COL_ID, name, COL_ID_UPDATED).getText();
|
||||
assertNotEquals(timeOfCreate, timeOfUpdate);
|
||||
}
|
||||
|
||||
@ParameterizedTest
|
||||
@ArgumentsSource(BrowserArgumentProvider.class)
|
||||
public void deleteRole(Browser browser) {
|
||||
openBrowserAndAdminPage(browser);
|
||||
EXECUTION_MANAGER.createTestRole(name);
|
||||
|
||||
adminRolePage.waitForPageLoad();
|
||||
adminRolePage.chooseRole(name);
|
||||
adminRolePage.deleteRole();
|
||||
assertEquals(0, adminRolePage.getListOfRolesNamesFromTable(name).size());
|
||||
}
|
||||
|
||||
@ParameterizedTest
|
||||
@ArgumentsSource(BrowserArgumentProvider.class)
|
||||
public void roleGroupGridContainsAttachedGroup(Browser browser) {
|
||||
openBrowserAndAdminPage(browser);
|
||||
String roleId = EXECUTION_MANAGER.generateId();
|
||||
String groupId = EXECUTION_MANAGER.generateId();
|
||||
EXECUTION_MANAGER.createBindGroupRole(name, groupId, ACCESS_LEVEL_ID, roleId);
|
||||
|
||||
adminRolePage.chooseRole(name);
|
||||
WebElement gridLinkedGroup = adminRolePage.getListOfRoleLinkedGroups().get(0);
|
||||
adminRolePage.waitForTextToBePresentInElement(gridLinkedGroup, name);
|
||||
assertEquals(1, adminRolePage.getListOfRoleLinkedGroups().size());
|
||||
assertEquals(adminRolePage.getListOfRoleLinkedGroups().get(0).getText(), name);
|
||||
}
|
||||
|
||||
@ParameterizedTest
|
||||
@ArgumentsSource(BrowserArgumentProvider.class)
|
||||
public void addNewRoleToGroup(Browser browser) {
|
||||
openBrowserAndAdminPage(browser);
|
||||
String groupName = name;
|
||||
EXECUTION_MANAGER.createTestGroup(groupName, ACCESS_LEVEL_ID);
|
||||
|
||||
adminRolePage.clickCreateButton();
|
||||
adminRolePage.typeText(adminRolePage.nameField, name);
|
||||
adminRolePage.clickSaveButton();
|
||||
|
||||
AdminGroupPage adminGroupPage = inboxPage.startAdminGroup();
|
||||
adminGroupPage.chooseGroup(groupName);
|
||||
adminGroupPage.clickEditButton();
|
||||
adminGroupPage.bindRole(name);
|
||||
assertTrue(adminGroupPage.hasRolesInTable(AdminGroupPage.GroupPageGrids.ADDED_ROLES_GRID, name));
|
||||
|
||||
adminGroupPage.clickSaveButton();
|
||||
adminGroupPage.chooseGroup(groupName);
|
||||
adminGroupPage.clickEditButton();
|
||||
assertTrue(adminGroupPage.hasRolesInTable(AdminGroupPage.GroupPageGrids.ADDED_ROLES_GRID, name));
|
||||
}
|
||||
|
||||
@Disabled("dev WEBBPMNEXT-7837")
|
||||
@ParameterizedTest
|
||||
@ArgumentsSource(BrowserArgumentProvider.class)
|
||||
public void roleGroupsGridSorting(Browser browser) {
|
||||
openBrowserAndAdminPage(browser);
|
||||
EXECUTION_MANAGER.createRoleBindGroups(name, BPMN_ADMIN_GROUP_ID, BPMN_USER_GROUP_ID, BPMN_SUPERUSER_GROUP_ID);
|
||||
|
||||
List<String> roleNamesNatural = adminRolePage.getWebElementTexts(adminRolePage.getListOfRoles());
|
||||
assertTrue(Comparators.isInOrder(roleNamesNatural, String.CASE_INSENSITIVE_ORDER),
|
||||
"Grid wasn't sorted");
|
||||
|
||||
adminRolePage.changeRolePageGridSort(AdminRolePage.RolePageGrids.ROLE_NAMES_GRID);
|
||||
List<String> roleNamesReverse = adminRolePage.getWebElementTexts(adminRolePage.getListOfRoles());
|
||||
assertTrue(Comparators.isInOrder(roleNamesReverse, String.CASE_INSENSITIVE_ORDER.reversed()),
|
||||
"Grid wasn't sorted");
|
||||
|
||||
adminRolePage.chooseRole(name);
|
||||
List<String> linkedGroupsNatural = adminRolePage.getWebElementTexts(adminRolePage.getListOfRoleLinkedGroups());
|
||||
assertTrue(Comparators.isInOrder(linkedGroupsNatural, String.CASE_INSENSITIVE_ORDER),
|
||||
"Grid wasn't sorted");
|
||||
|
||||
adminRolePage.changeRolePageGridSort(AdminRolePage.RolePageGrids.GROUP_NAMES_GRID);
|
||||
List<String> linkedGroupsReverse = adminRolePage.getWebElementTexts(adminRolePage.getListOfRoleLinkedGroups());
|
||||
assertTrue(Comparators.isInOrder(linkedGroupsReverse, String.CASE_INSENSITIVE_ORDER.reversed()),
|
||||
"Grid wasn't sorted");
|
||||
}
|
||||
|
||||
private void openBrowserAndAdminPage(Browser browser) {
|
||||
openBrowserAndLoginForAdmin(browser);
|
||||
initAdminName();
|
||||
adminRolePage = inboxPage.startAdminRole();
|
||||
}
|
||||
}
|
||||
370
test/src/test/java/old/AdminUserIT.java
Normal file
370
test/src/test/java/old/AdminUserIT.java
Normal file
|
|
@ -0,0 +1,370 @@
|
|||
package old;
|
||||
|
||||
import com.google.common.collect.Comparators;
|
||||
import old.core.Browser;
|
||||
import old.core.BrowserArgumentProvider;
|
||||
import org.apache.commons.lang.RandomStringUtils;
|
||||
import org.junit.jupiter.api.AfterEach;
|
||||
import org.junit.jupiter.api.Disabled;
|
||||
import org.junit.jupiter.api.TestInfo;
|
||||
import org.junit.jupiter.params.ParameterizedTest;
|
||||
import org.junit.jupiter.params.provider.ArgumentsSource;
|
||||
import old.page.AdminUserPage;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
import static org.apache.commons.lang.StringUtils.containsIgnoreCase;
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertFalse;
|
||||
import static org.junit.jupiter.api.Assertions.assertNotEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
|
||||
/**
|
||||
* @author kote
|
||||
*/
|
||||
public class AdminUserIT extends BaseComponentIT {
|
||||
|
||||
private AdminUserPage adminUserPage;
|
||||
private String oldName;
|
||||
private String email;
|
||||
|
||||
private static final String USER_PASSWORD = "test";
|
||||
private static final String USER_PASSWORD_2 = "test2";
|
||||
private static final String ORGANIZATION = "Default";
|
||||
private static final String FULL_ORGANIZATION_NAME = "Default Organization";
|
||||
private static final String BPMN_ADMIN_GROUP = "BPMN Admin";
|
||||
private static final String BPMN_USER_GROUP = "BPMN User";
|
||||
private static final String BPMN_SUPERUSER_GROUP = "BPMN Superuser";
|
||||
|
||||
private static final String SECURITY_GROUP = "Security Admin";
|
||||
|
||||
public AdminUserIT() {
|
||||
super();
|
||||
}
|
||||
|
||||
@AfterEach
|
||||
public void afterEachTest(TestInfo testInfo) {
|
||||
String testName = testInfo.getTestMethod().toString();
|
||||
|
||||
if (testName.contains("edit")) {
|
||||
EXECUTION_MANAGER.deleteTestUser(oldName);
|
||||
}
|
||||
|
||||
if (containsIgnoreCase(testName, "sorting")) {
|
||||
String userAccId = EXECUTION_MANAGER.getUserAccountIdByName(name);
|
||||
EXECUTION_MANAGER.deleteUserLinkedGroups(userAccId);
|
||||
}
|
||||
|
||||
if (containsIgnoreCase(testName, "visibility")) {
|
||||
String userAccountId = EXECUTION_MANAGER.getUserAccountIdByName(name);
|
||||
EXECUTION_MANAGER.deleteUserLinkedGroups(userAccountId);
|
||||
}
|
||||
|
||||
EXECUTION_MANAGER.deleteTestUser(name);
|
||||
}
|
||||
|
||||
@ParameterizedTest
|
||||
@ArgumentsSource(BrowserArgumentProvider.class)
|
||||
public void createUser(Browser browser) {
|
||||
openBrowserAndAdminPage(browser);
|
||||
adminUserPage.clickCreateButton();
|
||||
adminUserPage.waitForVisibilityOf(adminUserPage.lastNameField);
|
||||
adminUserPage.fillUserFullName(name);
|
||||
email = randomEmail();
|
||||
adminUserPage.fillUserCredentials(name, USER_PASSWORD, email, ORGANIZATION, FULL_ORGANIZATION_NAME);
|
||||
adminUserPage.addGroup(BPMN_ADMIN_GROUP);
|
||||
adminUserPage.clickSaveButton();
|
||||
assertTrue(EXECUTION_MANAGER.hasUserByData(name, email));
|
||||
|
||||
adminUserPage.searchUser(name);
|
||||
adminUserPage.clickOnUserInTable(name);
|
||||
assertEquals(1, adminUserPage.getListOfGroupsFromTable().size());
|
||||
assertEquals(BPMN_ADMIN_GROUP, adminUserPage.getListOfGroupsFromTable().get(0).getText());
|
||||
}
|
||||
|
||||
@ParameterizedTest
|
||||
@ArgumentsSource(BrowserArgumentProvider.class)
|
||||
public void searchUser(Browser browser) {
|
||||
openBrowserAndAdminPage(browser);
|
||||
EXECUTION_MANAGER.createUser(name, ORGANIZATION_ID);
|
||||
|
||||
adminUserPage.searchUser(name);
|
||||
assertEquals(1, adminUserPage.getListOfLastNamesFromTable().size());
|
||||
assertEquals(1, adminUserPage.getListOfFirstNamesFromTable().size());
|
||||
assertEquals(1, adminUserPage.getListOfMiddleNamesFromTable().size());
|
||||
|
||||
assertEquals(name, adminUserPage.getListOfLastNamesFromTable().get(0).getText());
|
||||
assertEquals(name, adminUserPage.getListOfFirstNamesFromTable().get(0).getText());
|
||||
assertEquals(name, adminUserPage.getListOfMiddleNamesFromTable().get(0).getText());
|
||||
}
|
||||
|
||||
@ParameterizedTest
|
||||
@ArgumentsSource(BrowserArgumentProvider.class)
|
||||
public void editUser(Browser browser) {
|
||||
openBrowserAndAdminPage(browser);
|
||||
EXECUTION_MANAGER.createUser(name, ORGANIZATION_ID);
|
||||
|
||||
adminUserPage.searchUser(name);
|
||||
adminUserPage.clickOnUserInTable(name);
|
||||
adminUserPage.clickEditButton();
|
||||
adminUserPage.waitForVisibilityOf(adminUserPage.lastNameField);
|
||||
oldName = name;
|
||||
name = name + "_edited";
|
||||
adminUserPage.fillUserFullName(name);
|
||||
email = randomEmail();
|
||||
adminUserPage.fillPassAndEmail(USER_PASSWORD_2, email);
|
||||
adminUserPage.addGroup(BPMN_USER_GROUP);
|
||||
adminUserPage.clickSaveButton();
|
||||
adminUserPage.waitForVisibilityOf(adminUserPage.filterPanel);
|
||||
adminUserPage.searchUser(name);
|
||||
assertEquals(1, adminUserPage.getListOfLastNamesFromTable().size());
|
||||
assertEquals(1, adminUserPage.getListOfFirstNamesFromTable().size());
|
||||
assertEquals(1, adminUserPage.getListOfMiddleNamesFromTable().size());
|
||||
|
||||
assertNotEquals(oldName, adminUserPage.getListOfLastNamesFromTable().get(0).getText());
|
||||
assertNotEquals(oldName, adminUserPage.getListOfFirstNamesFromTable().get(0).getText());
|
||||
assertNotEquals(oldName, adminUserPage.getListOfMiddleNamesFromTable().get(0).getText());
|
||||
|
||||
assertTrue(EXECUTION_MANAGER.hasUserByData(name, email));
|
||||
|
||||
adminUserPage.clickOnUserInTable(name);
|
||||
assertEquals(1, adminUserPage.getListOfGroupsFromTable().size());
|
||||
assertEquals(BPMN_USER_GROUP, adminUserPage.getListOfGroupsFromTable().get(0).getText());
|
||||
}
|
||||
|
||||
@ParameterizedTest
|
||||
@ArgumentsSource(BrowserArgumentProvider.class)
|
||||
public void deleteUser(Browser browser) {
|
||||
openBrowserAndAdminPage(browser);
|
||||
EXECUTION_MANAGER.createUser(name, ORGANIZATION_ID);
|
||||
|
||||
adminUserPage.searchUser(name);
|
||||
adminUserPage.clickOnUserInTable(name);
|
||||
adminUserPage.deleteUser();
|
||||
|
||||
assertTrue(adminUserPage.getListOfLastNamesFromTable().isEmpty());
|
||||
assertTrue(adminUserPage.getListOfFirstNamesFromTable().isEmpty());
|
||||
assertTrue(adminUserPage.getListOfMiddleNamesFromTable().isEmpty());
|
||||
}
|
||||
|
||||
|
||||
@ParameterizedTest
|
||||
@ArgumentsSource(BrowserArgumentProvider.class)
|
||||
public void attachRemoveGroup(Browser browser) {
|
||||
openBrowserAndAdminPage(browser);
|
||||
EXECUTION_MANAGER.createUser(name, ORGANIZATION_ID);
|
||||
|
||||
adminUserPage.searchUser(name);
|
||||
adminUserPage.clickOnUserInTable(name);
|
||||
assertTrue(adminUserPage.getListOfGroupsFromTable().isEmpty());
|
||||
|
||||
adminUserPage.clickEditButton();
|
||||
assertFalse(adminUserPage.getListOfAvailableGroupsToAdd().isEmpty());
|
||||
assertTrue(adminUserPage.getListOfAddedGroups().isEmpty());
|
||||
|
||||
adminUserPage.addGroup(BPMN_ADMIN_GROUP);
|
||||
assertFalse(adminUserPage.getWebElementTexts(adminUserPage.getListOfAvailableGroupsToAdd()).contains(BPMN_ADMIN_GROUP));
|
||||
assertEquals(BPMN_ADMIN_GROUP, adminUserPage.getListOfAddedGroups().get(0).getText());
|
||||
assertEquals(1, adminUserPage.getListOfAddedGroups().size());
|
||||
|
||||
adminUserPage.clickSaveButton();
|
||||
adminUserPage.searchUser(name);
|
||||
adminUserPage.clickOnUserInTable(name);
|
||||
assertEquals(1, adminUserPage.getListOfGroupsFromTable().size());
|
||||
assertEquals(BPMN_ADMIN_GROUP, adminUserPage.getListOfGroupsFromTable().get(0).getText());
|
||||
|
||||
adminUserPage.clickEditButton();
|
||||
adminUserPage.removeGroup(BPMN_ADMIN_GROUP);
|
||||
assertTrue(adminUserPage.getWebElementTexts(adminUserPage.getListOfAvailableGroupsToAdd()).contains(BPMN_ADMIN_GROUP));
|
||||
assertTrue(adminUserPage.getListOfAddedGroups().isEmpty());
|
||||
|
||||
adminUserPage.clickSaveButton();
|
||||
adminUserPage.searchUser(name);
|
||||
adminUserPage.clickOnUserInTable(name);
|
||||
assertTrue(adminUserPage.getListOfGroupsFromTable().isEmpty());
|
||||
}
|
||||
|
||||
@ParameterizedTest
|
||||
@ArgumentsSource(BrowserArgumentProvider.class)
|
||||
public void attachRemoveAllGroups(Browser browser) {
|
||||
openBrowserAndAdminPage(browser);
|
||||
EXECUTION_MANAGER.createUser(name, ORGANIZATION_ID);
|
||||
List<String> groupNamesFromTable = EXECUTION_MANAGER.getGroupNamesFromUserGroup();
|
||||
List<String> expectedGroups = Arrays.asList(BPMN_ADMIN_GROUP, BPMN_USER_GROUP,
|
||||
BPMN_SUPERUSER_GROUP);
|
||||
|
||||
adminUserPage.searchUser(name);
|
||||
adminUserPage.clickOnUserInTable(name);
|
||||
assertTrue(adminUserPage.getListOfGroupsFromTable().isEmpty());
|
||||
|
||||
adminUserPage.clickEditButton();
|
||||
assertFalse(adminUserPage.getListOfAvailableGroupsToAdd().isEmpty());
|
||||
assertTrue(adminUserPage.getListOfAddedGroups().isEmpty());
|
||||
|
||||
adminUserPage.addAllGroups();
|
||||
assertTrue(adminUserPage.isAvailableGridEmpty(groupNamesFromTable));
|
||||
assertFalse(adminUserPage.getListOfAddedGroups().isEmpty());
|
||||
|
||||
adminUserPage.removeAllGroups();
|
||||
assertFalse(adminUserPage.getListOfAvailableGroupsToAdd().isEmpty());
|
||||
assertTrue(adminUserPage.getListOfAddedGroups().isEmpty());
|
||||
|
||||
adminUserPage.addGroup(BPMN_ADMIN_GROUP);
|
||||
adminUserPage.addGroup(BPMN_USER_GROUP);
|
||||
adminUserPage.addGroup(BPMN_SUPERUSER_GROUP);
|
||||
adminUserPage.clickSaveButton();
|
||||
adminUserPage.searchUser(name);
|
||||
adminUserPage.clickOnUserInTable(name);
|
||||
assertEquals(3, adminUserPage.getListOfGroupsFromTable().size());
|
||||
assertTrue(adminUserPage.getWebElementTexts(adminUserPage.getListOfGroupsFromTable()).containsAll(expectedGroups));
|
||||
|
||||
adminUserPage.clickEditButton();
|
||||
adminUserPage.removeAllGroups();
|
||||
adminUserPage.clickSaveButton();
|
||||
adminUserPage.searchUser(name);
|
||||
adminUserPage.clickOnUserInTable(name);
|
||||
assertTrue(adminUserPage.getListOfGroupsFromTable().isEmpty());
|
||||
}
|
||||
|
||||
@ParameterizedTest
|
||||
@ArgumentsSource(BrowserArgumentProvider.class)
|
||||
public void accessLevelGroupVisibility(Browser browser) {
|
||||
openBrowserAndAdminPage(browser);
|
||||
EXECUTION_MANAGER.createUserBindGroups(name, ORGANIZATION_ID, SECURITY_ADMIN_GROUP_ID);
|
||||
|
||||
adminUserPage.searchUser(name);
|
||||
adminUserPage.clickOnUserInTable(name);
|
||||
assertTrue(adminUserPage.getWebElementTexts(adminUserPage.getListOfGroupsFromTable()).contains(SECURITY_GROUP));
|
||||
|
||||
adminUserPage.clickEditButton();
|
||||
assertFalse(adminUserPage.getWebElementTexts(adminUserPage.getListOfAvailableGroupsToAdd()).contains(SECURITY_GROUP));
|
||||
assertTrue(adminUserPage.getWebElementTexts(adminUserPage.getListOfAddedGroups()).contains(SECURITY_GROUP));
|
||||
|
||||
adminUserPage.logout();
|
||||
initQaAdminCredentials();
|
||||
login(login, password);
|
||||
adminUserPage = inboxPage.startAdminUser();
|
||||
adminUserPage.searchUser(name);
|
||||
adminUserPage.clickOnUserInTable(name);
|
||||
assertFalse(adminUserPage.getWebElementTexts(adminUserPage.getListOfGroupsFromTable()).contains(SECURITY_GROUP));
|
||||
|
||||
adminUserPage.clickEditButton();
|
||||
assertFalse(adminUserPage.getWebElementTexts(adminUserPage.getListOfAvailableGroupsToAdd()).contains(SECURITY_GROUP));
|
||||
assertFalse(adminUserPage.getWebElementTexts(adminUserPage.getListOfAddedGroups()).contains(SECURITY_GROUP));
|
||||
}
|
||||
|
||||
@Disabled("dev WEBBPMNEXT-7837")
|
||||
@ParameterizedTest
|
||||
@ArgumentsSource(BrowserArgumentProvider.class)
|
||||
public void userAdminPageGroupsGridSorting(Browser browser) {
|
||||
openBrowserAndAdminPage(browser);
|
||||
EXECUTION_MANAGER.createUserBindGroups(name, ORGANIZATION_ID, BPMN_ADMIN_GROUP_ID,
|
||||
BPMN_USER_GROUP_ID, BPMN_SUPERUSER_GROUP_ID);
|
||||
|
||||
//User page sorting
|
||||
List<String> lastNamesNatural = adminUserPage.getWebElementTexts(adminUserPage.getListOfLastNamesFromTable());
|
||||
assertTrue(Comparators.isInOrder(lastNamesNatural, String.CASE_INSENSITIVE_ORDER),
|
||||
"Grid wasn't sorted");
|
||||
|
||||
adminUserPage.changeUserPageGridsSort(AdminUserPage.UsersPageGrids.USERS_GRID);
|
||||
List<String> lastNamesReverse = adminUserPage.getWebElementTexts(adminUserPage.getListOfLastNamesFromTable());
|
||||
assertTrue(Comparators.isInOrder(lastNamesReverse, String.CASE_INSENSITIVE_ORDER.reversed()),
|
||||
"Grid wasn't sorted");
|
||||
|
||||
adminUserPage.searchUser(name);
|
||||
adminUserPage.clickOnUserInTable(name);
|
||||
List<String> userLinkedGroupsNatural = adminUserPage.getWebElementTexts(adminUserPage.getListOfGroupsFromTable());
|
||||
assertTrue(Comparators.isInOrder(userLinkedGroupsNatural, String.CASE_INSENSITIVE_ORDER),
|
||||
"Grid wasn't sorted");
|
||||
|
||||
adminUserPage.changeUserPageGridsSort(AdminUserPage.UsersPageGrids.LINKED_GROUPS_GRID);
|
||||
List<String> userLinkedGroupsReverse = adminUserPage.getWebElementTexts(adminUserPage.getListOfGroupsFromTable());
|
||||
assertTrue(Comparators.isInOrder(userLinkedGroupsReverse, String.CASE_INSENSITIVE_ORDER.reversed()),
|
||||
"Grid wasn't sorted");
|
||||
|
||||
//Edit user page sorting
|
||||
adminUserPage.clickEditButton();
|
||||
List<String> availableToAddGroupsNatural = adminUserPage.getWebElementTexts(adminUserPage.getListOfAvailableGroupsToAdd());
|
||||
assertTrue(Comparators.isInOrder(availableToAddGroupsNatural, String.CASE_INSENSITIVE_ORDER),
|
||||
"Grid wasn't sorted");
|
||||
|
||||
adminUserPage.changeUserPageGridsSort(AdminUserPage.UsersPageGrids.GROUPS_TO_ADD_GRID);
|
||||
List<String> availableGroupsToAddReverse = adminUserPage.getWebElementTexts(adminUserPage.getListOfAvailableGroupsToAdd());
|
||||
assertTrue(Comparators.isInOrder(availableGroupsToAddReverse, String.CASE_INSENSITIVE_ORDER.reversed()),
|
||||
"Grid wasn't sorted");
|
||||
|
||||
List<String> addedGroupsNatural = adminUserPage.getWebElementTexts(adminUserPage.getListOfAddedGroups());
|
||||
assertTrue(Comparators.isInOrder(addedGroupsNatural, String.CASE_INSENSITIVE_ORDER),
|
||||
"Grid wasn't sorted");
|
||||
|
||||
adminUserPage.changeUserPageGridsSort(AdminUserPage.UsersPageGrids.ADDED_GROUPS_GRID);
|
||||
List<String> addedGroupsReverse = adminUserPage.getWebElementTexts(adminUserPage.getListOfAddedGroups());
|
||||
assertTrue(Comparators.isInOrder(addedGroupsReverse, String.CASE_INSENSITIVE_ORDER.reversed()),
|
||||
"Grid wasn't sorted");
|
||||
|
||||
//Create user page sorting
|
||||
adminUserPage.cancelAction();
|
||||
adminUserPage.clickCreateButton();
|
||||
List<String> groupsToAddNatural = adminUserPage.getWebElementTexts(adminUserPage.getListOfAvailableGroupsToAdd());
|
||||
assertTrue(Comparators.isInOrder(groupsToAddNatural, String.CASE_INSENSITIVE_ORDER),
|
||||
"Grid wasn't sorted");
|
||||
|
||||
adminUserPage.changeUserPageGridsSort(AdminUserPage.UsersPageGrids.GROUPS_TO_ADD_GRID);
|
||||
List<String> groupsToAddReverse = adminUserPage.getWebElementTexts(adminUserPage.getListOfAvailableGroupsToAdd());
|
||||
assertTrue(Comparators.isInOrder(groupsToAddReverse, String.CASE_INSENSITIVE_ORDER.reversed()),
|
||||
"Grid wasn't sorted");
|
||||
|
||||
adminUserPage.addAllGroups();
|
||||
List<String> addedGroupsInCreateFormNatural = adminUserPage.getWebElementTexts(adminUserPage.getListOfAddedGroups());
|
||||
assertTrue(Comparators.isInOrder(addedGroupsInCreateFormNatural, String.CASE_INSENSITIVE_ORDER),
|
||||
"Grid wasn't sorted");
|
||||
|
||||
adminUserPage.changeUserPageGridsSort(AdminUserPage.UsersPageGrids.ADDED_GROUPS_GRID);
|
||||
List<String> addedGroupsInCreatedFormReverse = adminUserPage.getWebElementTexts(adminUserPage.getListOfAddedGroups());
|
||||
assertTrue(Comparators.isInOrder(addedGroupsInCreatedFormReverse, String.CASE_INSENSITIVE_ORDER.reversed()),
|
||||
"Grid wasn't sorted");
|
||||
}
|
||||
|
||||
private void openBrowserAndAdminPage(Browser browser) {
|
||||
openBrowserAndLoginForAdmin(browser);
|
||||
initAdminName();
|
||||
adminUserPage = inboxPage.startAdminUser();
|
||||
}
|
||||
|
||||
private String randomEmail() {
|
||||
String random1 = String.valueOf(20000 + (int) (Math.random() * 20000));
|
||||
String random2 = String.valueOf(20000 + (int) (Math.random() * 20000));
|
||||
return random1 + "@" + random2 + ".ru";
|
||||
}
|
||||
|
||||
/*@ParameterizedTest
|
||||
@ArgumentsSource(BrowserArgumentProvider.class)
|
||||
public void addNewOrgToUser(Browser browser) {
|
||||
openBrowserAndAdminPage(browser);
|
||||
EXECUTION_MANAGER.createTestOrg(name);
|
||||
EXECUTION_MANAGER.createUser(name, ORGANIZATION_ID);
|
||||
|
||||
organizationPage.clickCreateButton();
|
||||
organizationPage.waitOrgEditingPageLoading();
|
||||
organizationPage.fillOrgNameAndCode(name2);
|
||||
organizationPage.chooseParentOrg(DEFAULT_ORG);
|
||||
organizationPage.clickSaveButton();
|
||||
AdminUserPage adminUserPage = inboxPage.startAdminUser();
|
||||
adminUserPage.searchUser(name);
|
||||
adminUserPage.clickOnUserInTable(name);
|
||||
adminUserPage.clickEditButton();
|
||||
adminUserPage.chooseUserOrganization(name2);
|
||||
adminUserPage.fillPass(name);
|
||||
adminUserPage.clickSaveButton();
|
||||
}
|
||||
|
||||
private void openBrowserAndAdminPage(Browser browser) {
|
||||
openBrowserAndLoginForAdmin(browser);
|
||||
initAdminName();
|
||||
name2 = name.substring(0, 3) + "2" + name.substring(3);
|
||||
name3 = name.substring(0, 3) + "3" + name.substring(3);
|
||||
organizationPage = inboxPage.startAdminOrganization();
|
||||
assertFalse(isElementEnabled(DELETE_BUTTON));
|
||||
}*/
|
||||
}
|
||||
141
test/src/test/java/old/BaseComponentIT.java
Normal file
141
test/src/test/java/old/BaseComponentIT.java
Normal file
|
|
@ -0,0 +1,141 @@
|
|||
package old;
|
||||
|
||||
import old.core.BaseTest;
|
||||
import old.core.Browser;
|
||||
|
||||
import org.junit.jupiter.api.AfterEach;
|
||||
import org.openqa.selenium.By;
|
||||
import org.openqa.selenium.TimeoutException;
|
||||
import org.openqa.selenium.support.PageFactory;
|
||||
import org.openqa.selenium.support.ui.ExpectedConditions;
|
||||
import org.openqa.selenium.support.ui.WebDriverWait;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import old.page.InboxPage;
|
||||
import old.page.LoginPage;
|
||||
import old.page.ProcessesPage;
|
||||
|
||||
import old.util.ExecutionManager;
|
||||
import old.util.PropertyManager;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Properties;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
import static old.page.BaseComponentPage.getLoginHeaderBy;
|
||||
import static old.page.BaseComponentPage.getProgressBar;
|
||||
import static old.util.DataUtil.BASE_PART_FOR_USER;
|
||||
|
||||
/**
|
||||
* @author gulnaz
|
||||
*/
|
||||
public abstract class BaseComponentIT extends BaseTest {
|
||||
|
||||
protected static final String ACCESS_LEVEL_ID = "a6bf4b31-6648-4095-b269-2a950b548a10";
|
||||
protected static final String ORGANIZATION_ID = "3516544f-64c5-4883-9047-28bcce74d1be";
|
||||
protected static final String SECURITY_ADMIN_GROUP_ID = "84c5c1e2-081e-45e1-a874-d6bb232e57ad";
|
||||
protected static final String BPMN_ADMIN_GROUP_ID = "ddfdc772-7aee-492f-be7d-7e95ea2f45b3";
|
||||
protected static final String BPMN_USER_GROUP_ID = "62cd890b-99f7-47a8-be60-e330186b17a0";
|
||||
protected static final String BPMN_SUPERUSER_GROUP_ID = "273d8bbd-0e82-4064-a548-850e9aa61756";
|
||||
|
||||
protected static ExecutionManager EXECUTION_MANAGER = new ExecutionManager();
|
||||
|
||||
protected InboxPage inboxPage;
|
||||
protected ProcessesPage processPage;
|
||||
protected String login;
|
||||
protected String password;
|
||||
protected String name;
|
||||
private Properties config;
|
||||
final Logger logger = LoggerFactory.getLogger(getClass());
|
||||
|
||||
|
||||
BaseComponentIT() {
|
||||
super();
|
||||
initCredentialsConfig();
|
||||
initCredentials();
|
||||
}
|
||||
|
||||
@AfterEach
|
||||
public void exit() {
|
||||
if (processPage != null) {
|
||||
assertTrue(processPage.thereIsNoError());
|
||||
}
|
||||
}
|
||||
|
||||
public void openBrowserAndLoginForAdmin(Browser browser) {
|
||||
initDriver(browser);
|
||||
initDemoCredentials();
|
||||
login(login, password);
|
||||
}
|
||||
|
||||
public void openBrowserAndLoginForJbpm(Browser browser) {
|
||||
initDriver(browser);
|
||||
initQaAdminCredentials();
|
||||
login(login, password);
|
||||
}
|
||||
|
||||
private void initCredentialsConfig() {
|
||||
try {
|
||||
config = PropertyManager.getProperties();
|
||||
}
|
||||
catch (IOException e) {
|
||||
throw new RuntimeException("Failed to get properties. " + e);
|
||||
}
|
||||
}
|
||||
|
||||
protected void initCredentials() {
|
||||
login = config.getProperty("login");
|
||||
password = config.getProperty("password");
|
||||
}
|
||||
|
||||
protected void initDemoCredentials() {
|
||||
login = config.getProperty("demo_login");
|
||||
password = config.getProperty("demo_password");
|
||||
}
|
||||
|
||||
protected void initQaAdminCredentials() {
|
||||
login = config.getProperty("qa_admin_login");
|
||||
password = config.getProperty("qa_admin_password");
|
||||
}
|
||||
|
||||
void login(String login, String password) {
|
||||
WebDriverWait wait = getExplicitWait(getDefaultTimeout());
|
||||
wait.until(ExpectedConditions.invisibilityOfElementLocated(getProgressBar()));
|
||||
wait.until(ExpectedConditions.visibilityOfElementLocated(getLoginHeaderBy()));
|
||||
LoginPage loginPage = PageFactory.initElements(driver, LoginPage.class);
|
||||
|
||||
try {
|
||||
inboxPage = loginPage.login(login, password);
|
||||
}
|
||||
catch (TimeoutException e) {
|
||||
throw new RuntimeException("Failed to login", e);
|
||||
}
|
||||
}
|
||||
|
||||
void initAdminName() {
|
||||
initName(BASE_PART_FOR_USER);
|
||||
}
|
||||
|
||||
void initName(String basePart) {
|
||||
String random = String.valueOf(20000 + (int) (Math.random() * 20000));
|
||||
name = basePart + "-" + random;
|
||||
logger.info(name + " record has been initialized");
|
||||
}
|
||||
|
||||
protected boolean isElementEnabled (String xpath){
|
||||
return driver.findElement(By.xpath(String.format(xpath))).isEnabled();
|
||||
}
|
||||
|
||||
protected LoginPage getLoginPage() {
|
||||
return PageFactory.initElements(driver, LoginPage.class);
|
||||
}
|
||||
|
||||
public void openBrowserAndLogin(Browser browser) {
|
||||
initDriver(browser);
|
||||
login(login, password);
|
||||
}
|
||||
|
||||
protected InboxPage getInboxPage() {
|
||||
return PageFactory.initElements(driver, InboxPage.class);
|
||||
}
|
||||
}
|
||||
322
test/src/test/java/old/JWTokensIT.java
Normal file
322
test/src/test/java/old/JWTokensIT.java
Normal file
|
|
@ -0,0 +1,322 @@
|
|||
package old;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.MalformedURLException;
|
||||
import java.util.*;
|
||||
import javax.crypto.SecretKey;
|
||||
|
||||
import old.core.Browser;
|
||||
import old.core.BrowserArgumentProvider;
|
||||
import io.jsonwebtoken.Jwts;
|
||||
import io.jsonwebtoken.security.Keys;
|
||||
import org.junit.jupiter.api.AfterEach;
|
||||
import org.junit.jupiter.api.Disabled;
|
||||
import org.junit.jupiter.params.ParameterizedTest;
|
||||
import org.junit.jupiter.params.provider.ArgumentsSource;
|
||||
import org.openqa.selenium.Cookie;
|
||||
import org.openqa.selenium.JavascriptExecutor;
|
||||
import org.openqa.selenium.WebDriver;
|
||||
import org.openqa.selenium.WebDriverException;
|
||||
import org.openqa.selenium.remote.Augmenter;
|
||||
import org.openqa.selenium.remote.RemoteWebDriver;
|
||||
import org.openqa.selenium.support.PageFactory;
|
||||
import org.openqa.selenium.support.ui.ExpectedConditions;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
|
||||
import org.springframework.security.crypto.password.PasswordEncoder;
|
||||
import old.page.InboxPage;
|
||||
import old.util.PropertyManager;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertFalse;
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
import static old.page.BaseComponentPage.getLoginHeaderBy;
|
||||
|
||||
/**
|
||||
* @author gulnaz
|
||||
*/
|
||||
public class JWTokensIT extends BaseComponentIT {
|
||||
|
||||
private static final String SURNAME = "demo";
|
||||
private static final String SECRET_KEY = "ZjE5ZjMxNmYtODViZC00ZTQ5LWIxZmYtOGEzYzE3Yjc1MDVk}";
|
||||
private static final SecretKey SIGNING_KEY;
|
||||
private static final String ACCESS_TOKEN = "Access-token";
|
||||
private static final String DEMO_GROUP_ID = "22ee608b-dd9d-4633-906d-7c4efca231a0";
|
||||
private static final String PROCESS_NAME = "test_process";
|
||||
private static final Logger LOGGER = LoggerFactory.getLogger(JWTokensIT.class);
|
||||
|
||||
private static PasswordEncoder passwordEncoder = new BCryptPasswordEncoder(11);
|
||||
private Properties config;
|
||||
private WebDriver newDriver;
|
||||
private Set<Cookie> cookies;
|
||||
|
||||
static {
|
||||
byte[] encodedKey = Base64.getMimeDecoder().decode(SECRET_KEY);
|
||||
SIGNING_KEY = Keys.hmacShaKeyFor(encodedKey);
|
||||
}
|
||||
|
||||
public JWTokensIT() throws IOException {
|
||||
super();
|
||||
config = PropertyManager.getProperties();
|
||||
}
|
||||
|
||||
@AfterEach
|
||||
public void afterEachTest() {
|
||||
if (newDriver != null) {
|
||||
newDriver.close();
|
||||
}
|
||||
|
||||
EXECUTION_MANAGER.deleteTestUser(login);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void initCredentials() {
|
||||
initAdminName();
|
||||
login = name;
|
||||
password = login;
|
||||
String encodedPassword = passwordEncoder.encode(password);
|
||||
EXECUTION_MANAGER.insertUser(login, encodedPassword, login + "@test.ru", ORGANIZATION_ID,
|
||||
DEMO_GROUP_ID
|
||||
);
|
||||
}
|
||||
|
||||
private void pasteDeadAccessToken() {
|
||||
String deadAccessToken = createDeadAccessToken(config.getProperty("login"));
|
||||
Cookie cookie = driver.manage().getCookieNamed(ACCESS_TOKEN);
|
||||
driver.manage().deleteCookie(cookie);
|
||||
addCookie(driver, cookie, deadAccessToken);
|
||||
}
|
||||
|
||||
private void addCookie(WebDriver driver, Cookie cookie, String value) {
|
||||
driver.manage().addCookie(
|
||||
new Cookie.Builder(cookie.getName(), value)
|
||||
.expiresOn(cookie.getExpiry())
|
||||
.path(cookie.getPath())
|
||||
.build()
|
||||
);
|
||||
}
|
||||
|
||||
private String createDeadAccessToken(String username) {
|
||||
return Jwts.builder()
|
||||
.setSubject(username)
|
||||
.setIssuer("ru.cg.webbpm.components")
|
||||
.setIssuedAt(new Date(System.currentTimeMillis()))
|
||||
.setExpiration(
|
||||
new Date(System.currentTimeMillis() - 3600 * 1000)
|
||||
)
|
||||
.signWith(SIGNING_KEY)
|
||||
.compact();
|
||||
}
|
||||
|
||||
private void reopenApp() throws MalformedURLException {
|
||||
int attempts = 0;
|
||||
while (attempts++ < 5) {
|
||||
|
||||
try {
|
||||
newDriver = new Augmenter().augment(new RemoteWebDriver(getGridURL(), options));
|
||||
break;
|
||||
}
|
||||
catch (WebDriverException ignored) {
|
||||
LOGGER.info("The driver did not start on " + attempts + " attempt");
|
||||
}
|
||||
}
|
||||
newDriver.get(applicationUrl);
|
||||
cookies.forEach(cookie -> addCookie(newDriver, cookie, cookie.getValue()));
|
||||
newDriver.get(applicationUrl); // reopen app again
|
||||
inboxPage = PageFactory.initElements(newDriver, InboxPage.class);
|
||||
inboxPage.waitForPageLoad();
|
||||
}
|
||||
|
||||
private void initDriverAndLogin(Browser browser) {
|
||||
initDriver(browser);
|
||||
login(login, password);
|
||||
inboxPage.waitForVisibilityOf(inboxPage.adminList);
|
||||
}
|
||||
|
||||
@ParameterizedTest
|
||||
@ArgumentsSource(BrowserArgumentProvider.class)
|
||||
public void refreshPageWithAliveAccessToken(Browser browser) {
|
||||
initDriverAndLogin(browser);
|
||||
|
||||
inboxPage.refreshPage();
|
||||
assertTrue(inboxPage.getEmailInputsFrom(driver).isEmpty());
|
||||
}
|
||||
|
||||
@ParameterizedTest
|
||||
@ArgumentsSource(BrowserArgumentProvider.class)
|
||||
public void goToPageWithAliveAccessToken(Browser browser) {
|
||||
initDriverAndLogin(browser);
|
||||
|
||||
inboxPage.startAdminUser();
|
||||
inboxPage.waitForPageLoad();
|
||||
assertTrue(inboxPage.getEmailInputsFrom(driver).isEmpty());
|
||||
}
|
||||
|
||||
@ParameterizedTest
|
||||
@ArgumentsSource(BrowserArgumentProvider.class)
|
||||
public void filterWithAliveAccessToken(Browser browser) {
|
||||
initDriverAndLogin(browser);
|
||||
|
||||
inboxPage.startAdminUser();
|
||||
inboxPage.waitForPageLoad();
|
||||
|
||||
inboxPage.waitProgressBarNotVisible();
|
||||
inboxPage.searchUser(SURNAME);
|
||||
assertTrue(inboxPage.getEmailInputsFrom(driver).isEmpty());
|
||||
}
|
||||
|
||||
@ParameterizedTest
|
||||
@ArgumentsSource(BrowserArgumentProvider.class)
|
||||
public void refreshPageWithDeadAccessToken(Browser browser) {
|
||||
initDriverAndLogin(browser);
|
||||
|
||||
pasteDeadAccessToken();
|
||||
inboxPage.refreshPage();
|
||||
assertTrue(inboxPage.getEmailInputsFrom(driver).isEmpty());
|
||||
}
|
||||
|
||||
@ParameterizedTest
|
||||
@ArgumentsSource(BrowserArgumentProvider.class)
|
||||
public void goToPageWithDeadAccessToken(Browser browser) {
|
||||
initDriverAndLogin(browser);
|
||||
|
||||
pasteDeadAccessToken();
|
||||
inboxPage.startAdminUser();
|
||||
inboxPage.waitForPageLoad();
|
||||
assertTrue(inboxPage.getEmailInputsFrom(driver).isEmpty());
|
||||
}
|
||||
|
||||
@Disabled("qa WEBBPMNEXT-9052")
|
||||
@ParameterizedTest
|
||||
@ArgumentsSource(BrowserArgumentProvider.class)
|
||||
public void filterWithDeadAccessToken(Browser browser) {
|
||||
initDriverAndLogin(browser);
|
||||
|
||||
inboxPage.startAdminUser();
|
||||
inboxPage.waitProgressBarNotVisible();
|
||||
pasteDeadAccessToken();
|
||||
inboxPage.searchUser(SURNAME);
|
||||
inboxPage.waitForPageLoad();
|
||||
assertTrue(inboxPage.getEmailInputsFrom(driver).isEmpty());
|
||||
}
|
||||
|
||||
@ParameterizedTest
|
||||
@ArgumentsSource(BrowserArgumentProvider.class)
|
||||
public void refreshPageWithDeadRefreshToken(Browser browser) {
|
||||
initDriverAndLogin(browser);
|
||||
|
||||
driver.manage().deleteAllCookies();
|
||||
inboxPage.refreshPage();
|
||||
assertFalse(inboxPage.getEmailInputsFrom(driver).isEmpty());
|
||||
}
|
||||
|
||||
@ParameterizedTest
|
||||
@ArgumentsSource(BrowserArgumentProvider.class)
|
||||
public void goToPageWithDeadRefreshToken(Browser browser) {
|
||||
initDriverAndLogin(browser);
|
||||
|
||||
processPage = inboxPage.startProcess(PROCESS_NAME);
|
||||
processPage.waitForInitializationOf(processPage.exitButton);
|
||||
driver.manage().deleteAllCookies();
|
||||
processPage.exitButton.click();
|
||||
inboxPage.waitForPageLoad();
|
||||
assertFalse(inboxPage.getEmailInputsFrom(driver).isEmpty());
|
||||
}
|
||||
|
||||
@ParameterizedTest
|
||||
@ArgumentsSource(BrowserArgumentProvider.class)
|
||||
public void filterWithDeadRefreshToken(Browser browser) {
|
||||
initDriverAndLogin(browser);
|
||||
|
||||
inboxPage.startAdminUser();
|
||||
inboxPage.waitProgressBarNotVisible();
|
||||
driver.manage().deleteAllCookies();
|
||||
inboxPage.waitForPageLoad();
|
||||
inboxPage.searchUser(SURNAME);
|
||||
inboxPage.waitForPageLoad();
|
||||
assertFalse(inboxPage.getEmailInputsFrom(driver).isEmpty());
|
||||
}
|
||||
|
||||
@Disabled("dev WEBBPMNEXT-9052") //включить после решения задачи
|
||||
@ParameterizedTest
|
||||
@ArgumentsSource(BrowserArgumentProvider.class)
|
||||
public void checkTwoAuthorizedUsersCase(Browser browser) {
|
||||
initDriverAndLogin(browser);
|
||||
|
||||
String firstTab = driver.getWindowHandle();
|
||||
cookies = driver.manage().getCookies();
|
||||
inboxPage.exitApp();
|
||||
getExplicitWait(getDefaultTimeout()).until(
|
||||
ExpectedConditions.visibilityOfElementLocated(getLoginHeaderBy()));
|
||||
|
||||
((JavascriptExecutor) driver).executeScript("window.open();");
|
||||
List<String> windowHandles = new ArrayList<>(driver.getWindowHandles());
|
||||
driver.switchTo().window(windowHandles.get(1));
|
||||
driver.get(applicationUrl);
|
||||
login(login, password);
|
||||
|
||||
driver.switchTo().window(firstTab);
|
||||
driver.get(applicationUrl);
|
||||
cookies.forEach(cookie -> addCookie(driver, cookie, cookie.getValue()));
|
||||
pasteDeadAccessToken();
|
||||
inboxPage.refreshPage();
|
||||
inboxPage.waitEmailInput();
|
||||
assertFalse(inboxPage.getEmailInputsFrom(driver).isEmpty());
|
||||
}
|
||||
|
||||
@ParameterizedTest
|
||||
@ArgumentsSource(BrowserArgumentProvider.class)
|
||||
public void filterWithNoAccessToken(Browser browser) {
|
||||
initDriverAndLogin(browser);
|
||||
|
||||
inboxPage.startAdminUser();
|
||||
inboxPage.waitProgressBarNotVisible();
|
||||
driver.manage().deleteCookieNamed(ACCESS_TOKEN);
|
||||
inboxPage.searchUser(SURNAME);
|
||||
assertTrue(inboxPage.getEmailInputsFrom(driver).isEmpty());
|
||||
}
|
||||
|
||||
@ParameterizedTest
|
||||
@ArgumentsSource(BrowserArgumentProvider.class)
|
||||
public void reopenWithAliveAccessToken(Browser browser) throws MalformedURLException {
|
||||
initDriverAndLogin(browser);
|
||||
|
||||
//don't close browser in the end, we'll do that explicitly
|
||||
setCloseBrowser(false);
|
||||
|
||||
cookies = driver.manage().getCookies();
|
||||
driver.close();
|
||||
driver = null;
|
||||
|
||||
reopenApp();
|
||||
assertTrue(inboxPage.getEmailInputsFrom(newDriver).isEmpty());
|
||||
}
|
||||
|
||||
@ParameterizedTest
|
||||
@ArgumentsSource(BrowserArgumentProvider.class)
|
||||
public void reopenWithDeadAccessToken(Browser browser) throws MalformedURLException {
|
||||
initDriverAndLogin(browser);
|
||||
|
||||
//don't close browser in the end, we'll do that explicitly
|
||||
setCloseBrowser(false);
|
||||
|
||||
pasteDeadAccessToken();
|
||||
cookies = driver.manage().getCookies();
|
||||
driver.close();
|
||||
driver = null;
|
||||
|
||||
reopenApp();
|
||||
assertTrue(inboxPage.getEmailInputsFrom(newDriver).isEmpty());
|
||||
}
|
||||
|
||||
@ParameterizedTest
|
||||
@ArgumentsSource(BrowserArgumentProvider.class)
|
||||
public void refreshWithNoSession(Browser browser) {
|
||||
initDriverAndLogin(browser);
|
||||
|
||||
((JavascriptExecutor) driver).executeScript(
|
||||
String.format("window.localStorage.clear();")); //clear localStorage
|
||||
inboxPage.refreshPage();
|
||||
assertTrue(inboxPage.getEmailInputsFrom(driver).isEmpty());
|
||||
}
|
||||
}
|
||||
404
test/src/test/java/old/core/BasePage.java
Normal file
404
test/src/test/java/old/core/BasePage.java
Normal file
|
|
@ -0,0 +1,404 @@
|
|||
package old.core;
|
||||
|
||||
import java.time.Duration;
|
||||
import java.util.List;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
import org.openqa.selenium.By;
|
||||
import org.openqa.selenium.WebDriver;
|
||||
import org.openqa.selenium.WebElement;
|
||||
import org.openqa.selenium.remote.RemoteWebDriver;
|
||||
import org.openqa.selenium.support.PageFactory;
|
||||
import org.openqa.selenium.support.ui.ExpectedConditions;
|
||||
import org.openqa.selenium.support.ui.WebDriverWait;
|
||||
|
||||
/**
|
||||
* @author evgeny
|
||||
*/
|
||||
@SuppressWarnings("UnusedDeclaration")
|
||||
public abstract class BasePage {
|
||||
private static final Duration DEFAULT_TIMEOUT = Duration.ofSeconds(20);
|
||||
private static final int PROGRESS_VISIBILITY_TIMEOUT_MS = 700;
|
||||
private static final By ERROR = By.xpath("//div[contains(@class, 'toast-error')]");
|
||||
private static final By INPUT_IS_ACTIVE = By.xpath("//div[contains(@class, 'input-active')]");
|
||||
protected static final By PROGRESS_BAR = By.xpath("//div[@class='progress']");
|
||||
|
||||
protected final WebDriver driver;
|
||||
protected final String uri;
|
||||
|
||||
public BasePage(WebDriver driver, String uri) {
|
||||
this.driver = driver;
|
||||
this.uri = uri;
|
||||
|
||||
// Check that we're on the right page.
|
||||
if (!isAtUri(uri))
|
||||
throw new IllegalStateException("This is not the '" + uri + "' page");
|
||||
|
||||
PageFactory.initElements(driver, this);
|
||||
}
|
||||
|
||||
protected Duration getDefaultTimeout() {
|
||||
return DEFAULT_TIMEOUT;
|
||||
}
|
||||
|
||||
public static By getProgressBar() {
|
||||
return PROGRESS_BAR;
|
||||
}
|
||||
|
||||
public static By getErrorBy() {
|
||||
return ERROR;
|
||||
}
|
||||
|
||||
public boolean isAtUri(String uri) {
|
||||
if (((RemoteWebDriver) driver).getCapabilities().getBrowserName().equalsIgnoreCase("internet explorer")) {
|
||||
return true;
|
||||
}
|
||||
else {
|
||||
return waitForCorrectUrl(uri, getDefaultTimeout());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Ожидание того, что URL текущей страницы содержит определенный текст.
|
||||
*
|
||||
* @param uri адрес текущей страницы
|
||||
* @param timeout timeout ожидания
|
||||
* @return <code>true</code> при корректном url
|
||||
*/
|
||||
private boolean waitForCorrectUrl(String uri, Duration timeout) {
|
||||
return new WebDriverWait(driver, timeout).until(ExpectedConditions.urlContains(uri));
|
||||
}
|
||||
|
||||
/**
|
||||
* Ожидание видимости элемента, присутствующего в DOM.
|
||||
* Видимость означает не только то, что элемент отобразился, но и то, что высота и ширина элемента больше 0.
|
||||
*
|
||||
* @param webElement элемент, который присутствует в DOM
|
||||
* @param timeout timeout ожидания
|
||||
* @return веб-элемент, как только он видим
|
||||
*/
|
||||
public WebElement waitForVisibilityOf(WebElement webElement, Duration timeout) {
|
||||
return new WebDriverWait(driver, timeout).until(ExpectedConditions.visibilityOf(webElement));
|
||||
}
|
||||
|
||||
/**
|
||||
* Ожидание видимости элемента, присутствующего в DOM.
|
||||
* Видимость означает не только то, что элемент отобразился, но и то, что высота и ширина элемента больше 0.
|
||||
*
|
||||
* @param webElement элемент, который присутствует в DOM
|
||||
* @return веб-элемент, как только он видим
|
||||
*/
|
||||
public WebElement waitForVisibilityOf(WebElement webElement) {
|
||||
return waitForVisibilityOf(webElement, getDefaultTimeout());
|
||||
}
|
||||
|
||||
/**
|
||||
* Ожидание появления элемента в DOM и его видимости.
|
||||
* Видимость означает не только то, что элемент отобразился, но и то, что высота и ширина элемента больше 0.
|
||||
*
|
||||
* @param locator локатор, по которому находится элемент
|
||||
* @param timeout timeout ожидания
|
||||
* @return веб-элемент, как только он найден и видим
|
||||
*/
|
||||
public WebElement waitForVisibilityOfElementLocated(By locator, Duration timeout) {
|
||||
return new WebDriverWait(driver, timeout).until(ExpectedConditions.visibilityOfElementLocated(locator));
|
||||
}
|
||||
|
||||
/**
|
||||
* Ожидание появления элемента в DOM и его видимости.
|
||||
* Видимость означает не только то, что элемент отобразился, но и то, что высота и ширина элемента больше 0.
|
||||
*
|
||||
* @param locator локатор, по которому находится элемент
|
||||
* @return веб-элемент, как только он найден и видим
|
||||
*/
|
||||
public WebElement waitForVisibilityOfElementLocated(By locator) {
|
||||
return waitForVisibilityOfElementLocated(locator, getDefaultTimeout());
|
||||
}
|
||||
|
||||
/**
|
||||
* Ожидание появления элемента в DOM и его видимости.
|
||||
* Видимость означает не только то, что элемент отобразился, но и то, что высота и ширина элемента больше 0.
|
||||
*
|
||||
* @param locator локатор, по которому находится элемент
|
||||
* @param timeout timeout ожидания
|
||||
* @param sleep длительность между опросами
|
||||
* @return веб-элемент, как только он найден и видим
|
||||
*/
|
||||
public WebElement waitForVisibilityOfElementLocated(By locator, Duration timeout, Duration sleep) {
|
||||
return new WebDriverWait(driver, timeout, sleep).until(ExpectedConditions.visibilityOfElementLocated(locator));
|
||||
}
|
||||
|
||||
/**
|
||||
* Ожидание того, что элемент невидим или не представлен в DOM.
|
||||
*
|
||||
* @param locator локатор, по которому находится элемент
|
||||
* @param timeout timeout ожидания
|
||||
* @return <code>true</code>, когда элемент невидим или не найден в DOM
|
||||
*/
|
||||
public boolean waitForInvisibilityOfElementLocated(By locator, Duration timeout) {
|
||||
return new WebDriverWait(driver, timeout).until(ExpectedConditions.invisibilityOfElementLocated(locator));
|
||||
}
|
||||
|
||||
/**
|
||||
* Ожидание того, что элемент невидим или не представлен в DOM.
|
||||
*
|
||||
* @param locator локатор, по которому находится элемент
|
||||
* @return <code>true</code>, когда элемент невидим или не найден в DOM
|
||||
*/
|
||||
public boolean waitForInvisibilityOfElementLocated(By locator) {
|
||||
return waitForInvisibilityOfElementLocated(locator, getDefaultTimeout());
|
||||
}
|
||||
|
||||
/**
|
||||
* Ожидание того, что элемент больше не прикреплен к DOM
|
||||
*
|
||||
* @param webElement проверяемый элемент
|
||||
* @param timeout timeout ожидания
|
||||
* @return <code>true</code>, когда элемент больше не прикреплен к DOM
|
||||
*/
|
||||
public boolean waitForStalenessOf(WebElement webElement, Duration timeout) {
|
||||
return new WebDriverWait(driver, timeout).until(ExpectedConditions.stalenessOf(webElement));
|
||||
}
|
||||
|
||||
/**
|
||||
* Ожидание того, что элемент больше не прикреплен к DOM
|
||||
*
|
||||
* @param webElement проверяемый элемент
|
||||
* @return <code>true</code>, когда элемент больше не прикреплен к DOM
|
||||
*/
|
||||
public boolean waitForStalenessOf(WebElement webElement) {
|
||||
return waitForStalenessOf(webElement, getDefaultTimeout());
|
||||
}
|
||||
|
||||
/**
|
||||
* Ожидание наличия текста в элементе, соответствующем указанному локатору.
|
||||
*
|
||||
* @param locator локатор, по которому находится элемент
|
||||
* @param text проверяемый текст
|
||||
* @param timeout timeout ожидания
|
||||
* @return <code>true</code> при наличии текста в элементе
|
||||
*/
|
||||
public boolean waitForTextToBePresentInElementLocated(By locator, String text, Duration timeout) {
|
||||
return new WebDriverWait(driver, timeout).until(ExpectedConditions.textToBePresentInElementLocated(locator, text));
|
||||
}
|
||||
|
||||
/**
|
||||
* Ожидание наличия текста в элементе, соответствующем указанному локатору.
|
||||
*
|
||||
* @param locator локатор, по которому находится элемент
|
||||
* @param text проверяемый текст
|
||||
* @return <code>true</code> при наличии текста в элементе
|
||||
*/
|
||||
public boolean waitForTextToBePresentInElementLocated(By locator, String text) {
|
||||
return waitForTextToBePresentInElementLocated(locator, text, getDefaultTimeout());
|
||||
}
|
||||
|
||||
/**
|
||||
* Ожидание наличия текста в определенном элементе
|
||||
*
|
||||
* @param webElement проверяемый элемент
|
||||
* @param text проверяемый текст
|
||||
* @param timeout timeout ожидания
|
||||
* @return <code>true</code> при наличии текста в элементе
|
||||
*/
|
||||
public boolean waitForTextToBePresentInElement(WebElement webElement, String text, Duration timeout) {
|
||||
return new WebDriverWait(driver, timeout).until(ExpectedConditions.textToBePresentInElement(webElement, text));
|
||||
}
|
||||
|
||||
/**
|
||||
* Ожидание наличия текста в определенном элементе
|
||||
*
|
||||
* @param webElement проверяемый элемент
|
||||
* @param text проверяемый текст
|
||||
* @return <code>true</code> при наличии текста в элементе
|
||||
*/
|
||||
public boolean waitForTextToBePresentInElement(WebElement webElement, String text) {
|
||||
return waitForTextToBePresentInElement(webElement, text, getDefaultTimeout());
|
||||
}
|
||||
|
||||
/**
|
||||
* Ожидание видимости и доступности присутствующего в DOM элемента для нажатия.
|
||||
*
|
||||
* @param webElement проверяемый элемент
|
||||
* @param timeout timeout ожидания
|
||||
* @return веб-элемент, как только он доступен для нажатия
|
||||
*/
|
||||
public WebElement waitForElementToBeClickable(WebElement webElement, Duration timeout) {
|
||||
return new WebDriverWait(driver, timeout).until(ExpectedConditions.elementToBeClickable(webElement));
|
||||
}
|
||||
|
||||
/**
|
||||
* Ожидание видимости и доступности присутствующего в DOM элемента для нажатия.
|
||||
*
|
||||
* @param webElement проверяемый элемент
|
||||
* @return веб-элемент, как только он доступен для нажатия
|
||||
*/
|
||||
public WebElement waitForElementToBeClickable(WebElement webElement) {
|
||||
return waitForElementToBeClickable(webElement, getDefaultTimeout());
|
||||
}
|
||||
|
||||
/**
|
||||
* Ожидание появления элемента в DOM, видимости и доступности элемента для нажатия.
|
||||
*
|
||||
* @param locator локатор, по которому находится элемент
|
||||
* @param timeout timeout ожидания
|
||||
* @return веб-элемент, как только он доступен для нажатия
|
||||
*/
|
||||
public WebElement waitForElementToBeClickable(By locator, Duration timeout) {
|
||||
return new WebDriverWait(driver, timeout).until(ExpectedConditions.elementToBeClickable(locator));
|
||||
}
|
||||
|
||||
/**
|
||||
* Ожидание появления элемента в DOM, видимости и доступности элемента для нажатия.
|
||||
*
|
||||
* @param locator локатор, по которому находится элемент
|
||||
* @return веб-элемент, как только он доступен для нажатия
|
||||
*/
|
||||
public WebElement waitForElementToBeClickable(By locator) {
|
||||
return waitForElementToBeClickable(locator, getDefaultTimeout());
|
||||
}
|
||||
|
||||
/**
|
||||
* Ожидание определенного количества элементов с указанным локатором.
|
||||
*
|
||||
* @param locator локатор, по которому находится элемент
|
||||
* @param number ожидаемое число элементов
|
||||
* @param timeout timeout ожидания
|
||||
* @return список элементов с определенным количеством
|
||||
*/
|
||||
public List<WebElement> waitForNumberOfElementsToBe(By locator, int number, Duration timeout) {
|
||||
return new WebDriverWait(driver, timeout).until(ExpectedConditions.numberOfElementsToBe(locator, number));
|
||||
}
|
||||
|
||||
/**
|
||||
* Ожидание определенного количества элементов с указанным локатором.
|
||||
*
|
||||
* @param locator локатор, по которому находится элемент
|
||||
* @param number ожидаемое число элементов
|
||||
* @return список элементов с определенным количеством
|
||||
*/
|
||||
public List<WebElement> waitForNumberOfElementsToBe(By locator, int number) {
|
||||
return waitForNumberOfElementsToBe(locator, number, getDefaultTimeout());
|
||||
}
|
||||
|
||||
/**
|
||||
* Ожидание того, что как минимум один элемент с указанным локатором представлен на странице.
|
||||
* Полезно, когда нужно подождать динамический элемент.
|
||||
*
|
||||
* @param locator локатор, по которому находится элемент
|
||||
* @param timeout timeout ожидания
|
||||
* @return список элементов с указанным локатором
|
||||
*/
|
||||
public List<WebElement> waitForPresenceOfAllElementsLocatedBy(By locator, Duration timeout) {
|
||||
return new WebDriverWait(driver, timeout).until(ExpectedConditions.presenceOfAllElementsLocatedBy(locator));
|
||||
}
|
||||
|
||||
/**
|
||||
* Ожидание того, что как минимум один элемент с указанным локатором представлен на странице.
|
||||
* Полезно, когда нужно подождать динамический элемент.
|
||||
*
|
||||
* @param locator локатор, по которому находится элемент
|
||||
* @return список элементов с указанным локатором
|
||||
*/
|
||||
public List<WebElement> waitForPresenceOfAllElementsLocatedBy(By locator) {
|
||||
return waitForPresenceOfAllElementsLocatedBy(locator, getDefaultTimeout());
|
||||
}
|
||||
|
||||
/**
|
||||
* Ожидание того, что указзнный элемент содержит атрибут с определенным значением
|
||||
*
|
||||
* @param webElement проверяемый элемент
|
||||
* @param attribute проверяемый атрибут
|
||||
* @param value проверяемое значение
|
||||
* @param timeout timeout ожидания
|
||||
* @return <code>true</code> при наличии значения в атрибуте
|
||||
*/
|
||||
public boolean waitForAttributeContains(WebElement webElement, String attribute, String value, Duration timeout) {
|
||||
return new WebDriverWait(driver, timeout).until(ExpectedConditions.attributeContains(webElement, attribute, value));
|
||||
}
|
||||
|
||||
/**
|
||||
* Ожидание того, что указзнный элемент содержит атрибут с определенным значением
|
||||
*
|
||||
* @param webElement проверяемый элемент
|
||||
* @param attribute проверяемый атрибут
|
||||
* @param value проверяемое значение
|
||||
* @return <code>true</code> при наличии значения в атрибуте
|
||||
*/
|
||||
public boolean waitForAttributeContains(WebElement webElement, String attribute, String value) {
|
||||
return waitForAttributeContains(webElement, attribute, value, getDefaultTimeout());
|
||||
}
|
||||
|
||||
public void sleep(long millis) {
|
||||
BaseTest.sleep(millis);
|
||||
}
|
||||
|
||||
private void waitForCondition(Supplier<Boolean> condition, long timeOutInMillis) {
|
||||
long startTime = System.currentTimeMillis();
|
||||
while (!condition.get()) {
|
||||
if (System.currentTimeMillis() - startTime >= timeOutInMillis) {
|
||||
break;
|
||||
}
|
||||
sleep(100);
|
||||
}
|
||||
}
|
||||
|
||||
private void waitProgressBarVisible(long timeOutInMillis) {
|
||||
waitForCondition(
|
||||
() -> driver.findElements(PROGRESS_BAR).size() > 0,
|
||||
timeOutInMillis
|
||||
);
|
||||
}
|
||||
|
||||
//ожидается, что последний инпут, по которому был клик, выбран
|
||||
public void waitForInputFieldSelected() {
|
||||
waitForNumberOfElementsToBe(INPUT_IS_ACTIVE, 1);
|
||||
}
|
||||
|
||||
//ожидается пока пропадет прогресс бар
|
||||
public void waitProgressBarNotVisible(Duration timeout) {
|
||||
waitForInvisibilityOfElementLocated(PROGRESS_BAR, timeout);
|
||||
}
|
||||
|
||||
//ожидается пока пропадет прогресс бар с таймаутом по умолчанию
|
||||
public void waitProgressBarNotVisible() {
|
||||
waitForInvisibilityOfElementLocated(PROGRESS_BAR, getDefaultTimeout());
|
||||
}
|
||||
|
||||
//проверяется отсутствие ошибок
|
||||
public boolean thereIsNoError() {
|
||||
return getErrors().isEmpty();
|
||||
}
|
||||
|
||||
//получить первую ошибку
|
||||
public WebElement getError() {
|
||||
return getErrors().get(0);
|
||||
}
|
||||
|
||||
//получить все ошибки
|
||||
public List<WebElement> getErrors() {
|
||||
waitForCondition(
|
||||
() -> driver.findElements(ERROR).size() > 0,
|
||||
500
|
||||
);
|
||||
return driver.findElements(ERROR);
|
||||
}
|
||||
|
||||
//переключиться на другую вкладку
|
||||
public void goToAnotherTab(String tab) {
|
||||
waitProgressBarNotVisible(Duration.ofSeconds(10));
|
||||
driver.switchTo().window(tab);
|
||||
}
|
||||
|
||||
//обновить страницу
|
||||
public void refreshPage() {
|
||||
driver.navigate().refresh();
|
||||
waitProgressBarNotVisible();
|
||||
}
|
||||
|
||||
public void waitForPageLoad() {
|
||||
waitProgressBarNotVisible();
|
||||
waitProgressBarVisible(PROGRESS_VISIBILITY_TIMEOUT_MS);
|
||||
waitProgressBarNotVisible();
|
||||
}
|
||||
}
|
||||
273
test/src/test/java/old/core/BaseTest.java
Normal file
273
test/src/test/java/old/core/BaseTest.java
Normal file
|
|
@ -0,0 +1,273 @@
|
|||
package old.core;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.lang.reflect.Method;
|
||||
import java.net.MalformedURLException;
|
||||
import java.net.URL;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.Paths;
|
||||
import java.nio.file.StandardCopyOption;
|
||||
import java.time.Duration;
|
||||
import java.time.Instant;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.TimeZone;
|
||||
import java.util.logging.Level;
|
||||
|
||||
import org.junit.jupiter.api.AfterEach;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.TestInfo;
|
||||
import org.junit.jupiter.api.extension.AfterTestExecutionCallback;
|
||||
import org.junit.jupiter.api.extension.ExtensionContext;
|
||||
import org.junit.jupiter.api.extension.RegisterExtension;
|
||||
import org.openqa.selenium.OutputType;
|
||||
import org.openqa.selenium.TakesScreenshot;
|
||||
import org.openqa.selenium.TimeoutException;
|
||||
import org.openqa.selenium.WebDriver;
|
||||
import org.openqa.selenium.WebDriverException;
|
||||
import org.openqa.selenium.logging.LogEntry;
|
||||
import org.openqa.selenium.logging.LogType;
|
||||
import org.openqa.selenium.logging.LoggingPreferences;
|
||||
import org.openqa.selenium.remote.AbstractDriverOptions;
|
||||
import org.openqa.selenium.remote.LocalFileDetector;
|
||||
import org.openqa.selenium.remote.RemoteWebDriver;
|
||||
import org.openqa.selenium.support.ui.ExpectedConditions;
|
||||
import org.openqa.selenium.support.ui.WebDriverWait;
|
||||
|
||||
import static old.core.BasePage.getErrorBy;
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
|
||||
/**
|
||||
* @author gulnaz
|
||||
*/
|
||||
public abstract class BaseTest {
|
||||
protected static final String gridUrl;
|
||||
protected static final String applicationUrl;
|
||||
|
||||
private static final Logger LOGGER = LoggerFactory.getLogger(BaseTest.class);
|
||||
private static final String UNDERSCORE = "_";
|
||||
private static final Duration DEFAULT_TIMEOUT = Duration.ofSeconds(20);
|
||||
private static final Duration TIMEOUT = Duration.ofSeconds(3);
|
||||
private static final int WINDOW_WIDTH = 945;
|
||||
|
||||
@RegisterExtension
|
||||
protected ScreenWatcher screenWatcher = new ScreenWatcher();
|
||||
protected WebDriver driver;
|
||||
protected AbstractDriverOptions options;
|
||||
|
||||
private boolean closeBrowser = true;
|
||||
private TestInfo testInfo;
|
||||
|
||||
static {
|
||||
gridUrl = System.getProperty("selenium.grid.url");
|
||||
applicationUrl = System.getProperty("application.url");
|
||||
LOGGER.info("application.url: {}", applicationUrl);
|
||||
LOGGER.info("grid.url: {}", gridUrl);
|
||||
}
|
||||
|
||||
@BeforeEach
|
||||
void beforeEach(TestInfo testInfo) {
|
||||
this.testInfo = testInfo;
|
||||
}
|
||||
|
||||
@AfterEach
|
||||
void tearDown() {
|
||||
if (closeBrowser && driver != null) {
|
||||
driver.quit();
|
||||
}
|
||||
}
|
||||
|
||||
public static void sleep(long millis) {
|
||||
try {
|
||||
Thread.sleep(millis);
|
||||
}
|
||||
catch (InterruptedException e) {
|
||||
throw new RuntimeException("Something went wrong...", e);
|
||||
}
|
||||
}
|
||||
|
||||
public URL getGridURL() throws MalformedURLException {
|
||||
return new URL(gridUrl);
|
||||
}
|
||||
|
||||
protected void initDriver(Browser browser) {
|
||||
|
||||
System.setProperty("webdriver.http.factory", "jdk-http-client");
|
||||
try {
|
||||
options = browser.getOptions().newInstance();
|
||||
}
|
||||
catch (InstantiationException | IllegalAccessException e) {
|
||||
throw new RuntimeException("Failed to create capabilities", e);
|
||||
}
|
||||
|
||||
options.setCapability("selenoid:options", new HashMap<String, Object>() {
|
||||
{
|
||||
put("enableLog", Boolean.valueOf(System.getProperty("enableLog")));
|
||||
put("enableVNC", Boolean.valueOf(System.getProperty("enableVNC")));
|
||||
put("enableVideo", Boolean.valueOf(System.getProperty("enableVideo")));
|
||||
put("sessionTimeout", "3m");
|
||||
put("logName", getFileName(testInfo.getTestClass(), testInfo.getTestMethod(), testInfo.getDisplayName() + ".log"));
|
||||
put("videoName", getFileName(testInfo.getTestClass(), testInfo.getTestMethod(), testInfo.getDisplayName() + ".mp4"));
|
||||
}
|
||||
});
|
||||
|
||||
if (System.getProperty("enableLog") != null && browser == Browser.CHROME) {
|
||||
LoggingPreferences logPrefs = new LoggingPreferences();
|
||||
logPrefs.enable(LogType.BROWSER, Level.ALL);
|
||||
logPrefs.enable(LogType.CLIENT, Level.ALL);
|
||||
logPrefs.enable(LogType.DRIVER, Level.ALL);
|
||||
logPrefs.enable(LogType.PERFORMANCE, Level.ALL);
|
||||
logPrefs.enable(LogType.PROFILER, Level.ALL);
|
||||
logPrefs.enable(LogType.SERVER, Level.ALL);
|
||||
|
||||
options.setCapability("goog:loggingPrefs", logPrefs);
|
||||
}
|
||||
|
||||
LOGGER.info("try to create RemoteWebDriver, " + testInfo.getDisplayName());
|
||||
|
||||
int attempts = 0;
|
||||
while (attempts++ < 5) {
|
||||
|
||||
try {
|
||||
URL gridUrl = getGridURL();
|
||||
driver = new RemoteWebDriver(gridUrl, options);
|
||||
break;
|
||||
}
|
||||
catch (WebDriverException ignored) {
|
||||
LOGGER.info("The driver did not start on " + attempts + " attempt");
|
||||
}
|
||||
catch (MalformedURLException e) {
|
||||
throw new RuntimeException("Invalid grid URL", e);
|
||||
}
|
||||
}
|
||||
|
||||
if (driver == null) {
|
||||
throw new RuntimeException("Failed to create driver for " + testInfo.getDisplayName());
|
||||
}
|
||||
|
||||
LOGGER.info("RemoteWebDriver created, " + testInfo.getDisplayName());
|
||||
|
||||
// Configure to upload local files to remote Selenium instance
|
||||
((RemoteWebDriver) driver).setFileDetector(new LocalFileDetector());
|
||||
|
||||
driver.manage().window().maximize();
|
||||
//TODO после обновления selenium (4.9.0 <) необходимо перепроверить maximize()
|
||||
if (getWindowWidth(driver) < WINDOW_WIDTH) { //.maximize() не срабатывает с первого раза
|
||||
driver.manage().window().maximize();
|
||||
}
|
||||
driver.manage().window().maximize();
|
||||
driver.get(applicationUrl);
|
||||
assertTrue(waitForCorrectWindowWidth(),
|
||||
String.format("browser window size is less than and not equal to as expected: expected - %dpx, actual - %dpx",
|
||||
WINDOW_WIDTH, driver.manage().window().getSize().getWidth()));
|
||||
assertTrue(getExplicitWait(TIMEOUT)
|
||||
.until(ExpectedConditions.invisibilityOfElementLocated(getErrorBy())),
|
||||
"an error occurred while opening application");
|
||||
}
|
||||
|
||||
private int getWindowWidth(WebDriver webDriver) {
|
||||
return webDriver.manage().window().getSize().getWidth();
|
||||
}
|
||||
|
||||
protected Duration getDefaultTimeout() {
|
||||
return DEFAULT_TIMEOUT;
|
||||
}
|
||||
|
||||
protected WebDriverWait getExplicitWait(Duration timeout) {
|
||||
return new WebDriverWait(driver, timeout);
|
||||
}
|
||||
|
||||
protected void setCloseBrowser(boolean closeBrowser) {
|
||||
this.closeBrowser = closeBrowser;
|
||||
}
|
||||
|
||||
private boolean waitForCorrectWindowWidth() {
|
||||
try {
|
||||
return getExplicitWait(TIMEOUT)
|
||||
.until(webDriver -> webDriver.manage().window().getSize().getWidth() >= WINDOW_WIDTH);
|
||||
}
|
||||
catch (TimeoutException ignored) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
private String getFileName(Optional<Class<?>> testClass, Optional<Method> testMethod, String displayName) {
|
||||
String fileName = "";
|
||||
if (testClass.isPresent()) {
|
||||
fileName = testClass.get().getSimpleName() + UNDERSCORE;
|
||||
}
|
||||
|
||||
if (testMethod.isPresent()) {
|
||||
fileName += testMethod.get().getName() + UNDERSCORE;
|
||||
}
|
||||
|
||||
fileName += displayName;
|
||||
|
||||
return fileName;
|
||||
}
|
||||
|
||||
private String getFileName(ExtensionContext context) {
|
||||
return getFileName(context.getTestClass(), context.getTestMethod(), context.getDisplayName());
|
||||
}
|
||||
|
||||
public class ScreenWatcher implements AfterTestExecutionCallback {
|
||||
private static final String PATH = "target";
|
||||
private static final String EXTENSION = "jpg";
|
||||
|
||||
private File scrFile;
|
||||
|
||||
@Override
|
||||
public void afterTestExecution(ExtensionContext context) throws Exception {
|
||||
LOGGER.info("afterTestExecution");
|
||||
boolean failed = context.getExecutionException().isPresent();
|
||||
|
||||
if (!failed) {
|
||||
if (scrFile != null)
|
||||
scrFile.delete();
|
||||
}
|
||||
else {
|
||||
LOGGER.info("test failed");
|
||||
if (driver == null)
|
||||
return;
|
||||
saveScreen(getFileName(context));
|
||||
|
||||
for (String type : driver.manage().logs().getAvailableLogTypes()) {
|
||||
List<LogEntry> logEntries = driver.manage().logs().get(type).getAll();
|
||||
|
||||
if (logEntries.isEmpty()) {
|
||||
continue;
|
||||
}
|
||||
|
||||
LOGGER.info("Logging browser messages for type: " + type);
|
||||
for (LogEntry entry : logEntries) {
|
||||
LocalDateTime localdateTime = LocalDateTime.ofInstant(Instant.ofEpochMilli(entry.getTimestamp()), TimeZone.getDefault().toZoneId());
|
||||
String dateTime = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(localdateTime);
|
||||
LOGGER.warn(dateTime + " " + entry.getLevel() + " " + entry.getMessage());
|
||||
}
|
||||
LOGGER.info("Logged browser messages for type: " + type);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void saveScreen(String fileName) {
|
||||
try {
|
||||
TakesScreenshot takesScreenshot = (TakesScreenshot) driver;
|
||||
scrFile = takesScreenshot.getScreenshotAs(OutputType.FILE);
|
||||
Path destFile = Paths.get("", PATH, fileName + "." + EXTENSION);
|
||||
Files.copy(scrFile.toPath(), destFile, StandardCopyOption.REPLACE_EXISTING);
|
||||
}
|
||||
catch (IOException e) {
|
||||
throw new RuntimeException("Failed to capture screen", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
28
test/src/test/java/old/core/Browser.java
Normal file
28
test/src/test/java/old/core/Browser.java
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
package old.core;
|
||||
|
||||
import org.openqa.selenium.remote.AbstractDriverOptions;
|
||||
import org.openqa.selenium.chrome.ChromeOptions;
|
||||
import org.openqa.selenium.firefox.FirefoxOptions;
|
||||
|
||||
/**
|
||||
* @author gulnaz
|
||||
*/
|
||||
public enum Browser {
|
||||
CHROME(ChromeOptions.class),
|
||||
FIREFOX(FirefoxOptions.class);
|
||||
|
||||
private final Class<? extends AbstractDriverOptions> options;
|
||||
|
||||
Browser(Class<? extends AbstractDriverOptions> options) {
|
||||
this.options = options;
|
||||
}
|
||||
|
||||
public Class<? extends AbstractDriverOptions> getOptions() {
|
||||
return options;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return name().toLowerCase();
|
||||
}
|
||||
}
|
||||
24
test/src/test/java/old/core/BrowserArgumentProvider.java
Normal file
24
test/src/test/java/old/core/BrowserArgumentProvider.java
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
package old.core;
|
||||
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import org.junit.jupiter.api.extension.ExtensionContext;
|
||||
import org.junit.jupiter.params.provider.Arguments;
|
||||
import org.junit.jupiter.params.provider.ArgumentsProvider;
|
||||
|
||||
public class BrowserArgumentProvider implements ArgumentsProvider {
|
||||
|
||||
@Override
|
||||
public Stream<? extends Arguments> provideArguments(ExtensionContext context) {
|
||||
String browsers = System.getProperty("browsers");
|
||||
|
||||
if ("all".equals(browsers)) {
|
||||
return Stream.of(
|
||||
Arguments.of(Browser.CHROME),
|
||||
Arguments.of(Browser.FIREFOX));
|
||||
}
|
||||
|
||||
return Stream.of(
|
||||
Arguments.of(Browser.CHROME));
|
||||
}
|
||||
}
|
||||
199
test/src/test/java/old/page/AdminGroupPage.java
Normal file
199
test/src/test/java/old/page/AdminGroupPage.java
Normal file
|
|
@ -0,0 +1,199 @@
|
|||
package old.page;
|
||||
|
||||
import org.openqa.selenium.*;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
import java.time.Duration;
|
||||
|
||||
/**
|
||||
* @author kote
|
||||
*/
|
||||
public class AdminGroupPage extends BaseComponentPage {
|
||||
|
||||
private static final String AVAILABLE_TO_ADD_TABLE = "//*[@object-name='AvailableRecordsGrid']";
|
||||
private static final String ADDED_TABLE = "//*[@object-name='LinkFieldDialog']";
|
||||
private static final String LINKED_ROLE_TABLE = "//*[@object-name='RolesGrid']";
|
||||
private static final String GROUP_NAMES_TABLE = "//*[@object-name='Grid']";
|
||||
private static final String ROW_BY_NAME = "//div[@role='row']//div[contains(.,'%s')]";
|
||||
private static final String CELL_WITH_GROUP_NAME = "//div[@col-id='group$name']//span[contains(text(),'%s')]";
|
||||
private static final String ROLE_TO_ADD_BY_NAME = AVAILABLE_TO_ADD_TABLE + ROW_BY_NAME;
|
||||
|
||||
private static final By LINKED_ROLES_GRID = By.xpath(
|
||||
LINKED_ROLE_TABLE + "//div[@col-id='role$name']" + EXCLUDE_HEADER);
|
||||
private static final By ROLES_AVAILABLE_TO_ADD_GRID = By.xpath(
|
||||
AVAILABLE_TO_ADD_TABLE + "//div[@col-id='role$name']" + EXCLUDE_HEADER);
|
||||
private static final By ADDED_ROLES_GRID = By.xpath(
|
||||
ADDED_TABLE + "//div[@role='gridcell']" + EXCLUDE_HEADER + "[@col-id='role$name']");
|
||||
private static final By GROUP_NAMES_GRID = By.xpath(
|
||||
GROUP_NAMES_TABLE + "//div[@col-id='role$name']" + EXCLUDE_HEADER);
|
||||
private static final By GRID_BODY = By.xpath(
|
||||
"//div[@class='ag-center-cols-container']" + "[//div[@role='row']" + EXCLUDE_HEADER + "]");
|
||||
private static final By ROLE_TO_ADD_TABLE_HEADER = By.xpath(
|
||||
AVAILABLE_TO_ADD_TABLE + "//div[@col-id='role$name']" + AG_HEADER);
|
||||
private static final By ADDED_ROLES_TABLE_HEADER = By.xpath(
|
||||
ADDED_TABLE + "//div[@col-id='role$name']" + AG_HEADER);
|
||||
private static final By GROUP_NAMES_TABLE_HEADER = By.xpath(
|
||||
GROUP_NAMES_TABLE + "//div[@col-id='role$name']" + AG_HEADER);
|
||||
private static final By LINKED_ROLES_TABLE_HEADER = By.xpath(
|
||||
LINKED_ROLE_TABLE + "//div[@col-id='role$name']" + AG_HEADER);
|
||||
|
||||
public AdminGroupPage(WebDriver browser) {
|
||||
super(browser, "/#/");
|
||||
}
|
||||
|
||||
public void searchGroup(String groupName) {
|
||||
waitProgressBarNotVisible();
|
||||
waitForVisibilityOf(searchField);
|
||||
typeTextOnAdminFilter(searchField, groupName);
|
||||
waitForInvisibilityGridDownloader();
|
||||
}
|
||||
|
||||
public void chooseGroup(String groupName) {
|
||||
searchGroup(groupName);
|
||||
getListOfGroupsNamesFromTable(groupName).get(0).click();
|
||||
waitProgressBarNotVisible();
|
||||
waitForPageLoad();
|
||||
}
|
||||
|
||||
public void deleteGroup() {
|
||||
waitProgressBarNotVisible();
|
||||
clickDeleteButton();
|
||||
clickConfirmButton();
|
||||
}
|
||||
|
||||
public List<WebElement> getListOfGroupsNamesFromTable(String name) {
|
||||
return driver.findElements(By.xpath(String.format(CELL_WITH_GROUP_NAME, name)));
|
||||
}
|
||||
|
||||
public List<WebElement> getListOfRolesFromLinkedTable() {
|
||||
return driver.findElements(LINKED_ROLES_GRID);
|
||||
}
|
||||
|
||||
public List<WebElement> getListOfRolesToAdd() {
|
||||
return driver.findElements(ROLES_AVAILABLE_TO_ADD_GRID);
|
||||
}
|
||||
|
||||
public boolean isGridEmpty() {
|
||||
try {
|
||||
waitForInvisibilityOfElementLocated(GRID_BODY, Duration.ofSeconds(5));
|
||||
return true;
|
||||
}
|
||||
catch (TimeoutException t) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Method to avoid parallel test conflicts.
|
||||
* <p>
|
||||
* If the list of roles available to adding is not empty, checks if the list contains only newly
|
||||
* created roles.
|
||||
* </p>
|
||||
*
|
||||
* @param roleNames list retrieved from the database before the parallel test created a role.
|
||||
* @return value of {@link Boolean} type.
|
||||
* <p>
|
||||
* True - if list of roles available for adding is empty, or contains only newly created roles
|
||||
* from parallel tests.
|
||||
* </p>
|
||||
* <p>
|
||||
* False - if list of roles available for adding contains values from roleNames list.
|
||||
* </p>
|
||||
*/
|
||||
public boolean isAvailableGridEmpty(List<String> roleNames) {
|
||||
List<String> possibleParallelAddedRole = getListOfRolesToAdd()
|
||||
.stream()
|
||||
.map(WebElement::getText)
|
||||
.collect(Collectors.toList());
|
||||
|
||||
if (possibleParallelAddedRole.isEmpty()) {
|
||||
return true;
|
||||
}
|
||||
else {
|
||||
return roleNames
|
||||
.stream()
|
||||
.noneMatch(possibleParallelAddedRole::contains);
|
||||
}
|
||||
}
|
||||
|
||||
public void addRole(String roleName, boolean needSort) {
|
||||
if (needSort) {
|
||||
waitForVisibilityOfElementLocated(ROLE_TO_ADD_TABLE_HEADER).click();
|
||||
}
|
||||
By cell = By.xpath(String.format(ROLE_TO_ADD_BY_NAME, roleName));
|
||||
waitForVisibilityOfElementLocated(By.xpath(String.format(ROLE_TO_ADD_BY_NAME, roleName))).click();
|
||||
waitForPageLoad();
|
||||
clickAddButton();
|
||||
waitProgressBarNotVisible();
|
||||
}
|
||||
|
||||
public void removeRole(String roleName) {
|
||||
waitForVisibilityOfElementLocated(By.xpath(String.format(ADDED_TABLE + ROW_BY_NAME, roleName))).click();
|
||||
clickRemoveButton();
|
||||
waitProgressBarNotVisible();
|
||||
}
|
||||
|
||||
public void addAllRoles() {
|
||||
clickAddAllButton();
|
||||
waitProgressBarNotVisible();
|
||||
}
|
||||
|
||||
public void removeAllRoles() {
|
||||
clickRemoveAllButton();
|
||||
waitProgressBarNotVisible();
|
||||
}
|
||||
|
||||
public boolean hasRolesInTable(GroupPageGrids tableName, String... roleNames) {
|
||||
String table = tableName == GroupPageGrids.ADDED_ROLES_GRID ? ADDED_TABLE :
|
||||
AVAILABLE_TO_ADD_TABLE;
|
||||
for (String roleName : roleNames) {
|
||||
List<WebElement> roles = driver.findElements(By.xpath(table + String.format(ROW_BY_NAME, roleName)));
|
||||
if (roles.isEmpty()) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public List<WebElement> getListOfAddedRoles() {
|
||||
return driver.findElements(ADDED_ROLES_GRID);
|
||||
}
|
||||
|
||||
public List<WebElement> getListOfGroupNames() {
|
||||
return driver.findElements(GROUP_NAMES_GRID);
|
||||
}
|
||||
|
||||
public void bindRole(String roleName) {
|
||||
waitForVisibilityOf(addButton);
|
||||
addRole(roleName, false);
|
||||
waitProgressBarNotVisible();
|
||||
}
|
||||
|
||||
public void typeAndSelectLevel(String level) {
|
||||
typeTextAndSelectOption("access_level", level, level);
|
||||
}
|
||||
|
||||
public void changeGroupPageGridSort(GroupPageGrids value) {
|
||||
switch (value) {
|
||||
case ROLES_TO_ADD_GRID:
|
||||
driver.findElement(ROLE_TO_ADD_TABLE_HEADER).click();
|
||||
break;
|
||||
case LINKED_ROLES_GRID:
|
||||
driver.findElement(LINKED_ROLES_TABLE_HEADER).click();
|
||||
break;
|
||||
case ADDED_ROLES_GRID:
|
||||
driver.findElement(ADDED_ROLES_TABLE_HEADER).click();
|
||||
case GROUP_NAMES_GRID:
|
||||
driver.findElement(GROUP_NAMES_TABLE_HEADER).click();
|
||||
}
|
||||
waitForPageLoad();
|
||||
}
|
||||
|
||||
public enum GroupPageGrids {
|
||||
ADDED_ROLES_GRID,
|
||||
ROLES_TO_ADD_GRID,
|
||||
LINKED_ROLES_GRID,
|
||||
GROUP_NAMES_GRID
|
||||
}
|
||||
}
|
||||
92
test/src/test/java/old/page/AdminOrgPage.java
Normal file
92
test/src/test/java/old/page/AdminOrgPage.java
Normal file
|
|
@ -0,0 +1,92 @@
|
|||
package old.page;
|
||||
|
||||
import org.openqa.selenium.By;
|
||||
import org.openqa.selenium.WebDriver;
|
||||
import org.openqa.selenium.WebElement;
|
||||
import org.openqa.selenium.support.FindBy;
|
||||
|
||||
import java.util.List;
|
||||
import java.time.Duration;
|
||||
|
||||
/**
|
||||
* @author kote
|
||||
*/
|
||||
public class AdminOrgPage extends BaseComponentPage {
|
||||
|
||||
private static final By CELL_WITH_NAME = By.xpath(
|
||||
"//*[@object-name='Древовидная таблица']//div[@col-id='name'][not(contains(@class,'ag-header'))]//span[@class='ag-group-value']");
|
||||
private static final By GRID_BODY =
|
||||
By.xpath("//div[@class='ag-center-cols-container'][//div[@role='row'][not(contains(@class,'ag-header'))]]");
|
||||
private static final String PLUS_IN_CELL_WITH_NAME =
|
||||
"//div[@col-id='name'][//span[contains(text(), '%s')]]//span[@ref='eContracted']";
|
||||
private static final String CHECKBOX_BY_NAME =
|
||||
"//div[@col-id='name'][.//span[contains(text(), '%s')]]//div[contains(@class,'ag-selection-checkbox')]";
|
||||
|
||||
//Organization Editing Page
|
||||
@FindBy(xpath = "//*[@object-name='Группа фильтров']//input")
|
||||
private WebElement searchField;
|
||||
@FindBy(xpath = "//div[label[span[contains(.,'Наименование')]]]//input")
|
||||
public WebElement nameField;
|
||||
@FindBy(xpath = "//div[label[span[contains(.,'Код')]]]//input")
|
||||
private WebElement codeField;
|
||||
|
||||
public AdminOrgPage(WebDriver browser) {
|
||||
super(browser, "/#/");
|
||||
}
|
||||
|
||||
public void fillOrgNameAndCode(String name) {
|
||||
typeText(nameField, name);
|
||||
typeText(codeField, name);
|
||||
}
|
||||
|
||||
public void chooseParentOrg(String parentOrgName) {
|
||||
typeTextAndSelectOption("Выпадающий список (с возможностью сохранения)", parentOrgName, parentOrgName);
|
||||
}
|
||||
|
||||
public void searchOrg(String name) {
|
||||
typeTextOnAdminFilter(searchField, name);
|
||||
waitForInvisibilityGridDownloader();
|
||||
}
|
||||
|
||||
public List<WebElement> getListOfOrganizationsFromTable() {
|
||||
return driver.findElements(CELL_WITH_NAME);
|
||||
}
|
||||
|
||||
public void clickOnPlusSign(String orgName) {
|
||||
waitForVisibilityOfElementLocated(By.xpath(String.format(PLUS_IN_CELL_WITH_NAME, orgName))).click();
|
||||
waitProgressBarNotVisible();
|
||||
}
|
||||
|
||||
public void searchAndClickOnOrg(String name) {
|
||||
if (driver.findElements(By.xpath(String.format(CHECKBOX_BY_NAME, name))).isEmpty()) {
|
||||
searchOrg(name);
|
||||
}
|
||||
waitForVisibilityOfElementLocated(By.xpath(String.format(CHECKBOX_BY_NAME, name))).click();
|
||||
waitForPageLoad();
|
||||
}
|
||||
|
||||
public void deleteOrg() {
|
||||
clickDeleteButton();
|
||||
confirmAction();
|
||||
}
|
||||
|
||||
public void cancelEditingOrg() {
|
||||
clickCancelButton();
|
||||
confirmAction();
|
||||
}
|
||||
|
||||
private void confirmAction() {
|
||||
clickConfirmButton();
|
||||
waitProgressBarNotVisible();
|
||||
waitForPageLoad();
|
||||
}
|
||||
|
||||
public void waitGridEmpty() {
|
||||
waitForInvisibilityOfElementLocated(GRID_BODY, Duration.ofSeconds(60));
|
||||
}
|
||||
|
||||
public void waitOrgEditingPageLoading() {
|
||||
waitForPageLoad();
|
||||
waitForVisibilityOf(nameField);
|
||||
}
|
||||
}
|
||||
73
test/src/test/java/old/page/AdminProcessPage.java
Normal file
73
test/src/test/java/old/page/AdminProcessPage.java
Normal file
|
|
@ -0,0 +1,73 @@
|
|||
package old.page;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.openqa.selenium.By;
|
||||
import org.openqa.selenium.WebDriver;
|
||||
import org.openqa.selenium.WebElement;
|
||||
import org.openqa.selenium.support.FindBy;
|
||||
|
||||
public class AdminProcessPage extends BaseComponentPage {
|
||||
|
||||
private static final By modalMessage = By.xpath("//div[contains(@class, 'modal-body')][contains(., 'Вы действительно хотите')]");
|
||||
|
||||
@FindBy(css = "div[col-id = 'process$start_date']")
|
||||
private List<WebElement> dates;
|
||||
|
||||
private static final String PROCESS_XPATH = "//div[@row-id='%s'][.//div[contains(.,'%s')]]";
|
||||
|
||||
public AdminProcessPage(WebDriver browser) {
|
||||
super(browser, "/#/process/instance");
|
||||
}
|
||||
|
||||
private By getProcessBy(String processId, String processName) {
|
||||
return By.xpath(String.format(PROCESS_XPATH, processId, processName));
|
||||
}
|
||||
|
||||
public WebElement getProcessFromProcessInstanceTable(String processName, String processId) {
|
||||
By processLocator = (getProcessBy(processId, processName));
|
||||
return waitForVisibilityOfElementLocated(processLocator);
|
||||
}
|
||||
|
||||
public boolean isNoProcessFound(String processName, String processId) {
|
||||
By processLocator = (getProcessBy(processId, processName));
|
||||
|
||||
if (!driver.findElements(FIRST_ROW_BY).isEmpty()) {
|
||||
}
|
||||
|
||||
return driver.findElements(processLocator).isEmpty();
|
||||
}
|
||||
|
||||
//прервать процесс
|
||||
public void stopProcess(String processName, String processId) {
|
||||
getProcessFromProcessInstanceTable(processName, processId).click();
|
||||
clickStopButton();
|
||||
waitForVisibilityOfElementLocated(modalMessage);
|
||||
clickConfirmButton();
|
||||
waitForInvisibilityOfElementLocated(modalMessage);
|
||||
}
|
||||
|
||||
//переключиться между вкладками с помощью радиобатона
|
||||
public void changeRadioTab(String radioButtonTab) {
|
||||
waitProgressBarNotVisible();
|
||||
WebElement radioTab = driver.findElement(By.xpath("//label[.//span[contains(.,'" + radioButtonTab + "')]]//input"));
|
||||
radioTab.click();
|
||||
waitProgressBarNotVisible();
|
||||
}
|
||||
|
||||
//переключится на вкладку завершенных процессов
|
||||
public void goToFinishedTab() {
|
||||
changeRadioTab("Завершенные");
|
||||
waitForPageLoad();
|
||||
}
|
||||
|
||||
//переключится на вкладку прерванных процессов
|
||||
public void goToStopedTab() {
|
||||
changeRadioTab("Прерванные");
|
||||
waitForPageLoad();
|
||||
}
|
||||
|
||||
public String getDateStringByRowNumber(Integer rowNumber) {
|
||||
return dates.get(rowNumber).getText();
|
||||
}
|
||||
}
|
||||
76
test/src/test/java/old/page/AdminRolePage.java
Normal file
76
test/src/test/java/old/page/AdminRolePage.java
Normal file
|
|
@ -0,0 +1,76 @@
|
|||
package old.page;
|
||||
|
||||
import org.openqa.selenium.By;
|
||||
import org.openqa.selenium.WebDriver;
|
||||
import org.openqa.selenium.WebElement;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author kote
|
||||
*/
|
||||
public class AdminRolePage extends BaseComponentPage {
|
||||
|
||||
private static final String CELL_WITH_ROLE_NAME = "//div[@col-id='role$name']//span[contains(text(),'%s')]";
|
||||
private static final String LINK_GROUP_TABLE = "//*[@object-name='GroupsGrid']";
|
||||
private static final String ROLE_NAME_TABLE = "//*[@object-name='Grid']";
|
||||
|
||||
private static final By LINKED_GROUP_GRID = By.xpath(LINK_GROUP_TABLE + "//div[@col-id='group$name']" + EXCLUDE_HEADER);
|
||||
private static final By ROLE_NAMES_GRID = By.xpath(ROLE_NAME_TABLE + "//div[@col-id='role$name']" + EXCLUDE_HEADER);
|
||||
private static final By LINKED_GROUP_GRID_HEADER = By.xpath(LINK_GROUP_TABLE + "//div[@col-id='group$name']" + AG_HEADER);
|
||||
private static final By ROLE_NAMES_GRID_HEADER = By.xpath(ROLE_NAME_TABLE + "//div[@col-id='role$name']" + AG_HEADER);
|
||||
|
||||
public AdminRolePage(WebDriver browser) {
|
||||
super(browser, "/#/");
|
||||
}
|
||||
|
||||
public void searchRole(String roleName) {
|
||||
waitProgressBarNotVisible();
|
||||
waitForVisibilityOf(searchField);
|
||||
typeTextOnAdminFilter(searchField, roleName);
|
||||
waitForInvisibilityGridDownloader();
|
||||
waitForPageLoad();
|
||||
}
|
||||
|
||||
public void chooseRole(String roleName) {
|
||||
searchRole(roleName);
|
||||
getListOfRolesNamesFromTable(roleName).get(0).click();
|
||||
waitForInvisibilityGridDownloader();
|
||||
}
|
||||
|
||||
public void deleteRole() {
|
||||
waitProgressBarNotVisible();
|
||||
clickDeleteButton();
|
||||
clickConfirmButton();
|
||||
waitProgressBarNotVisible();
|
||||
}
|
||||
|
||||
public List<WebElement> getListOfRolesNamesFromTable(String name) {
|
||||
return driver.findElements(By.xpath(String.format(CELL_WITH_ROLE_NAME, name)));
|
||||
}
|
||||
|
||||
public List<WebElement> getListOfRoleLinkedGroups() {
|
||||
return driver.findElements(LINKED_GROUP_GRID);
|
||||
}
|
||||
|
||||
public List<WebElement> getListOfRoles() {
|
||||
return driver.findElements(ROLE_NAMES_GRID);
|
||||
}
|
||||
|
||||
public void changeRolePageGridSort(RolePageGrids value) {
|
||||
switch (value) {
|
||||
case GROUP_NAMES_GRID:
|
||||
driver.findElement(LINKED_GROUP_GRID_HEADER).click();
|
||||
break;
|
||||
case ROLE_NAMES_GRID:
|
||||
driver.findElement(ROLE_NAMES_GRID_HEADER).click();
|
||||
break;
|
||||
}
|
||||
waitForPageLoad();
|
||||
}
|
||||
|
||||
public enum RolePageGrids {
|
||||
ROLE_NAMES_GRID,
|
||||
GROUP_NAMES_GRID
|
||||
}
|
||||
}
|
||||
246
test/src/test/java/old/page/AdminUserPage.java
Normal file
246
test/src/test/java/old/page/AdminUserPage.java
Normal file
|
|
@ -0,0 +1,246 @@
|
|||
package old.page;
|
||||
|
||||
import org.openqa.selenium.By;
|
||||
import org.openqa.selenium.Keys;
|
||||
import org.openqa.selenium.WebDriver;
|
||||
import org.openqa.selenium.WebElement;
|
||||
import org.openqa.selenium.interactions.Actions;
|
||||
import org.openqa.selenium.support.FindBy;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @author kote
|
||||
*/
|
||||
public class AdminUserPage extends BaseComponentPage {
|
||||
|
||||
private static final String TABLE_TO_ADD = "//*[@object-name='AvailableRecordsGrid']";
|
||||
private static final String TABLE_ADDED = "//*[@object-name='LinkFieldDialog for save']";
|
||||
private static final String USER_TABLE = "//*[@object-name='Grid']";
|
||||
private static final String LINK_GROUP_TABLE = "//*[@object-name='DependentGrid']";
|
||||
private static final String ROW_BY_NAME = "//div[@role='row']//div[contains(.,'%s')]";
|
||||
|
||||
private static final By CELL_WITH_LAST_NAME = By.xpath(USER_TABLE + "//div[@col-id='user$lastName']" + EXCLUDE_HEADER);
|
||||
private static final By CELL_WITH_FIRST_NAME = By.xpath(USER_TABLE + "//div[@col-id='user$firstName']" + EXCLUDE_HEADER);
|
||||
private static final By CELL_WITH_MIDDLE_NAME = By.xpath(USER_TABLE + "//div[@col-id='user$middleName']" + EXCLUDE_HEADER);
|
||||
private static final By GROUP_IN_TABLE = By.xpath(LINK_GROUP_TABLE + "//div[@col-id='group$name']" + EXCLUDE_HEADER);
|
||||
private static final By CELL_WITH_LAST_NAME_HEADER = By.xpath(USER_TABLE + "//div[@col-id='user$lastName']" + AG_HEADER);
|
||||
private static final By GROUP_IN_TABLE_HEADER = By.xpath(LINK_GROUP_TABLE + "//div[@col-id='group$name']" + AG_HEADER);
|
||||
private static final By GROUP_TO_ADD_HEADER = By.xpath(TABLE_TO_ADD + "//div[@col-id='group$name']" + AG_HEADER);
|
||||
private static final By ADDED_GROUPS_HEADER = By.xpath(TABLE_ADDED + "//div[@col-id='group$name']" + AG_HEADER);
|
||||
private static final By GROUP_TO_ADD = By.xpath(TABLE_TO_ADD + "//div[@col-id='group$name']" + EXCLUDE_HEADER);
|
||||
private static final By ADDED_GROUPS = By.xpath(TABLE_ADDED + "//div[@role='gridcell']" + EXCLUDE_HEADER + "[@col-id='group$name']");
|
||||
private static final By LOGOUT_BUTTON = By.xpath("//div[@class ='fa fa-power-off']");
|
||||
|
||||
|
||||
//User Administration Page
|
||||
@FindBy(xpath = "//*[contains(text(),'Фильтр по пользователям')]")
|
||||
public WebElement filterPanel;
|
||||
|
||||
//User Editing Page
|
||||
@FindBy(xpath = "//*[@object-name='last-name']//input")
|
||||
public WebElement lastNameField;
|
||||
@FindBy(xpath = "//div[@class='logout']//button[contains(@class,'nav-link')]")
|
||||
public WebElement userMenuButton;
|
||||
@FindBy(xpath = "//button[contains(.,'Выход')]")
|
||||
public WebElement exitButton;
|
||||
|
||||
@FindBy(xpath = "//*[@object-name='first-name']//input")
|
||||
private WebElement firstNameField;
|
||||
@FindBy(xpath = "//*[@object-name='middleName']//input")
|
||||
private WebElement middleNameField;
|
||||
@FindBy(xpath = "//*[@object-name='login']//input")
|
||||
private WebElement loginField;
|
||||
@FindBy(xpath = "//*[@object-name='last-name']//input")
|
||||
private WebElement surNameField;
|
||||
@FindBy(xpath = "//*[@object-name='password']//input")
|
||||
private WebElement passwordField;
|
||||
@FindBy(xpath = "//*[@object-name='password-repeat']//input")
|
||||
private WebElement passwordRepeatField;
|
||||
@FindBy(xpath = "//*[@object-name='email']//input")
|
||||
private WebElement emailField;
|
||||
@FindBy(xpath = "//div[@row-index='0']//div[@col-id='checkbox_uid']")
|
||||
private List<WebElement> listGroupsToAdd;
|
||||
|
||||
public AdminUserPage(WebDriver browser) {
|
||||
super(browser, "/#/");
|
||||
}
|
||||
|
||||
public void fillUserFullName(String userName) {
|
||||
typeText(lastNameField, userName);
|
||||
typeText(firstNameField, userName);
|
||||
typeText(middleNameField, userName);
|
||||
}
|
||||
|
||||
public void fillUserCredentials(String userName, String userPassword, String userEmail,
|
||||
String userOrganization, String fullOrganizationName) {
|
||||
typeText(loginField, userName);
|
||||
fillPassAndEmail(userPassword, userEmail);
|
||||
chooseUserOrganization(userOrganization, fullOrganizationName);
|
||||
}
|
||||
|
||||
public void chooseUserOrganization(String userOrganization, String fullOrganizationName) {
|
||||
typeTextAndSelectOption("org_unit_id", userOrganization, fullOrganizationName);
|
||||
}
|
||||
|
||||
public void chooseUserOrganization(String userOrganization) {
|
||||
typeTextAndSelectOption("org_unit_id", userOrganization, userOrganization);
|
||||
}
|
||||
|
||||
public void fillPassAndEmail(String userPassword, String userEmail) {
|
||||
fillPass(userPassword);
|
||||
typeText(emailField, userEmail);
|
||||
}
|
||||
|
||||
public void fillPass(String userPassword) {
|
||||
typeText(passwordField, userPassword);
|
||||
typeText(passwordRepeatField, userPassword);
|
||||
}
|
||||
|
||||
public void searchUser(String userSurName) {
|
||||
filterPanel.click();
|
||||
waitForPageLoad();
|
||||
typeTextOnAdminFilter(surNameField, userSurName);
|
||||
waitForInvisibilityGridDownloader();
|
||||
}
|
||||
|
||||
public void deleteUser() {
|
||||
waitProgressBarNotVisible();
|
||||
clickDeleteButton();
|
||||
clickConfirmButton();
|
||||
waitProgressBarNotVisible();
|
||||
}
|
||||
|
||||
public List<WebElement> getListOfLastNamesFromTable() {
|
||||
return driver.findElements(CELL_WITH_LAST_NAME);
|
||||
}
|
||||
|
||||
public List<WebElement> getListOfFirstNamesFromTable() {
|
||||
return driver.findElements(CELL_WITH_FIRST_NAME);
|
||||
}
|
||||
|
||||
public List<WebElement> getListOfMiddleNamesFromTable() {
|
||||
return driver.findElements(CELL_WITH_MIDDLE_NAME);
|
||||
}
|
||||
|
||||
public List<WebElement> getListOfGroupsFromTable() {
|
||||
return driver.findElements(GROUP_IN_TABLE);
|
||||
}
|
||||
|
||||
public List<WebElement> getListOfAddedGroups() {
|
||||
return driver.findElements(ADDED_GROUPS);
|
||||
}
|
||||
|
||||
public List<WebElement> getListOfAvailableGroupsToAdd() {
|
||||
return driver.findElements(GROUP_TO_ADD);
|
||||
}
|
||||
|
||||
public void clickOnUserInTable(String userName) {
|
||||
driver.findElement(By.xpath(String.format(USER_TABLE + ROW_BY_NAME, userName))).click();
|
||||
waitForPageLoad();
|
||||
}
|
||||
|
||||
public void addGroup(String groupName) {
|
||||
waitForVisibilityOfElementLocated(By.xpath(String.format(TABLE_TO_ADD + ROW_BY_NAME, groupName))).click();
|
||||
clickAddButton();
|
||||
waitProgressBarNotVisible();
|
||||
}
|
||||
|
||||
public void removeGroup(String groupName) {
|
||||
waitForVisibilityOfElementLocated(By.xpath(String.format(TABLE_ADDED + ROW_BY_NAME, groupName))).click();
|
||||
clickRemoveButton();
|
||||
waitForInvisibilityGridDownloader();
|
||||
}
|
||||
|
||||
public void addAllGroups() {
|
||||
clickAddAllButton();
|
||||
waitProgressBarNotVisible();
|
||||
}
|
||||
|
||||
public void removeAllGroups() {
|
||||
clickRemoveAllButton();
|
||||
waitProgressBarNotVisible();
|
||||
}
|
||||
|
||||
/**
|
||||
* Method to avoid parallel test conflicts.
|
||||
* <p>
|
||||
* If the list of groups available for adding is not empty, checks if the list contains only newly created groups.
|
||||
* </p>
|
||||
*
|
||||
* @param groupNames list retrieved from the database before the parallel test created a new group.
|
||||
* Instance of {@link List<String>} type.
|
||||
*
|
||||
* @return value of {@link Boolean} type.
|
||||
* <p>
|
||||
* True - if list of groups available for adding is empty, or contains only newly created groups from parallel tests.
|
||||
* </p>
|
||||
* <p>
|
||||
* False - if list of groups available for adding contains values from groupNames list.
|
||||
* </p>
|
||||
*/
|
||||
public boolean isAvailableGridEmpty(List<String> groupNames) {
|
||||
List<String> possibleParallelAddedGroups = getListOfAvailableGroupsToAdd()
|
||||
.stream()
|
||||
.map(WebElement::getText)
|
||||
.collect(Collectors.toList());
|
||||
|
||||
if (possibleParallelAddedGroups.isEmpty()) {
|
||||
return true;
|
||||
}
|
||||
else {
|
||||
return groupNames
|
||||
.stream()
|
||||
.noneMatch(possibleParallelAddedGroups::contains);
|
||||
}
|
||||
}
|
||||
|
||||
public void bindGroup(String roleName) {
|
||||
changeUserPageGridsSort(UsersPageGrids.GROUPS_TO_ADD_GRID);
|
||||
|
||||
//проходим вниз все группы пока не найдем нужную
|
||||
listGroupsToAdd.get(0).click();
|
||||
Actions actions = new Actions(driver);
|
||||
int numberOfScrolls = 10;
|
||||
while (driver.findElements(By.xpath(String.format(TABLE_TO_ADD + ROW_BY_NAME, roleName)))
|
||||
.isEmpty() && numberOfScrolls != 0) {
|
||||
actions.sendKeys(Keys.PAGE_DOWN).perform();
|
||||
numberOfScrolls--;
|
||||
}
|
||||
|
||||
waitProgressBarNotVisible();
|
||||
addGroup(roleName);
|
||||
waitProgressBarNotVisible();
|
||||
}
|
||||
|
||||
public void logout() {
|
||||
waitProgressBarNotVisible();
|
||||
userMenuButton.click();
|
||||
exitButton.click();
|
||||
}
|
||||
|
||||
public void changeUserPageGridsSort(UsersPageGrids value) {
|
||||
switch (value) {
|
||||
case USERS_GRID:
|
||||
driver.findElement(CELL_WITH_LAST_NAME_HEADER).click();
|
||||
break;
|
||||
case LINKED_GROUPS_GRID:
|
||||
driver.findElement(GROUP_IN_TABLE_HEADER).click();
|
||||
break;
|
||||
case GROUPS_TO_ADD_GRID:
|
||||
driver.findElement(GROUP_TO_ADD_HEADER).click();
|
||||
case ADDED_GROUPS_GRID:
|
||||
driver.findElement(ADDED_GROUPS_HEADER).click();
|
||||
break;
|
||||
}
|
||||
waitForPageLoad();
|
||||
}
|
||||
|
||||
public enum UsersPageGrids {
|
||||
USERS_GRID,
|
||||
LINKED_GROUPS_GRID,
|
||||
GROUPS_TO_ADD_GRID,
|
||||
ADDED_GROUPS_GRID
|
||||
}
|
||||
}
|
||||
287
test/src/test/java/old/page/BaseComponentPage.java
Normal file
287
test/src/test/java/old/page/BaseComponentPage.java
Normal file
|
|
@ -0,0 +1,287 @@
|
|||
package old.page;
|
||||
|
||||
import org.openqa.selenium.By;
|
||||
import org.openqa.selenium.JavascriptExecutor;
|
||||
import org.openqa.selenium.Keys;
|
||||
import org.openqa.selenium.WebDriver;
|
||||
import org.openqa.selenium.WebElement;
|
||||
import org.openqa.selenium.interactions.Actions;
|
||||
import org.openqa.selenium.support.FindBy;
|
||||
import org.openqa.selenium.TimeoutException;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import old.core.BasePage;
|
||||
import old.util.ExecutionManager;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
import java.time.Duration;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
|
||||
public abstract class BaseComponentPage extends BasePage {
|
||||
|
||||
private static final By PROGRESS_BAR = By.xpath("//img[contains(@src, 'progress.gif')]");
|
||||
private static final By NGB_MODAL_WINDOW = By.xpath("//ngb-modal-window");
|
||||
private static final By LOGIN_HEADER_BY = By.xpath("//h2[contains(.,'Вход')]");
|
||||
private static final String SELECTIZE_BY_OBJECT_NAME = "//*[@object-name='%s']";
|
||||
private static final By INPUT_IS_ACTIVE = By.xpath("//div[contains(@class, 'input-active')]");
|
||||
private static final String DATE_TIME_CREATE_OR_UPDATE =
|
||||
"//div[@col-id='%s']//span[contains(text(),'%s')]/parent::span/parent::div/parent::div/following-sibling::div[@col-id='%s']//span";
|
||||
private static final By GRID_PROGRESS_BAR = By.xpath(
|
||||
"//span[contains(text(), 'Загрузка данных, пожалуйста, подождите.')]");
|
||||
protected static final By EMAIL_INPUT_BY = By.name("username");
|
||||
protected static final By FIRST_ROW_BY = By.cssSelector(".ag-center-cols-container [row-index='0']");
|
||||
protected static final By MODAL_DIALOG_FIRST_ROW_BY = By.cssSelector(
|
||||
".modal-dialog .ag-center-cols-container [row-index='0']");
|
||||
protected static final String SELECTIZE_INPUT_BY_OBJECT_NAME = SELECTIZE_BY_OBJECT_NAME + "//input";
|
||||
protected static final String INPUT_WITH_SELECTED_OPTION = SELECTIZE_BY_OBJECT_NAME + "//div[contains(.,'%s')]";
|
||||
protected static final String OPTION_TO_SELECT = SELECTIZE_BY_OBJECT_NAME + "//div[@data-selectable][contains(.,'%s')]";
|
||||
protected static final String SELECTIZE_FULL = SELECTIZE_BY_OBJECT_NAME + "//div[contains(@class, 'full has-items')]";
|
||||
protected static final String EXCLUDE_HEADER = "[not(contains(@class,'ag-header'))]";
|
||||
protected static final String AG_HEADER = "[contains(@class,'ag-header')]";
|
||||
private static final String PAGE_HEADER = "//*[contains(text(),'%s')]";
|
||||
|
||||
//Administration Page
|
||||
@FindBy(xpath = "//*[contains(text(),'Фильтр по пользователям')]")
|
||||
public WebElement filterPanel;
|
||||
@FindBy(xpath = "//*[@object-name='last-name']//input")
|
||||
public WebElement surNameField;
|
||||
@FindBy(xpath = "//*[@object-name='search']//input")
|
||||
protected WebElement searchField;
|
||||
@FindBy(xpath = "//*[@object-name='create-button']//button['Создать']")
|
||||
protected WebElement createButton;
|
||||
@FindBy(xpath = "//*[@object-name='edit-button']//button['Редактировать']")
|
||||
protected WebElement editButton;
|
||||
@FindBy(xpath = "//*[@object-name='delete-button']//button['Удалить']")
|
||||
protected WebElement deleteButton;
|
||||
@FindBy(xpath = "//div[@class='modal-dialog']//button[@test-id='yes-btn']")
|
||||
protected WebElement confirmButton;
|
||||
@FindBy(xpath = "//button[contains(.,'Отменить')]")
|
||||
public WebElement cancelButton;
|
||||
|
||||
//Editing/Creating Pages
|
||||
@FindBy(xpath = "//*[@object-name='name']//input")
|
||||
public WebElement nameField;
|
||||
@FindBy(xpath = "//button[contains(.,'Сохранить')]")
|
||||
public WebElement saveButton;
|
||||
@FindBy(xpath = "//*[@object-name='Add']//button[text()='>']")
|
||||
protected WebElement addButton;
|
||||
@FindBy(xpath = "//*[@object-name='Remove']//button[text()='<']")
|
||||
protected WebElement removeButton;
|
||||
@FindBy(xpath = "//*[@object-name='AddAll']//button[text()='>>']")
|
||||
protected WebElement addAllButton;
|
||||
@FindBy(xpath = "//*[@object-name='RemoveAll']//button[text()='<<']")
|
||||
protected WebElement removeAllButton;
|
||||
@FindBy(xpath = "//button[contains(.,'Прервать')]")
|
||||
private WebElement stopButton;
|
||||
|
||||
final Logger logger = LoggerFactory.getLogger(getClass());
|
||||
protected static ExecutionManager EXECUTION_MANAGER = new ExecutionManager();
|
||||
|
||||
public BaseComponentPage(WebDriver browser, String uri) {
|
||||
super(browser, uri);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void waitForPageLoad() {
|
||||
super.waitForPageLoad();
|
||||
assertTrue(thereIsNoError());
|
||||
waitForInvisibilityOfElementLocated(NGB_MODAL_WINDOW);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void refreshPage() {
|
||||
driver.navigate().refresh();
|
||||
waitForPageLoad();
|
||||
}
|
||||
|
||||
public void waitForPageLoadWithoutCheckingForError() {
|
||||
super.waitForPageLoad();
|
||||
waitForInvisibilityOfElementLocated(NGB_MODAL_WINDOW);
|
||||
}
|
||||
|
||||
public void doubleClick(WebElement element) {
|
||||
Actions action = new Actions(driver);
|
||||
action.doubleClick(element).perform();
|
||||
}
|
||||
|
||||
public void typeText(WebElement input, String text) {
|
||||
waitForVisibilityOf(input);
|
||||
input.clear();
|
||||
input.sendKeys(text);
|
||||
waitProgressBarNotVisible();
|
||||
}
|
||||
|
||||
protected void typeTextFromJS(WebElement input, String text) {
|
||||
input.click();
|
||||
input.clear();
|
||||
((JavascriptExecutor) driver).executeScript("arguments[0].value='" + text + "';", input);
|
||||
}
|
||||
|
||||
public void typeTextOnAdminFilter(WebElement input, String text) {
|
||||
typeTextFromJS(input, text);
|
||||
input.sendKeys(" ");
|
||||
input.sendKeys(Keys.ENTER);
|
||||
blur(input);
|
||||
}
|
||||
|
||||
protected String getErrorText(By locator) {
|
||||
WebElement errorMessage = waitForVisibilityOfElementLocated(locator);
|
||||
return errorMessage.getText();
|
||||
}
|
||||
|
||||
public String getErrorTextFromPage() {
|
||||
return getErrorText(getErrorBy());
|
||||
}
|
||||
|
||||
protected void typeTextAndSelectOption(String objectName, String inputText, String optionText) {
|
||||
WebElement selectize = findElement(
|
||||
By.xpath(String.format(SELECTIZE_BY_OBJECT_NAME, objectName)));
|
||||
waitForElementToBeClickable(selectize).click();
|
||||
WebElement input = findElement(
|
||||
By.xpath(String.format(SELECTIZE_INPUT_BY_OBJECT_NAME, objectName)));
|
||||
input.sendKeys(Keys.BACK_SPACE);
|
||||
typeText(input, inputText);
|
||||
By optionToSelectBy = By.xpath(String.format(OPTION_TO_SELECT, objectName, optionText));
|
||||
waitForVisibilityOfElementLocated(optionToSelectBy).click();
|
||||
waitForInvisibilityOfElementLocated(optionToSelectBy);
|
||||
waitForVisibilityOfElementLocated(By.xpath(String.format(SELECTIZE_FULL, objectName)));
|
||||
waitForVisibilityOfElementLocated(By.xpath(String.format(INPUT_WITH_SELECTED_OPTION, objectName, optionText)));
|
||||
}
|
||||
|
||||
public String getLocalDate() {
|
||||
return LocalDateTime.now().minusHours(3).format(DateTimeFormatter.ofPattern("dd.MM.yyyy"));
|
||||
}
|
||||
|
||||
public WebElement getActionTime(String colId, String name, String сolIdAction) {
|
||||
return waitForVisibilityOfElementLocated(By.xpath(String.format
|
||||
(DATE_TIME_CREATE_OR_UPDATE, colId, name, сolIdAction)));
|
||||
}
|
||||
|
||||
public void waitForInitializationOf(WebElement... elements) {
|
||||
long pageLoadStart = System.currentTimeMillis();
|
||||
waitForPageLoad();
|
||||
logger.info("page loaded in " + (System.currentTimeMillis() - pageLoadStart) + " ms");
|
||||
for (WebElement element : elements) {
|
||||
long elementVisibilityStart = System.currentTimeMillis();
|
||||
waitForVisibilityOf(element);
|
||||
logger.info(element + " became visible in " + (System.currentTimeMillis() - elementVisibilityStart) + " ms");
|
||||
}
|
||||
}
|
||||
|
||||
// ожидается, что последний инпут, по котрому был клик, выбран
|
||||
public void waitForInputFieldSelected() {
|
||||
waitForNumberOfElementsToBe(INPUT_IS_ACTIVE, 1);
|
||||
}
|
||||
|
||||
public static By getProgressBar() {
|
||||
return PROGRESS_BAR;
|
||||
}
|
||||
|
||||
public static By getLoginHeaderBy() {
|
||||
return LOGIN_HEADER_BY;
|
||||
}
|
||||
|
||||
public List<String> getWebElementTexts(List<WebElement> elements) {
|
||||
return elements.stream()
|
||||
.map(WebElement::getText)
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
protected WebElement findElement(By by) {
|
||||
return driver.findElement(by);
|
||||
}
|
||||
|
||||
protected List<WebElement> findElements(By by) {
|
||||
return driver.findElements(by);
|
||||
}
|
||||
|
||||
public void waitForInvisibilityGridDownloader() {
|
||||
try {
|
||||
waitForVisibilityOfElementLocated(GRID_PROGRESS_BAR, Duration.ofMillis(1000));
|
||||
waitForInvisibilityOfElementLocated(GRID_PROGRESS_BAR);
|
||||
}
|
||||
catch (TimeoutException ignored) {
|
||||
logger.info("progress bar not visible");
|
||||
}
|
||||
}
|
||||
|
||||
protected void blur(WebElement input) {
|
||||
((JavascriptExecutor) driver).executeScript("arguments[0].blur()", input);
|
||||
((JavascriptExecutor) driver).executeScript("document.body.click()");
|
||||
}
|
||||
|
||||
public void cancelAction() {
|
||||
waitForElementToBeClickable(cancelButton).click();
|
||||
waitForPageLoad();
|
||||
clickConfirmButton();
|
||||
}
|
||||
|
||||
public void clickSaveButton() {
|
||||
waitForElementToBeClickable(saveButton).click();
|
||||
waitProgressBarNotVisible();
|
||||
waitForPageLoad();
|
||||
}
|
||||
|
||||
public void clickEditButton() {
|
||||
waitForElementToBeClickable(editButton).click();
|
||||
waitForPageLoad();
|
||||
}
|
||||
|
||||
public void clickCreateButton() {
|
||||
waitForElementToBeClickable(createButton).click();
|
||||
waitForPageLoad();
|
||||
}
|
||||
|
||||
public void clickDeleteButton() {
|
||||
waitForElementToBeClickable(deleteButton).click();
|
||||
waitProgressBarNotVisible();
|
||||
}
|
||||
|
||||
public void clickConfirmButton() {
|
||||
waitForElementToBeClickable(confirmButton).click();
|
||||
waitProgressBarNotVisible();
|
||||
}
|
||||
|
||||
public void clickAddButton() {
|
||||
waitForElementToBeClickable(addButton).click();
|
||||
waitForPageLoad();
|
||||
}
|
||||
|
||||
public void clickRemoveButton() {
|
||||
waitForElementToBeClickable(removeButton).click();
|
||||
waitForPageLoad();
|
||||
}
|
||||
|
||||
public void clickAddAllButton() {
|
||||
waitForElementToBeClickable(addAllButton).click();
|
||||
waitForPageLoad();
|
||||
}
|
||||
public void clickRemoveAllButton() {
|
||||
waitForElementToBeClickable(removeAllButton).click();
|
||||
waitForPageLoad();
|
||||
}
|
||||
|
||||
public void clickCancelButton() {
|
||||
waitForElementToBeClickable(cancelButton).click();
|
||||
}
|
||||
|
||||
public void clickStopButton() {
|
||||
waitForElementToBeClickable(stopButton).click();
|
||||
waitProgressBarNotVisible();
|
||||
}
|
||||
|
||||
public void searchUser(String userSurName) {
|
||||
filterPanel.click();
|
||||
waitForPageLoad();
|
||||
typeTextOnAdminFilter(surNameField, userSurName);
|
||||
waitForInvisibilityGridDownloader();
|
||||
}
|
||||
|
||||
public void checkTitle(String labelName) {
|
||||
waitForVisibilityOfElementLocated(By.xpath(String.format(PAGE_HEADER, labelName)));
|
||||
}
|
||||
}
|
||||
128
test/src/test/java/old/page/InboxPage.java
Normal file
128
test/src/test/java/old/page/InboxPage.java
Normal file
|
|
@ -0,0 +1,128 @@
|
|||
package old.page;
|
||||
|
||||
import java.time.Duration;
|
||||
import java.util.List;
|
||||
|
||||
import org.openqa.selenium.By;
|
||||
import org.openqa.selenium.WebDriver;
|
||||
import org.openqa.selenium.WebElement;
|
||||
import org.openqa.selenium.support.FindBy;
|
||||
import org.openqa.selenium.support.PageFactory;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
|
||||
public class InboxPage extends BaseComponentPage {
|
||||
|
||||
private static final String XPATH_FOR_MENU_ITEM = "//button[@class='dropdown-item'][contains(.,'%s')]";
|
||||
private static final By PROCESS_LIST_BY = By.xpath("//div[@id='process-instance-list']");
|
||||
private static final By PROCESS_DATE_BY = By.xpath("//span[contains(.,'Дата запуска')]");
|
||||
private static final By MENU_ADMINISTRATION = By.xpath("//button[contains(.,'Администрирование')]");
|
||||
private static final By START_PAGE = By.xpath("//div[@class='logo']");
|
||||
|
||||
@FindBy(xpath = "//button[@id='adminDropdownMenu']")
|
||||
public WebElement adminList;
|
||||
@FindBy(xpath = "//div[@class='logout']//button[contains(@class,'nav-link')]")
|
||||
public WebElement userMenuButton;
|
||||
@FindBy(xpath = "//button[contains(.,'Выход')]")
|
||||
public WebElement exitButton;
|
||||
@FindBy(xpath = "//button[@id='startProcessDropdownMenu']")
|
||||
private WebElement startButton;
|
||||
@FindBy(xpath = "//button[@routerlink='/user-management/groups']")
|
||||
private WebElement groupPage;
|
||||
@FindBy(xpath = "//button[@routerlink='/user-management/roles']")
|
||||
private WebElement rolePage;
|
||||
@FindBy(xpath = "//button[@routerlink='/user-management/users']")
|
||||
private WebElement userPage;
|
||||
@FindBy(xpath = "//button[@routerlink='/user-management/org-units']")
|
||||
private WebElement orgPage;
|
||||
@FindBy(xpath = "//button[@routerlink='/user-management/authorities']")
|
||||
private WebElement authoritiesPage;
|
||||
@FindBy(xpath = "//button[@routerlink='/process/instance']")
|
||||
private WebElement processPage;
|
||||
@FindBy(xpath = "//div[@class='user-info']//div[@class='user-fio']")
|
||||
private WebElement userFIO;
|
||||
|
||||
public InboxPage(WebDriver browser) {
|
||||
super(browser, "/#/");
|
||||
}
|
||||
|
||||
//выход из приложения
|
||||
public void exitApp() {
|
||||
waitProgressBarNotVisible();
|
||||
userMenuButton.click();
|
||||
exitButton.click();
|
||||
assertTrue(thereIsNoError());
|
||||
}
|
||||
|
||||
//открыть Экземпляры процессов
|
||||
public AdminProcessPage openAdminProcessPage() {
|
||||
waitForPageLoad();
|
||||
adminList.click();
|
||||
waitForElementToBeClickable(processPage, Duration.ofSeconds(10));
|
||||
processPage.click();
|
||||
waitForPageLoad();
|
||||
waitForVisibilityOfElementLocated(PROCESS_LIST_BY);
|
||||
waitForVisibilityOfElementLocated(PROCESS_DATE_BY);
|
||||
return PageFactory.initElements(driver, AdminProcessPage.class);
|
||||
}
|
||||
|
||||
//начать процесс
|
||||
public ProcessesPage startProcess(String processName) {
|
||||
waitForPageLoad();
|
||||
startButton.click();
|
||||
By menuItem = By.xpath(String.format(XPATH_FOR_MENU_ITEM, processName));
|
||||
WebElement process = waitForVisibilityOfElementLocated(menuItem);
|
||||
process.click();
|
||||
waitForPageLoad();
|
||||
return PageFactory.initElements(driver, ProcessesPage.class);
|
||||
}
|
||||
|
||||
public AdminUserPage startAdminUser() {
|
||||
adminList.click();
|
||||
userPage.click();
|
||||
waitForPageLoad();
|
||||
return PageFactory.initElements(driver, AdminUserPage.class);
|
||||
}
|
||||
|
||||
public AdminGroupPage startAdminGroup() {
|
||||
adminList.click();
|
||||
groupPage.click();
|
||||
waitForPageLoad();
|
||||
return PageFactory.initElements(driver, AdminGroupPage.class);
|
||||
}
|
||||
|
||||
public AdminRolePage startAdminRole() {
|
||||
adminList.click();
|
||||
rolePage.click();
|
||||
waitForPageLoad();
|
||||
return PageFactory.initElements(driver, AdminRolePage.class);
|
||||
}
|
||||
|
||||
public AdminOrgPage startAdminOrganization() {
|
||||
adminList.click();
|
||||
orgPage.click();
|
||||
waitForPageLoad();
|
||||
return PageFactory.initElements(driver, AdminOrgPage.class);
|
||||
}
|
||||
|
||||
public List<WebElement> getListOfAdminPanels() {
|
||||
return findElements(MENU_ADMINISTRATION);
|
||||
}
|
||||
|
||||
public String getUserFIOFromPage() {
|
||||
return userFIO.getText();
|
||||
}
|
||||
|
||||
public List<WebElement> getEmailInputsFrom(WebDriver element) {
|
||||
return element.findElements(EMAIL_INPUT_BY);
|
||||
}
|
||||
|
||||
public void waitEmailInput() {
|
||||
waitForVisibilityOfElementLocated(EMAIL_INPUT_BY);
|
||||
}
|
||||
|
||||
public boolean startPageDisplay() {
|
||||
waitForPageLoad();
|
||||
return waitForVisibilityOfElementLocated(START_PAGE).isDisplayed();
|
||||
}
|
||||
}
|
||||
78
test/src/test/java/old/page/LoginPage.java
Normal file
78
test/src/test/java/old/page/LoginPage.java
Normal file
|
|
@ -0,0 +1,78 @@
|
|||
package old.page;
|
||||
|
||||
import java.time.Duration;
|
||||
|
||||
import org.openqa.selenium.By;
|
||||
import org.openqa.selenium.TimeoutException;
|
||||
import org.openqa.selenium.WebDriver;
|
||||
import org.openqa.selenium.WebElement;
|
||||
import org.openqa.selenium.support.FindBy;
|
||||
import org.openqa.selenium.support.PageFactory;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
|
||||
public class LoginPage extends BaseComponentPage {
|
||||
private static final By ERROR_LOGIN = By.xpath("//div[@class='form-signin']//div[contains(@class,'alert-danger')]");
|
||||
private static final By TEXT_ERROR_DEPLOY_MESSAGE = By.xpath("//*[contains(., 'Приложение стартует')]");
|
||||
private static final By LOGIN_PAGE_HEADER = By.xpath("//*[contains(text(), 'Вход')]");
|
||||
|
||||
@FindBy(name = "username")
|
||||
private WebElement emailInput;
|
||||
@FindBy(name = "password")
|
||||
private WebElement passwordInput;
|
||||
@FindBy(css = "button[class='btn btn-primary']")
|
||||
private WebElement enterButton;
|
||||
@FindBy(xpath = "//*[contains(text(), 'Забыли пароль?')]")
|
||||
private WebElement resetPasswordLink;
|
||||
@FindBy(xpath = "//*[contains(text(), 'Зарегистрироваться')]")
|
||||
private WebElement registrationLink;
|
||||
|
||||
|
||||
public LoginPage(WebDriver browser) {
|
||||
super(browser, "/#/login");
|
||||
}
|
||||
|
||||
public void typeLoginPasswordAndEnter(String login, String password) {
|
||||
waitForVisibilityOfElementLocated(EMAIL_INPUT_BY);
|
||||
passwordInput.clear();
|
||||
passwordInput.sendKeys(password);
|
||||
emailInput.clear();
|
||||
emailInput.sendKeys(login);
|
||||
enterButton.click();
|
||||
}
|
||||
|
||||
public InboxPage login(String login, String password) {
|
||||
typeLoginPasswordAndEnter(login, password);
|
||||
assertTrue(hasNoErrorOnLoginPage(TEXT_ERROR_DEPLOY_MESSAGE), "Failed to deploy backend");
|
||||
assertTrue(hasNoErrorOnLoginPage(ERROR_LOGIN), "Failed to login");
|
||||
waitProgressBarNotVisible();
|
||||
|
||||
assertTrue(thereIsNoError());
|
||||
return PageFactory.initElements(driver, InboxPage.class);
|
||||
}
|
||||
|
||||
private boolean hasNoErrorOnLoginPage(By locator) {
|
||||
try {
|
||||
waitForInvisibilityOfElementLocated(locator, Duration.ofSeconds(5));
|
||||
}
|
||||
catch (TimeoutException ignored) {
|
||||
logger.error(getErrorText(locator));
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public String getErrorTextFromLoginForm() {
|
||||
return getErrorText(ERROR_LOGIN);
|
||||
}
|
||||
|
||||
public void goToResetPage() {
|
||||
waitForVisibilityOfElementLocated(LOGIN_PAGE_HEADER);
|
||||
resetPasswordLink.click();
|
||||
}
|
||||
|
||||
public void goToRegistPage(){
|
||||
waitForPageLoad();
|
||||
registrationLink.click();
|
||||
}
|
||||
}
|
||||
43
test/src/test/java/old/page/ProcessesPage.java
Normal file
43
test/src/test/java/old/page/ProcessesPage.java
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
package old.page;
|
||||
|
||||
import org.openqa.selenium.By;
|
||||
import org.openqa.selenium.WebDriver;
|
||||
import org.openqa.selenium.WebElement;
|
||||
import org.openqa.selenium.support.FindBy;
|
||||
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
public class ProcessesPage extends BaseComponentPage {
|
||||
|
||||
private static final String TEXT = "//div[@class='form-group']//*[text()='%s']";
|
||||
|
||||
@FindBy(xpath = "//navigation-button[@object-name='NavigationButton']//button[contains(.,'Завершить')]")
|
||||
public WebElement exitButton;
|
||||
|
||||
@FindBy(xpath = "//div[@id='page']")
|
||||
public WebElement pageID;
|
||||
|
||||
public ProcessesPage(WebDriver browser) {
|
||||
super(browser, "/#/process/");
|
||||
}
|
||||
|
||||
public String getTestProcessText() {
|
||||
return getWebElementTexts(driver.findElements(By.xpath(String.format(TEXT, "Тестовая страница")))).get(0);
|
||||
}
|
||||
|
||||
//----- different
|
||||
public String getProcessId() {
|
||||
String str = driver.getCurrentUrl();
|
||||
Pattern p = Pattern.compile("process\\/(\\d+)");
|
||||
Matcher m = p.matcher(str);
|
||||
m.find();
|
||||
return m.group(1);
|
||||
}
|
||||
|
||||
public void exitProcess() {
|
||||
waitForElementToBeClickable(exitButton);
|
||||
exitButton.click();
|
||||
waitForPageLoadWithoutCheckingForError();
|
||||
}
|
||||
}
|
||||
11
test/src/test/java/old/util/DataUtil.java
Normal file
11
test/src/test/java/old/util/DataUtil.java
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
package old.util;
|
||||
|
||||
/**
|
||||
* @author gulnaz
|
||||
*/
|
||||
public final class DataUtil {
|
||||
|
||||
private DataUtil() {
|
||||
}
|
||||
public static final String BASE_PART_FOR_USER = "qa";
|
||||
}
|
||||
508
test/src/test/java/old/util/ExecutionManager.java
Normal file
508
test/src/test/java/old/util/ExecutionManager.java
Normal file
|
|
@ -0,0 +1,508 @@
|
|||
package old.util;
|
||||
|
||||
import java.sql.Connection;
|
||||
import java.sql.SQLException;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
|
||||
import com.zaxxer.hikari.HikariDataSource;
|
||||
import org.jooq.DSLContext;
|
||||
import org.jooq.Table;
|
||||
import org.jooq.TableField;
|
||||
import org.jooq.Record;
|
||||
import org.jooq.conf.RenderNameCase;
|
||||
import org.jooq.conf.Settings;
|
||||
import org.jooq.impl.DSL;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import ru.cg.webbpm.modules.database.bean.config.Datasource;
|
||||
import ru.cg.webbpm.modules.database.impl.data_source.HikariDataSourceFactory;
|
||||
|
||||
import static ru.cg.webbpm.modules.security.api.impl.bean.Tables.LINK_USER_ACCOUNT_USER_GROUP;
|
||||
import static ru.cg.webbpm.modules.security.api.impl.bean.Tables.LINK_USER_GROUP_USER_ROLE;
|
||||
import static ru.cg.webbpm.modules.security.api.impl.bean.Tables.LINK_USER_ROLE_AUTHORITY;
|
||||
import static ru.cg.webbpm.modules.security.api.impl.bean.Tables.ORG_UNIT;
|
||||
import static ru.cg.webbpm.modules.security.api.impl.bean.Tables.SIMPLE_CREDENTIALS;
|
||||
import static ru.cg.webbpm.modules.security.api.impl.bean.Tables.USER_ACCOUNT;
|
||||
import static ru.cg.webbpm.modules.security.api.impl.bean.Tables.USER_ACCOUNT_VERIFICATION;
|
||||
import static ru.cg.webbpm.modules.security.api.impl.bean.Tables.USER_GROUP;
|
||||
import static ru.cg.webbpm.modules.security.api.impl.bean.Tables.USER_ROLE;
|
||||
|
||||
/**
|
||||
* @author gulnaz
|
||||
*/
|
||||
public class ExecutionManager {
|
||||
private static final Logger LOGGER = LoggerFactory.getLogger(ExecutionManager.class);
|
||||
private static final int POOL_SIZE = 2;
|
||||
|
||||
private HikariDataSource testDataSource;
|
||||
public HikariDataSource securityDataSource;
|
||||
private DSLContext dslContext;
|
||||
private Settings settings;
|
||||
|
||||
public ExecutionManager() {
|
||||
LOGGER.info("Execution manager creation");
|
||||
HikariDataSourceFactory hikariDataSourceFactory = new HikariDataSourceFactory(POOL_SIZE);
|
||||
|
||||
testDataSource = hikariDataSourceFactory.createDataSource(getDataSource(DataSourceName.TEST));
|
||||
|
||||
securityDataSource = hikariDataSourceFactory.createDataSource(getDataSource(DataSourceName.SECURITY));
|
||||
securityDataSource.setLeakDetectionThreshold(60000);
|
||||
|
||||
settings = new Settings();
|
||||
settings.setRenderNameCase(RenderNameCase.LOWER);
|
||||
|
||||
//TODO enable and change wrong port to right
|
||||
// jbpmDataSource = hikariDataSourceFactory.createDataSource(getDataSource(DataSourceName.JBPM));
|
||||
// jbpmDataSource.setMaximumPoolSize(5);
|
||||
}
|
||||
|
||||
public enum DataSourceName {
|
||||
JBPM,
|
||||
SECURITY,
|
||||
TEST
|
||||
}
|
||||
|
||||
public String generateId() {
|
||||
return UUID.randomUUID().toString();
|
||||
}
|
||||
|
||||
private Datasource getDataSource(DataSourceName dataSourceName) {
|
||||
String host = System.getenv("HOSTNAME");
|
||||
String databaseName;
|
||||
String user;
|
||||
String password;
|
||||
Datasource datasource = new Datasource();
|
||||
|
||||
switch (dataSourceName) {
|
||||
case JBPM:
|
||||
databaseName = System.getenv("DB_JBPM_NAME");
|
||||
user = System.getenv("DB_JBPM_USERNAME");
|
||||
password = System.getenv("DB_JBPM_PASSWORD");
|
||||
break;
|
||||
case SECURITY:
|
||||
host = System.getenv("DB_SEC_HOST");
|
||||
databaseName = System.getenv("DB_SEC_NAME");
|
||||
user = System.getenv("DB_SEC_USERNAME");
|
||||
password = System.getenv("DB_SEC_PASSWORD");
|
||||
break;
|
||||
case TEST:
|
||||
host = System.getenv("DB_APP_HOST");
|
||||
databaseName = System.getenv("DB_APP_NAME");
|
||||
user = System.getenv("DB_APP_USERNAME");
|
||||
password = System.getenv("DB_APP_PASSWORD");
|
||||
break;
|
||||
default:
|
||||
throw new IllegalStateException("Unexpected value: " + dataSourceName);
|
||||
}
|
||||
|
||||
datasource.setUrl(String.format("jdbc:postgresql://%s:%s/%s",
|
||||
host,
|
||||
System.getenv("DB_PORT"),
|
||||
databaseName));
|
||||
datasource.setUser(user);
|
||||
datasource.setPassword(password);
|
||||
datasource.setDriverClassName("org.postgresql.Driver");
|
||||
|
||||
return datasource;
|
||||
}
|
||||
|
||||
public <R extends Record> int countTableRows(Table<R> table) {
|
||||
try (Connection connection = testDataSource.getConnection()) {
|
||||
dslContext = DSL.using(connection);
|
||||
return dslContext.selectCount()
|
||||
.from(table)
|
||||
.fetchOne(0, int.class);
|
||||
}
|
||||
catch (SQLException e) {
|
||||
throw new RuntimeException("Failed to count rows", e);
|
||||
}
|
||||
}
|
||||
|
||||
public List<String> getGroupNamesFromUserGroup() {
|
||||
try (Connection connection = securityDataSource.getConnection()) {
|
||||
dslContext = DSL.using(connection, settings);
|
||||
|
||||
return dslContext.select()
|
||||
.from(USER_GROUP)
|
||||
.fetch()
|
||||
.getValues(USER_GROUP.NAME);
|
||||
}
|
||||
catch (SQLException e) {
|
||||
throw new RuntimeException("Failed to get group names from user group table", e);
|
||||
}
|
||||
}
|
||||
|
||||
public String getTokenByUserId(String id) {
|
||||
try (Connection connection = securityDataSource.getConnection()) {
|
||||
dslContext = DSL.using(connection, settings);
|
||||
|
||||
return dslContext.select()
|
||||
.from(USER_ACCOUNT_VERIFICATION)
|
||||
.where(USER_ACCOUNT_VERIFICATION.USER_ACCOUNT_ID.eq(id))
|
||||
.fetch()
|
||||
.getValue(0, USER_ACCOUNT_VERIFICATION.TOKEN);
|
||||
}
|
||||
catch (SQLException e) {
|
||||
throw new RuntimeException("Failed to get token from user_account_verification", e);
|
||||
}
|
||||
}
|
||||
|
||||
public List<String> getRoleNamesFromUserRole() {
|
||||
try (Connection connection = securityDataSource.getConnection()) {
|
||||
dslContext = DSL.using(connection, settings);
|
||||
|
||||
return dslContext.select()
|
||||
.from(USER_ROLE)
|
||||
.fetch()
|
||||
.getValues(USER_ROLE.NAME);
|
||||
}
|
||||
catch (SQLException e) {
|
||||
throw new RuntimeException("Failed to get roles from user_role table", e);
|
||||
}
|
||||
}
|
||||
|
||||
public String getUserAccountIdByName(String userName) {
|
||||
try (Connection connection = securityDataSource.getConnection()) {
|
||||
dslContext = DSL.using(connection, settings);
|
||||
|
||||
return dslContext.select()
|
||||
.from(USER_ACCOUNT)
|
||||
.where(USER_ACCOUNT.FIRST_NAME.eq(userName))
|
||||
.fetch()
|
||||
.getValue(0, USER_ACCOUNT.USER_ACCOUNT_ID);
|
||||
}
|
||||
catch (SQLException e) {
|
||||
throw new RuntimeException("Failed to get user_account_id from user_account table", e);
|
||||
}
|
||||
}
|
||||
|
||||
public String getRoleIdByName(String roleName) {
|
||||
try (Connection connection = securityDataSource.getConnection()) {
|
||||
dslContext = DSL.using(connection, settings);
|
||||
|
||||
return dslContext.select()
|
||||
.from(USER_ROLE)
|
||||
.where(USER_ROLE.NAME.eq(roleName))
|
||||
.fetch()
|
||||
.getValue(0, USER_ROLE.USER_ROLE_ID);
|
||||
}
|
||||
catch (SQLException e) {
|
||||
throw new RuntimeException("Failed to get user_role_id from user_role table", e);
|
||||
}
|
||||
}
|
||||
|
||||
public String getGroupIdByName(String groupName) {
|
||||
try (Connection connection = securityDataSource.getConnection()) {
|
||||
dslContext = DSL.using(connection, settings);
|
||||
|
||||
return dslContext.select()
|
||||
.from(USER_GROUP)
|
||||
.where(USER_GROUP.NAME.eq(groupName))
|
||||
.fetch()
|
||||
.getValue(0, USER_GROUP.USER_GROUP_ID);
|
||||
}
|
||||
catch (SQLException e) {
|
||||
throw new RuntimeException("Failed to get user_group_id from user_group table", e);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
Queries with security datasource
|
||||
*/
|
||||
private <R extends Record> void insertSecurityRecord(Table<R> table,
|
||||
TableField<R, String> field1, TableField<R, String> field2, TableField<R, String> field3,
|
||||
String value1, String value2, String value3) {
|
||||
try (Connection connection = securityDataSource.getConnection()) {
|
||||
dslContext = DSL.using(connection, settings);
|
||||
dslContext.insertInto(table, field1, field2, field3)
|
||||
.values(value1, value2, value3)
|
||||
.execute();
|
||||
}
|
||||
catch (SQLException e) {
|
||||
throw new RuntimeException("Failed to delete record", e);
|
||||
}
|
||||
}
|
||||
|
||||
private <R extends Record> void deleteSecurityRecord(Table<R> table, TableField<R, String> field, String value) {
|
||||
try (Connection connection = securityDataSource.getConnection()) {
|
||||
dslContext = DSL.using(connection, settings);
|
||||
dslContext.delete(table)
|
||||
.where(field.eq(value))
|
||||
.execute();
|
||||
}
|
||||
catch (SQLException e) {
|
||||
throw new RuntimeException("Failed to delete record", e);
|
||||
}
|
||||
}
|
||||
|
||||
public void insertUser(String username, String password, String email, String orgId, String groupId) {
|
||||
//TODO SUPPORT-3761
|
||||
try (Connection connection = securityDataSource.getConnection()) {
|
||||
String userId = generateId();
|
||||
dslContext = DSL.using(connection, settings);
|
||||
dslContext.batch(
|
||||
dslContext
|
||||
.insertInto(USER_ACCOUNT,
|
||||
USER_ACCOUNT.USER_ACCOUNT_ID, USER_ACCOUNT.USERNAME, USER_ACCOUNT.EMAIL,
|
||||
USER_ACCOUNT.FIRST_NAME, USER_ACCOUNT.LAST_NAME, USER_ACCOUNT.ORG_UNIT_ID)
|
||||
.values(userId, username, email, username, username, orgId),
|
||||
dslContext
|
||||
.insertInto(SIMPLE_CREDENTIALS,
|
||||
SIMPLE_CREDENTIALS.USER_ACCOUNT_ID, SIMPLE_CREDENTIALS.PASSWORD)
|
||||
.values(userId, password),
|
||||
dslContext.insertInto(LINK_USER_ACCOUNT_USER_GROUP, LINK_USER_ACCOUNT_USER_GROUP.LINK_USER_ACCOUNT_USER_GROUP_ID,
|
||||
LINK_USER_ACCOUNT_USER_GROUP.USER_ACCOUNT_ID, LINK_USER_ACCOUNT_USER_GROUP.USER_GROUP_ID)
|
||||
.values(generateId(), userId, groupId))
|
||||
.execute();
|
||||
}
|
||||
catch (SQLException e) {
|
||||
throw new RuntimeException("Failed to insert user", e);
|
||||
}
|
||||
}
|
||||
|
||||
public void deleteTestOrg(String orgName) {
|
||||
deleteSecurityRecord(ORG_UNIT, ORG_UNIT.NAME, orgName);
|
||||
}
|
||||
|
||||
public void createTestOrg(String orgName) {
|
||||
insertSecurityRecord(ORG_UNIT, ORG_UNIT.ID, ORG_UNIT.NAME, ORG_UNIT.CODE, generateId(), orgName, orgName);
|
||||
}
|
||||
|
||||
public void createParentAndChildOrgs(String orgName1, String orgName2) {
|
||||
try (Connection connection = securityDataSource.getConnection()) {
|
||||
String parentOrgId = generateId();
|
||||
dslContext = DSL.using(connection, settings);
|
||||
dslContext.batch(
|
||||
dslContext.insertInto(ORG_UNIT, ORG_UNIT.ID, ORG_UNIT.NAME, ORG_UNIT.CODE)
|
||||
.values(parentOrgId, orgName1, orgName1),
|
||||
dslContext.insertInto(ORG_UNIT, ORG_UNIT.ID, ORG_UNIT.NAME, ORG_UNIT.CODE, ORG_UNIT.PARENT_ID)
|
||||
.values(generateId(), orgName2, orgName2, parentOrgId))
|
||||
.execute();
|
||||
}
|
||||
catch (SQLException e) {
|
||||
throw new RuntimeException("Failed to create organizations", e);
|
||||
}
|
||||
}
|
||||
|
||||
public void deleteTestUser(String userName) {
|
||||
deleteSecurityRecord(USER_ACCOUNT, USER_ACCOUNT.FIRST_NAME, userName);
|
||||
}
|
||||
|
||||
public void createUser(String username, String organizationID) {
|
||||
String userAccountId = generateId();
|
||||
try (Connection connection = securityDataSource.getConnection()) {
|
||||
dslContext = DSL.using(connection, settings);
|
||||
dslContext.batch(
|
||||
dslContext
|
||||
.insertInto(USER_ACCOUNT,
|
||||
USER_ACCOUNT.USER_ACCOUNT_ID, USER_ACCOUNT.USERNAME, USER_ACCOUNT.EMAIL,
|
||||
USER_ACCOUNT.FIRST_NAME, USER_ACCOUNT.LAST_NAME, USER_ACCOUNT.MIDDLE_NAME,
|
||||
USER_ACCOUNT.ORG_UNIT_ID)
|
||||
.values(userAccountId, username, username + "@test.com", username, username, username, organizationID),
|
||||
dslContext
|
||||
.insertInto(SIMPLE_CREDENTIALS,
|
||||
SIMPLE_CREDENTIALS.USER_ACCOUNT_ID, SIMPLE_CREDENTIALS.PASSWORD)
|
||||
.values(userAccountId, username))
|
||||
.execute();
|
||||
}
|
||||
catch (SQLException e) {
|
||||
throw new RuntimeException("Failed to create user", e);
|
||||
}
|
||||
}
|
||||
|
||||
public void createGroupBindRoles(String groupName, String accessLevel, String... roles) {
|
||||
String groupId = generateId();
|
||||
try (Connection connection = securityDataSource.getConnection()) {
|
||||
dslContext = DSL.using(connection, settings);
|
||||
dslContext.insertInto(USER_GROUP, USER_GROUP.NAME, USER_GROUP.USER_GROUP_ID, USER_GROUP.ACCESS_LEVEL_ID)
|
||||
.values(groupName, groupId, accessLevel)
|
||||
.execute();
|
||||
|
||||
Arrays.asList(roles).forEach(role -> bindRoleToGroup(role, groupId));
|
||||
}
|
||||
catch (SQLException e) {
|
||||
throw new RuntimeException("Failed to create Group");
|
||||
}
|
||||
}
|
||||
|
||||
public void createRoleBindGroups(String roleName, String... groupIds) {
|
||||
String userRoleId = generateId();
|
||||
try (Connection connection = securityDataSource.getConnection()) {
|
||||
dslContext = DSL.using(connection, settings);
|
||||
dslContext.insertInto(USER_ROLE, USER_ROLE.NAME, USER_ROLE.USER_ROLE_ID)
|
||||
.values(roleName, userRoleId)
|
||||
.execute();
|
||||
|
||||
Arrays.asList(groupIds).forEach(groupId -> bindRoleToGroup(userRoleId, groupId));
|
||||
}
|
||||
catch (SQLException e) {
|
||||
throw new RuntimeException("Failed to create role");
|
||||
}
|
||||
}
|
||||
|
||||
public void createUserBindGroups(String userName, String organizationID, String... groupIDs) {
|
||||
String userAccountId = generateId();
|
||||
try (Connection connection = securityDataSource.getConnection()) {
|
||||
dslContext = DSL.using(connection, settings);
|
||||
dslContext.batch(
|
||||
dslContext.insertInto(USER_ACCOUNT, USER_ACCOUNT.USER_ACCOUNT_ID, USER_ACCOUNT.EMAIL,
|
||||
USER_ACCOUNT.FIRST_NAME,
|
||||
USER_ACCOUNT.LAST_NAME, USER_ACCOUNT.MIDDLE_NAME, USER_ACCOUNT.ORG_UNIT_ID,
|
||||
USER_ACCOUNT.USERNAME)
|
||||
.values(userAccountId, userName + "@test.com", userName, userName, userName,
|
||||
organizationID, userName),
|
||||
dslContext.insertInto(SIMPLE_CREDENTIALS, SIMPLE_CREDENTIALS.USER_ACCOUNT_ID,
|
||||
SIMPLE_CREDENTIALS.PASSWORD)
|
||||
.values(userAccountId, userName))
|
||||
.execute();
|
||||
|
||||
Arrays.asList(groupIDs).forEach(group -> bindGroupToUser(group, userAccountId));
|
||||
}
|
||||
catch (SQLException e) {
|
||||
throw new RuntimeException("Failed to create user", e);
|
||||
}
|
||||
}
|
||||
|
||||
private void bindRoleToGroup(String roleId, String groupId) {
|
||||
String linkUserGroupUserRoleId = generateId();
|
||||
dslContext.insertInto(LINK_USER_GROUP_USER_ROLE,
|
||||
LINK_USER_GROUP_USER_ROLE.LINK_USER_GROUP_USER_ROLE_ID,
|
||||
LINK_USER_GROUP_USER_ROLE.USER_GROUP_ID, LINK_USER_GROUP_USER_ROLE.USER_ROLE_ID)
|
||||
.values(linkUserGroupUserRoleId, groupId, roleId)
|
||||
.execute();
|
||||
}
|
||||
|
||||
private void bindGroupToUser(String groupId, String userAccountId) {
|
||||
String linkUserAccountUserGroupId = generateId();
|
||||
|
||||
dslContext.insertInto(LINK_USER_ACCOUNT_USER_GROUP,
|
||||
LINK_USER_ACCOUNT_USER_GROUP.LINK_USER_ACCOUNT_USER_GROUP_ID,
|
||||
LINK_USER_ACCOUNT_USER_GROUP.USER_ACCOUNT_ID,
|
||||
LINK_USER_ACCOUNT_USER_GROUP.USER_GROUP_ID)
|
||||
.values(linkUserAccountUserGroupId, userAccountId, groupId)
|
||||
.execute();
|
||||
}
|
||||
|
||||
public void deleteLinkedRolesFromGroup(String groupId) {
|
||||
try (Connection connection = securityDataSource.getConnection()) {
|
||||
dslContext = DSL.using(connection, settings);
|
||||
dslContext.delete(LINK_USER_GROUP_USER_ROLE)
|
||||
.where(LINK_USER_GROUP_USER_ROLE.USER_ROLE_ID.eq(groupId))
|
||||
.execute();
|
||||
}
|
||||
catch (SQLException e) {
|
||||
throw new RuntimeException("Failed to delete linked group roles", e);
|
||||
}
|
||||
}
|
||||
|
||||
public void deleteLinkedGroupsFromRole(String roleId) {
|
||||
try (Connection connection = securityDataSource.getConnection()) {
|
||||
dslContext = DSL.using(connection, settings);
|
||||
dslContext.delete(LINK_USER_GROUP_USER_ROLE)
|
||||
.where(LINK_USER_GROUP_USER_ROLE.USER_ROLE_ID.eq(roleId))
|
||||
.execute();
|
||||
}
|
||||
catch (SQLException e) {
|
||||
throw new RuntimeException("Failed to delete linked role groups", e);
|
||||
}
|
||||
}
|
||||
|
||||
public void deleteUserLinkedGroups(String userAccountID) {
|
||||
try (Connection connection = securityDataSource.getConnection()) {
|
||||
dslContext = DSL.using(connection, settings);
|
||||
dslContext.delete(LINK_USER_ACCOUNT_USER_GROUP)
|
||||
.where(LINK_USER_ACCOUNT_USER_GROUP.USER_ACCOUNT_ID.eq(userAccountID))
|
||||
.execute();
|
||||
}
|
||||
catch (SQLException e) {
|
||||
throw new RuntimeException("Failed to delete linked user groups", e);
|
||||
}
|
||||
}
|
||||
|
||||
public void deleteTestGroup(String groupName) {
|
||||
deleteSecurityRecord(USER_GROUP, USER_GROUP.NAME, groupName);
|
||||
}
|
||||
|
||||
public void createTestGroup(String groupName, String accessLevelId) {
|
||||
insertSecurityRecord(USER_GROUP, USER_GROUP.USER_GROUP_ID, USER_GROUP.NAME, USER_GROUP.ACCESS_LEVEL_ID,
|
||||
generateId(), groupName, accessLevelId);
|
||||
}
|
||||
|
||||
public void createBindGroupRole(String name, String groupId, String accessLevelId, String roleId) {
|
||||
try (Connection connection = securityDataSource.getConnection()) {
|
||||
dslContext = DSL.using(connection, settings);
|
||||
dslContext.batch(
|
||||
dslContext.insertInto(USER_GROUP, USER_GROUP.USER_GROUP_ID, USER_GROUP.NAME, USER_GROUP.ACCESS_LEVEL_ID)
|
||||
.values(groupId, name, accessLevelId),
|
||||
dslContext.insertInto(USER_ROLE, USER_ROLE.USER_ROLE_ID, USER_ROLE.NAME)
|
||||
.values(roleId, name),
|
||||
dslContext.insertInto(LINK_USER_GROUP_USER_ROLE, LINK_USER_GROUP_USER_ROLE.LINK_USER_GROUP_USER_ROLE_ID,
|
||||
LINK_USER_GROUP_USER_ROLE.USER_GROUP_ID, LINK_USER_GROUP_USER_ROLE.USER_ROLE_ID)
|
||||
.values(generateId(), groupId, roleId))
|
||||
.execute();
|
||||
}
|
||||
catch (SQLException e) {
|
||||
throw new RuntimeException("Failed to create and bind group with role", e);
|
||||
}
|
||||
}
|
||||
|
||||
public void deleteUserGroupRole(String name, String groupId, String roleId) {
|
||||
try (Connection connection = securityDataSource.getConnection()) {
|
||||
dslContext = DSL.using(connection, settings);
|
||||
dslContext.batch(
|
||||
dslContext.delete(USER_ACCOUNT)
|
||||
.where(USER_ACCOUNT.FIRST_NAME.eq(name)),
|
||||
dslContext.delete(USER_GROUP)
|
||||
.where(USER_GROUP.USER_GROUP_ID.eq(groupId)),
|
||||
dslContext.delete(USER_ROLE)
|
||||
.where(USER_ROLE.USER_ROLE_ID.eq(roleId)))
|
||||
.execute();
|
||||
}
|
||||
catch (SQLException e) {
|
||||
throw new RuntimeException("Failed to delete user, group, role", e);
|
||||
}
|
||||
}
|
||||
|
||||
public void linkRoleToAuthority(String roleId, String authorityId) {
|
||||
insertSecurityRecord(LINK_USER_ROLE_AUTHORITY, LINK_USER_ROLE_AUTHORITY.USER_ROLE_AUTHORITY_ID,
|
||||
LINK_USER_ROLE_AUTHORITY.USER_ROLE_ID, LINK_USER_ROLE_AUTHORITY.AUTHORITY_ID,
|
||||
generateId(), roleId, authorityId);
|
||||
}
|
||||
|
||||
public void deleteTestRole(String roleName) {
|
||||
deleteSecurityRecord(USER_ROLE, USER_ROLE.NAME, roleName);
|
||||
}
|
||||
|
||||
public void createTestRole(String roleName) {
|
||||
try (Connection connection = securityDataSource.getConnection()) {
|
||||
dslContext = DSL.using(connection, settings);
|
||||
dslContext.insertInto(USER_ROLE, USER_ROLE.USER_ROLE_ID, USER_ROLE.NAME)
|
||||
.values(generateId(), roleName)
|
||||
.execute();
|
||||
}
|
||||
catch (SQLException e) {
|
||||
throw new RuntimeException("Failed to create role", e);
|
||||
}
|
||||
}
|
||||
|
||||
public boolean hasUserByData(String username, String email) {
|
||||
try (Connection connection = securityDataSource.getConnection()) {
|
||||
dslContext = DSL.using(connection, settings);
|
||||
int count = dslContext.selectCount()
|
||||
.from(USER_ACCOUNT)
|
||||
.where(USER_ACCOUNT.EMAIL.eq(email))
|
||||
.and(USER_ACCOUNT.FIRST_NAME.eq(username))
|
||||
.and(USER_ACCOUNT.LAST_NAME.eq(username))
|
||||
.and(USER_ACCOUNT.MIDDLE_NAME.eq(username))
|
||||
.execute();
|
||||
|
||||
return count == 1;
|
||||
}
|
||||
catch (SQLException e) {
|
||||
throw new RuntimeException("Failed to fetch user count", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
21
test/src/test/java/old/util/PropertyManager.java
Normal file
21
test/src/test/java/old/util/PropertyManager.java
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
package old.util;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.util.Properties;
|
||||
/**
|
||||
* @author: besedin
|
||||
*/
|
||||
public final class PropertyManager {
|
||||
|
||||
private static final Properties property = new Properties();
|
||||
private static final String propFileName = "test.properties";
|
||||
|
||||
private PropertyManager() {
|
||||
}
|
||||
|
||||
public static Properties getProperties() throws IOException {
|
||||
InputStream inputStream = PropertyManager.class.getClassLoader().getResourceAsStream(propFileName);
|
||||
property.load(inputStream);
|
||||
return property;
|
||||
}
|
||||
}
|
||||
61
test/src/test/java/pages/AuthoritiesPage.java
Normal file
61
test/src/test/java/pages/AuthoritiesPage.java
Normal file
|
|
@ -0,0 +1,61 @@
|
|||
package pages;
|
||||
|
||||
import core.BasePage;
|
||||
import org.openqa.selenium.By;
|
||||
import org.openqa.selenium.WebDriver;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
/**
|
||||
* @author kote
|
||||
*/
|
||||
public class AuthoritiesPage extends BasePage {
|
||||
|
||||
private static final String ARROW_BY_SIBLING_LABEL =
|
||||
"//span[contains(@class,'ag-row-group')][span[contains(.,'%s')]]//span[contains(@class,'closed')]";
|
||||
private static final String ACTION_BY_NAME = "//static-column-tree-grid//*[text()='%s']";
|
||||
private static final String BUTTON_BY_NAME = "//button[contains(.,'%s')]";
|
||||
private static final String BUTTON_ON_DIALOG_BY_NAME = "//div[@class='modal-body']//button[contains(.,'%s')]";
|
||||
private static final String MODAL_TITLE_BY_NAME = "//*[@class='modal-title'][contains(.,'%s')]";
|
||||
private static final String ROLE_BY_NAME = "//static-column-grid//div[@class='ag-cell-wrapper']//span[contains(.,'%s')]";
|
||||
|
||||
private static final By COMBOBOX_INPUT = By.xpath(
|
||||
"//combo-box//div[contains(@class,'selectize-input')]//input");
|
||||
|
||||
public AuthoritiesPage(WebDriver browser) {
|
||||
super(browser, "/#/user-management/authorities");
|
||||
}
|
||||
|
||||
public void openActionTree(String... actions) {
|
||||
Arrays.asList(actions)
|
||||
.forEach(action -> waitForElementToBeClickable(getBy(ARROW_BY_SIBLING_LABEL, action)).click());
|
||||
}
|
||||
|
||||
public void clickOnAction(String action) {
|
||||
waitForElementToBeClickable(getBy(ACTION_BY_NAME, action)).click();
|
||||
}
|
||||
|
||||
public void clickOnButton(String name) {
|
||||
waitForElementToBeClickable(getBy(BUTTON_BY_NAME, name)).click();
|
||||
}
|
||||
|
||||
public void clickOnButtonOnDialog(String name) {
|
||||
waitForElementToBeClickable(getBy(BUTTON_ON_DIALOG_BY_NAME, name)).click();
|
||||
}
|
||||
|
||||
public boolean isDialogOpened(String title) {
|
||||
return isPresent(getBy(MODAL_TITLE_BY_NAME, title));
|
||||
}
|
||||
|
||||
public void selectRole(String value) {
|
||||
typeAndSelectValue(COMBOBOX_INPUT, value);
|
||||
}
|
||||
|
||||
public void clickOnRole(String role) {
|
||||
waitForElementToBeClickable(getBy(ROLE_BY_NAME, role)).click();
|
||||
}
|
||||
|
||||
public boolean isRoleOnTheList(String role) {
|
||||
return isPresent(getBy(ROLE_BY_NAME, role));
|
||||
}
|
||||
}
|
||||
65
test/src/test/java/pages/OrganizationsPage.java
Normal file
65
test/src/test/java/pages/OrganizationsPage.java
Normal file
|
|
@ -0,0 +1,65 @@
|
|||
package pages;
|
||||
|
||||
import core.BasePage;
|
||||
import org.openqa.selenium.WebDriver;
|
||||
import org.openqa.selenium.WebElement;
|
||||
import org.openqa.selenium.support.FindBy;
|
||||
|
||||
/**
|
||||
* @author kote
|
||||
*/
|
||||
public class OrganizationsPage extends BasePage {
|
||||
|
||||
private static final String TEXT_ON_PAGE = "//text//div[contains(.,'%s')]";
|
||||
private static final String BUTTON_BY_NAME = "//button[contains(.,'%s')]";
|
||||
private static final String ROW_BY_TEXTS = "//div[@role='row'][.//span[contains(.,'%s')]][.//span[contains(.,'%s')]]";
|
||||
private static final String ARROW_IN_ROW = ROW_BY_TEXTS + "//span[@ref='eContracted']";
|
||||
private static final String MODAL_TITLE_BY_NAME = "//*[@class='modal-title'][contains(.,'%s')]";
|
||||
|
||||
@FindBy(xpath = "//div[label[span[contains(.,'Наименование')]]]//input")
|
||||
private WebElement orgName;
|
||||
@FindBy(xpath = "//div[label[span[contains(.,'Код')]]]//input")
|
||||
private WebElement orgCode;
|
||||
@FindBy(xpath = "//combo-box//div[contains(@class,'selectize-input')]")
|
||||
private WebElement parentOrg;
|
||||
|
||||
public OrganizationsPage(WebDriver browser) {
|
||||
super(browser, "/#/user-management/org-units");
|
||||
}
|
||||
|
||||
public boolean isTitleVisible(String title) {
|
||||
return isPresent(getBy(TEXT_ON_PAGE, title));
|
||||
}
|
||||
|
||||
public boolean isOrganizationVisible(String name, String code) {
|
||||
return isPresent(getBy(ROW_BY_TEXTS, name, code));
|
||||
}
|
||||
|
||||
public void clickOnButton(String name) {
|
||||
waitForElementToBeClickable(getBy(BUTTON_BY_NAME, name)).click();
|
||||
}
|
||||
|
||||
public void clickOnOrganization(String name, String code) {
|
||||
waitForElementToBeClickable(getBy(ROW_BY_TEXTS, name, code)).click();
|
||||
}
|
||||
|
||||
public void clickOnArrowInParentOrganization(String name, String code) {
|
||||
waitForElementToBeClickable(getBy(ARROW_IN_ROW, name, code)).click();
|
||||
}
|
||||
|
||||
public void editOrgName(String value) {
|
||||
editField(orgName, value);
|
||||
}
|
||||
|
||||
public void editOrgCode(String value) {
|
||||
editField(orgCode, value);
|
||||
}
|
||||
|
||||
public void selectParentOrg(String value) {
|
||||
clickAndSelectValue(parentOrg, value);
|
||||
}
|
||||
|
||||
public boolean isDialogOpened(String title) {
|
||||
return isPresent(getBy(MODAL_TITLE_BY_NAME, title));
|
||||
}
|
||||
}
|
||||
51
test/src/test/java/pages/ProcessesPage.java
Normal file
51
test/src/test/java/pages/ProcessesPage.java
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
package pages;
|
||||
|
||||
import core.BasePage;
|
||||
import org.openqa.selenium.WebDriver;
|
||||
|
||||
public class ProcessesPage extends BasePage {
|
||||
|
||||
private static final String SELECTED_TAB = "//div[@class='radio-content'][@title='%s']";
|
||||
private static final String TEXT_ON_PAGE = "//text//div[contains(.,'%s')]";
|
||||
private static final String TAB_INPUT_BY_NAME = "//label[.//span[contains(.,'%s')]]//input";
|
||||
private static final String BUTTON_BY_NAME = "//button[contains(.,'%s')]";
|
||||
private static final String LINK_BY_NAME = "//a[@class='nav-link'][contains(.,'%s')]";
|
||||
private static final String MODAL_TITLE_BY_NAME = "//*[@class='modal-title'][contains(.,'%s')]";
|
||||
private static final String PROCESS_IN_GRID_BY_ID = "//static-column-grid//div[@row-id='%s']";
|
||||
|
||||
public ProcessesPage(WebDriver browser) {
|
||||
super(browser, "/#/process/instance");
|
||||
}
|
||||
|
||||
public void clickOnButton(String name) {
|
||||
waitForElementToBeClickable(getBy(BUTTON_BY_NAME, name)).click();
|
||||
}
|
||||
|
||||
public void clickOnLink(String name) {
|
||||
waitForElementToBeClickable(getBy(LINK_BY_NAME, name)).click();
|
||||
}
|
||||
|
||||
public void clickOnTab(String name) {
|
||||
waitForElementToBeClickable(getBy(TAB_INPUT_BY_NAME, name)).click();
|
||||
}
|
||||
|
||||
public boolean isTabSelected(String name) {
|
||||
return isPresent(getBy(SELECTED_TAB, name));
|
||||
}
|
||||
|
||||
public boolean isTitleVisible(String title) {
|
||||
return isPresent(getBy(TEXT_ON_PAGE, title));
|
||||
}
|
||||
|
||||
public boolean isProcessVisibleInGrid(String processId) {
|
||||
return isPresent(getBy(PROCESS_IN_GRID_BY_ID, processId));
|
||||
}
|
||||
|
||||
public void clickOnProcessInGrid(String processId) {
|
||||
waitForElementToBeClickable(getBy(PROCESS_IN_GRID_BY_ID, processId)).click();
|
||||
}
|
||||
|
||||
public boolean isDialogOpened(String title) {
|
||||
return isPresent(getBy(MODAL_TITLE_BY_NAME, title));
|
||||
}
|
||||
}
|
||||
96
test/src/test/java/pages/RegistrationPage.java
Normal file
96
test/src/test/java/pages/RegistrationPage.java
Normal file
|
|
@ -0,0 +1,96 @@
|
|||
package pages;
|
||||
|
||||
import core.BasePage;
|
||||
import org.openqa.selenium.By;
|
||||
import org.openqa.selenium.WebDriver;
|
||||
import org.openqa.selenium.WebElement;
|
||||
import org.openqa.selenium.support.FindBy;
|
||||
|
||||
/**
|
||||
* @author kote
|
||||
*/
|
||||
public class RegistrationPage extends BasePage {
|
||||
|
||||
private static final By HEADER = By.xpath("//h2[contains(.,'Регистрация')]");
|
||||
private static final By PASSWORD_AS_TEXT = By.xpath("//input[@name='password'][@type='text']");
|
||||
private static final By PASSWORD_AS_SYMBOLS = By.xpath(
|
||||
"//input[@name='password'][@type='password']");
|
||||
private static final By REGISTRATION_BUTTON = By.xpath(
|
||||
"//div[@class='register-btn-box']//button");
|
||||
private static final By REGISTRATION_ERROR = By.xpath(
|
||||
"//div[@class='form-register']//div[contains(@class,'alert-danger')]");
|
||||
|
||||
private static final String COUNTRY_BY_NAME = "//span[@class='country-name'][contains(.,'%s')]";
|
||||
|
||||
@FindBy(xpath = "//a[contains(text(), 'Войти')]")
|
||||
private WebElement loginLink;
|
||||
@FindBy(xpath = "//span[@class='arrow-down']")
|
||||
private WebElement selectCountryArrowButton;
|
||||
@FindBy(xpath = "//div[@class='input-group-append'][.//i[contains(@class,'eye')]]")
|
||||
private WebElement passwordEyeButton;
|
||||
@FindBy(xpath = "//div//input[@name='username']")
|
||||
private WebElement usernameInput;
|
||||
@FindBy(xpath = "//div//input[@name='email']")
|
||||
private WebElement emailInput;
|
||||
@FindBy(xpath = "//div[contains(label,'Номер телефона')]//input")
|
||||
private WebElement phoneInput;
|
||||
@FindBy(xpath = "//div//input[@name='password']")
|
||||
private WebElement passwordInput;
|
||||
|
||||
public RegistrationPage(WebDriver browser) {
|
||||
super(browser, "/#/registration");
|
||||
}
|
||||
|
||||
public boolean isHeaderVisible() {
|
||||
return isPresent(HEADER);
|
||||
}
|
||||
|
||||
public void loginLinkClick() {
|
||||
loginLink.click();
|
||||
}
|
||||
|
||||
public String getMaskForPhone() {
|
||||
return phoneInput.getAttribute("value");
|
||||
}
|
||||
|
||||
public void selectCountry(String countryName) {
|
||||
selectCountryArrowButton.click();
|
||||
waitForVisibilityOfElementLocated(getBy(COUNTRY_BY_NAME, countryName)).click();
|
||||
}
|
||||
|
||||
public void passwordEyeButtonClick() {
|
||||
passwordEyeButton.click();
|
||||
}
|
||||
|
||||
public boolean isPasswordDisplayedAsText() {
|
||||
return isPresent(PASSWORD_AS_TEXT);
|
||||
}
|
||||
|
||||
public boolean isPasswordDisplayedAsSymbols() {
|
||||
return isPresent(PASSWORD_AS_SYMBOLS);
|
||||
}
|
||||
|
||||
public void editUsername(String value) {
|
||||
editField(usernameInput, value);
|
||||
}
|
||||
|
||||
public void editEmail(String value) {
|
||||
editField(emailInput, value);
|
||||
}
|
||||
|
||||
public void editPhone(String value) {
|
||||
editField(phoneInput, value);
|
||||
}
|
||||
|
||||
public void editPassword(String value) {
|
||||
editField(passwordInput, value);
|
||||
}
|
||||
|
||||
public void registerButtonClick() {
|
||||
waitForElementToBeClickable(REGISTRATION_BUTTON).click();
|
||||
}
|
||||
|
||||
public String getRegistrationErrorText() {
|
||||
return waitForVisibilityOfElementLocated(REGISTRATION_ERROR).getText();
|
||||
}
|
||||
}
|
||||
58
test/src/test/java/pages/ResetPasswordPage.java
Normal file
58
test/src/test/java/pages/ResetPasswordPage.java
Normal file
|
|
@ -0,0 +1,58 @@
|
|||
package pages;
|
||||
|
||||
import core.BasePage;
|
||||
import org.openqa.selenium.By;
|
||||
import org.openqa.selenium.WebDriver;
|
||||
import org.openqa.selenium.WebElement;
|
||||
import org.openqa.selenium.support.FindBy;
|
||||
|
||||
/**
|
||||
* @author kote
|
||||
*/
|
||||
public class ResetPasswordPage extends BasePage {
|
||||
|
||||
private static final By HEADER = By.xpath("//p[contains(.,'Вспомнили пароль?')]");
|
||||
private static final By RESET_BUTTON = By.xpath("//div[@class='reset-password-btn-box']//button");
|
||||
private static final By CHANGE_BUTTON = By.xpath("//button[contains(.,'Изменить пароль')]");
|
||||
|
||||
@FindBy(xpath = "//a[contains(text(), 'Войти')]")
|
||||
private WebElement loginLink;
|
||||
@FindBy(xpath = "//div//input[@name='email']")
|
||||
private WebElement emailInput;
|
||||
@FindBy(xpath = "//div//input[@name='password']")
|
||||
private WebElement passwordInput;
|
||||
@FindBy(xpath = "//div//input[@name='confirmPassword']")
|
||||
private WebElement confirmPasswordInput;
|
||||
|
||||
public ResetPasswordPage(WebDriver browser) {
|
||||
super(browser, "/#/reset-password");
|
||||
}
|
||||
|
||||
public boolean isHeaderVisible() {
|
||||
return isPresent(HEADER);
|
||||
}
|
||||
|
||||
public void loginLinkClick() {
|
||||
loginLink.click();
|
||||
}
|
||||
|
||||
public void resetButtonClick() {
|
||||
waitForElementToBeClickable(RESET_BUTTON).click();
|
||||
}
|
||||
|
||||
public void changeButtonClick() {
|
||||
waitForElementToBeClickable(CHANGE_BUTTON).click();
|
||||
}
|
||||
|
||||
public void editEmail(String value) {
|
||||
editField(emailInput, value);
|
||||
}
|
||||
|
||||
public void editPassword(String value) {
|
||||
editField(passwordInput, value);
|
||||
}
|
||||
|
||||
public void editConfirmPassword(String value) {
|
||||
editField(confirmPasswordInput, value);
|
||||
}
|
||||
}
|
||||
33
test/src/test/java/pages/TestProcessPage.java
Normal file
33
test/src/test/java/pages/TestProcessPage.java
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
package pages;
|
||||
|
||||
import core.BasePage;
|
||||
import org.openqa.selenium.WebDriver;
|
||||
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
public class TestProcessPage extends BasePage {
|
||||
|
||||
private static final String PAGE_TITLE_BY_TEXT = "//div[@class='form-group']//*[text()='%s']";
|
||||
private static final String BUTTON_BY_NAME = "//button[contains(.,'%s')]";
|
||||
|
||||
public TestProcessPage(WebDriver browser) {
|
||||
super(browser, "/#/process/");
|
||||
}
|
||||
|
||||
public boolean isPageTitleVisible(String title) {
|
||||
return isPresent(getBy(PAGE_TITLE_BY_TEXT, title));
|
||||
}
|
||||
|
||||
public String getProcessId() {
|
||||
String currentUrl = driver.getCurrentUrl();
|
||||
Pattern pattern = Pattern.compile("process\\/(\\d+)");
|
||||
Matcher matcher = pattern.matcher(currentUrl);
|
||||
matcher.find();
|
||||
return matcher.group(1);
|
||||
}
|
||||
|
||||
public void clickOnButton(String name) {
|
||||
waitForElementToBeClickable(getBy(BUTTON_BY_NAME, name)).click();
|
||||
}
|
||||
}
|
||||
119
test/src/test/java/tests/AuthoritiesIT.java
Normal file
119
test/src/test/java/tests/AuthoritiesIT.java
Normal file
|
|
@ -0,0 +1,119 @@
|
|||
package tests;
|
||||
|
||||
import core.BaseTest;
|
||||
import core.Browser;
|
||||
import core.BrowserArgumentProvider;
|
||||
import org.junit.jupiter.api.AfterAll;
|
||||
import org.junit.jupiter.api.BeforeAll;
|
||||
import org.junit.jupiter.params.ParameterizedTest;
|
||||
import org.junit.jupiter.params.provider.ArgumentsSource;
|
||||
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
|
||||
import org.springframework.security.crypto.password.PasswordEncoder;
|
||||
import pages.AuthoritiesPage;
|
||||
import pages.InboxPage;
|
||||
import pages.LoginPage;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertFalse;
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
import static org.openqa.selenium.support.PageFactory.initElements;
|
||||
|
||||
/**
|
||||
* @author kote
|
||||
*/
|
||||
public class AuthoritiesIT extends BaseTest {
|
||||
|
||||
private static final String ADMINISTRATION = "Администрирование";
|
||||
private static final String AUTHORITIES = "Безопасность действий";
|
||||
private static final String ALLOW_FOR_ROLE = "Разрешить для роли";
|
||||
private static final String BPMN_ACTION = "BPMN";
|
||||
private static final String ADMIN_ACTION = "ADMIN";
|
||||
private static final String PROCESS_INSTANCE_ACTION = "PROCESS_INSTANCE";
|
||||
private static final String LIST_ACTION = "LIST";
|
||||
|
||||
private static final PasswordEncoder passwordEncoder = new BCryptPasswordEncoder(11);
|
||||
private static String generatedName;
|
||||
|
||||
public AuthoritiesIT() {
|
||||
super();
|
||||
}
|
||||
|
||||
@BeforeAll
|
||||
public static void beforeAll() {
|
||||
generatedName = generateName("userForAuthorities");
|
||||
String encodedPassword = passwordEncoder.encode(generatedName);
|
||||
String groupId = EXECUTION_MANAGER.insertGroupAndLinkedRole(generatedName);
|
||||
String userAccountId = EXECUTION_MANAGER.insertUser(generatedName, generatedName + "@test.ru", encodedPassword);
|
||||
EXECUTION_MANAGER.linkGroupToUser(userAccountId, groupId);
|
||||
}
|
||||
|
||||
@AfterAll
|
||||
public static void afterAll() {
|
||||
EXECUTION_MANAGER.deleteUserByEmail(generatedName);
|
||||
EXECUTION_MANAGER.deleteGroupByName(generatedName);
|
||||
EXECUTION_MANAGER.deleteRoleByName(generatedName);
|
||||
}
|
||||
|
||||
@ParameterizedTest
|
||||
@ArgumentsSource(BrowserArgumentProvider.class)
|
||||
public void checkPermissionsForRole(Browser browser) {
|
||||
//check action allowed for a role:
|
||||
InboxPage inboxPage = loginInAppByAdmin(browser);
|
||||
assertTrue(inboxPage.pageLoadSuccessfully());
|
||||
|
||||
inboxPage.clickOnMenu(ADMINISTRATION);
|
||||
inboxPage.clickOnSubMenu(AUTHORITIES);
|
||||
AuthoritiesPage authoritiesPage = initElements(driver, AuthoritiesPage.class);
|
||||
assertTrue(authoritiesPage.pageLoadSuccessfully());
|
||||
|
||||
authoritiesPage.openActionTree(BPMN_ACTION, ADMIN_ACTION, PROCESS_INSTANCE_ACTION);
|
||||
authoritiesPage.clickOnAction(LIST_ACTION);
|
||||
assertTrue(authoritiesPage.pageLoadSuccessfully());
|
||||
|
||||
authoritiesPage.clickOnButton(ALLOW_FOR_ROLE);
|
||||
assertTrue(authoritiesPage.isDialogOpened(ALLOW_FOR_ROLE));
|
||||
|
||||
authoritiesPage.selectRole(generatedName);
|
||||
authoritiesPage.clickOnButtonOnDialog("Разрешить");
|
||||
assertTrue(authoritiesPage.pageLoadSuccessfully());
|
||||
assertTrue(authoritiesPage.isRoleOnTheList(generatedName));
|
||||
|
||||
logout(inboxPage);
|
||||
LoginPage loginPage = initElements(driver, LoginPage.class);
|
||||
assertTrue(loginPage.pageLoadSuccessfully());
|
||||
|
||||
loginPage.typeLoginPasswordAndEnter(generatedName, generatedName);
|
||||
assertTrue(inboxPage.pageLoadSuccessfully());
|
||||
|
||||
inboxPage.clickOnMenu(ADMINISTRATION);
|
||||
assertTrue(inboxPage.isSubMenuVisible("Экземпляры процессов"));
|
||||
|
||||
//check action prohibited for a role:
|
||||
logout(inboxPage);
|
||||
reloginInAppByAdmin();
|
||||
assertTrue(inboxPage.pageLoadSuccessfully());
|
||||
|
||||
inboxPage.clickOnMenu(ADMINISTRATION);
|
||||
inboxPage.clickOnSubMenu(AUTHORITIES);
|
||||
assertTrue(authoritiesPage.pageLoadSuccessfully());
|
||||
|
||||
authoritiesPage.openActionTree(BPMN_ACTION, ADMIN_ACTION, PROCESS_INSTANCE_ACTION);
|
||||
authoritiesPage.clickOnAction(LIST_ACTION);
|
||||
assertTrue(authoritiesPage.pageLoadSuccessfully());
|
||||
|
||||
authoritiesPage.clickOnRole(generatedName);
|
||||
authoritiesPage.clickOnButton("Запретить");
|
||||
assertTrue(authoritiesPage.isDialogOpened("Подтверждение действия"));
|
||||
|
||||
authoritiesPage.clickOnButton("Да");
|
||||
assertTrue(authoritiesPage.pageLoadSuccessfully());
|
||||
assertFalse(authoritiesPage.isRoleOnTheList(generatedName));
|
||||
|
||||
//todo dev WEBBPMNEXT-9095
|
||||
/*logout(inboxPage);
|
||||
assertTrue(loginPage.pageLoadSuccessfully());
|
||||
|
||||
loginPage.typeLoginPasswordAndEnter(generatedName, generatedName);
|
||||
assertTrue(inboxPage.pageLoadSuccessfully());
|
||||
assertFalse(inboxPage.isMenuVisible(ADMINISTRATION));*/
|
||||
}
|
||||
}
|
||||
168
test/src/test/java/tests/LoginIT.java
Normal file
168
test/src/test/java/tests/LoginIT.java
Normal file
|
|
@ -0,0 +1,168 @@
|
|||
package tests;
|
||||
|
||||
import core.BaseTest;
|
||||
import core.Browser;
|
||||
import core.BrowserArgumentProvider;
|
||||
import org.junit.jupiter.api.AfterAll;
|
||||
import org.junit.jupiter.params.ParameterizedTest;
|
||||
import org.junit.jupiter.params.provider.ArgumentsSource;
|
||||
import pages.InboxPage;
|
||||
import pages.LoginPage;
|
||||
import pages.RegistrationPage;
|
||||
import pages.ResetPasswordPage;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
import static org.openqa.selenium.support.PageFactory.initElements;
|
||||
|
||||
/**
|
||||
* @author kote
|
||||
*/
|
||||
public class LoginIT extends BaseTest {
|
||||
|
||||
private static final String PART_FOR_NAME = "userForLogin";
|
||||
private static final String REG_EMAIL = "qa_new_account@mail.ru";
|
||||
private static final String RESET_EMAIL = "password_recovery_account@mail.ru";
|
||||
|
||||
public LoginIT() {
|
||||
super();
|
||||
}
|
||||
|
||||
@AfterAll
|
||||
public static void afterAll() {
|
||||
EXECUTION_MANAGER.deleteUserByEmail(REG_EMAIL);
|
||||
EXECUTION_MANAGER.deleteUserByEmail(RESET_EMAIL);
|
||||
}
|
||||
|
||||
@ParameterizedTest
|
||||
@ArgumentsSource(BrowserArgumentProvider.class)
|
||||
public void checkLoginWithWrongData(Browser browser) {
|
||||
LoginPage loginPage = openApp(browser);
|
||||
assertTrue(loginPage.pageLoadSuccessfully());
|
||||
|
||||
String wrongData = "wrong_test";
|
||||
loginPage.typeLoginPasswordAndEnter(wrongData, wrongData);
|
||||
assertEquals("Неправильный логин или пароль", loginPage.getLoginErrorText());
|
||||
}
|
||||
|
||||
@ParameterizedTest
|
||||
@ArgumentsSource(BrowserArgumentProvider.class)
|
||||
public void checkDisplayUserFio(Browser browser) {
|
||||
InboxPage inboxPage = loginInApp(browser);
|
||||
assertTrue(inboxPage.pageLoadSuccessfully());
|
||||
|
||||
inboxPage.clickOnMenu("Пользователь");
|
||||
assertEquals("Основной-Тестовый Пользователь", inboxPage.getUserFIO());
|
||||
}
|
||||
|
||||
@ParameterizedTest
|
||||
@ArgumentsSource(BrowserArgumentProvider.class)
|
||||
public void checkTransitionsBetweenForms(Browser browser) {
|
||||
LoginPage loginPage = openApp(browser);
|
||||
assertTrue(loginPage.pageLoadSuccessfully());
|
||||
|
||||
//check transition to registration page:
|
||||
loginPage.registrationLinkClick();
|
||||
RegistrationPage registrationPage = initElements(driver, RegistrationPage.class);
|
||||
assertTrue(registrationPage.pageLoadSuccessfully());
|
||||
assertTrue(registrationPage.isHeaderVisible());
|
||||
|
||||
//check phone mask:
|
||||
assertEquals("+7 ", registrationPage.getMaskForPhone());
|
||||
registrationPage.selectCountry("Albania");
|
||||
assertEquals("+355 ", registrationPage.getMaskForPhone());
|
||||
|
||||
//check password view:
|
||||
assertTrue(registrationPage.isPasswordDisplayedAsSymbols());
|
||||
registrationPage.passwordEyeButtonClick();
|
||||
assertTrue(registrationPage.isPasswordDisplayedAsText());
|
||||
|
||||
//check transition to login page from registration page:
|
||||
registrationPage.loginLinkClick();
|
||||
assertTrue(loginPage.pageLoadSuccessfully());
|
||||
assertTrue(loginPage.isHeaderVisible());
|
||||
|
||||
//check transition to password recovery page:
|
||||
loginPage.resetPasswordLinkClick();
|
||||
ResetPasswordPage resetPasswordPage = initElements(driver, ResetPasswordPage.class);
|
||||
assertTrue(resetPasswordPage.pageLoadSuccessfully());
|
||||
assertTrue(resetPasswordPage.isHeaderVisible());
|
||||
|
||||
//check transition to login page from password recovery page:
|
||||
resetPasswordPage.loginLinkClick();
|
||||
assertTrue(loginPage.pageLoadSuccessfully());
|
||||
assertTrue(loginPage.isHeaderVisible());
|
||||
}
|
||||
|
||||
@ParameterizedTest
|
||||
@ArgumentsSource(BrowserArgumentProvider.class)
|
||||
public void checkRegistration(Browser browser) {
|
||||
LoginPage loginPage = openApp(browser);
|
||||
assertTrue(loginPage.pageLoadSuccessfully());
|
||||
|
||||
loginPage.registrationLinkClick();
|
||||
RegistrationPage registrationPage = initElements(driver, RegistrationPage.class);
|
||||
assertTrue(registrationPage.pageLoadSuccessfully());
|
||||
|
||||
String logPas = generateName(PART_FOR_NAME);
|
||||
registrationPage.editUsername(logPas);
|
||||
registrationPage.editEmail("qa_test@micord.ru");
|
||||
registrationPage.editPhone("+79999999999");
|
||||
registrationPage.editPassword(logPas);
|
||||
registrationPage.registerButtonClick();
|
||||
registrationPage.waitForPageToLoad();
|
||||
assertEquals("Пользователь с данным почтовым адресом уже существует",
|
||||
registrationPage.getRegistrationErrorText());
|
||||
|
||||
registrationPage.editEmail(REG_EMAIL);
|
||||
registrationPage.registerButtonClick();
|
||||
assertTrue(registrationPage.pageLoadSuccessfully());
|
||||
|
||||
String id = EXECUTION_MANAGER.getUserAccountIdByLogin(logPas);
|
||||
String token = EXECUTION_MANAGER.getTokenByUserAccountId(id);
|
||||
String link = applicationUrl + "#confirm?link=" + token;
|
||||
driver.get(link);
|
||||
|
||||
registrationPage.loginLinkClick();
|
||||
assertTrue(loginPage.pageLoadSuccessfully());
|
||||
|
||||
loginPage.typeLoginPasswordAndEnter(logPas, logPas);
|
||||
InboxPage inboxPage = initElements(driver, InboxPage.class);
|
||||
assertTrue(inboxPage.pageLoadSuccessfully());
|
||||
}
|
||||
|
||||
@ParameterizedTest
|
||||
@ArgumentsSource(BrowserArgumentProvider.class)
|
||||
public void checkPasswordRecovery(Browser browser) {
|
||||
LoginPage loginPage = openApp(browser);
|
||||
assertTrue(loginPage.pageLoadSuccessfully());
|
||||
|
||||
String logPas = generateName(PART_FOR_NAME);
|
||||
EXECUTION_MANAGER.insertUser(logPas, RESET_EMAIL, logPas);
|
||||
//здесь создаем пользователя с незакодированным паролем, тк нам не нужно будет по нему логиниться
|
||||
|
||||
loginPage.resetPasswordLinkClick();
|
||||
ResetPasswordPage resetPasswordPage = initElements(driver, ResetPasswordPage.class);
|
||||
assertTrue(resetPasswordPage.pageLoadSuccessfully());
|
||||
|
||||
resetPasswordPage.editEmail(RESET_EMAIL);
|
||||
resetPasswordPage.resetButtonClick();
|
||||
assertTrue(resetPasswordPage.pageLoadSuccessfully());
|
||||
|
||||
String id = EXECUTION_MANAGER.getUserAccountIdByLogin(logPas);
|
||||
String token = EXECUTION_MANAGER.getTokenByUserAccountId(id);
|
||||
String link = applicationUrl + "#new-password?token=" + token;
|
||||
driver.get(link);
|
||||
|
||||
String newPass = generateName("NewPass");
|
||||
resetPasswordPage.editPassword(newPass);
|
||||
resetPasswordPage.editConfirmPassword(newPass);
|
||||
resetPasswordPage.changeButtonClick();
|
||||
assertTrue(resetPasswordPage.pageLoadSuccessfully());
|
||||
|
||||
resetPasswordPage.loginLinkClick();
|
||||
loginPage.typeLoginPasswordAndEnter(RESET_EMAIL, newPass);
|
||||
InboxPage inboxPage = initElements(driver, InboxPage.class);
|
||||
assertTrue(inboxPage.pageLoadSuccessfully());
|
||||
}
|
||||
}
|
||||
122
test/src/test/java/tests/OrganizationsIT.java
Normal file
122
test/src/test/java/tests/OrganizationsIT.java
Normal file
|
|
@ -0,0 +1,122 @@
|
|||
package tests;
|
||||
|
||||
import core.BaseTest;
|
||||
import core.Browser;
|
||||
import core.BrowserArgumentProvider;
|
||||
import org.junit.jupiter.api.AfterAll;
|
||||
import org.junit.jupiter.params.ParameterizedTest;
|
||||
import org.junit.jupiter.params.provider.ArgumentsSource;
|
||||
import pages.InboxPage;
|
||||
import pages.OrganizationsPage;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertFalse;
|
||||
import static org.openqa.selenium.support.PageFactory.initElements;
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
|
||||
/**
|
||||
* @author kote
|
||||
*/
|
||||
public class OrganizationsIT extends BaseTest {
|
||||
|
||||
private static final String CREATE = "Создать";
|
||||
private static final String EDIT = "Редактировать";
|
||||
private static final String SAVE = "Сохранить";
|
||||
private static final String PARENT_ORG_NAME = "Управление ЗАГС г. Казани";
|
||||
private static final String SUBSIDIARY_ORG_NAME = "ЗАГС Советского р-на";
|
||||
private static final String PART_FOR_CODE = "org_code_";
|
||||
|
||||
public OrganizationsIT() {
|
||||
super();
|
||||
}
|
||||
|
||||
@AfterAll
|
||||
public static void afterAll() {
|
||||
EXECUTION_MANAGER.deleteOrganizationByName(PARENT_ORG_NAME);
|
||||
EXECUTION_MANAGER.deleteOrganizationByName(SUBSIDIARY_ORG_NAME);
|
||||
}
|
||||
|
||||
@ParameterizedTest
|
||||
@ArgumentsSource(BrowserArgumentProvider.class)
|
||||
public void crudOrganizationAndSubsidiary(Browser browser) {
|
||||
InboxPage inboxPage = loginInAppByAdmin(browser);
|
||||
assertTrue(inboxPage.pageLoadSuccessfully());
|
||||
|
||||
inboxPage.clickOnMenu("Администрирование");
|
||||
inboxPage.clickOnSubMenu("Организации");
|
||||
OrganizationsPage organizationsPage = initElements(driver, OrganizationsPage.class);
|
||||
assertTrue(organizationsPage.pageLoadSuccessfully());
|
||||
assertTrue(organizationsPage.isTitleVisible("Администрирование организаций"));
|
||||
|
||||
//check create organization:
|
||||
organizationsPage.clickOnButton(CREATE);
|
||||
assertTrue(organizationsPage.pageLoadSuccessfully());
|
||||
|
||||
organizationsPage.editOrgName(PARENT_ORG_NAME);
|
||||
String parentOrgCode = generateName(PART_FOR_CODE);
|
||||
organizationsPage.editOrgCode(parentOrgCode);
|
||||
organizationsPage.clickOnButton(SAVE);
|
||||
assertTrue(organizationsPage.pageLoadSuccessfully());
|
||||
assertTrue(organizationsPage.isOrganizationVisible(PARENT_ORG_NAME, parentOrgCode));
|
||||
|
||||
//check create subsidiary:
|
||||
organizationsPage.clickOnButton(CREATE);
|
||||
assertTrue(organizationsPage.pageLoadSuccessfully());
|
||||
|
||||
organizationsPage.editOrgName(SUBSIDIARY_ORG_NAME);
|
||||
String subsidiaryOrgCode = generateName(PART_FOR_CODE);
|
||||
organizationsPage.editOrgCode(subsidiaryOrgCode);
|
||||
organizationsPage.selectParentOrg(PARENT_ORG_NAME);
|
||||
organizationsPage.clickOnButton(SAVE);
|
||||
assertTrue(organizationsPage.pageLoadSuccessfully());
|
||||
|
||||
organizationsPage.clickOnArrowInParentOrganization(PARENT_ORG_NAME, parentOrgCode);
|
||||
assertTrue(organizationsPage.isOrganizationVisible(SUBSIDIARY_ORG_NAME, subsidiaryOrgCode));
|
||||
|
||||
//check that a subsidiary cannot be the same as an organization:
|
||||
organizationsPage.clickOnOrganization(SUBSIDIARY_ORG_NAME, subsidiaryOrgCode);
|
||||
organizationsPage.clickOnButton(EDIT);
|
||||
assertTrue(organizationsPage.pageLoadSuccessfully());
|
||||
|
||||
organizationsPage.selectParentOrg(SUBSIDIARY_ORG_NAME);
|
||||
organizationsPage.clickOnButton(SAVE);
|
||||
organizationsPage.waitForPageToLoad();
|
||||
assertFalse(organizationsPage.thereIsNoError());
|
||||
assertTrue(organizationsPage.getErrorText().contains("Обнаружен цикл при попытке сменить родителя"));
|
||||
|
||||
//check edit subsidiary:
|
||||
organizationsPage.selectParentOrg(PARENT_ORG_NAME);
|
||||
String newSubsidiaryOrgCode = generateName(PART_FOR_CODE);
|
||||
organizationsPage.editOrgCode(newSubsidiaryOrgCode);
|
||||
organizationsPage.clickOnButton(SAVE);
|
||||
assertTrue(organizationsPage.pageLoadSuccessfully());
|
||||
|
||||
organizationsPage.clickOnArrowInParentOrganization(PARENT_ORG_NAME, parentOrgCode);
|
||||
assertTrue(organizationsPage.isOrganizationVisible(SUBSIDIARY_ORG_NAME, newSubsidiaryOrgCode));
|
||||
assertFalse(organizationsPage.isOrganizationVisible(PARENT_ORG_NAME, subsidiaryOrgCode));
|
||||
|
||||
//check edit parent organization:
|
||||
organizationsPage.clickOnOrganization(PARENT_ORG_NAME, parentOrgCode);
|
||||
organizationsPage.clickOnButton(EDIT);
|
||||
assertTrue(organizationsPage.pageLoadSuccessfully());
|
||||
|
||||
String newParentOrgCode = generateName(PART_FOR_CODE);
|
||||
organizationsPage.editOrgCode(newParentOrgCode);
|
||||
organizationsPage.clickOnButton(SAVE);
|
||||
assertTrue(organizationsPage.pageLoadSuccessfully());
|
||||
assertTrue(organizationsPage.isOrganizationVisible(PARENT_ORG_NAME, newParentOrgCode));
|
||||
assertFalse(organizationsPage.isOrganizationVisible(PARENT_ORG_NAME, parentOrgCode));
|
||||
|
||||
organizationsPage.clickOnArrowInParentOrganization(PARENT_ORG_NAME, newParentOrgCode);
|
||||
assertTrue(organizationsPage.isOrganizationVisible(SUBSIDIARY_ORG_NAME, newSubsidiaryOrgCode));
|
||||
|
||||
//check delete parent organization:
|
||||
organizationsPage.clickOnOrganization(PARENT_ORG_NAME, newParentOrgCode);
|
||||
organizationsPage.clickOnButton("Удалить");
|
||||
assertTrue(organizationsPage.isDialogOpened("Подтверждение действия"));
|
||||
|
||||
organizationsPage.clickOnButton("Да");
|
||||
assertTrue(organizationsPage.pageLoadSuccessfully());
|
||||
assertFalse(organizationsPage.isOrganizationVisible(PARENT_ORG_NAME, newParentOrgCode));
|
||||
assertFalse(organizationsPage.isOrganizationVisible(SUBSIDIARY_ORG_NAME, newSubsidiaryOrgCode));
|
||||
}
|
||||
}
|
||||
104
test/src/test/java/tests/ProcessesIT.java
Normal file
104
test/src/test/java/tests/ProcessesIT.java
Normal file
|
|
@ -0,0 +1,104 @@
|
|||
package tests;
|
||||
|
||||
import core.BaseTest;
|
||||
import core.Browser;
|
||||
import core.BrowserArgumentProvider;
|
||||
import org.junit.jupiter.params.ParameterizedTest;
|
||||
import org.junit.jupiter.params.provider.ArgumentsSource;
|
||||
import pages.InboxPage;
|
||||
import pages.ProcessesPage;
|
||||
import pages.TestProcessPage;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertFalse;
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
import static org.openqa.selenium.support.PageFactory.initElements;
|
||||
|
||||
/**
|
||||
* @author kote
|
||||
*/
|
||||
public class ProcessesIT extends BaseTest {
|
||||
|
||||
private static final String ADMINISTRATION = "Администрирование";
|
||||
private static final String PROCESSES_INSTANCES = "Экземпляры процессов";
|
||||
private static final String COMPLETED = "Завершенные";
|
||||
private static final String ABORTED = "Прерванные";
|
||||
private static final String TEST_PROCESS = "test_process";
|
||||
private static final String TEST_PAGE_TITLE = "Тестовая страница";
|
||||
|
||||
public ProcessesIT() {
|
||||
super();
|
||||
}
|
||||
|
||||
@ParameterizedTest
|
||||
@ArgumentsSource(BrowserArgumentProvider.class)
|
||||
public void checkActionsWithProcessesInstances(Browser browser) {
|
||||
InboxPage inboxPage = loginInAppByAdmin(browser);
|
||||
assertTrue(inboxPage.pageLoadSuccessfully());
|
||||
|
||||
//check start process:
|
||||
inboxPage.startProcess(TEST_PROCESS);
|
||||
TestProcessPage testProcessPage = initElements(driver, TestProcessPage.class);
|
||||
assertTrue(testProcessPage.pageLoadSuccessfully());
|
||||
assertTrue(testProcessPage.isPageTitleVisible(TEST_PAGE_TITLE));
|
||||
|
||||
String processId = testProcessPage.getProcessId();
|
||||
|
||||
//check active processes:
|
||||
inboxPage.clickOnMenu(ADMINISTRATION);
|
||||
inboxPage.clickOnSubMenu(PROCESSES_INSTANCES);
|
||||
ProcessesPage processesPage = initElements(driver, ProcessesPage.class);
|
||||
assertTrue(processesPage.pageLoadSuccessfully());
|
||||
assertTrue(processesPage.isTitleVisible("Процессы"));
|
||||
assertTrue(processesPage.isTabSelected("Активные"));
|
||||
assertTrue(processesPage.isProcessVisibleInGrid(processId));
|
||||
|
||||
//check view process instance:
|
||||
processesPage.clickOnProcessInGrid(processId);
|
||||
processesPage.clickOnButton("Просмотреть");
|
||||
assertTrue(processesPage.pageLoadSuccessfully());
|
||||
assertTrue(processesPage.isTitleVisible("Экземпляр процесса"));
|
||||
|
||||
processesPage.clickOnLink("Текст");
|
||||
assertTrue(processesPage.thereIsNoError());
|
||||
|
||||
processesPage.clickOnLink("Изображение");
|
||||
assertTrue(processesPage.thereIsNoError());
|
||||
|
||||
processesPage.clickOnButton("Закрыть");
|
||||
assertTrue(processesPage.pageLoadSuccessfully());
|
||||
|
||||
//check aborted processes:
|
||||
processesPage.clickOnProcessInGrid(processId);
|
||||
processesPage.clickOnButton("Прервать");
|
||||
assertTrue(processesPage.isDialogOpened("Подтверждение действия"));
|
||||
|
||||
processesPage.clickOnButton("Да");
|
||||
assertTrue(processesPage.pageLoadSuccessfully());
|
||||
assertFalse(processesPage.isProcessVisibleInGrid(processId));
|
||||
|
||||
processesPage.clickOnTab(ABORTED);
|
||||
assertTrue(processesPage.pageLoadSuccessfully());
|
||||
assertTrue(processesPage.isTabSelected(ABORTED));
|
||||
assertTrue(processesPage.isProcessVisibleInGrid(processId));
|
||||
|
||||
//check complete process:
|
||||
inboxPage.startProcess(TEST_PROCESS);
|
||||
assertTrue(testProcessPage.pageLoadSuccessfully());
|
||||
|
||||
String newProcessId = testProcessPage.getProcessId();
|
||||
testProcessPage.clickOnButton("Завершить");
|
||||
assertTrue(inboxPage.pageLoadSuccessfully());
|
||||
assertFalse(testProcessPage.isPageTitleVisible(TEST_PAGE_TITLE));
|
||||
|
||||
//check completed processes:
|
||||
inboxPage.clickOnMenu(ADMINISTRATION);
|
||||
inboxPage.clickOnSubMenu(PROCESSES_INSTANCES);
|
||||
assertTrue(processesPage.pageLoadSuccessfully());
|
||||
assertFalse(processesPage.isProcessVisibleInGrid(newProcessId));
|
||||
|
||||
processesPage.clickOnTab(COMPLETED);
|
||||
assertTrue(processesPage.pageLoadSuccessfully());
|
||||
assertTrue(processesPage.isTabSelected(COMPLETED));
|
||||
assertTrue(processesPage.isProcessVisibleInGrid(newProcessId));
|
||||
}
|
||||
}
|
||||
29
test/src/test/resources/junit-platform.properties
Normal file
29
test/src/test/resources/junit-platform.properties
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
# параметр включения/выключения параллельного выполнения тестов.
|
||||
junit.jupiter.execution.parallel.enabled = true
|
||||
# протестирована стратегия параллельности fixed и dynamic (оба режима на параллельность запуска тестов не повлияли).
|
||||
junit.jupiter.execution.parallel.config.strategy = dynamic
|
||||
# параметр желаемого параллелизма (проверено с разными значениями (1-10), на параллельность запуска тестов не повлияло).
|
||||
# junit.jupiter.execution.parallel.config.dynamic.factor = 1.0
|
||||
# параметр максимального размера пула (проверено с разными значениями (1-10), на параллельность запуска тестов не повлияло).
|
||||
junit.jupiter.execution.parallel.config.dynamic.max-pool-size-factor = 6.0
|
||||
# параллель внутри класса (настроено последовательно, т.к. параллельно создаётся очередь и падает ошибка Failed to create driver).
|
||||
junit.jupiter.execution.parallel.mode.default = concurrent
|
||||
# параллель внутри сьюта
|
||||
#junit.jupiter.execution.parallel.mode.classes.default = concurrent
|
||||
|
||||
# возможные стратегии параллельности dynamic, fixed и custom:
|
||||
# dynamic - вычисляет желаемый параллелизм на основе количества доступных процессоров / ядер, умноженного на коэф-т dynamic.factor. Настраиваемые значения:
|
||||
# junit.jupiter.execution.parallel.config.dynamic.factor параметр конфигурации (по умолчанию имеет значение 1) - положительное десятичное число
|
||||
# junit.jupiter.execution.parallel.config.dynamic.max-pool-size-factor параметр конфигурации можно использовать для ограничения максимального количества потоков
|
||||
# (по умолчанию 256 + значение junit.jupiter.execution.parallel.config.dynamic.factor, умноженное на количество доступных процессоров / ядер) - положительное десятичное число, должно быть больше или равно 1.0
|
||||
# fixed - устанавливает закрепленное значение параллелизма с помощью коэф-тов:
|
||||
# junit.jupiter.execution.parallel.config.fixed.parallelism желаемый параллелизм для fixed стратегии (нет значения по умолчанию) - положительное целое число
|
||||
# junit.jupiter.execution.parallel.config.fixed.max-pool-size желаемый максимальный размер пула (256 + значение junit.jupiter.execution.parallel.config.fixed.parallelism) - положительное целое число,
|
||||
# должно быть больше или равно junit.jupiter.execution.parallel.config.fixed.parallelism
|
||||
# custom - пользовательская реализацию с помощью обязательного junit.jupiter.execution.parallel.config.custom.class.
|
||||
# Пример класса кастомной настройки: https://github.com/sormuras/junit5-1858-fixed-parallelism/commit/1fb2646711c6d59ad68241822e1a609db417c938#diff-d74841653c5af688ce3524c83cc4cf62bad536c64493e888c208ee2a750b6b88
|
||||
#
|
||||
# параметр junit.jupiter.execution.parallel.mode.default настраивает параллельность внутри класса (тесты)
|
||||
# параметр junit.jupiter.execution.parallel.mode.classes.default настраивает параллельность внутри сьюта (IT классы)
|
||||
# concurrent - паралльный запуск
|
||||
# same_thread - последовательный запуск
|
||||
18
test/src/test/resources/logback.xml
Normal file
18
test/src/test/resources/logback.xml
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<configuration>
|
||||
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
||||
<encoder>
|
||||
<pattern>[%-4level] %msg%n</pattern>
|
||||
</encoder>
|
||||
</appender>
|
||||
|
||||
<logger name="io.github.bonigarcia" level="DEBUG" />
|
||||
<logger name="io" level="WARN" />
|
||||
<logger name="org" level="WARN" />
|
||||
<logger name="com" level="WARN" />
|
||||
|
||||
<root level="INFO">
|
||||
<appender-ref ref="STDOUT" />
|
||||
</root>
|
||||
|
||||
</configuration>
|
||||
15
test/src/test/resources/test.properties
Normal file
15
test/src/test/resources/test.properties
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
login = qa_test
|
||||
password = qa_test
|
||||
|
||||
demo_login = demo@example.com
|
||||
demo_password = demo
|
||||
|
||||
qa_admin_login = qa_admin
|
||||
qa_admin_password = qa_admin
|
||||
|
||||
tt_kerberos_url = http://desktop-k0nottv.asd.center.cg:8082/task-tracker
|
||||
|
||||
security_ldap_sync_db_url = jdbc:postgresql://185.171.13.99:5432/sec_db_task_tracker_ldap_sync
|
||||
security_ldap_sync_db_user = sec_user_tt
|
||||
security_ldap_sync_db_password = sec_user_tt
|
||||
database_driver = org.postgresql.Driver
|
||||
Loading…
Add table
Add a link
Reference in a new issue