Skip to content

Commit

Permalink
PN-9433-e-2-e-destinatario-sezione-stato-piattaforma-disservizi-risol…
Browse files Browse the repository at this point in the history
…ti (#147)

* test(waitTime): add more time to the implicitlyWait() and loadComponentWaitTime `test-config.properties`

Signed-off-by: Andrea Fuso <[email protected]>

* test(PN-9237): update method `checkDisserviziInCorso()` less complex

Signed-off-by: Andrea Fuso <[email protected]>

* test(PN-9237): update method feature file name

Signed-off-by: Andrea Fuso <[email protected]>

* test(PN-9242): add new feature test file

Signed-off-by: Andrea Fuso <[email protected]>

* test(PN-9242): update all method and add new ones related to the new feature file test

Signed-off-by: Andrea Fuso <[email protected]>

* test: rename feature test folders

Signed-off-by: Andrea Fuso <[email protected]>

* test: change request

Signed-off-by: Andrea Fuso <[email protected]>

* test: change request

Signed-off-by: Andrea Fuso <[email protected]>

* test: change request + new enums

Signed-off-by: Andrea Fuso <[email protected]>

* test(PN-9232): add new feature test file

Signed-off-by: Andrea Fuso <[email protected]>

* test(PN-9433): add new feature test file

Signed-off-by: Andrea Fuso <[email protected]>

* test(PN-9433): add enum and update `handleService()`

Signed-off-by: Andrea Fuso <[email protected]>

* test: fix `getDigitalAddress()` into `RestContact`

Signed-off-by: Andrea Fuso <[email protected]>

---------

Signed-off-by: Andrea Fuso <[email protected]>
  • Loading branch information
afus0 authored Apr 8, 2024
1 parent e511f64 commit c72329b
Show file tree
Hide file tree
Showing 9 changed files with 152 additions and 55 deletions.
106 changes: 58 additions & 48 deletions src/main/java/it/pn/frontend/e2e/common/HelpdeskPage.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package it.pn.frontend.e2e.common;

import it.pn.frontend.e2e.model.enums.Disservice;
import it.pn.frontend.e2e.model.enums.Status;
import org.junit.Assert;
import org.openqa.selenium.By;
import org.openqa.selenium.TimeoutException;
Expand All @@ -10,6 +12,7 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;

Expand All @@ -24,9 +27,6 @@ public class HelpdeskPage extends BasePage {
@FindBy(id = "Password")
WebElement passwordInput;

@FindBy(xpath = "//button[@aria-label='more']")
WebElement buttonMenu;

@FindBy(id = "logout")
WebElement buttonLogout;

Expand Down Expand Up @@ -55,6 +55,15 @@ public class HelpdeskPage extends BasePage {
@FindBy(id = "cardTitle-Monitoraggio Piattaforma Notifiche")
WebElement monitoraggioPN;

@FindBy(xpath = ".//div[@data-field='functionality' and @role='cell']")
List<WebElement> services;

@FindBy(xpath = ".//div[@data-field='data' and @role='cell']")
List<WebElement> serviceDates;

@FindBy(xpath = ".//button[@role='menuitem']")
List<WebElement> serviceStatusButtons;


private final Logger logger = LoggerFactory.getLogger("Helpdesk Page");

Expand Down Expand Up @@ -92,15 +101,12 @@ public void checkHome() {
}
}

public void checkMonitoraggio() {
try {
TimeUnit.SECONDS.sleep(5);
this.getWebDriverWait(10).withMessage("elenco monitoraggio non trovato").until(ExpectedConditions.visibilityOf(this.buttonMenu));
logger.info("pagina monitoraggio caricata");
} catch (TimeoutException | InterruptedException e) {
logger.error("errore caricamento home monitoraggio: " + e.getMessage());
Assert.fail("errore caricamento home monitoraggio: " + e.getMessage());
public void waitLoadServiceTable() {
if (services.size() < 3) {
logger.error("I servizi visualizzati sono meno di 3");
Assert.fail("I servizi visualizzati sono meno di 3");
}
getWebDriverWait(10).withMessage("Non è visibile la tabella dei disservizi").until(ExpectedConditions.visibilityOfAllElements(services));
}

public void insertUsername(String user) {
Expand Down Expand Up @@ -131,46 +137,50 @@ public void clickMonitoraggio() {
}
}

public void handleDisservizio(String type) {
logger.info("clicco sul menu della tabella");
this.js().executeScript("arguments[0].click()", buttonMenu);
try {
TimeUnit.SECONDS.sleep(2);
} catch (InterruptedException e) {
logger.error("pausa con errore: " + e.getMessage());
throw new RuntimeException(e);
}
try {
logger.info("Click su button 'Inserisci X'".replace("X", type));
By buttonPreCreateDisservizio = By.id("X-insert".replace("X", type));
this.getWebDriverWait(40).until(ExpectedConditions.elementToBeClickable(buttonPreCreateDisservizio));
try {
TimeUnit.SECONDS.sleep(5);
} catch (InterruptedException e) {
logger.error("pausa con errore: " + e.getMessage());
throw new RuntimeException(e);
public void handleDisservizio(Disservice disservizio, Status status) {
waitLoadServiceTable();
getWebDriverWait(10).withMessage("Non sono visibili i pulsanti per il disservizio").until(ExpectedConditions.visibilityOfAllElements(serviceStatusButtons));
for (int i = 0; i < services.size(); i++) {
if (services.get(i).getText().equals(disservizio.getValue())) {
logger.info("Clicco sul menu del disservizio: " + disservizio.getValue());
serviceStatusButtons.get(i).click();
break;
}
this.elements(buttonPreCreateDisservizio).get(0).click();
} catch (TimeoutException e) {
logger.error("button 'Inserisci X' non trovato: ".replace("X", type) + e.getMessage());
Assert.fail("button 'Inserisci X' non trovato: ".replace("X", type) + e.getMessage());
}
try {
logger.info("Click su button 'Inserisci'");
By buttonCreateDisservizio = By.id("buttonInserisciDisservizio");
this.getWebDriverWait(30).until(ExpectedConditions.elementToBeClickable(buttonCreateDisservizio));
try {
TimeUnit.SECONDS.sleep(5);
} catch (InterruptedException e) {
logger.error("pausa con errore: " + e.getMessage());
throw new RuntimeException(e);
}
this.element(buttonCreateDisservizio).click();
} catch (TimeoutException e) {
logger.error("button 'Inserisci' non trovato: " + e.getMessage());
Assert.fail("button 'Inserisci' non trovato: " + e.getMessage());
// this is useful to check if we correctly clicked on the menu and the tooltip is displayed otherwise we fail the test
WebElement tooltip = this.element(By.xpath(".//div[@role='tooltip']"));
if (!tooltip.isDisplayed()) {
logger.error("Non è stato possibile visualizzare il tooltip per il disservizio");
Assert.fail("Non è stato possibile visualizzare il tooltip per il disservizio");
}
WebElement button = tooltip.findElement(By.id(status.getValue() + "-insert"));
getWebDriverWait(10).withMessage("Il pulsante: " + status.getValue() + " non è visibile o cliccabile").until(ExpectedConditions.and(
ExpectedConditions.visibilityOf(button),
ExpectedConditions.elementToBeClickable(button)
));
button.click();
WebElement buttonInsert = this.element(By.id("buttonInserisciDisservizio"));
getWebDriverWait(10).withMessage("Il pulsante di inserimento del servizio non è visibile o cliccabile").until(ExpectedConditions.and(
ExpectedConditions.visibilityOf(buttonInsert),
ExpectedConditions.elementToBeClickable(buttonInsert)
));
buttonInsert.click();
// When we insert a new status of a service there is alway an alert that shows up, this is useful when we want to make sure the status has changed
WebElement alertSuccess = this.element(By.xpath(".//div[@role='alert']"));
getWebDriverWait(10).withMessage("L'alert di successo post-inserimento servizio o disservizio non è visibile").until(ExpectedConditions.visibilityOf(alertSuccess));
logger.info(disservizio.getValue() + " è stato cambiato con successo in " + status.getValue());
}

public boolean checkServiceStatus(Disservice disservizio) {
waitLoadServiceTable();
getWebDriverWait(10).withMessage("Non sono visibili i stati dei servizi").until(ExpectedConditions.visibilityOfAllElements(serviceDates));
for (int i = 0; i < services.size(); i++) {
if (services.get(i).getText().equals(disservizio.getValue())) {
// check status based on the service date if present or not
return !serviceDates.get(i).getText().isEmpty();
}
}
return false;
}

public boolean checkIsCreatedDisservizio() {
Expand Down Expand Up @@ -313,7 +323,7 @@ public void checkCodiceFiscale() {
}
}

public void loginHelpdeskNuovaScheda(Map<String, String> login){
public void loginHelpdeskNuovaScheda(Map<String, String> login) {
this.getWebDriverWait(10).withMessage("Non si visualizza il campo email").until(ExpectedConditions.visibilityOf(this.emailInput));
this.getWebDriverWait(10).withMessage("Non si visualizza il campo password").until(ExpectedConditions.visibilityOf(this.passwordInput));
this.getWebDriverWait(10).withMessage("Non si visualizza il bottone LOGIN").until(ExpectedConditions.visibilityOf(this.loginButton));
Expand Down
16 changes: 16 additions & 0 deletions src/main/java/it/pn/frontend/e2e/model/enums/Disservice.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package it.pn.frontend.e2e.model.enums;

public enum Disservice {
CREAZIONE_NOTIFICHE("Creazione Notifiche"),
VISUALIZZAZIONE_NOTIFICHE("Visualizzazione Notifiche"),
WORKFLOW_NOTIFICHE("Workflow Notifiche");
private final String value;

Disservice(String value) {
this.value = value;
}

public String getValue() {
return value;
}
}
15 changes: 15 additions & 0 deletions src/main/java/it/pn/frontend/e2e/model/enums/Status.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package it.pn.frontend.e2e.model.enums;

public enum Status {
OK("OK"),
KO("KO");
private final String value;

Status(String value) {
this.value = value;
}

public String getValue() {
return value;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -128,4 +128,29 @@ public void checkDisserviziInCorso() {
Assert.fail("Non si visualizza un record in elenco relativo ad un disservizio ancora in corso");
}
}

public void checkDisserviziDisponibili() {
aggionamentoPagina();
if (!statusList.isEmpty()) {
for (WebElement status : statusList) {
if (status.getText().contains("Risolto")) {
logger.info("Si visualizza un record in elenco relativo ad un disservizio risolto");
continue;
} else {
logger.error("Non si visualizza un record in elenco relativo ad un disservizio risolto");
Assert.fail("Non si visualizza un record in elenco relativo ad un disservizio risolto");
}
if (status.getText().contains("/") || status.getText().contains("Oggi") && status.getText().contains(":")) {
logger.info("Si visualizza data di fine servizio");
continue;
}
if (status.getText().contains("Scarica l'attestazione")) {
logger.info("Si visualizza la frase corretta in 'Scarica l'attestazione'");
}
}
} else {
logger.error("Non si visualizza un record in elenco relativo ad un disservizio disponibile");
Assert.fail("Non si visualizza un record in elenco relativo ad un disservizio disponibile");
}
}
}
3 changes: 2 additions & 1 deletion src/main/java/it/pn/frontend/e2e/rest/RestContact.java
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,8 @@ public void removeSpecialContact(DigitalAddress digitalAddress) throws RestDeleg

public DigitalAddressResponse getDigitalAddress() throws RestContactException {
CustomHttpClient<?, DigitalAddressResponse> httpClientDigitalAddress = CustomHttpClient.getInstance();
String url = "https://webapi." + env + ".notifichedigitali.it/address-book/v1/digital-address";
httpClientDigitalAddress.setBaseUrlApi("https://webapi." + env + ".notifichedigitali.it");
String url = "/address-book/v1/digital-address";
try {
DigitalAddressResponse response = httpClientDigitalAddress.sendHttpGetRequest(url, this.headers, DigitalAddressResponse.class);
logger.info("Risposta ricevuta: " + response);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@
import io.cucumber.java.en.When;
import it.pn.frontend.e2e.common.HelpdeskPage;
import it.pn.frontend.e2e.listeners.Hooks;
import it.pn.frontend.e2e.model.enums.Disservice;
import it.pn.frontend.e2e.model.enums.Status;
import it.pn.frontend.e2e.utility.DataPopulation;
import it.pn.frontend.e2e.utility.WebTool;
import org.junit.Assert;
Expand Down Expand Up @@ -71,14 +73,14 @@ public void siVisualizzaCorrettamenteHomeHelpdesk() {

@And("Si visualizza correttamente home monitoraggio")
public void siVisualizzaCorrettamenteHomeMonitoraggio() {
helpdeskPage.checkMonitoraggio();
helpdeskPage.waitLoadServiceTable();
}

@And("Si crea il disservizio")
public void siCreaIlDisservizio() {
WebTool.waitTime(5);
if (!helpdeskPage.checkIsCreatedDisservizio()) {
helpdeskPage.handleDisservizio("KO");
helpdeskPage.handleDisservizio(Disservice.CREAZIONE_NOTIFICHE, Status.KO);
WebTool.waitTime(5);
}
}
Expand All @@ -88,7 +90,7 @@ public void siVerificaLaCreazioneDelDisservizio() {
helpdeskPage.checkIsCreatedDisservizio();
}

@And("Annullamento disservizio")
@And("Si annulla un disservizio in corso")
public void annullamentoDisservizio() {
BackgroundTest backgroundTest = new BackgroundTest();
logger.info("Torno sulla scheda di helpdesk");
Expand All @@ -107,7 +109,11 @@ public void annullamentoDisservizio() {
logger.error("pausa con errore: " + e.getMessage());
throw new RuntimeException(e);
}
helpdeskPage.handleDisservizio("OK");
if (helpdeskPage.checkServiceStatus(Disservice.CREAZIONE_NOTIFICHE)) {
helpdeskPage.handleDisservizio(Disservice.CREAZIONE_NOTIFICHE, Status.OK);
} else {
logger.info("Lo stato del servizio: " + Disservice.CREAZIONE_NOTIFICHE + " è già in OK");
}
try {
TimeUnit.SECONDS.sleep(5);
} catch (InterruptedException e) {
Expand Down Expand Up @@ -165,7 +171,7 @@ public void controlloCorrispondenzaCodiceFiscale() {
}

@Given("Login helpdesk in nuova scheda")
public void loginHelpdeskInNuovaScheda(Map<String, String> login){
public void loginHelpdeskInNuovaScheda(Map<String, String> login) {
logger.info("Si apre una nuova finestra");
JavascriptExecutor javascriptExecutor = (JavascriptExecutor) driver;
javascriptExecutor.executeScript("window.open();");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,4 +39,10 @@ public void siVisualizzaUnRecordInElencoRelativoAdUnDisservizioAncoraInCorso() {
logger.info("Si visualizza un record in elenco relativo ad un disservizio ancora in corso");
disserviziAppPAPage.checkDisserviziInCorso();
}

@And("Si visualizzano tutti i record in elenco relativi a disservizi risolti")
public void siVisualizzanoTuttiIRecordInElencoRelativiADisserviziRisolti() {
logger.info("Si visualizzano tutti i record in elenco relativi a disservizi risolti");
disserviziAppPAPage.checkDisserviziDisponibili();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
Feature: Il destinatario persona fisica visualizza i disservizi della piattaforma risolti

@TestSuite
@PF
@disserviziPF
@TA_PF_VisualizzaDisserviziRisolti

Scenario: PN-9433 - Il destinatario persona fisica visualizza i disservizi della piattaforma risolti
Given Login helpdesk con utente test "testHelpdesk"
And Si visualizza correttamente home Helpdesk
And Click su card monitoraggio piattaforma
And Si visualizza correttamente home monitoraggio
And Si annulla un disservizio in corso
Given PF - Si effettua la login tramite token exchange come "delegante", e viene visualizzata la dashboard
When Nella pagina Piattaforma Notifiche selezionare la voce 'stato della piattaforma'
And Si visualizza correttamente la tabella dei disservizi
And Si visualizzano tutti i record in elenco relativi a disservizi risolti
And Logout da portale persona fisica
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,6 @@ Feature: La persona giuridica visualizza i disservizi della applicazione
And Si verifica la creazione del disservizio
And Si verifica avvenuto disservizio in pagina stato piattaforma
And Si visualizza un record in elenco relativo ad un disservizio ancora in corso
And Annullamento disservizio
And Si annulla un disservizio in corso
And Logout da portale persona giuridica

0 comments on commit c72329b

Please sign in to comment.