diff --git a/smp-ui-tests/src/main/java/pages/domain/DomainGrid.java b/smp-ui-tests/src/main/java/pages/domain/DomainGrid.java index ba6cd51785ad71e00c9a8c17b3c5a19e20bf82a6..41b7ec3d0057a8d2f831b1471e6f45097e2d83fb 100644 --- a/smp-ui-tests/src/main/java/pages/domain/DomainGrid.java +++ b/smp-ui-tests/src/main/java/pages/domain/DomainGrid.java @@ -42,7 +42,6 @@ public class DomainGrid extends BasicGrid { } } - rowInfos.add(row); } diff --git a/smp-ui-tests/src/main/java/pages/domain/DomainPage.java b/smp-ui-tests/src/main/java/pages/domain/DomainPage.java index 58f3eab67fe45250e569b38b79fcb05a50f63858..b1841b0f90e1295cd18209e57ec4902ea9c41ccb 100644 --- a/smp-ui-tests/src/main/java/pages/domain/DomainPage.java +++ b/smp-ui-tests/src/main/java/pages/domain/DomainPage.java @@ -8,6 +8,7 @@ import org.openqa.selenium.support.pagefactory.AjaxElementLocatorFactory; import pages.components.ConfirmationDialog; import pages.components.baseComponents.PaginationControls; import pages.components.baseComponents.SMPPage; +import pages.keystore.KeyStoreEditDialog; import utils.PROPERTIES; public class DomainPage extends SMPPage { @@ -35,6 +36,9 @@ public class DomainPage extends SMPPage { @FindBy(id = "deleteButton") private WebElement deleteBtn; + @FindBy(xpath = "//span[text()=' Edit keystore']") + private WebElement editKeyStore; + public PaginationControls pagination = new PaginationControls(driver); @@ -97,6 +101,12 @@ public class DomainPage extends SMPPage { waitForElementToBeClickable(editBtn).click(); return new DomainPopup(driver); } + + public KeyStoreEditDialog clickEditKeyStore(){ + log.info("clicking edit keystore"); + waitForElementToBeClickable(editKeyStore).click(); + return new KeyStoreEditDialog(driver); + } public DomainGrid grid(){ diff --git a/smp-ui-tests/src/main/java/pages/keystore/KeyStoreEditDialog.java b/smp-ui-tests/src/main/java/pages/keystore/KeyStoreEditDialog.java new file mode 100644 index 0000000000000000000000000000000000000000..a0ecc98ea26b0484136756d746ed106aaaf7ea09 --- /dev/null +++ b/smp-ui-tests/src/main/java/pages/keystore/KeyStoreEditDialog.java @@ -0,0 +1,50 @@ +package pages.keystore; +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.support.PageFactory; +import org.openqa.selenium.support.pagefactory.AjaxElementLocatorFactory; +import pages.components.baseComponents.PageComponent; +import pages.domain.DomainGrid; +import pages.domain.DomainPage; +import utils.PROPERTIES; + + +public class KeyStoreEditDialog extends PageComponent { + + public KeyStoreEditDialog(WebDriver driver){ + super(driver); + PageFactory.initElements( new AjaxElementLocatorFactory(driver, PROPERTIES.TIMEOUT), this); + + } + + @FindBy(css = "#keystoreTable_id") + private WebElement keystoreTable; + + @FindBy(xpath = "//span[text()='Import keystore']") + private WebElement importKeystore; + + @FindBy(css = "button[mat-dialog-close]") + private WebElement closeBtn; + + public KeyStoreImportDialog clickImportKeystore() + { + log.info("clicking import keystore"); + waitForElementToBeClickable(importKeystore).click(); + waitForElementToBeGone(importKeystore); + return new KeyStoreImportDialog(driver); + } + + public DomainPage clickCloseInKeystore(){ + log.info("clicking close btn in keystore edit dialog"); + waitForElementToBeClickable(closeBtn).click(); + waitForElementToBeGone(closeBtn); + return new DomainPage(driver); + } + + public KeyStoreGrid grid(){ + return new KeyStoreGrid(driver, keystoreTable); + } + +} diff --git a/smp-ui-tests/src/main/java/pages/keystore/KeyStoreGrid.java b/smp-ui-tests/src/main/java/pages/keystore/KeyStoreGrid.java new file mode 100644 index 0000000000000000000000000000000000000000..b85ccdf5997a9c155d7f2a961afe87796b0ae6a4 --- /dev/null +++ b/smp-ui-tests/src/main/java/pages/keystore/KeyStoreGrid.java @@ -0,0 +1,106 @@ +package pages.keystore; + + +import org.openqa.selenium.By; +import org.openqa.selenium.JavascriptExecutor; +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.support.PageFactory; +import org.openqa.selenium.support.pagefactory.DefaultElementLocatorFactory; +import pages.components.ConfirmationDialog; +import pages.components.baseComponents.PageComponent; +import pages.components.grid.BasicGrid; +import pages.domain.DomainRow; + +import java.util.ArrayList; +import java.util.List; + +public class KeyStoreGrid extends PageComponent { + + public KeyStoreGrid(WebDriver driver, WebElement container) { + super(driver); + log.info("Loading KeyStoreGrid"); + waitForRowsToLoad(); + PageFactory.initElements(new DefaultElementLocatorFactory(container), this); + for (int i = 0; i < gridHeaders.size(); i++) { + headerTxt.add(gridHeaders.get(i).getText().trim()); + } + } + + @FindBy(css = "#keystoreTable_id datatable-header div.datatable-row-center datatable-header-cell") + protected List<WebElement> gridHeaders; + + @FindBy(css = "#keystoreTable_id datatable-body-row > div.datatable-row-center.datatable-row-group") + protected List<WebElement> gridRows; + + protected ArrayList<String> headerTxt = new ArrayList<String>(); + + private By cellSelector = By.cssSelector("#keystoreTable_id datatable-body-cell"); + +// public List<KeyStoreRow> getKeyStoreRowsInfo() { +// log.info("getting all the rows information"); +// List<KeyStoreRow> rowInfos = new ArrayList<>(); +// +// for (WebElement gridRow : gridRows) { +// List<WebElement> cells = gridRow.findElements(cellSelector); +// +// KeyStoreRow row = new KeyStoreRow(); +// +// for (int i = 0; i < headerTxt.size(); i++) { +// switch (headerTxt.get(i)) { +// case "Alias": +// row.setAlias(cells.get(i).getText().trim()); +// break; +// case "Certificate id": +// row.setCertificateId(cells.get(i).getText().trim()); +// break; +// } +// } +// rowInfos.add(row); +// } +// +// return rowInfos; +// } + + public void doubleClickRow(int rowNumber) { + log.info("double clicking row ... " + rowNumber); + waitForXMillis(500); + if (rowNumber >= gridRows.size()) { + return; + } + Actions action = new Actions(driver); + action.doubleClick(gridRows.get(rowNumber)).perform(); + } + + public int getColumnsNo() { + log.info("getting number of columns"); + return gridHeaders.size(); + } + + public int getRowsNo() { + return gridRows.size(); + } + + /*public boolean isKeyStoreCreated(int rowNum, String keyStoreName) { + WebElement gridRow = gridRows.get(rowNum); + List<WebElement> cells = gridRow.findElements(cellSelector); + for (int i = 0; i < headerTxt.size(); i++) { + if (headerTxt.get(i).equals("Alias")) { + if (cells.get(i).getText().trim().contains(keyStoreName)) { + return true; + } + } + } + return false; + }*/ + + public ConfirmationDialog deleteKeyStore(int rowNum) { + WebElement gridRow = gridRows.get(rowNum); + List<WebElement> cells = gridRow.findElements(cellSelector); + WebElement deleteButton = cells.get(2).findElement(By.cssSelector("button[mattooltip='Delete certificate']")); + waitForElementToBeClickable(deleteButton).click(); + return new ConfirmationDialog(driver); + } +} diff --git a/smp-ui-tests/src/main/java/pages/keystore/KeyStoreImportDialog.java b/smp-ui-tests/src/main/java/pages/keystore/KeyStoreImportDialog.java new file mode 100644 index 0000000000000000000000000000000000000000..69be05c3b36d297db704ac049174997be3b2a2c9 --- /dev/null +++ b/smp-ui-tests/src/main/java/pages/keystore/KeyStoreImportDialog.java @@ -0,0 +1,75 @@ +package pages.keystore; +import org.apache.log4j.Logger; +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.support.PageFactory; +import org.openqa.selenium.support.pagefactory.AjaxElementLocatorFactory; +import pages.components.baseComponents.PageComponent; +import utils.PROPERTIES; + +import java.awt.*; +import java.awt.datatransfer.StringSelection; +import java.awt.event.KeyEvent; +import java.io.File; +import java.net.URL; + +public class KeyStoreImportDialog extends PageComponent{ + protected Logger log = Logger.getLogger(this.getClass()); + public KeyStoreImportDialog(WebDriver driver) { + super(driver); + PageFactory.initElements(new AjaxElementLocatorFactory(driver, PROPERTIES.TIMEOUT), this); + } + @FindBy(xpath = "//span[text()='Import']") + private WebElement importBtn; + + @FindBy(css = "keystore-import-dialog button[mat-dialog-close]") + private WebElement cancelBtn; + + @FindBy(css = "button[mat-dialog-close]") + private WebElement closeBtn; + + @FindBy(css = "#keystore-file-upload") + private WebElement chooseKeystore; + + @FindBy(css = "#keystoreFilename") + private WebElement keyStoreFileInput; + + @FindBy(css = "#password_id") + private WebElement passwordInput; + + public KeyStoreEditDialog clickImportBtn() + { + log.info("clicking import btn "); + waitForElementToBeClickable(importBtn).click(); + waitForElementToBeGone(importBtn); + return new KeyStoreEditDialog(driver); + + } + public KeyStoreEditDialog clickCancelBtn(){ + log.info("clicking import keystore"); + waitForElementToBeClickable(cancelBtn).click(); + waitForElementToBeGone(cancelBtn); + return new KeyStoreEditDialog(driver); + } + + public KeyStoreEditDialog clickCloseBtn(){ + log.info("clicking close btn"); + waitForElementToBeClickable(closeBtn).click(); + waitForElementToBeGone(closeBtn); + return new KeyStoreEditDialog(driver); + } + public void chooseKeystoreFile() { + chooseKeystore.sendKeys(System.getProperty("user.dir")+"\\target\\classes\\keystore\\keystore_dummy1.jks"); + } + public void fillPassword(String password) + { + waitForElementToBeVisible(passwordInput).sendKeys(password); + } + + public String getKeyStoreFileName() { + return keyStoreFileInput.getAttribute("value"); + } +} + diff --git a/smp-ui-tests/src/main/java/pages/keystore/KeyStoreRow.java b/smp-ui-tests/src/main/java/pages/keystore/KeyStoreRow.java new file mode 100644 index 0000000000000000000000000000000000000000..e828608dbd5150123658406caf3b1bdb3ae7567a --- /dev/null +++ b/smp-ui-tests/src/main/java/pages/keystore/KeyStoreRow.java @@ -0,0 +1,45 @@ +package pages.keystore; + +import pages.domain.DomainRow; + +public class KeyStoreRow { + + private String alias; + + public void setAlias(String alias) { + this.alias = alias; + } + + public String getAlias() { + return alias; + } + + private String certificateId; + + public String getCertificateId() { + return certificateId; + } + + public void setCertificateId(String certificateId) { + this.certificateId = certificateId; + } + + @Override + public String toString() { + return "KeyStoreRow{" + + "alias='" + alias + '\'' + + ", certificateId='" + certificateId + '\'' + + '}'; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + KeyStoreRow row = (KeyStoreRow) o; + + if (alias != null ? !alias.equals(row.alias) : row.alias != null) return false; + return certificateId != null ? certificateId.equals(row.certificateId) : row.certificateId == null; + } +} diff --git a/smp-ui-tests/src/main/java/utils/enums/SMPMessages.java b/smp-ui-tests/src/main/java/utils/enums/SMPMessages.java index 889c6b9ae149ca412734195a74154172133a4da2..68fc52a3ebb831d6148bad3cef51932d410ddb35 100644 --- a/smp-ui-tests/src/main/java/utils/enums/SMPMessages.java +++ b/smp-ui-tests/src/main/java/utils/enums/SMPMessages.java @@ -75,8 +75,8 @@ public class SMPMessages { public static final String PASS_NO_MATCH_MESSAGE = "Passwords do not match"; public static final String PASS_NO_EMPTY_MESSAGE = "You should type a password"; - - + public static final String KEYSTORE_IMPORTED_MSG = "Keystore keystore_dummy1.jks imported!"; + public static final String KEYSTORE_DELETION_MSG = "Certificate sample_key_dummy1 deleted!"; diff --git a/smp-ui-tests/src/main/resources/keystore/keystore_dummy1.jks b/smp-ui-tests/src/main/resources/keystore/keystore_dummy1.jks new file mode 100644 index 0000000000000000000000000000000000000000..1db3d26fb051cb0eba8d4e46b42f77fc3a5c9ca6 Binary files /dev/null and b/smp-ui-tests/src/main/resources/keystore/keystore_dummy1.jks differ diff --git a/smp-ui-tests/src/test/java/ui/DomainPgTest.java b/smp-ui-tests/src/test/java/ui/DomainPgTest.java index 312ed99506f666dccbe2642b4f9325648705c872..fc95ef7d2b2042f08e42bd4793ece5cb5e471445 100644 --- a/smp-ui-tests/src/test/java/ui/DomainPgTest.java +++ b/smp-ui-tests/src/test/java/ui/DomainPgTest.java @@ -1,5 +1,6 @@ package ui; +import org.testng.Assert; import org.testng.annotations.AfterMethod; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; @@ -11,10 +12,13 @@ import pages.domain.DomainGrid; import pages.domain.DomainPage; import pages.domain.DomainPopup; import pages.domain.DomainRow; +import pages.keystore.KeyStoreEditDialog; +import pages.keystore.KeyStoreImportDialog; import utils.Generator; import utils.enums.SMPMessages; import utils.rest.SMPRestClient; +import java.awt.*; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -365,5 +369,85 @@ public class DomainPgTest extends BaseTest { soft.assertAll(); } + @Test(description = "DMN-90") + public void createKeyStore() { + SoftAssert soft = new SoftAssert(); + DomainPage page = new DomainPage(driver); + soft.assertTrue(page.isLoaded(), "Check that the page is loaded"); + String pass="test123"; + KeyStoreEditDialog keyStoreEdit = page.clickEditKeyStore(); + int keyStoreRowBeforeAddition = keyStoreEdit.grid().getRowsNo(); + KeyStoreImportDialog keyStoreImport = keyStoreEdit.clickImportKeystore(); + keyStoreImport.chooseKeystoreFile(); + Assert.assertEquals(keyStoreImport.getKeyStoreFileName(),"keystore_dummy1.jks","the keystore file name is not correct"); + //String keyStoreFileNameWithExt = keyStoreImport.getKeyStoreFileName(); + // String keyStoreFileName = keyStoreFileNameWithExt.substring(0,keyStoreFileNameWithExt.lastIndexOf(".")); + keyStoreImport.fillPassword(pass); + keyStoreImport.clickImportBtn(); + keyStoreEdit.clickCloseInKeystore(); + soft.assertFalse(page.alertArea.getAlertMessage().isError()); + keyStoreEdit = page.clickEditKeyStore(); + int keyStoreRowAfterAddition = keyStoreEdit.grid().getRowsNo(); + soft.assertEquals(keyStoreRowAfterAddition,keyStoreRowBeforeAddition+1, "KeyStore is not added to the grid"); +// soft.assertTrue(keyStoreEdit.grid().isKeyStoreCreated(keyStoreRowAfterAddition-1, keyStoreFileName),keyStoreFileName +" is not present in keystore grid"); + if(keyStoreRowAfterAddition > 1){ + keyStoreEdit.grid().deleteKeyStore(keyStoreRowAfterAddition-1).confirm(); + int keyStoreRowAfterDeletion = keyStoreEdit.grid().getRowsNo(); + soft.assertEquals(keyStoreRowAfterDeletion,keyStoreRowAfterAddition-1, "KeyStore is not delete from the grid"); + keyStoreEdit.clickCloseInKeystore(); + soft.assertFalse(page.alertArea.getAlertMessage().isError()); + } + soft.assertAll(); + } + + @Test(description = "DMN-110") + public void allowDuplicateKeyStore() { + SoftAssert soft = new SoftAssert(); + DomainPage page = new DomainPage(driver); + soft.assertTrue(page.isLoaded(), "Check that the page is loaded"); + String pass="test123"; + KeyStoreEditDialog keyStoreEdit = page.clickEditKeyStore(); + int keyStoreRowBeforeAddition = keyStoreEdit.grid().getRowsNo(); + KeyStoreImportDialog keyStoreImport = keyStoreEdit.clickImportKeystore(); + keyStoreImport.chooseKeystoreFile(); + Assert.assertEquals(keyStoreImport.getKeyStoreFileName(),"keystore_dummy1.jks","the keystore file name is not correct"); + //String keyStoreFileNameWithExt = keyStoreImport.getKeyStoreFileName(); + //String keyStoreFileName = keyStoreFileNameWithExt.substring(0,keyStoreFileNameWithExt.lastIndexOf(".")); + keyStoreImport.fillPassword(pass); + keyStoreImport.clickImportBtn(); + keyStoreEdit.clickCloseInKeystore(); + soft.assertFalse(page.alertArea.getAlertMessage().isError()); + keyStoreEdit = page.clickEditKeyStore(); + int keyStoreRowAfterAddition = keyStoreEdit.grid().getRowsNo(); + soft.assertEquals(keyStoreRowAfterAddition,keyStoreRowBeforeAddition+1, "KeyStore is not added to the grid"); + keyStoreRowBeforeAddition = keyStoreRowAfterAddition; + keyStoreImport = keyStoreEdit.clickImportKeystore(); + keyStoreImport.chooseKeystoreFile(); + Assert.assertEquals(keyStoreImport.getKeyStoreFileName(),"keystore_dummy1.jks","the keystore file name is not correct"); + //String keyStoreFileNameWithExt = keyStoreImport.getKeyStoreFileName(); + //String keyStoreFileName = keyStoreFileNameWithExt.substring(0,keyStoreFileNameWithExt.lastIndexOf(".")); + keyStoreImport.fillPassword(pass); + keyStoreImport.clickImportBtn(); + keyStoreEdit.clickCloseInKeystore(); + soft.assertFalse(page.alertArea.getAlertMessage().isError()); + keyStoreEdit = page.clickEditKeyStore(); + keyStoreRowAfterAddition = keyStoreEdit.grid().getRowsNo(); + soft.assertEquals(keyStoreRowAfterAddition,keyStoreRowBeforeAddition+1, "KeyStore is not added to the grid"); + if(keyStoreRowAfterAddition > 1){ + keyStoreEdit.grid().deleteKeyStore(keyStoreRowAfterAddition-1).confirm(); + int keyStoreRowAfterDeletion = keyStoreEdit.grid().getRowsNo(); + soft.assertEquals(keyStoreRowAfterDeletion,keyStoreRowAfterAddition-1, "KeyStore is not delete from the grid"); + keyStoreRowAfterAddition = keyStoreRowAfterDeletion; + } + if(keyStoreRowAfterAddition > 1){ + keyStoreEdit.grid().deleteKeyStore(keyStoreRowAfterAddition-1).confirm(); + int keyStoreRowAfterDeletion = keyStoreEdit.grid().getRowsNo(); + soft.assertEquals(keyStoreRowAfterDeletion,keyStoreRowAfterAddition-1, "KeyStore is not delete from the grid"); + keyStoreEdit.clickCloseInKeystore(); + soft.assertFalse(page.alertArea.getAlertMessage().isError()); + } + soft.assertAll(); + } + }