diff --git a/domiSMP-ui-tests/pom.xml b/domiSMP-ui-tests/pom.xml index f7f66aa1df1c82e99c6d97102493b62a4b04c18d..62d21f9f0ce95d9a01466b335bf3e1b61a25658d 100644 --- a/domiSMP-ui-tests/pom.xml +++ b/domiSMP-ui-tests/pom.xml @@ -11,8 +11,8 @@ <!-- configuration example--> <test.properties.path>./src/main/resources/myLocal.properties</test.properties.path> <commons-csv_version>1.10.0</commons-csv_version> - <selenium-chrome-driver_version>4.15.0</selenium-chrome-driver_version> - <selenium-java_version>4.15.0</selenium-java_version> + <selenium-chrome-driver_version>4.16.1</selenium-chrome-driver_version> + <selenium-java_version>4.16.1</selenium-java_version> <poi-ooxml_version>5.2.4</poi-ooxml_version> <reflections_version>0.10.2</reflections_version> <jersey-client_version>1.19.4</jersey-client_version> diff --git a/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/mat/MatSelect.java b/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/mat/MatSelect.java index f7c4d96c43f879ad0b1584c525d871d5ac596d57..dd421a42f2f4b97066abc17073670c7524ff5df8 100644 --- a/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/mat/MatSelect.java +++ b/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/mat/MatSelect.java @@ -26,4 +26,14 @@ public class MatSelect extends DObject { wait.forElementToBeVisible(option); option.click(); } + + /** + * Method returns the current selected text! + * + * @return the text displayed in the select + */ + public String getCurrentText() { + return element.getText(); + + } } diff --git a/domiSMP-ui-tests/src/main/java/ddsl/dobjects/DObject.java b/domiSMP-ui-tests/src/main/java/ddsl/dobjects/DObject.java index 15045f67fc75d222ca38cf770c7d9f4c964ccefe..92f49ac8f25e33ab80f63fc338a64baa3d2b938d 100644 --- a/domiSMP-ui-tests/src/main/java/ddsl/dobjects/DObject.java +++ b/domiSMP-ui-tests/src/main/java/ddsl/dobjects/DObject.java @@ -60,9 +60,9 @@ public class DObject { throw new Exception(); } - public String getText() throws Exception { + public String getText() { if (!isPresent()) { - throw new Exception(); + throw new ElementNotInteractableException("Element: ["+ element.getAccessibleName() +"] not present"); } scrollIntoView(); String text = ((JavascriptExecutor) driver).executeScript("return arguments[0].innerText;", element).toString(); @@ -73,7 +73,7 @@ public class DObject { ((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView();", element); } - public void click() throws ElementNotInteractableException { + public void click() { if (isEnabled()) { wait.forElementToBeClickable(element).click(); } else { diff --git a/domiSMP-ui-tests/src/main/java/ddsl/dobjects/DSelect.java b/domiSMP-ui-tests/src/main/java/ddsl/dobjects/DSelect.java index 91ba20e95e98d526374d3c770bcd8b3656b3728e..a8ad307f7dafc6529882bfd456ba0dab5c9ab6a0 100644 --- a/domiSMP-ui-tests/src/main/java/ddsl/dobjects/DSelect.java +++ b/domiSMP-ui-tests/src/main/java/ddsl/dobjects/DSelect.java @@ -4,11 +4,14 @@ import org.openqa.selenium.Keys; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.support.ui.Select; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * Generic wrapper for select element. */ public class DSelect extends DObject { + private final static Logger LOG = LoggerFactory.getLogger(DSelect.class); Select select = new Select(element); public DSelect(WebDriver driver, WebElement element) { super(driver, element); @@ -22,6 +25,8 @@ public class DSelect extends DObject { select.getWrappedElement().sendKeys(Keys.ENTER); } wait.forXMillis(10); + LOG.debug("Selecting by visible text: [{}]", value); + select.getAllSelectedOptions().stream().forEach(e -> LOG.debug("value to select", e.getText())); select.selectByVisibleText(value); } diff --git a/domiSMP-ui-tests/src/main/java/ddsl/enums/ResponseCertificates.java b/domiSMP-ui-tests/src/main/java/ddsl/enums/ResponseCertificates.java index ec7d97701cf5d9447d6b2f6f90877784a075fdae..e762ece5b0249f20b98f3ea74841ee30ef04bfc1 100644 --- a/domiSMP-ui-tests/src/main/java/ddsl/enums/ResponseCertificates.java +++ b/domiSMP-ui-tests/src/main/java/ddsl/enums/ResponseCertificates.java @@ -1,23 +1,47 @@ package ddsl.enums; +/** + * Enumeration of data for provided certificates in the test truststure. + * This is used to select the correct certificate in the UI. + */ public enum ResponseCertificates { - SMP_DOMAIN_02("smp_domain_02 (CN=smp_domain_02,O=digit,C=eu:000000006443d987)"), - SMP_EDDSA_448("smp_eddsa_448 (CN=smp_eddsa_448,O=digit,C=eu:000000006443fcba)"), - SMP_ECDSA_NIST_B409("smp_ecdsa_nist-b409 (CN=smp_ecdsa_nist-b409,O=digit,C=eu:000000006443fd57)"), - SMP_DOMAIN_01("smp_domain_01 (CN=smp_domain_01,O=digit,C=eu:000000006443d8a8)"), - SAMPLE_KEY("sample_key (CN=demo-smp-signing-key,O=digit,C=eu:000000006443f9bc)"), - SMP_EDDSA_25519("smp_eddsa_25519 (CN=smp_eddsa_25519,O=digit,C=eu:000000006443d95d)"); - - public String getName() { - return name; + + SAMPLE_KEY("sample_key", "sample_key (CN=demo-smp-signing-key,O=digit,C=eu:000000006443f9bc)"), + SMP_DOMAIN_01("smp_domain_01", "smp_domain_01 (CN=smp_domain_01,O=digit,C=eu:000000006443d8a8)"), + SMP_DOMAIN_02("smp_domain_02", "smp_domain_02 (CN=smp_domain_02,O=digit,C=eu:000000006443d987)"), + SMP_ECDSA_NIST_B409("smp_ecdsa_nist-b409", "smp_ecdsa_nist-b409 (CN=smp_ecdsa_nist-b409,O=digit,C=eu:000000006443fd57)"), + SMP_EDDSA_448("smp_eddsa_448", "smp_eddsa_448 (CN=smp_eddsa_448,O=digit,C=eu:000000006443fcba)"), + SMP_EDDSA_25519("smp_eddsa_25519", "smp_eddsa_25519 (CN=smp_eddsa_25519,O=digit,C=eu:000000006443d95d)"); + + + private final String text; + private final String alias; + + ResponseCertificates(String alias, String text) { + this.alias = alias; + this.text = text; } - public final String name; + public String getText() { + return text; + } + public String getAlias() { + return alias; + } - ResponseCertificates(String name) { - this.name = name; + public static ResponseCertificates getByAlias(String alias) { + for (ResponseCertificates e : values()) { + if (e.getAlias().equals(alias)) { + return e; + } + } + return null; } + public static String getTextForAlias(String alias) { + ResponseCertificates certificates = getByAlias(alias); + return certificates != null ? certificates.getText() : null; + } } diff --git a/domiSMP-ui-tests/src/main/java/pages/systemSettings/domainsPage/DomainTab.java b/domiSMP-ui-tests/src/main/java/pages/systemSettings/domainsPage/DomainTab.java index e9c4c0292626130cb279d9312c7fc1c19b9c9b8d..c5d47fa9b915e12019bcd55d3257d0a839a735f2 100644 --- a/domiSMP-ui-tests/src/main/java/pages/systemSettings/domainsPage/DomainTab.java +++ b/domiSMP-ui-tests/src/main/java/pages/systemSettings/domainsPage/DomainTab.java @@ -1,6 +1,8 @@ package pages.systemSettings.domainsPage; import ddsl.dcomponents.DComponent; +import ddsl.enums.ResponseCertificates; +import org.apache.poi.util.StringUtil; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.support.FindBy; @@ -22,6 +24,7 @@ public class DomainTab extends DComponent { private WebElement visibilityOfDomainDdl; @FindBy(id = "saveButton") private WebElement saveBtn; + public DomainTab(WebDriver driver) { super(driver); PageFactory.initElements(new AjaxElementLocatorFactory(driver, data.getWaitTimeShort()), this); @@ -33,7 +36,7 @@ public class DomainTab extends DComponent { } public String getResponseSignatureCertificateSelectedValue() { - return weToDSelect(responseSignatureCertificateDdl).getCurrentValue(); + return weToMatSelect(responseSignatureCertificateDdl).getCurrentText(); } public String getVisibilityOfDomainSelectedValue() { @@ -41,9 +44,18 @@ public class DomainTab extends DComponent { } public void fillDomainData(DomainModel domainModel) { + ResponseCertificates responseCertificates = ResponseCertificates + .getByAlias(domainModel.getSignatureKeyAlias()); + if (StringUtil.isNotBlank(domainModel.getSignatureKeyAlias()) && responseCertificates == null) { + LOG.warn("Cannot find signature key for alias [{}]", domainModel.getSignatureKeyAlias()); + } + domainIdInput.sendKeys(domainModel.getDomainCode()); - weToDSelect(responseSignatureCertificateDdl).selectByVisibleText(domainModel.getSignatureKeyAlias(), true); + if (responseCertificates != null) { + weToMatSelect(responseSignatureCertificateDdl) + .selectByVisibleText(responseCertificates.getText()); + } weToDSelect(visibilityOfDomainDdl).selectValue(domainModel.getVisibility()); } diff --git a/domiSMP-ui-tests/src/main/java/pages/systemSettings/domainsPage/SMLIntegrationTab.java b/domiSMP-ui-tests/src/main/java/pages/systemSettings/domainsPage/SMLIntegrationTab.java index cca2dce0625c3ffb98270d7995b9f3a5ba5d7942..a1c79865cf04c64b64c3c5b2bf7cd5c69f5089a1 100644 --- a/domiSMP-ui-tests/src/main/java/pages/systemSettings/domainsPage/SMLIntegrationTab.java +++ b/domiSMP-ui-tests/src/main/java/pages/systemSettings/domainsPage/SMLIntegrationTab.java @@ -2,6 +2,8 @@ package pages.systemSettings.domainsPage; import ddsl.dcomponents.ConfirmationDialog; import ddsl.dcomponents.DComponent; +import ddsl.enums.ResponseCertificates; +import org.apache.poi.util.StringUtil; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.support.FindBy; @@ -39,11 +41,19 @@ public class SMLIntegrationTab extends DComponent { } public void fillSMLIntegrationTab(DomainModel domainModel) { + ResponseCertificates responseCertificates = ResponseCertificates + .getByAlias(domainModel.getSignatureKeyAlias()); + if (StringUtil.isNotBlank(domainModel.getSignatureKeyAlias()) && responseCertificates== null) { + LOG.warn("Cannot find signature key for alias [{}]", domainModel.getSignatureKeyAlias()); + } try { + weToDInput(smlDomainInput).fill(domainModel.getSmlSubdomain()); weToDInput(smlsmpIdentifierInput).fill(domainModel.getSmlSmpId()); - //TODO : check of clientcertificatealias is changed from mat-select to select - weToDSelect(smlClientCertificateAliasDdl).selectByVisibleText(domainModel.getSignatureKeyAlias(), true); + if (responseCertificates != null) { + weToDSelect(smlClientCertificateAliasDdl) + .selectByVisibleText(responseCertificates.getText(), true); + } weToDButton(useClientCertBtn).click(); } catch (Exception e) { diff --git a/domiSMP-ui-tests/src/main/java/rest/models/DomainModel.java b/domiSMP-ui-tests/src/main/java/rest/models/DomainModel.java index dd87531c9dacebf0442bfbb269cfddc34a4bae61..b39c3b91e78fb99bdb95f2810a0cfb3a4a0ca34d 100644 --- a/domiSMP-ui-tests/src/main/java/rest/models/DomainModel.java +++ b/domiSMP-ui-tests/src/main/java/rest/models/DomainModel.java @@ -1,7 +1,6 @@ package rest.models; import ddsl.enums.ResponseCertificates; -import org.apache.commons.lang3.StringUtils; import utils.Generator; import utils.Utils; @@ -149,19 +148,19 @@ public class DomainModel { public static DomainModel generatePublicDomainModelWithSML() { DomainModel domainModel = new DomainModel(); domainModel.domainCode = "AUTDom" + Generator.randomAlphaNumericValue(6); - domainModel.signatureKeyAlias = Utils.randomEnum(new ResponseCertificates[]{SMP_DOMAIN_01, SMP_DOMAIN_02}).getName(); + domainModel.signatureKeyAlias = Utils.randomEnum(new ResponseCertificates[]{SMP_DOMAIN_01, SMP_DOMAIN_02}).getAlias(); domainModel.visibility = "PUBLIC"; domainModel.smlClientCertAuth = true; domainModel.smlSubdomain = "AUTDomSML" + Generator.randomAlphaNumericValue(6); domainModel.smlSmpId = "AUTSMLSMP" + Generator.randomAlphaNumericValue(4); - domainModel.smlClientKeyAlias = StringUtils.lowerCase(Utils.randomEnum(new ResponseCertificates[]{SMP_DOMAIN_01, SMP_DOMAIN_02}).toString()); + domainModel.smlClientKeyAlias = Utils.randomEnum(new ResponseCertificates[]{SMP_DOMAIN_01, SMP_DOMAIN_02}).getAlias(); return domainModel; } public static DomainModel generatePublicDomainModelWithoutSML() { DomainModel domainModel = new DomainModel(); domainModel.domainCode = "AUTDom" + Generator.randomAlphaNumericValue(6); - domainModel.signatureKeyAlias = Utils.randomEnum(ResponseCertificates.values()).getName(); + domainModel.signatureKeyAlias = Utils.randomEnum(ResponseCertificates.values()).getAlias(); domainModel.visibility = "PUBLIC"; return domainModel; } diff --git a/domiSMP-ui-tests/src/test/java/domiSMPTests/SeleniumTest.java b/domiSMP-ui-tests/src/test/java/domiSMPTests/SeleniumTest.java index 8a0e6bb52fdc38d2552aaec8be29ffd73990cd11..74b5f38877d167f85d45bcc57a7d4cb143d065d4 100644 --- a/domiSMP-ui-tests/src/test/java/domiSMPTests/SeleniumTest.java +++ b/domiSMP-ui-tests/src/test/java/domiSMPTests/SeleniumTest.java @@ -58,6 +58,7 @@ public class SeleniumTest { try { driver.get(data.getUiBaseUrl()); } catch (Exception e) { + LOG.warn("Driver is not initialized, try to reninitialize it"); driver = DriverManager.getDriver(); driver.get(data.getUiBaseUrl()); } diff --git a/domiSMP-ui-tests/src/test/java/domiSMPTests/ui/DomainsPgTests.java b/domiSMP-ui-tests/src/test/java/domiSMPTests/ui/DomainsPgTests.java index 8ad44e1ec6d2777ec4184d6311563522ceb51a15..62fae7c3fe5de1a4317d62d23585fb9a907839c1 100644 --- a/domiSMP-ui-tests/src/test/java/domiSMPTests/ui/DomainsPgTests.java +++ b/domiSMP-ui-tests/src/test/java/domiSMPTests/ui/DomainsPgTests.java @@ -2,6 +2,7 @@ package domiSMPTests.ui; import ddsl.DomiSMPPage; import ddsl.enums.Pages; +import ddsl.enums.ResponseCertificates; import domiSMPTests.SeleniumTest; import org.openqa.selenium.WebElement; import org.testng.annotations.BeforeMethod; @@ -48,7 +49,7 @@ public class DomainsPgTests extends SeleniumTest { soft.assertEquals(alert, "Domain: [" + domainModel.getDomainCode() + "] was created!"); domainsPage.getLeftSideGrid().searchAndGetElementInColumn("Domain code", domainModel.getDomainCode()).click(); - soft.assertEquals(domainModel.getSignatureKeyAlias(), domainsPage.getDomainTab().getResponseSignatureCertificateSelectedValue()); + soft.assertEquals(ResponseCertificates.getTextForAlias(domainModel.getSignatureKeyAlias()), domainsPage.getDomainTab().getResponseSignatureCertificateSelectedValue()); soft.assertEquals(domainModel.getVisibility(), domainsPage.getDomainTab().getVisibilityOfDomainSelectedValue()); soft.assertEquals(domainsPage.getDomainWarningMessage(), "To complete domain configuration, please:\n" + "select at least one resource type from the Resource Types tab\n" + diff --git a/smp-angular/src/app/system-settings/admin-domain/domain-panel/domain-panel.component.html b/smp-angular/src/app/system-settings/admin-domain/domain-panel/domain-panel.component.html index b72db1151091c0f661fe995013c17c04de6deaf1..faa8f9d855ddbe51d236c02366f4885fc88683d1 100644 --- a/smp-angular/src/app/system-settings/admin-domain/domain-panel/domain-panel.component.html +++ b/smp-angular/src/app/system-settings/admin-domain/domain-panel/domain-panel.component.html @@ -34,14 +34,14 @@ </mat-form-field> <mat-form-field style="width:100%"> <mat-label>Response signature Certificate (Signature CertAlias)</mat-label> - <select matNativeControl matInput formControlName="signatureKeyAlias" + <mat-select formControlName="signatureKeyAlias" matTooltip="Certificate is used for signing REST responses for the domain." id="signatureKeyAlias_id"> - <option [value]="''" ></option> - <option *ngFor="let cert of keystoreCertificates" [value]="cert.alias"> + <mat-option [value]="''" ></mat-option> + <mat-option *ngFor="let cert of keystoreCertificates" [value]="cert.alias"> {{cert.alias}} ({{cert.certificateId}}) - </option> - </select> + </mat-option> + </mat-select> <mat-hint align="end">Empty value will cause that Resource responses will not be signed by SMP! </mat-hint> </mat-form-field> diff --git a/smp-angular/src/styles.css b/smp-angular/src/styles.css index cee796e558d422b19a1a79295cf5c3c0d9eee7eb..f8de075c4a32fc3c2485e05203f8f481c99e833e 100644 --- a/smp-angular/src/styles.css +++ b/smp-angular/src/styles.css @@ -44,6 +44,11 @@ td , th { padding: 10px !important; } +.mat-select { + padding-top: 0 !important; + padding-bottom: 0 !important; +} + .text-select { -webkit-user-select: text; -moz-user-select: text; diff --git a/smp-docker/compose/tomcat-mysql-smp-sml/docker-compose.test-ui.yml b/smp-docker/compose/tomcat-mysql-smp-sml/docker-compose.test-ui.yml index c1460c22cf19998c89eeb3d235b935a4e1de340e..a8a8d837599b002abb8f544c1c2853b3c8b1da13 100644 --- a/smp-docker/compose/tomcat-mysql-smp-sml/docker-compose.test-ui.yml +++ b/smp-docker/compose/tomcat-mysql-smp-sml/docker-compose.test-ui.yml @@ -6,7 +6,9 @@ services: testui: image: ${IMAGE_TAG:-edeliverytest}/${IMAGE_SMP_TEST_UI}:${SMP_VERSION} environment: - - TZ=CEST # set timezone CEST because of hardoced date UI test assertions + - TZ=CEST + - SCREEN_WIDTH=1920 + - SCREEN_HEIGHT=1080 networks: - test-network networks: diff --git a/smp-docker/compose/tomcat-mysql-smp-sml/runTests-UI.sh b/smp-docker/compose/tomcat-mysql-smp-sml/runTests-UI.sh index 143aa163f03262374f2a0dfad072ac12e3859abd..985c885849e42997862697dd5c80380c8f6f7601 100755 --- a/smp-docker/compose/tomcat-mysql-smp-sml/runTests-UI.sh +++ b/smp-docker/compose/tomcat-mysql-smp-sml/runTests-UI.sh @@ -21,5 +21,5 @@ DOCKER_NETWORK_NAME="${PLAN_PREFIX}_default" export DOCKER_NETWORK_NAME # Starting Docker Compose TEST (in specific project to avoid orphan container warning) -docker-compose -f docker-compose.test-ui.yml -p "run-${PLAN_PREFIX}" up +docker compose -f docker-compose.test-ui.yml -p "run-${PLAN_PREFIX}" up docker cp "run-${PLAN_PREFIX}_testui_1:/results/surefire-reports" ./results