package net.conselldemallorca.helium.test.integracio;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import net.conselldemallorca.helium.test.util.BaseTest;
import net.conselldemallorca.helium.ws.formulari.GuardarFormulari;
import net.conselldemallorca.helium.ws.formulari.ParellaCodiValor;
import org.junit.FixMethodOrder;
import org.junit.Test;
import org.junit.runners.MethodSorters;
import org.openqa.selenium.By;
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class FormularisExterns extends BaseTest {
//EXP.10.4 - Integracions
//EXP.10.4.1 - Formularis externs
//EXP.10.4.1.1 - Desenvolupament aplicacio externa. (Instalació de WS extern per simular que l´aplicació helium reb els parametres)
//EXP.10.4.1.2 - Execució de formularis externs
//EXP.10.4.1.3 - Comprovació importació de dades de formularis
/**
* A C T I V A R A T R U E L A P R O P I E D A D: app.selenium.ws.integracion del archivo helium.properties del modulo helium-webapp
*/
String entorn = carregarPropietat("tipexp.integracio.forms.ext.entorn.nom", "Nom de l'entorn de proves no configurat al fitxer de properties");
String titolEntorn = carregarPropietat("tipexp.integracio.forms.ext.entorn.titol", "Titol de l'entorn de proves no configurat al fitxer de properties");
String usuari = carregarPropietat("test.base.usuari.configuracio", "Usuari configuració de l'entorn de proves no configurat al fitxer de properties");
String usuariDis = carregarPropietat("test.base.usuari.disseny", "Usuari configuració de l'entorn de proves no configurat al fitxer de properties");
String nomTipusExp = carregarPropietat("tipexp.deploy.info.tipus.expedient.nom", "Nom del tipus d'expedient de proves no configurat al fitxer de properties");
String codTipusExp = carregarPropietat("tipexp.deploy.info.tipus.expedient.codi", "Codi del tipus d'expedient de proves no configurat al fitxer de properties");
String pathExport = carregarPropietatPath("tipexp.deploy.arxiu.path", "Ruta de l´arxiu del tipus d´expedient exportat no configurat al fitxer de properties");
String nomDefProc = "Cons1";
// XPATHS
String linkAccesInfoDefProc = "//*[@id='registre']/tbody/tr[contains(td/a, '"+nomDefProc+"')]/td/a[contains(@href, '/definicioProces/info.html')]";
String pestanyaTasquesDefProc = "//*[@id='tabnav']/li/a[contains(@href, '/definicioProces/tascaLlistat.html')]";
String botoModificarTasca = "//*[@id='command']/div[@class='buttonHolder']/button[text() = 'Modificar']";
String botoConsultarExpLlistat = "//*[@id='command']/div/div[@class='buttonHolder']/button[text() = 'Consultar']";
String linkAccedirExpedient = "//*[@id='registre']/tbody/tr[1]/td/a[contains(@href, '/tasca/personaLlistat.html')]";
String linkAccedirTasca = "//*[@id='registre']/tbody/tr/td[1]/a";
String botoObrirFormExtern = "//*[@id='content']/form/button";
String enllaçTipusExpLlistat = "//*[@id='registre']/tbody/tr/td[1]/a[contains(@href, '/expedientTipus/info.html')]";
String pestanyaDefProcExpedient = "//*[@id='tabnav']/li/a[contains(@href, '/expedientTipus/definicioProcesLlistat.html')]";
String botoMarcaProcesInicial = "//*[@id='registre']/tbody/tr/td/form[contains(@action, '/expedientTipus/definicioProcesInicial.html')]/button[contains(text(), 'inicial')]";
String iframeFormExt = "//*[@id='formExtern']";
String urlFormExt = carregarPropietat("test.url.ws.inici.formulari", "URL de WS de formularis externs no configurat al fitxer de properties");
String urlFormExt2 = carregarPropietat("test.url.ws.formulari.extern", "URL de WS de formularis externs no configurat al fitxer de properties");
String idFormExt = "command";
String botoGuardarDadesIntegracio = "//*[@id='command']/div[@class='buttonHolder']/button[text() = 'Guardar']";
String aspaTancarDialogForm = "/html/body/div[8]/div[1]/a";//"/html/body/div[contains(@class, 'ui-dialog')]/div[@class='ui-dialog-titlebar']/a";
String variableResultatRetornFormulari = "//*[@id='command']/div/div/label[text() = 'Variable Boolean']";
@Test
public void a0_inicialitzacio() {
carregarUrlConfiguracio();
crearEntorn(entorn, titolEntorn);
assignarPermisosEntorn(entorn, usuari, "DESIGN", "ORGANIZATION", "READ", "ADMINISTRATION");
assignarPermisosEntorn(entorn, usuariDis, "DESIGN", "ORGANIZATION", "READ", "ADMINISTRATION");
seleccionarEntorn(titolEntorn);
crearTipusExpedient(nomTipusExp, codTipusExp);
importarDadesTipExp(codTipusExp, pathExport);
assignarPermisosTipusExpedient(codTipusExp, usuari, "DESIGN","CREATE","SUPERVISION","WRITE","MANAGE","DELETE","READ","ADMINISTRATION");
assignarPermisosTipusExpedient(codTipusExp, usuariDis, "DESIGN","CREATE","SUPERVISION","WRITE","MANAGE","DELETE","READ","ADMINISTRATION");
//Desmarcam de l´expedient alguns checks restrictius per poder-los consultar al llistat
accedirInformacioExpedient(codTipusExp);
if (driver.findElement(By.id("restringirPerGrup0")).isSelected()) {
driver.findElement(By.id("restringirPerGrup0")).click();
}
driver.findElement(By.xpath("//*[@id='command']/div[@class='buttonHolder']/button[text() = 'Modificar']")).click();
}
@Test
public void b1_preparar_tasca_defproc() {
carregarUrlDisseny();
seleccionarEntorn(titolEntorn);
//Modificam la URL de servei de integracio amb forms del tipus d´expedient per la prova
actions.moveToElement(driver.findElement(By.id("menuDisseny")));
actions.build().perform();
actions.moveToElement(driver.findElement(By.xpath("//a[contains(@href, '/expedientTipus/llistat.html')]")));
actions.click();
actions.build().perform();
driver.findElement(By.xpath("//*[@id='registre']/tbody/tr[contains(td[1],'Expedient Importat')]")).click();
driver.findElement(By.xpath("//a[contains(@href, '/helium/expedientTipus/formext.html')]")).click();
driver.findElement(By.id("url0")).clear();
driver.findElement(By.id("url0")).sendKeys(urlFormExt);
driver.findElement(By.id("usuari0")).clear();
driver.findElement(By.id("contrasenya0")).clear();
screenshotHelper.saveScreenshot("integracions/formsExterns/b1_0_prepara_tipexp-dades_servei.png");
driver.findElement(By.xpath(botoGuardarDadesIntegracio)).click();
//Modificam la tasca 1 per afegirli un formulari extern
accedirPestanyaTasquesDefProc();
screenshotHelper.saveScreenshot("integracions/formsExterns/b1_1_prepara_tasca-llistat_inicial.png");
driver.findElement(By.xpath(linkAccedirTasca)).click();
driver.findElement(By.id("recursForm0")).sendKeys(urlFormExt);
driver.findElement(By.id("formExtern0")).sendKeys(idFormExt);
screenshotHelper.saveScreenshot("integracions/formsExterns/b1_2_prepara_tasca-modifica_tasca.png");
driver.findElement(By.xpath(botoModificarTasca)).click();
screenshotHelper.saveScreenshot("integracions/formsExterns/b1_3_prepara_tasca-resultat_modificacio.png");
//Assignam la def de proces com a proces inicial
accedirDissenyTipusExpedient();
driver.findElement(By.xpath(enllaçTipusExpLlistat)).click();
driver.findElement(By.xpath(pestanyaDefProcExpedient)).click();
driver.findElement(By.xpath(botoMarcaProcesInicial)).click();
screenshotHelper.saveScreenshot("integracions/formsExterns/b1_4_prepara_tasca-assignar_proces_inicial.png");
}
@Test
public void c1_provar_tasca_form_ext() {
carregarUrlDisseny();
seleccionarEntorn(titolEntorn);
iniciarExpediente(codTipusExp, "1", "Prova integracio formularis externs");
screenshotHelper.saveScreenshot("integracions/formsExterns/c1_1_provar_formulari_extern-iniciar_expedient.png");
try{
consultarTareas(null, null, null, false);
}catch (Exception ex) {}
screenshotHelper.saveScreenshot("integracions/formsExterns/c1_2_provar_formulari_extern-llistat_tasques.png");
driver.findElement(By.xpath(linkAccedirTasca)).click();
screenshotHelper.saveScreenshot("integracions/formsExterns/c1_3_provar_formulari_extern-accedir_tasca.png");
driver.findElement(By.xpath(botoObrirFormExtern)).click();
try {Thread.sleep(5000);}catch(Exception ex){};
screenshotHelper.saveScreenshot("integracions/formsExterns/c1_4_provar_formulari_extern-obrir_form_extern.png");
existeixElementAssert(iframeFormExt, "No s´ha obert l'iframe amb el formulari extern.");
String URL_actual = driver.getCurrentUrl();
String idTasca = URL_actual.substring(URL_actual.indexOf("id=")+3, URL_actual.length());
//Abans de tancar el formulari, guardam les dades com ho faria el WS de la aplicacio externa
guardarFormulariExtern(idTasca);
//Tancam el formulari
driver.findElement(By.xpath(aspaTancarDialogForm)).click();
//Comprovam que han aparegut les variables de la resposta a la cridada a guardarFormulariExtern()
existeixElementAssert(variableResultatRetornFormulari, "No s´ha trobat la variable de retorn del formulari extern.");
screenshotHelper.saveScreenshot("integracions/formsExterns/c1_5_provar_formulari_extern-resultat_retorn_ws.png");
}
@Test
public void z_limpiar() throws InterruptedException {
carregarUrlConfiguracio();
seleccionarEntorn(titolEntorn);
eliminarExpedient(null, null, nomTipusExp);
eliminarConsultaTipus("codCons");
// Eliminar la def de proceso
eliminarDefinicioProces(nomDefProc);
// Eliminar el tipo de expediente
eliminarTipusExpedient(codTipusExp);
eliminarEntorn(entorn);
screenshotHelper.saveScreenshot("TasquesDadesTasca/finalizar_expedient/1.png");
}
// **********************************************
// F U N C I O N S P R I V A D E S
// **********************************************
private void accedirPestanyaTasquesDefProc() {
accedirPantallaDissenyDefProc();
driver.findElement(By.xpath(linkAccesInfoDefProc)).click();
driver.findElement(By.xpath(pestanyaTasquesDefProc)).click();
}
private void accedirDissenyTipusExpedient() {
actions.moveToElement(driver.findElement(By.id("menuDisseny")));
actions.build().perform();
actions.moveToElement(driver.findElement(By.xpath("//a[contains(@href, '/expedientTipus/llistat.html')]")));
actions.click();
actions.build().perform();
}
private void guardarFormulariExtern (String codTasca) {
try {
List<ParellaCodiValor> valors = new ArrayList<ParellaCodiValor>();
valors.add(new ParellaCodiValor("import", new BigDecimal("100")));
GuardarFormulari gf = (GuardarFormulari)net.conselldemallorca.helium.test.integracio.utils.WsClientUtils.getWsClientProxy(GuardarFormulari.class, urlFormExt2, null, null, "NONE", false, true, false);
gf.guardar(codTasca, valors);
}catch (Exception ex) {
ex.printStackTrace();
}
}
}