Code development platform for open source projects from the European Union institutions :large_blue_circle: EU Login authentication by SMS will be completely phased out by mid-2025. To see alternatives please check here

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

automated new regression tag tests

parent 88a5ce32
No related branches found
No related tags found
No related merge requests found
Pipeline #241183 failed
Showing
with 173 additions and 44 deletions
......@@ -18,24 +18,24 @@
<maven.deploy.skip>false</maven.deploy.skip>
<!-- dependencies versions-->
<commons-csv_version>1.12.0</commons-csv_version>
<selenium-chrome-driver_version>4.25.0</selenium-chrome-driver_version>
<selenium-java_version>4.25.0</selenium-java_version>
<selenium-chrome-driver_version>4.27.0</selenium-chrome-driver_version>
<selenium-java_version>4.27.0</selenium-java_version>
<poi-ooxml_version>5.3.0</poi-ooxml_version>
<reflections_version>0.10.2</reflections_version>
<jersey-client_version>1.19.4</jersey-client_version>
<jersey-multipart_version>1.19.4</jersey-multipart_version>
<json_version>20240303</json_version>
<jackson_version>2.18.0</jackson_version>
<jackson_version>2.18.2</jackson_version>
<javax.ws.rs-api_version>2.1.1</javax.ws.rs-api_version>
<javax.ws.rs-api_version>2.1.1</javax.ws.rs-api_version>
<xmlunit_version>1.6</xmlunit_version>
<testng_version>7.10.2</testng_version>
<logback-classic_version>1.5.8</logback-classic_version>
<logback-classic_version>1.5.12</logback-classic_version>
<extentreports_version>5.1.2</extentreports_version>
<commons-lang3_version>3.17.0</commons-lang3_version>
<commons-io_version>2.17.0</commons-io_version>
<commons-io_version>2.18.0</commons-io_version>
<!-- plugin versions-->
<maven-surefire-plugin_version>3.5.1</maven-surefire-plugin_version>
<maven-surefire-plugin_version>3.5.2</maven-surefire-plugin_version>
<plugin.dependency-check-maven.version>9.0.7</plugin.dependency-check-maven.version>
<maven-compiler-plugin>3.11.0</maven-compiler-plugin>
......
......@@ -14,7 +14,7 @@ public class CommonPageWithTabsAndGrid extends CommonPageWithTabs {
public WebElement filterInput;
@FindBy(css = "data-panel >div >div> mat-toolbar button:first-of-type")
public WebElement addBtn;
@FindBy(css = "data-panel >div >div> mat-toolbar button:last-of-type")
@FindBy(css = ".smp-toolbar-row > button:nth-child(2)")
public WebElement deleteBtn;
@FindBy(css = "[class~=smp-column-label]")
public WebElement rightPanel;
......
......@@ -25,6 +25,7 @@ public class GridPagination extends DComponent {
}
public Integer getTotalPageNumber() {
wait.forElementToBeVisible(parentElement);
String val = parentElement.findElement(currentElementsLblLocator).getText();
Integer numofElementsPerPage = 5;
Pattern pattern = Pattern.compile("of (\\d+)");
......
......@@ -5,6 +5,7 @@ import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.PageFactory;
import org.openqa.selenium.support.pagefactory.AjaxElementLocatorFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
......@@ -23,7 +24,7 @@ public class MatSmallGrid extends DComponent {
public MatSmallGrid(WebDriver driver, WebElement parentElement) {
super(driver);
PageFactory.initElements(driver, this);
PageFactory.initElements(new AjaxElementLocatorFactory(driver, data.getWaitTimeShort()), this);
this.parentElement = parentElement;
}
......@@ -46,7 +47,7 @@ public class MatSmallGrid extends DComponent {
public WebElement searchAndGetElementInColumn(String columnName, String value) {
wait.forXMillis(100);
wait.forXMillis(200);
Integer numOfPages = getGridPagination().getTotalPageNumber();
List<WebElement> rowHeaders = getGridHeaders();
int columnIndex = -1;
......
......@@ -7,6 +7,9 @@ import org.openqa.selenium.support.ui.Select;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.ArrayList;
import java.util.List;
/**
* Generic wrapper for select element.
*/
......@@ -43,10 +46,23 @@ public class DSelect extends DObject {
public String getCurrentValueAttribute(String attribute) {
try {
return select.getAllSelectedOptions().get(0).getAttribute(attribute);
return select.getAllSelectedOptions().get(0).getDomAttribute(attribute);
} catch (IndexOutOfBoundsException e) {
return null;
}
}
public ArrayList<String> getAllOptionValues() {
try {
ArrayList<String> optionValueList = new ArrayList<>();
List<WebElement> allOptionELementsList = select.getOptions();
for (int i = 1; i < allOptionELementsList.size(); i++) {
optionValueList.add(allOptionELementsList.get(i).getDomAttribute("value"));
}
return optionValueList;
} catch (Exception e) {
return null;
}
}
}
......@@ -50,7 +50,6 @@ public class CreateResourceDetailsDialog extends DComponent {
wait.forElementToBeClickable(saveBtn);
if (weToDButton(saveBtn).isEnabled()) {
weToDButton(saveBtn).click();
wait.forElementToBeGone(saveBtn);
return true;
} else {
return false;
......
......@@ -12,6 +12,7 @@ import rest.models.SubresourceModel;
* Page object Subresource tab of Edit Resource page. This contains the locators of the page and the methods for the behaviour of the page
*/
public class SubresourceTab extends SubcategoryTabComponent {
public SubresourceTab(WebDriver driver) {
super(driver);
PageFactory.initElements(new AjaxElementLocatorFactory(driver, data.getWaitTimeShort()), this);
......
......@@ -107,6 +107,7 @@ public class CommonEditDocumentPage extends DomiSMPPage {
}
public String getStatusValue() {
wait.forXMillis(100);
return weToDInput(statusLbl).getText();
}
......
......@@ -76,6 +76,7 @@ public class ResourcesPage extends DomiSMPPage {
String original = iterator.next();
String newTab = iterator.next();
driver.switchTo().window(newTab);
wait.forXMillis(300);
LOG.debug("Switching to new tab" + newTab);
try {
......
......@@ -39,6 +39,11 @@ public class DomainsPage extends CommonPageWithTabsAndGrid {
return new SmallGrid(driver, rightPanel);
}
public ResourceTypesTab getResourceTypesTab() {
return new ResourceTypesTab(driver);
}
public SMLIntegrationTab getSMLIntegrationTab() {
return new SMLIntegrationTab(driver);
......
......@@ -13,42 +13,66 @@ import java.util.List;
/**
* Page object for the Resource tab of Domains page. This contains the locators of the page and the methods for the behaviour of the page
*/
public class ResourceTab extends DComponent {
private final static Logger LOG = LoggerFactory.getLogger(ResourceTab.class);
public class ResourceTypesTab extends DComponent {
private final static Logger LOG = LoggerFactory.getLogger(ResourceTypesTab.class);
@FindBy(css = "mat-list-option")
private List<WebElement> resourceOptions;
@FindBy(id = "saveButton")
private WebElement saveBtn;
public ResourceTab(WebDriver driver) {
public ResourceTypesTab(WebDriver driver) {
super(driver);
PageFactory.initElements(new AjaxElementLocatorFactory(driver, data.getWaitTimeShort()), this);
}
public void saveChanges() {
try {
if (saveBtn.isEnabled()) {
saveBtn.click();
if (saveBtn.getAttribute("disabled").equals("truw")) {
if (saveBtn.getDomAttribute("disabled").equals("true")) {
LOG.debug("Resource tab changes were succesfully saved");
} else {
LOG.error("Resource tab changes were not saved");
}
}
} catch (NullPointerException exception) {
LOG.error("Resource tab changes were not saved");
}
}
public void checkResource(String resourceName) {
public void checkResource(String resourceName, boolean isChecked) throws Exception {
wait.forElementToBeClickable(resourceOptions.get(0));
for (WebElement element : resourceOptions) {
if (element.getText().contains(resourceName)) {
if (element.getAttribute("aria-selected").equals("false")) {
element.click();
wait.forAttributeToContain(element, "aria-selected", "true");
LOG.debug("Selecting resource {} is opened", resourceName);
if (isChecked) {
if (!weToDChecked(element).isChecked()) {
element.click();
LOG.debug("Selecting resource {} is opened", resourceName);
}
} else {
LOG.debug("Resource {} is already selected", resourceName);
if (weToDChecked(element).isChecked()) {
element.click();
}
}
}
}
}
public boolean getResourceTypeStatus(String resourceName) throws Exception {
wait.forElementToBeClickable(resourceOptions.get(0));
for (WebElement element : resourceOptions) {
if (element.getText().contains(resourceName)) {
return weToDChecked(element).isChecked();
}
}
LOG.error("Could not get the status of the resource type.");
return false;
}
}
......@@ -2,6 +2,8 @@ package pages.systemSettings.domainsPage;
import ddsl.dcomponents.ConfirmationDialog;
import ddsl.dcomponents.DComponent;
import ddsl.dobjects.DInput;
import ddsl.dobjects.DSelect;
import ddsl.enums.ResponseCertificates;
import org.apache.poi.util.StringUtil;
import org.openqa.selenium.WebDriver;
......@@ -22,6 +24,8 @@ public class SMLIntegrationTab extends DComponent {
@FindBy(id = "smlSMPId_id")
private WebElement smlsmpIdentifierInput;
@FindBy(css = ".mdc-text-field--invalid > div:nth-child(2) > div:nth-child(1) > div")
private WebElement smlsmpIdentifierInputError;
@FindBy(id = "smlClientKeyAlias_id")
private WebElement smlClientCertificateAliasDdl;
......@@ -36,6 +40,7 @@ public class SMLIntegrationTab extends DComponent {
@FindBy(id = "unregisterButton")
private WebElement unregisterBtn;
public SMLIntegrationTab(WebDriver driver) {
super(driver);
PageFactory.initElements(new AjaxElementLocatorFactory(driver, data.getWaitTimeShort()), this);
......@@ -45,7 +50,7 @@ public class SMLIntegrationTab extends DComponent {
public void fillSMLIntegrationTab(DomainModel domainModel) {
ResponseCertificates responseCertificates = ResponseCertificates
.getByAlias(domainModel.getSignatureKeyAlias());
if (StringUtil.isNotBlank(domainModel.getSignatureKeyAlias()) && responseCertificates== null) {
if (StringUtil.isNotBlank(domainModel.getSignatureKeyAlias()) && responseCertificates == null) {
LOG.warn("Cannot find signature key for alias [{}]", domainModel.getSignatureKeyAlias());
}
try {
......@@ -64,12 +69,11 @@ public class SMLIntegrationTab extends DComponent {
}
}
public void saveChanges() {
if (saveBtn.isEnabled()) {
saveBtn.click();
wait.forElementToBeDisabled(saveBtn);
if (saveBtn.getAttribute("disabled").equals("true")) {
if (saveBtn.getDomAttribute("disabled").equals("true")) {
LOG.debug("SML Integration tab changes were succesfully saved");
} else {
LOG.error("SML Integration tab changes were not saved");
......@@ -107,4 +111,23 @@ public class SMLIntegrationTab extends DComponent {
}
public String getSMLSMPErrorMessage() {
try {
return smlsmpIdentifierInputError.getText();
} catch (Exception e) {
LOG.debug("No SMLSMP validation error");
return null;
}
}
public DInput getsmlsmpIdentifierInput() {
return weToDInput(smlsmpIdentifierInput);
}
public DSelect getSMLClientCertificateAliasDdl() {
return weToDSelect(smlClientCertificateAliasDdl);
}
}
......@@ -61,10 +61,15 @@ public class AccessTokensPage extends DomiSMPPage {
}
public Boolean isAccessTokenPresent(String accessTokenName) {
WebElement accessToken = getAccessToken(accessTokenName);
try {
getAccessToken(accessTokenName);
return true;
} catch (NoSuchElementException e) {
return false;
}
return accessToken != null;
}
public HashMap<String, String> getAccessTokenInfo(String accessTokenName) throws Exception {
......@@ -106,7 +111,7 @@ public class AccessTokensPage extends DomiSMPPage {
weToDChecked(accessToken.findElement(isActiveLocator)).uncheck();
}
if (weToDButton(accessToken.findElement(saveBtnLocator)).isEnabled()) ;
if (weToDButton(accessToken.findElement(saveBtnLocator)).isEnabled())
{
LOG.debug("Changing active value of access token to: [{}]", isActive);
......@@ -114,6 +119,7 @@ public class AccessTokensPage extends DomiSMPPage {
new ConfirmationDialog(driver).confirm();
return getAlertArea().getAlertMessage();
}
return null;
}
}
......@@ -95,7 +95,8 @@ public class CertificatesPage extends DomiSMPPage {
certificate.findElement(By.cssSelector("mat-expansion-panel")).click();
weToDButton(certificate.findElement(deleteBtnLocator)).click();
new ConfirmationDialog(driver).confirm();
return getAlertArea().getAlertMessage();
String alertMessage = getAlertArea().getAlertMessage();
return alertMessage;
}
}
......@@ -70,6 +70,14 @@ public class BaseRestClient {
return builder.type(MediaType.APPLICATION_JSON).post(ClientResponse.class, body);
}
protected ClientResponse requestGet(WebResource resource) {
startSession();
WebResource.Builder builder = decorateBuilder(resource);
return builder.type(MediaType.APPLICATION_JSON).get(ClientResponse.class);
}
// -------------------------------------------- Login --------------------------------------------------------------
protected WebResource.Builder decorateBuilder(WebResource resource) {
......
......@@ -18,6 +18,11 @@ public class DomiSMPRestClient extends BaseRestClient {
return new ResourceClient();
}
public KeystoreClient keystoreClient() {
return new KeystoreClient();
}
}
package rest;
import com.sun.jersey.api.client.ClientResponse;
import org.json.JSONArray;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import utils.TestRunData;
/**
* Rest client for group actions
*/
public class KeystoreClient extends BaseRestClient {
private final static Logger LOG = LoggerFactory.getLogger(KeystoreClient.class);
public JSONArray getAllKeystores() {
startSession();
String createResourcePath = RestServicePaths.getKeystorePath(TestRunData.getInstance().getUserId());
ClientResponse response = requestGet(resource.path(createResourcePath));
if (response.getStatus() != 200) {
try {
throw new SMPRestException("Could not create resource!", response);
} catch (SMPRestException e) {
throw new RuntimeException(e);
}
}
LOG.debug("Resource have been added!");
String rawStringResponse = response.getEntity(String.class);
return new JSONArray(rawStringResponse);
}
}
......@@ -62,4 +62,9 @@ public class RestServicePaths {
return CONTEXT_PATH_EDIT + currentUserId + "/domain/" + domainId + "/group/" + groupId + "/resource/" + resourceId + "/member/put";
}
//Keystore
public static String getKeystorePath(String currentUserId) {
return CONTEXT_PATH_INTERNAL + "keystore/" + currentUserId;
}
}
......@@ -44,18 +44,18 @@ public class AccessTokensPgTests extends SeleniumTest {
//Create new token
CreateNewAccessTokenDialog createNewAccessTokenDialog = accessTokensPage.clickCreateAccessTokenBtn();
createNewAccessTokenDialog.getDescriptionInput().fill(description);
createNewAccessTokenDialog.getStartDateInput().fill(currentDate);
createNewAccessTokenDialog.getEndDateInput().fill(currentDate);
createNewAccessTokenDialog.getStartDateInput().fill(currentDate, true);
createNewAccessTokenDialog.getEndDateInput().fill(currentDate, true);
createNewAccessTokenDialog.getCreateNewTokenBtn().click();
String tokenID = createNewAccessTokenDialog.getTokenIdAndCloseDialog();
String currentDateUiFormat = Utils.getCurrentDate("MM/d/yyyy");
soft.assertTrue(accessTokensPage.isAccessTokenPresent(tokenID), "Access Token ID is not correct");
HashMap<String, String> accessTokenInfo = accessTokensPage.getAccessTokenInfo(tokenID);
soft.assertEquals(accessTokenInfo.get("Description"), description, "Access Token description is not correct");
soft.assertEquals(accessTokenInfo.get("Active"), "true", "Access Token active status is not correct");
soft.assertEquals(accessTokenInfo.get("StartDate"), currentDate, "Access Token start date is not correct");
soft.assertEquals(accessTokenInfo.get("EndDate"), currentDate, "Access Token end date is not correct");
soft.assertEquals(accessTokenInfo.get("StartDate"), currentDateUiFormat, "Access Token start date is not correct");
soft.assertEquals(accessTokenInfo.get("EndDate"), currentDateUiFormat, "Access Token end date is not correct");
soft.assertEquals(accessTokenInfo.get("SequenceFailedAttempts"), "0", "Access Token SequenceFailedAttempts is not correct");
soft.assertEquals(accessTokenInfo.get("LastFailedAttempts"), "---", "Access Token LastFailedAttempts is not correct");
soft.assertEquals(accessTokenInfo.get("SuspendedUntil"), "---", "Access Token SuspendedUntil is not correct");
......@@ -68,8 +68,8 @@ public class AccessTokensPgTests extends SeleniumTest {
//Create new token
createNewAccessTokenDialog = accessTokensPage.clickCreateAccessTokenBtn();
createNewAccessTokenDialog.getDescriptionInput().fill(description);
createNewAccessTokenDialog.getStartDateInput().fill(currentDate);
createNewAccessTokenDialog.getEndDateInput().fill(currentDate);
createNewAccessTokenDialog.getStartDateInput().fill(currentDate, true);
createNewAccessTokenDialog.getEndDateInput().fill(currentDate, true);
createNewAccessTokenDialog.getCreateNewTokenBtn().click();
tokenID = createNewAccessTokenDialog.getTokenIdAndCloseDialog();
......@@ -78,8 +78,8 @@ public class AccessTokensPgTests extends SeleniumTest {
accessTokenInfo = accessTokensPage.getAccessTokenInfo(tokenID);
soft.assertEquals(accessTokenInfo.get("Description"), description, "Access Token description is not correct");
soft.assertEquals(accessTokenInfo.get("Active"), "true", "Access Token active status is not correct");
soft.assertEquals(accessTokenInfo.get("StartDate"), currentDate, "Access Token start date is not correct");
soft.assertEquals(accessTokenInfo.get("EndDate"), currentDate, "Access Token end date is not correct");
soft.assertEquals(accessTokenInfo.get("StartDate"), currentDateUiFormat, "Access Token start date is not correct");
soft.assertEquals(accessTokenInfo.get("EndDate"), currentDateUiFormat, "Access Token end date is not correct");
soft.assertEquals(accessTokenInfo.get("SequenceFailedAttempts"), "0", "Access Token SequenceFailedAttempts is not correct");
soft.assertEquals(accessTokenInfo.get("LastFailedAttempts"), "---", "Access Token LastFailedAttempts is not correct");
soft.assertEquals(accessTokenInfo.get("SuspendedUntil"), "---", "Access Token SuspendedUntil is not correct");
......@@ -95,14 +95,14 @@ public class AccessTokensPgTests extends SeleniumTest {
//Create new token
CreateNewAccessTokenDialog createNewAccessTokenDialog = accessTokensPage.clickCreateAccessTokenBtn();
createNewAccessTokenDialog.getDescriptionInput().fill(description);
createNewAccessTokenDialog.getStartDateInput().fill(currentDate);
createNewAccessTokenDialog.getEndDateInput().fill(currentDate);
createNewAccessTokenDialog.getStartDateInput().fill(currentDate, true);
createNewAccessTokenDialog.getEndDateInput().fill(currentDate, true);
createNewAccessTokenDialog.getCreateNewTokenBtn().click();
String tokenID = createNewAccessTokenDialog.getTokenIdAndCloseDialog();
String alertMessage = accessTokensPage.deleteAccessToken(tokenID);
soft.assertEquals(alertMessage, "Access token \"" + tokenID + "\" has been deleted!", "Access Token ID is not correct");
soft.assertTrue(accessTokensPage.isAccessTokenPresent(tokenID));
soft.assertFalse(accessTokensPage.isAccessTokenPresent(tokenID));
soft.assertAll();
}
......@@ -113,8 +113,8 @@ public class AccessTokensPgTests extends SeleniumTest {
//Create new token
CreateNewAccessTokenDialog createNewAccessTokenDialog = accessTokensPage.clickCreateAccessTokenBtn();
createNewAccessTokenDialog.getDescriptionInput().fill(description);
createNewAccessTokenDialog.getStartDateInput().fill(currentDate);
createNewAccessTokenDialog.getEndDateInput().fill(currentDate);
createNewAccessTokenDialog.getStartDateInput().fill(currentDate, true);
createNewAccessTokenDialog.getEndDateInput().fill(currentDate, true);
createNewAccessTokenDialog.getCreateNewTokenBtn().click();
String tokenID = createNewAccessTokenDialog.getTokenIdAndCloseDialog();
......@@ -140,8 +140,8 @@ public class AccessTokensPgTests extends SeleniumTest {
//Create new token
createNewAccessTokenDialog = accessTokensPage.clickCreateAccessTokenBtn();
createNewAccessTokenDialog.getDescriptionInput().fill(description);
createNewAccessTokenDialog.getStartDateInput().fill(currentDate);
createNewAccessTokenDialog.getEndDateInput().fill(currentDate);
createNewAccessTokenDialog.getStartDateInput().fill(currentDate, true);
createNewAccessTokenDialog.getEndDateInput().fill(currentDate, true);
createNewAccessTokenDialog.getCreateNewTokenBtn().click();
tokenID = createNewAccessTokenDialog.getTokenIdAndCloseDialog();
......
......@@ -113,6 +113,7 @@ public class CertificatesPgTests extends SeleniumTest {
//Delete certificate if exists
try {
certificatePage.deleteCertificate(certificateId);
certificatePage.getAlertArea().closeAlert();
} catch (Exception ignored) {
}
......
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