DAAExample
==========

Aplicación y arquitectura de ejemplo para la asignatura Desarrollo Ágil de
Aplicaciones del Grado en Ingeniería Informática de la Escuela Superior de
Ingeniería Informática de la Universidad de Vigo.

## Ejecución con Maven
La configuración de Maven ha sido preparada para permitir varios tipos de
ejecución.

### Ejecución

El proyecto está configurado para poder ejecutar la aplicación sin tener que
realizar ninguna configuración adicional salvo tener disponible un servidor
MySQL en local.

Los ficheros del proyecto `db/mysql.sql` y 'db/mysql-with-inserts.sql' contienen
todas las consultas necesarias para crear la base de datos y el usuario
requeridos, con o sin datos de ejemplo, respectivamente. Por lo tanto, podemos
configurar inicialmente la base de datos con cualquiera de los siguientes
comandos (desde la raíz el proyecto):

* Sin datos: `mysql -u root -p < db/mysql.sql`
* Con datos: `mysql -u root -p < db/mysql-with-inserts.sql`

Una vez configurada la base de datos podemos lanzar la ejecución con el comando:

`mvn -Prun clean package cargo:run`

La aplicación se servirá en la URL local: http://localhost:9080/DAAExample

Para detener la ejecución podemos utilizar `Ctrl+C`.

### Ejecución con redespliegue automático

Durante el desarrollo es interesante que la apliación se redespliegue de forma
automática cada vez que se hace un cambio. Para ello podemos utilizar el
siguiente comand:

`mvn -Prun clean package cargo:start fizzed-watcher:run`

La aplicación se servirá en la URL local: http://localhost:9080/DAAExample

Para detener la ejecución podemos utilizar `Ctrl+C`.

### Ejecución con redespliegue automático independiente para backend y frontend (recomendado)

A diferencia del modo de redespliegue automático anterior, en este caso
*backend* y *frontend* se ejecutarán de forma independiente. Esto hace que los
cambios en las clases Java harán que se redespliegue el *backend*, mientras que
los cambios en Angular harán que se redespliegue el *frontend*.

`mvn -Prun-independent-autoredeploy clean exec:exec@npm-build exec:exec@npm-start package cargo:start fizzed-watcher:run`

La aplicación se servirá en local:

  * **Backend**: http://localhost:9080/DAAExample
  * **Frontend**: http://localhost:4200

Para detener la ejecución podemos utilizar `Ctrl+C`.

### Construcción con tests de unidad e integración

En esta construcción se ejecutarán todos los tests relacionados con el backend:

* **Unidad**: se utilizan para testear las entidades y las capas DAO y REST de
forma aislada.
* **Integración**: se utilizan para testear las capas REST y DAO de forma
integrada. Para este tipo de pruebas se utiliza una base de datos HSQL en
memoria.

El comando para lanzar esta construcción es:

`mvn install`

### Construcción con tests de unidad, integración y aceptación

Esta construcción es similar a la previa, añadiendo las **pruebas de
aceptación**, que comprueban que las fucionalidades de la aplicación están
correctamente implementadas.

En estas pruebas se descarga y arranca el un servidor Tomcat 8 en el que se
despliega la aplicación configurada para utilizar una base de datos HSQL. Las
pruebas se hacen sobre la interfaz web con Selenium, que iniciará un Firefox
local de forma automática.

`mvn -Pacceptance-tests install`
