co.edu.uniandes.csw.mpusedvehicle.functionalTest.CheckoutFunctionalIT.java Source code

Java tutorial

Introduction

Here is the source code for co.edu.uniandes.csw.mpusedvehicle.functionalTest.CheckoutFunctionalIT.java

Source

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package co.edu.uniandes.csw.mpusedvehicle.functionalTest;

import co.edu.uniandes.csw.mpusedvehicle.configuration.ApiKeyEnvVariables;
import co.edu.uniandes.csw.mpusedvehicle.dtos.CartItemDTO;
import co.edu.uniandes.csw.mpusedvehicle.dtos.OrderDTO;
import co.edu.uniandes.csw.mpusedvehicle.samples.Samples;
import co.edu.uniandes.csw.mpusedvehicle.services.OrderService;
import co.edu.uniandes.csw.mpusedvehicle.services.ProductService;
import co.edu.uniandes.csw.mpusedvehicle.services.UserService;
import java.io.File;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import javax.ws.rs.core.Cookie;
import org.jboss.arquillian.container.test.api.Deployment;
import org.jboss.arquillian.container.test.api.RunAsClient;
import org.jboss.arquillian.junit.Arquillian;
import org.jboss.arquillian.test.api.ArquillianResource;
import org.jboss.shrinkwrap.api.Archive;
import org.jboss.shrinkwrap.api.Filters;
import org.jboss.shrinkwrap.api.GenericArchive;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.api.importer.ExplodedImporter;
import org.jboss.shrinkwrap.api.spec.WebArchive;
import org.jboss.shrinkwrap.resolver.api.DependencyResolvers;
import org.jboss.shrinkwrap.resolver.api.maven.MavenDependencyResolver;
import org.junit.AfterClass;
import org.junit.Assert;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.FixMethodOrder;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.MethodSorters;
import org.openqa.selenium.By;
import org.openqa.selenium.NoSuchElementException;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import uk.co.jemos.podam.api.PodamFactory;
import uk.co.jemos.podam.api.PodamFactoryImpl;

/**
 *
 * @author dham
 */
@RunWith(Arquillian.class)
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class CheckoutFunctionalIT {

    private static WebDriver driver;
    private static Cookie cookieSessionId;
    private static List<CartItemDTO> cartItems = new ArrayList<>();
    private static OrderDTO order;

    // Mediante la anotacion @ArquillianResource se obtiene la URL de despliegue de la aplicacion
    @ArquillianResource
    URL deploymentURL;

    @Deployment
    public static Archive<?> createDeployment() {
        MavenDependencyResolver resolver = DependencyResolvers.use(MavenDependencyResolver.class)
                .loadMetadataFromPom("pom.xml");

        WebArchive war = ShrinkWrap
                // Nombre del Proyecto "BookBasico.web" seguido de ".war". Debe ser el mismo nombre del proyecto web que contiene los javascript y los  servicios Rest
                .create(WebArchive.class, "mpUsedVehicle.web.war")
                // Se agrega la dependencia a la logica con el nombre groupid:artefactid:version (GAV) 
                .addAsLibraries(resolver.artifact("co.edu.uniandes.csw.mpusedvehicle:mpUsedVehicle.logic:1.0")
                        .resolveAsFiles())
                // Se agregan los compilados de los paquetes que se van a probar 
                .addPackage(ProductService.class.getPackage()).addPackage(UserService.class.getPackage())
                .addPackage(OrderService.class.getPackage()).addPackage(ApiKeyEnvVariables.class.getPackage())
                // Se agrega contenido estatico: html y modulos de javascript.  
                .addAsWebResource(new File(Samples.URLRESOURCES, "index.html"))
                .merge(ShrinkWrap.create(GenericArchive.class).as(ExplodedImporter.class)
                        .importDirectory(Samples.URLRESOURCES).as(GenericArchive.class), "/", Filters.includeAll())
                // El archivo que contiene la configuracion a la base de datos.  
                .addAsResource("META-INF/persistence.xml", "META-INF/persistence.xml")
                // El archivo shiro.ini. 
                .addAsWebInfResource(new File("src/main/webapp/WEB-INF/shiro.ini"))
                // El archivo beans.xml es necesario para injeccion de dependencias.  
                .addAsWebInfResource(new File("src/main/webapp/WEB-INF/beans.xml"))
                // El archivo web.xml es necesario para el despliegue de los servlets 
                .setWebXML(new File("src/main/webapp/WEB-INF/web.xml"));

        return war;
    }

    @BeforeClass
    public static void setUp() {
        insertData();
        // Crea una instancia del driver de firefox sobre el que se ejecutara la aplicacion. 
        driver = new FirefoxDriver();

    }

    private static void insertData() {

        Samples.createSampleClient();
        cookieSessionId = Samples.login("test", "Pepitoperez123");
        for (int i = 0; i < 5; i++) {
            PodamFactory factory = new PodamFactoryImpl();
            cartItems.add(factory.manufacturePojo(CartItemDTO.class));
            cartItems.add(factory.manufacturePojo(CartItemDTO.class));
            order = factory.manufacturePojo(OrderDTO.class);
        }
    }

    @Before
    public void setUpTest() {
        // El browser  va a la url de despliegue. Se ejecuta al inicar cada uno de los metodos de prueba indicados con @Test
        driver.get(deploymentURL.toString());

    }

    @AfterClass
    public static void tearDown() throws Exception {
        //Se ejecuta al terminar todos los metodos de prueba indicados con @Test Cierra el browser
        driver.quit();
    }

    /**
     * No Items to add to cart
     * @throws InterruptedException 
     */
    @Test(expected = NoSuchElementException.class)
    @RunAsClient
    public void t1addItemToCart() throws InterruptedException {

        Thread.sleep(2000);
        driver.findElement(By.id("0-addToCart-btn"));

        Thread.sleep(1000);
    }

}