Code development platform for open source projects from the European Union institutions

Skip to content
Snippets Groups Projects
Commit c0acbdcd authored by Mihai BOZ's avatar Mihai BOZ
Browse files

added Matselect wrapper, added EditGroupsPage

parent 19020167
No related branches found
No related tags found
No related merge requests found
Pipeline #97446 passed with warnings
Showing
with 308 additions and 16 deletions
package ddsl.dcomponents;
import ddsl.dobjects.DButton;
import ddsl.dobjects.DInput;
import ddsl.dobjects.DSelect;
import ddsl.dobjects.DWait;
import ddsl.dobjects.*;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import utils.TestRunData;
......@@ -35,4 +32,8 @@ public class DComponent {
return new DSelect(driver, element);
}
protected DMatSelect weToMatDSelect(WebElement element) {
return new DMatSelect(driver, element);
}
}
package ddsl.dcomponents.commonComponents.subcategoryTab;
import ddsl.dcomponents.ConfirmationDialog;
import ddsl.dcomponents.DComponent;
import ddsl.dcomponents.Grid.SmallGrid;
import org.apache.poi.ss.formula.functions.T;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
......@@ -31,16 +31,23 @@ public class SubcategoryTabComponent extends DComponent {
return new SmallGrid(driver, rightSidePanel);
}
public DComponent create() throws Exception {
public void create() throws Exception {
weToDButton(createBtn).click();
return new DComponent(driver);
}
public T edit(String columnName, String value) throws Exception {
protected void edit(String columnName, String value) throws Exception {
WebElement tobeEdited = getGrid().searchAndGetElementInColumn(columnName, value);
tobeEdited.click();
wait.forElementToBeEnabled(editBtn);
weToDButton(editBtn).click();
return new T();
}
protected void delete(String columnName, String value) throws Exception {
WebElement tobeDeleted = getGrid().searchAndGetElementInColumn(columnName, value);
tobeDeleted.click();
wait.forElementToBeEnabled(deleteBtn);
weToDButton(deleteBtn).click();
ConfirmationDialog confirmationDialog = new ConfirmationDialog(driver);
confirmationDialog.confirm();
}
}
package ddsl.dobjects;
import ddsl.dcomponents.ConfirmationDialog;
import ddsl.dcomponents.DComponent;
import org.apache.commons.lang3.StringUtils;
import org.openqa.selenium.By;
import org.openqa.selenium.Keys;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.PageFactory;
import org.openqa.selenium.support.pagefactory.AjaxElementLocatorFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class DMatSelect extends DComponent {
/**
* Generic wrapper for select element.
*/
private final static Logger LOG = LoggerFactory.getLogger(ConfirmationDialog.class);
public WebElement selectContainer;
protected List<String> optionIDs = new ArrayList<String>();
@FindBy(css = "[class*=\"select-arrow\"]")
protected WebElement expandBtn;
private By options = By.cssSelector("div > mat-option");
private By selectedOption = By.cssSelector("[class*=\"-select-value\"]");
public DMatSelect(WebDriver driver, WebElement container) {
super(driver);
wait.forXMillis(100);
PageFactory.initElements(new AjaxElementLocatorFactory(container, data.getWaitTimeShort()), this);
this.selectContainer = container;
// try {
// if (isDisplayed() && isEnabled()) {
// weToDButton(expandBtn).click();
// extractOptionIDs();
// contract();
// }
// } catch (Exception e) {
// }
}
public boolean isDisplayed() throws Exception {
try {
return weToDButton(expandBtn).isEnabled();
} catch (Exception e) {
return false;
}
}
public boolean isEnabled() {
// aria-disabled="true"
boolean isEnabled = true;
try {
isEnabled = !Boolean.valueOf((selectContainer).getAttribute("aria-disabled"));
} catch (Exception e) {
}
return isEnabled;
}
private void extractOptionIDs() throws Exception {
wait.forAttributeToContain(selectContainer, "aria-owns", "mat-option");
String[] ids = selectContainer.getAttribute("aria-owns").split(" ");
optionIDs.addAll(Arrays.asList(ids));
// log.debug(optionIDs.size() + " option ids identified : " + optionIDs);
}
// private void expand() throws Exception {
// try {
// weToDButton(expandBtn).click();
// wait.forAttributeNotEmpty(selectContainer, "aria-owns");
// } catch (Exception e) {
// e.printStackTrace();
// }
// }
private void contract() throws Exception {
try {
wait.forXMillis(200);
selectContainer.sendKeys(Keys.ESCAPE);
wait.forXMillis(200);
} catch (Exception e) {
}
}
// -----------------------------------------------------------------
protected List<DObject> getOptionElements() throws Exception {
weToDButton(expandBtn).click();
List<DObject> optionObj = new ArrayList<>();
for (int i = 0; i < optionIDs.size(); i++) {
String optionId = optionIDs.get(i);
WebElement option = driver.findElement(By.id(optionId));
optionObj.add(new DObject(driver, option));
}
return optionObj;
}
public boolean selectOptionByText(String text) throws Exception {
LOG.debug("selecting option by text: " + text);
if (StringUtils.isEmpty(text)) {
return false;
}
List<DObject> optionObj = getOptionElements();
if (optionObj.size() == 0) {
LOG.warn("select has no options ");
}
for (DObject dObject : optionObj) {
if (StringUtils.equalsIgnoreCase(dObject.getText(), text)) {
dObject.click();
return true;
}
}
return false;
}
public boolean deselectOptionByText(String text) throws Exception {
LOG.debug("selecting option by text: " + text);
if (StringUtils.isEmpty(text)) {
return false;
}
List<DObject> optionObj = getOptionElements();
if (optionObj.size() == 0) {
LOG.warn("select has no options ");
}
for (DObject dObject : optionObj) {
if (StringUtils.equalsIgnoreCase(dObject.getText(), text)) {
dObject.click();
if (dObject.getAttribute("aria-selected").equals(true)) {
return true;
}
}
}
return false;
}
public List<String> getOptionsTexts() throws Exception {
List<String> texts = new ArrayList<>();
List<DObject> options = getOptionElements();
for (int i = 0; i < options.size(); i++) {
texts.add(options.get(i).getText());
}
contract();
return texts;
}
}
package pages.administration.editDomainsPage;
import ddsl.dcomponents.AlertComponent;
import ddsl.dcomponents.DComponent;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
......@@ -19,10 +20,15 @@ public class CreateGroupDetailsDialog extends DComponent {
private WebElement saveBtn;
public CreateGroupDetailsDialog(WebDriver driver) {
super(driver);
PageFactory.initElements(new AjaxElementLocatorFactory(driver, data.getTIMEOUT()), this);
PageFactory.initElements(new AjaxElementLocatorFactory(driver, data.getWaitTimeShort()), this);
}
public AlertComponent getAlertArea() {
return new AlertComponent(driver);
}
public void fillGroupDetails(GroupModel group) {
groupNameLbl.sendKeys(group.getGroupName());
groupDescriptionLbl.sendKeys(group.getGroupDescription());
......
......@@ -8,12 +8,22 @@ import org.openqa.selenium.support.pagefactory.AjaxElementLocatorFactory;
public class GroupTab extends SubcategoryTabComponent {
public GroupTab(WebDriver driver) {
super(driver);
PageFactory.initElements(new AjaxElementLocatorFactory(driver, data.getTIMEOUT()), this);
PageFactory.initElements(new AjaxElementLocatorFactory(driver, data.getWaitTimeShort()), this);
}
public CreateGroupDetailsDialog clickOnCreateNewGroup() throws Exception {
public CreateGroupDetailsDialog clickCreateNewGroup() throws Exception {
create();
return new CreateGroupDetailsDialog(driver);
}
public CreateGroupDetailsDialog clickEditGroup(String domainCode) throws Exception {
edit("Group name", domainCode);
return new CreateGroupDetailsDialog(driver);
}
public void deleteGroup(String domainCode) throws Exception {
delete("Group name", domainCode);
}
}
......@@ -4,8 +4,11 @@ import ddsl.CommonPageWithTabs;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.ui.Select;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import rest.models.DomainModel;
import rest.models.GroupModel;
public class EditGroupsPage extends CommonPageWithTabs {
/**
......@@ -16,13 +19,17 @@ public class EditGroupsPage extends CommonPageWithTabs {
@FindBy(id = "domain_id")
private WebElement domainDdl;
@FindBy(id = "group_id")
private WebElement groupDdl;
private Select groupDdl;
public EditGroupsPage(WebDriver driver) {
super(driver);
LOG.debug("Loading Edit groups page.");
}
public void selectGroup(DomainModel domainModel, GroupModel groupModel) throws Exception {
weToMatDSelect(domainDdl).selectOptionByText(domainModel.getDomainCode());
}
public GroupMembersTab getDomainMembersTab() {
return new GroupMembersTab(driver);
}
......
......@@ -9,7 +9,7 @@ public class GroupMembersTab extends MembersComponent {
public GroupMembersTab(WebDriver driver) {
super(driver);
PageFactory.initElements(new AjaxElementLocatorFactory(driver, data.getTIMEOUT()), this);
PageFactory.initElements(new AjaxElementLocatorFactory(driver, data.getWaitTimeShort()), this);
}
}
......@@ -9,7 +9,7 @@ import pages.administration.editDomainsPage.CreateGroupDetailsDialog;
public class ResourceTab extends SubcategoryTabComponent {
public ResourceTab(WebDriver driver) {
super(driver);
PageFactory.initElements(new AjaxElementLocatorFactory(driver, data.getTIMEOUT()), this);
PageFactory.initElements(new AjaxElementLocatorFactory(driver, data.getWaitTimeShort()), this);
}
......
......@@ -6,6 +6,7 @@ import domiSMPTests.SeleniumTest;
import org.json.JSONObject;
import org.openqa.selenium.WebElement;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Ignore;
import org.testng.annotations.Test;
import org.testng.asserts.SoftAssert;
import pages.LoginPage;
......@@ -104,6 +105,7 @@ public class EditDomainsPgTests extends SeleniumTest {
}
@Ignore
@Test(description = "EDTDOM-02 Domain admins are able to create new groups")
public void DomainAdminsAreAbleToCreate() throws Exception {
GroupModel groupToBeCreated = GroupModel.generatePublicDomain();
......@@ -111,7 +113,7 @@ public class EditDomainsPgTests extends SeleniumTest {
editDomainPage.goToTab("Group");
CreateGroupDetailsDialog createGroupDetailsDialog = editDomainPage.getGroupTab().clickOnCreateNewGroup();
CreateGroupDetailsDialog createGroupDetailsDialog = editDomainPage.getGroupTab().clickCreateNewGroup();
createGroupDetailsDialog.fillGroupDetails(groupToBeCreated);
Boolean isSaveSuccesfully = createGroupDetailsDialog.tryClickOnSave();
soft.assertTrue(isSaveSuccesfully);
......@@ -123,4 +125,42 @@ public class EditDomainsPgTests extends SeleniumTest {
soft.assertAll();
}
@Test(description = "EDTDOM-03 Domain admins are not able to create duplicated groups")
public void DomainAdminsAreNotAbleToCreateDuplicatedGroups() throws Exception {
GroupModel duplicatedGroup = GroupModel.generatePublicDomain();
editDomainPage.getLeftSideGrid().searchAndGetElementInColumn("Domain code", domainModel.getDomainCode()).click();
editDomainPage.goToTab("Group");
CreateGroupDetailsDialog createGroupDetailsDialog = editDomainPage.getGroupTab().clickCreateNewGroup();
createGroupDetailsDialog.fillGroupDetails(duplicatedGroup);
Boolean isSaveSuccesfully = createGroupDetailsDialog.tryClickOnSave();
soft.assertTrue(isSaveSuccesfully);
createGroupDetailsDialog = editDomainPage.getGroupTab().clickCreateNewGroup();
createGroupDetailsDialog.fillGroupDetails(duplicatedGroup);
isSaveSuccesfully = createGroupDetailsDialog.tryClickOnSave();
String duplicateAlertMessage = createGroupDetailsDialog.getAlertArea().getAlertMessage();
soft.assertTrue(isSaveSuccesfully);
soft.assertEquals(duplicateAlertMessage, String.format("Invalid request [CreateGroup]. Error: Group with name [%s] already exists!!", duplicatedGroup.getGroupName()));
soft.assertAll();
}
@Test(description = "EDTDOM-04 Domain admins are able to delete groups without resources")
public void DomainAdminsAreNotAbleToDeleteGroups() throws Exception {
GroupModel groupToBeDeleted = GroupModel.generatePublicDomain();
editDomainPage.getLeftSideGrid().searchAndGetElementInColumn("Domain code", domainModel.getDomainCode()).click();
editDomainPage.goToTab("Group");
CreateGroupDetailsDialog createGroupDetailsDialog = editDomainPage.getGroupTab().clickCreateNewGroup();
createGroupDetailsDialog.fillGroupDetails(groupToBeDeleted);
Boolean isSaveSuccesfully = createGroupDetailsDialog.tryClickOnSave();
soft.assertTrue(isSaveSuccesfully);
editDomainPage.getGroupTab().deleteGroup(groupToBeDeleted.getGroupName());
String deleteMessage = editDomainPage.getAlertArea().getAlertMessage();
soft.assertEquals(deleteMessage, String.format("Domain group [%s] deleted", groupToBeDeleted.getGroupName()));
soft.assertAll();
}
}
package domiSMPTests.ui;
import ddsl.DomiSMPPage;
import ddsl.enums.Pages;
import domiSMPTests.SeleniumTest;
import org.json.JSONObject;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import org.testng.asserts.SoftAssert;
import pages.LoginPage;
import pages.administration.editDomainsPage.EditDomainsPage;
import rest.models.DomainModel;
import rest.models.MemberModel;
import rest.models.UserModel;
public class EditGroupsPgTests extends SeleniumTest {
DomiSMPPage homePage;
LoginPage loginPage;
EditDomainsPage editDomainPage;
String domainId;
DomainModel domainModel;
UserModel adminUser;
SoftAssert soft;
@BeforeMethod(alwaysRun = true)
public void beforeTest() throws Exception {
soft = new SoftAssert();
domainModel = DomainModel.generatePublicDomainModelWithSML();
adminUser = UserModel.generateUserWithADMINrole();
MemberModel domainMember = new MemberModel();
domainMember.setUsername(adminUser.getUsername());
domainMember.setRoleType("ADMIN");
rest.users().createUser(adminUser);
JSONObject domainJson = rest.domains().createDomain(domainModel);
domainId = domainJson.get("domainId").toString();
rest.domains().addMembersToDomain(domainId, domainMember);
homePage = new DomiSMPPage(driver);
loginPage = homePage.goToLoginPage();
loginPage.login(adminUser.getUsername(), data.getNewPassword());
editDomainPage = homePage.getSidebar().navigateTo(Pages.ADMINISTRATION_EDIT_DOMAINS);
}
@Test(description = "EDTDOM-01 Domain admins are able to invite/edit/remove members")
public void DomainAdminsAreAbleToInviteEditRemoveMembers() throws Exception {
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment