From 0f6df345ffb3564aa60e16b605fd1641a0da3d4a Mon Sep 17 00:00:00 2001
From: monhaso <sonali.mohanty@ext.ec.europa.eu>
Date: Mon, 28 Feb 2022 09:35:28 +0100
Subject: [PATCH] 1) Key store page test cases added along with that some new
 tet cases added in DomainPg class.

---
 .../main/java/pages/domain/DomainGrid.java    |   1 -
 .../main/java/pages/domain/DomainPage.java    |  10 ++
 .../pages/keystore/KeyStoreEditDialog.java    |  50 +++++++++
 .../java/pages/keystore/KeyStoreGrid.java     | 106 ++++++++++++++++++
 .../pages/keystore/KeyStoreImportDialog.java  |  75 +++++++++++++
 .../main/java/pages/keystore/KeyStoreRow.java |  45 ++++++++
 .../main/java/utils/enums/SMPMessages.java    |   4 +-
 .../resources/keystore/keystore_dummy1.jks    | Bin 0 -> 2172 bytes
 .../src/test/java/ui/DomainPgTest.java        |  84 ++++++++++++++
 9 files changed, 372 insertions(+), 3 deletions(-)
 create mode 100644 smp-ui-tests/src/main/java/pages/keystore/KeyStoreEditDialog.java
 create mode 100644 smp-ui-tests/src/main/java/pages/keystore/KeyStoreGrid.java
 create mode 100644 smp-ui-tests/src/main/java/pages/keystore/KeyStoreImportDialog.java
 create mode 100644 smp-ui-tests/src/main/java/pages/keystore/KeyStoreRow.java
 create mode 100644 smp-ui-tests/src/main/resources/keystore/keystore_dummy1.jks

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 ba6cd5178..41b7ec3d0 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 58f3eab67..b1841b0f9 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 000000000..a0ecc98ea
--- /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 000000000..b85ccdf59
--- /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 000000000..69be05c3b
--- /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 000000000..e828608db
--- /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 889c6b9ae..68fc52a3e 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
GIT binary patch
literal 2172
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

literal 0
HcmV?d00001

diff --git a/smp-ui-tests/src/test/java/ui/DomainPgTest.java b/smp-ui-tests/src/test/java/ui/DomainPgTest.java
index 312ed9950..fc95ef7d2 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();
+	}
+
 
 }
-- 
GitLab