com.demo.presentation.PresentacionActualizacionTest.java Source code

Java tutorial

Introduction

Here is the source code for com.demo.presentation.PresentacionActualizacionTest.java

Source

package com.demo.presentation;

import java.util.concurrent.TimeUnit;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.junit.*;
import static org.junit.Assert.*;
import org.openqa.selenium.*;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.Select;

public class PresentacionActualizacionTest {

    private static final int DELAY = 100;
    private static WebDriver driver;
    private static String baseUrl;
    private static StringBuffer verificationErrors = new StringBuffer();

    @BeforeClass
    public static void setUpClass() {
        driver = new FirefoxDriver();
        baseUrl = "http://localhost:8084/";
        driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
        driver.get(baseUrl + "/bank-crud-jsf2/pages/register.jsf");
        try {
            revertChanges();
        } catch (InterruptedException ex) {
            Logger.getLogger(PresentacionActualizacionTest.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    @Before
    public void setUp() throws InterruptedException {
        botonEditar();
    }

    @AfterClass
    public static void tearDownClass() {
        driver.quit();
        String verificationErrorString = verificationErrors.toString();
        if (!"".equals(verificationErrorString)) {
            fail(verificationErrorString);
        }
    }

    /**
     * Verifica que el sexo no se pueda modificar
     *
     * @throws Exception
     */
    @Test
    public void testSexoNoModificable() throws Exception {
        assertFalse(driver.findElement(By.id("itemForm:gender")).isEnabled());
        try {
            assertEquals("FEMALE", driver.findElement(By.id("itemForm:gender")).getAttribute("value"));
        } catch (Error e) {
            verificationErrors.append(e.toString());
        }
        botonUpdate();
        assertEquals("Female",
                driver.findElement(By.xpath("//*[@id=\"listForm\"]/table[2]/tbody/tr[1]/td[4]")).getText());
    }

    /**
     * Verifica que la modificacion se ha hecho correctamente
     *
     * @throws Exception
     */
    @Test
    public void testModificacionCorrecta() throws Exception {

        driver.findElement(By.id("itemForm:name")).clear();
        driver.findElement(By.id("itemForm:name")).sendKeys("Customer 1");
        driver.findElement(By.id("itemForm:birthday")).clear();
        driver.findElement(By.id("itemForm:birthday")).sendKeys("05-02-1991");
        driver.findElement(By.id("itemForm:about")).clear();
        driver.findElement(By.id("itemForm:about")).sendKeys("New Description");
        new Select(driver.findElement(By.id("itemForm:card"))).selectByVisibleText("Mastercard");
        driver.findElement(By.id("itemForm:numberOfCards")).clear();
        driver.findElement(By.id("itemForm:numberOfCards")).sendKeys("2");
        driver.findElement(By.id("itemForm:email")).clear();
        driver.findElement(By.id("itemForm:email")).sendKeys("customer@teis.com");
        if (driver.findElement(By.id("itemForm:mailingList")).isSelected()) {
            driver.findElement(By.id("itemForm:mailingList")).click();
        }
        if (!driver.findElement(By.id("itemForm:license")).isSelected()) {
            driver.findElement(By.id("itemForm:license")).click();
        }
        botonUpdate();

        try {
            assertEquals("Customer 1",
                    driver.findElement(By.xpath("//*[@id='listForm']/table[2]/tbody/tr[1]/td[2]")).getText());
            assertEquals("Tuesday, February 5, 1991",
                    driver.findElement(By.xpath("//*[@id='listForm']/table[2]/tbody/tr[1]/td[3]")).getText());
            assertEquals("Female",
                    driver.findElement(By.xpath("//*[@id='listForm']/table[2]/tbody/tr[1]/td[4]")).getText());
            assertEquals("New Description",
                    driver.findElement(By.xpath("//*[@id='listForm']/table[2]/tbody/tr[1]/td[5]")).getText());
            assertEquals("Mastercard",
                    driver.findElement(By.xpath("//*[@id='listForm']/table[2]/tbody/tr[1]/td[6]")).getText());
            assertEquals("2",
                    driver.findElement(By.xpath("//*[@id='listForm']/table[2]/tbody/tr[1]/td[7]")).getText());
            assertEquals("customer@teis.com",
                    driver.findElement(By.xpath("//*[@id='listForm']/table[2]/tbody/tr[1]/td[8]")).getText());
            assertEquals("No",
                    driver.findElement(By.xpath("//*[@id='listForm']/table[2]/tbody/tr[1]/td[9]")).getText());
            assertEquals("Agree",
                    driver.findElement(By.xpath("//*[@id='listForm']/table[2]/tbody/tr[1]/td[10]")).getText());
        } catch (Error e) {
            verificationErrors.append(e.toString());
        }
        revertChanges();
    }

    /**
     * Verifica que no se pueda editar si la longitud del nombre es menor a 4
     *
     * @throws InterruptedException cuando el hilo no puede ser pausado
     */
    @Test
    public void testLongitudMenorNombre() throws InterruptedException {
        longitudMenorNombre("Juan");
        longitudMenorNombre(null);
    }

    /**
     * Verifica que se haga la actualizacion cuando la longitud del nombre se
     * encuentra entre los valores indicados
     *
     * @throws InterruptedException cuando el hilo no puede ser pausado
     */
    @Test
    public void testLongitudCorrectaNombre() throws InterruptedException {
        driver.findElement(By.id("itemForm:name")).clear();
        driver.findElement(By.id("itemForm:name")).sendKeys("Luis Gil");
        botonUpdate();
        assertEquals("Luis Gil",
                driver.findElement(By.xpath("//*[@id='listForm']/table[2]/tbody/tr[1]/td[2]")).getText());
        revertChanges();
    }

    /**
     * Verifica que no se pueda editar si la longitud del nombre es mayor a 30
     *
     * @throws InterruptedException cuando el hilo no puede ser pausado
     */
    @Test
    public void testLongitudMayorNombre() throws InterruptedException {
        driver.findElement(By.id("itemForm:name")).clear();
        driver.findElement(By.id("itemForm:name")).sendKeys("Carlos Ernesto Martinez Rodriguez");
        botonUpdate();
        assertNotNull(driver.findElement(By.xpath("//*[@id='itemForm']/table/tbody/tr[1]/td[3]/span")));
        assertEquals("name 0",
                driver.findElement(By.xpath("//*[@id='listForm']/table[2]/tbody/tr[1]/td[2]")).getText());
    }

    /**
     * Verifica que se haga la actualizacion cuando la fecha de nacimiento es
     * correcta
     *
     * @throws InterruptedException cuando el hilo no puede ser pausado
     */
    @Test
    public void testBithdayCorrecto() throws InterruptedException {
        driver.findElement(By.id("itemForm:birthday")).clear();
        driver.findElement(By.id("itemForm:birthday")).sendKeys("19-07-1980");
        botonUpdate();
        assertEquals("Saturday, July 19, 1980",
                driver.findElement(By.xpath("//*[@id='listForm']/table[2]/tbody/tr[1]/td[3]")).getText());
        revertChanges();
    }

    /**
     * Verifica que se haga la actualizacion cuando la fecha de nacimiento es
     * correcta
     *
     * @throws InterruptedException cuando el hilo no puede ser pausado
     */
    @Test
    public void testBirthdayIncorrecto() throws InterruptedException {
        driver.findElement(By.id("itemForm:birthday")).clear();
        driver.findElement(By.id("itemForm:birthday")).sendKeys("Invalid Date");
        botonUpdate();
        assertNotNull(driver.findElement(By.xpath("//*[@id='itemForm']/table/tbody/tr[2]/td[3]/span")));
    }

    /**
     * Verifica que no se haga la actualizacion si la fecha de nacimiento es la
     * de un menor de edad
     *
     * @throws InterruptedException cuando el hilo no puede ser pausado
     */
    @Test
    public void testMenorEdad() throws InterruptedException {
        driver.findElement(By.id("itemForm:birthday")).clear();
        driver.findElement(By.id("itemForm:birthday")).sendKeys("30-09-2000");
        botonUpdate();
        assertNotNull(driver.findElement(By.xpath("//*[@id='itemForm']/table/tbody/tr[2]/td[3]/span")));
        //TODO Descomentar si se puede solucionar el problema
        //assertEquals("Thursday, April 1, 1993", driver.findElement(By.xpath("//*[@id='listForm']/table[2]/tbody/tr[1]/td[3]")).getText());
    }

    /**
     * Verifica que se haga la actualizacion si la descripcion tiene la longitud
     * indicada
     *
     * @throws InterruptedException cuando el hilo no puede ser pausado
     */
    @Test
    public void testLongitudCorrectaAbout() throws InterruptedException {
        driver.findElement(By.id("itemForm:about")).clear();
        driver.findElement(By.id("itemForm:about")).sendKeys("Descripcion de este cliente");
        botonUpdate();
        assertEquals("Descripcion de este cliente",
                driver.findElement(By.xpath("//*[@id='listForm']/table[2]/tbody/tr[1]/td[5]")).getText());
        revertChanges();
    }

    /**
     * Verifica que no se haga la actualizacion si la descripcion tiene una
     * longitud mayor a 250 caracteres
     *
     * @throws InterruptedException cuando el hilo no puede ser pausado
     */
    @Test
    public void testLogitudMayorAbout() throws InterruptedException {
        driver.findElement(By.id("itemForm:about")).clear();
        driver.findElement(By.id("itemForm:about"))
                .sendKeys("Lorem ipsum ad his " + "scripta blandit partiendo, eum fastidii accumsan euripidis "
                        + "in, eum liber hendrerit an. Qui ut wisi vocibus suscipiantur, "
                        + "quo dicit ridens inciderint id. Quo mundi lobortis reformidans "
                        + "eu, legimus senserit definiebas an eos. Eu sit tincidunt "
                        + "incorrupte definitionem, vis mutat affert percipit cu, eirmod "
                        + "consectetuer signiferumque eu per. In usu latine equidem dolores. "
                        + "Quo no falli viris intellegam, ut fugit veritus placerat per. Ius "
                        + "id vidit volumus mandamus, vide veritus democritum te nec, ei eos "
                        + "debet libris consulatu. No mei ferri graeco dicunt, ad cum veri "
                        + "accommodare. Sed at malis omnesque delicata, usu et iusto zzril "
                        + "meliore. Dicunt maiorum eloquentiam cum cu, sit summo dolor " + "essent te.");
        botonUpdate();
        assertNotNull(driver.findElement(By.xpath("//*[@id='itemForm']/table/tbody/tr[4]/td[3]/span")));
        assertEquals("test info 0",
                driver.findElement(By.xpath("//*[@id=\'listForm\']/table[2]/tbody/tr[1]/td[5]")).getText());

    }

    /**
     * Verifica que se haga la actualizacion si la descripcion es vacia
     *
     * @throws InterruptedException cuando el hilo no puede ser pausado
     */
    @Test
    public void testEmptyAbout() throws InterruptedException {
        driver.findElement(By.id("itemForm:about")).clear();
        botonUpdate();
        assertEquals("", driver.findElement(By.xpath("//*[@id='listForm']/table[2]/tbody/tr[1]/td[5]")).getText());
        revertChanges();
    }

    /**
     * Verifica que se haga la actualizacion cuando se le asigne una tarjeta de
     * credito correcta
     *
     * @throws InterruptedException cuando el hilo no puede ser pausado
     */
    @Test
    public void testValidCard() throws InterruptedException {
        new Select(driver.findElement(By.id("itemForm:card"))).selectByVisibleText("Amex");
        botonUpdate();
        assertEquals("Amex",
                driver.findElement(By.xpath("//*[@id='listForm']/table[2]/tbody/tr[1]/td[6]")).getText());
        revertChanges();
    }

    /**
     * Verifica que se haga la actualizacion cuando se le asigne un numero de
     * tarjetas correcto
     *
     * @throws InterruptedException
     */
    @Test
    public void testNumberOfCardsCorrect() throws InterruptedException {
        driver.findElement(By.id("itemForm:numberOfCards")).clear();
        driver.findElement(By.id("itemForm:numberOfCards")).sendKeys("100");
        botonUpdate();
        assertEquals("100",
                driver.findElement(By.xpath("//*[@id='listForm']/table[2]/tbody/tr[1]/td[7]")).getText());
        revertChanges();
    }

    /**
     * Verifica que no se haga la actualizacion cuando se le asigne un numero de
     * tarjetas incorrecto
     *
     * @throws InterruptedException
     */
    @Test
    public void testNumberOfCardsIncorrect() throws InterruptedException {
        driver.findElement(By.id("itemForm:numberOfCards")).clear();
        driver.findElement(By.id("itemForm:numberOfCards")).sendKeys("151");
        botonUpdate();
        assertNotNull(driver.findElement(By.xpath("//*[@id='itemForm']/table/tbody/tr[6]/td[3]/span")));
        assertEquals("134",
                driver.findElement(By.xpath("//*[@id=\"listForm\"]/table[2]/tbody/tr[1]/td[7]")).getText());

        driver.findElement(By.id("itemForm:numberOfCards")).clear();
        driver.findElement(By.id("itemForm:numberOfCards")).sendKeys("1nval1d Numb3r");
        botonUpdate();
        assertNotNull(driver.findElement(By.xpath("//*[@id='itemForm']/table/tbody/tr[6]/td[3]/span")));
        assertEquals("134",
                driver.findElement(By.xpath("//*[@id=\"listForm\"]/table[2]/tbody/tr[1]/td[7]")).getText());
    }

    /**
     * Verifica que se haga la actualizacion cuando se le asigne un numero de
     * tarjetas vacio
     *
     * @throws InterruptedException
     */
    @Test
    public void testNumberOfCardsEmpty() throws InterruptedException {
        driver.findElement(By.id("itemForm:numberOfCards")).clear();
        botonUpdate();
        assertEquals("", driver.findElement(By.xpath("//*[@id='listForm']/table[2]/tbody/tr[1]/td[7]")).getText());
        revertChanges();
    }

    /**
     * Verifica que se pueda hacer la modificacion cuando la lista de correos se
     * pone como verdadera
     *
     * @throws InterruptedException cuando el hilo no puede ser pausado
     */
    @Test
    public void testTrueMailingList() throws InterruptedException {
        if (!driver.findElement(By.id("itemForm:mailingList")).isSelected()) {
            driver.findElement(By.id("itemForm:mailingList")).click();
        }
        botonUpdate();
        assertEquals("Yes",
                driver.findElement(By.xpath("//*[@id='listForm']/table[2]/tbody/tr[1]/td[9]")).getText());
    }

    /**
     * Verifica que se pueda hacer la modificacion cuando la lista de correos se
     * pone como falsa
     *
     * @throws InterruptedException cuando el hilo no puede ser pausado
     */
    @Test
    public void testFalseMailingList() throws InterruptedException {
        if (driver.findElement(By.id("itemForm:mailingList")).isSelected()) {
            driver.findElement(By.id("itemForm:mailingList")).click();
        }
        botonUpdate();
        assertEquals("No",
                driver.findElement(By.xpath("//*[@id='listForm']/table[2]/tbody/tr[1]/td[9]")).getText());
    }

    /**
     * Prueba que se muestre un mensaje cuando se le pasa un email invalido
     *
     * @throws InterruptedException cuando el hilo no puede ser pausado
     */
    @Test
    public void testInvalidEmails() throws InterruptedException {
        invalidEmailCase("abc@def");
        invalidEmailCase("abc.def");
        invalidEmailCase("abc");
    }

    /**
     * Prueba que se realice la modificacion cuando se le pasa un mail valido
     *
     * @throws InterruptedException cuando el hilo no puede ser pausado
     */
    @Test
    public void testValidEmail() throws InterruptedException {
        driver.findElement(By.id("itemForm:email")).clear();
        driver.findElement(By.id("itemForm:email")).sendKeys("abc@def.ghi");
        botonUpdate();
        assertEquals("abc@def.ghi",
                driver.findElement(By.xpath("//*[@id='listForm']/table[2]/tbody/tr[1]/td[8]")).getText());
        revertChanges();
    }

    /**
     * Verifica que no se haga modificaciones cuando el campo birthday esta
     * vacio
     *
     * @throws InterruptedException cuando el hilo no puede ser pausado
     */
    @Test
    public void testEmptyBirthDay() throws InterruptedException {
        driver.findElement(By.id("itemForm:birthday")).clear();
        botonUpdate();
        assertNotNull(driver.findElement(By.xpath("//*[@id='itemForm']/table/tbody/tr[2]/td[3]/span")));
        assertEquals("Thursday, April 1, 1993",
                driver.findElement(By.xpath("//*[@id='listForm']/table[2]/tbody/tr[1]/td[3]")).getText());
    }

    /**
     * Verifica que no se haga modificaciones cuando el campo mail esta vacio
     *
     * @throws InterruptedException cuando el hilo no puede ser pausado
     */
    @Test
    public void testEmptyEmail() throws InterruptedException {
        driver.findElement(By.id("itemForm:email")).clear();
        botonUpdate();
        assertNotNull(driver.findElement(By.xpath("//*[@id='itemForm']/table/tbody/tr[7]/td[3]/span")));
        assertEquals("random@mail.com",
                driver.findElement(By.xpath("//*[@id='listForm']/table[2]/tbody/tr[1]/td[8]")).getText());
    }

    /**
     * Verifica que no se hagan modificaciones cuando el campo licencia esta
     * vacio
     *
     * @throws InterruptedException cuando el hilo no puede ser pausado
     */
    @Test
    public void testEmptyLicense() throws InterruptedException {
        if (driver.findElement(By.id("itemForm:license")).isSelected()) {
            driver.findElement(By.id("itemForm:license")).click();
        }
        botonUpdate();
        assertNotNull(driver.findElement(By.xpath("//*[@id='itemForm']/table/tbody/tr[9]/td[3]/span")));
        assertEquals("Agree",
                driver.findElement(By.xpath("//*[@id='listForm']/table[2]/tbody/tr[1]/td[10]")).getText());
    }

    /**
     * Verifica que no se hagan modificaciones cuando todos los campos posibles
     * se encuentran vacios
     *
     * @throws InterruptedException cuando el hilo no puede ser pausado
     */
    @Test
    public void testEmptyAll() throws InterruptedException {
        driver.findElement(By.id("itemForm:name")).clear();
        driver.findElement(By.id("itemForm:birthday")).clear();
        driver.findElement(By.id("itemForm:about")).clear();
        driver.findElement(By.id("itemForm:numberOfCards")).clear();
        driver.findElement(By.id("itemForm:email")).clear();
        if (driver.findElement(By.id("itemForm:mailingList")).isSelected()) {
            driver.findElement(By.id("itemForm:mailingList")).click();
        }
        if (driver.findElement(By.id("itemForm:license")).isSelected()) {
            driver.findElement(By.id("itemForm:license")).click();
        }
        botonUpdate();

        try {
            assertNotNull(driver.findElement(By.xpath("//*[@id='itemForm']/table/tbody/tr[1]/td[3]/span")));
            assertNotNull(driver.findElement(By.xpath("//*[@id='itemForm']/table/tbody/tr[2]/td[3]/span")));
            assertNotNull(driver.findElement(By.xpath("//*[@id='itemForm']/table/tbody/tr[7]/td[3]/span")));
            assertNotNull(driver.findElement(By.xpath("//*[@id='itemForm']/table/tbody/tr[9]/td[3]/span")));

            assertEquals("name 0",
                    driver.findElement(By.xpath("//*[@id='listForm']/table[2]/tbody/tr[1]/td[2]")).getText());
            assertEquals("Thursday, April 1, 1993",
                    driver.findElement(By.xpath("//*[@id='listForm']/table[2]/tbody/tr[1]/td[3]")).getText());
            assertEquals("Female",
                    driver.findElement(By.xpath("//*[@id='listForm']/table[2]/tbody/tr[1]/td[4]")).getText());
            assertEquals("test info 0",
                    driver.findElement(By.xpath("//*[@id='listForm']/table[2]/tbody/tr[1]/td[5]")).getText());
            assertEquals("Enroute",
                    driver.findElement(By.xpath("//*[@id='listForm']/table[2]/tbody/tr[1]/td[6]")).getText());
            assertEquals("134",
                    driver.findElement(By.xpath("//*[@id='listForm']/table[2]/tbody/tr[1]/td[7]")).getText());
            assertEquals("random@mail.com",
                    driver.findElement(By.xpath("//*[@id='listForm']/table[2]/tbody/tr[1]/td[8]")).getText());
            assertEquals("No",
                    driver.findElement(By.xpath("//*[@id='listForm']/table[2]/tbody/tr[1]/td[9]")).getText());
            assertEquals("Agree",
                    driver.findElement(By.xpath("//*[@id='listForm']/table[2]/tbody/tr[1]/td[10]")).getText());
        } catch (Error e) {
            verificationErrors.append(e.toString());
        }
    }

    /**
     * Revierte los cambios hechos al primer registro encontrado en la tabla
     *
     * @throws InterruptedException cuando el hilo no puede ser pausado
     */
    private static void revertChanges() throws InterruptedException {
        botonEditar();
        driver.findElement(By.id("itemForm:name")).clear();
        driver.findElement(By.id("itemForm:name")).sendKeys("name 0");
        driver.findElement(By.id("itemForm:birthday")).clear();
        driver.findElement(By.id("itemForm:birthday")).sendKeys("01-04-1993");

        driver.findElement(By.id("itemForm:about")).clear();
        driver.findElement(By.id("itemForm:about")).sendKeys("test info 0");
        new Select(driver.findElement(By.id("itemForm:card"))).selectByVisibleText("Enroute");
        driver.findElement(By.id("itemForm:numberOfCards")).clear();
        driver.findElement(By.id("itemForm:numberOfCards")).sendKeys("134");
        driver.findElement(By.id("itemForm:email")).clear();
        driver.findElement(By.id("itemForm:email")).sendKeys("random@mail.com");
        if (driver.findElement(By.id("itemForm:mailingList")).isSelected()) {
            driver.findElement(By.id("itemForm:mailingList")).click();
        }
        if (!driver.findElement(By.id("itemForm:license")).isSelected()) {
            driver.findElement(By.id("itemForm:license")).click();
        }
        botonUpdate();
    }

    /**
     * Ejecuta la accion del boton editar con un retraso de tiempo
     *
     * @throws InterruptedException cuando el hilo no puede ser pausado
     */
    private static void botonEditar() throws InterruptedException {
        driver.findElement(By.id("listForm:j_idt49:0:j_idt83")).click();
        Thread.sleep(DELAY);
    }

    /**
     * Ejecuta la accion del boton update con un retraso de tiempo
     *
     * @throws InterruptedException cuando el hilo no puede ser pausado
     */
    private static void botonUpdate() throws InterruptedException {
        driver.findElement(By.id("itemForm:j_idt41")).click();
        Thread.sleep(DELAY);
    }

    /**
     * Valida que se muestre un mensaje de advertencia cuando se trata de
     * modificar el campo correo
     *
     * @param mail correo que se dispone a ser validado
     * @throws InterruptedException cuando el hilo no puede ser pausado
     */
    private void invalidEmailCase(final String mail) throws InterruptedException {
        setUp();
        driver.findElement(By.id("itemForm:email")).clear();
        driver.findElement(By.id("itemForm:email")).sendKeys(mail);
        botonUpdate();
        assertNotNull(driver.findElement(By.xpath("//*[@id='itemForm']/table/tbody/tr[7]/td[3]/span")));
        //TODO Validar que no haga cambios en la bd
        //assertEquals("random@mail.com", driver.findElement(By.xpath("//*[@id=\'listForm\']/table[2]/tbody/tr[1]/td[8]")).getText());
    }

    /**
     * Valida que no se haga ninguna modificacion cuando se trata de modificar
     * el campo nombre
     *
     * @param nombre nombre que se dispone a ser validado
     * @throws InterruptedException cuando el hilo no puede ser pausado
     */
    private void longitudMenorNombre(final String nombre) throws InterruptedException {
        driver.findElement(By.id("itemForm:name")).clear();
        driver.findElement(By.id("itemForm:name")).sendKeys(nombre);
        botonUpdate();
        assertNotNull(driver.findElement(By.xpath("//*[@id='itemForm']/table/tbody/tr[1]/td[3]/span")));
        assertEquals("name 0",
                driver.findElement(By.xpath("//*[@id='listForm']/table[2]/tbody/tr[1]/td[2]")).getText());
    }
}