Plataforma de gestión cinematográfica desarrollada con Spring Boot, Thymeleaf y un fuerte enfoque en calidad software, testing automatizado, integración continua y buenas prácticas de desarrollo.
Only Film es una aplicación web de gestión de cine desarrollada con Spring Boot y Thymeleaf que permite consultar películas, gestionar sesiones, comprar entradas, generar tickets QR y administrar la plataforma mediante distintos niveles de permisos.
El proyecto ha sido concebido como un ejercicio completo de ingeniería del software, poniendo especial atención en:
- Arquitectura MVC
- Calidad del código
- Testing automatizado
- Integración continua
- Seguridad
- Experiencia de usuario
- Buenas prácticas de desarrollo
- Consulta de cartelera
- Visualización de detalles de películas
- Consulta de sesiones disponibles
- Registro e inicio de sesión
- Compra de entradas
- Selección de butacas
- Proceso de checkout
- Generación de tickets QR
- Historial de compras
- Valoración y reseñas de películas
- Gestión de películas
- Gestión de salas
- Gestión de sesiones
- Gestión de usuarios
- Activación y desactivación lógica de elementos
- Panel de administración
La aplicación sigue una arquitectura MVC multicapa:
Controladores (MVC)
│
Servicios
│
Repositorios
│
Base de Datos
Tecnologías principales:
Spring MVC
Spring Security
Spring Data JPA
Hibernate
Thymeleaf
Bootstrap
H2 Database
| Entidad | Descripción |
|---|---|
| Movie | Películas disponibles |
| Room | Salas de cine |
| Session | Sesiones de proyección |
| Ticket | Entradas adquiridas |
| Review | Reseñas y valoraciones |
| User | Usuarios de la aplicación |
La aplicación implementa autenticación y autorización mediante Spring Security.
| Rol | Descripción |
|---|---|
| ROLE_USER | Usuario registrado |
| ROLE_ADMIN | Administrador |
- Compra de entradas
- Acceso a tickets QR
- Gestión de películas
- Gestión de salas
- Gestión de sesiones
- Gestión de usuarios
- Panel administrativo
-
Arquitectura MVC desacoplada mediante:
- Controller
- Service
- Repository
-
Testing multinivel:
- Repository Tests
- Service Tests
- Controller Tests
- Security Tests
- Selenium E2E Tests
-
Seguridad basada en Spring Security con control de acceso por roles:
- ROLE_USER
- ROLE_ADMIN
-
Generación dinámica de tickets QR.
-
Gestión de estados de tickets:
- LIBRE
- PAGADO
- CANCELADO
-
Borrado lógico mediante atributo
active. -
Integración continua mediante GitHub Actions.
-
Análisis estático y métricas de calidad mediante SonarQube.
-
Cobertura de código superior al 83%.
-
Despliegue contenerizado mediante Docker.
-
Base de datos H2 persistente para despliegue y H2 en memoria para testing.
Uno de los objetivos principales del proyecto ha sido implementar una estrategia de testing completa que cubra todas las capas de la aplicación.
Selenium E2E
Controller Tests
Service Tests
Repository Tests
| Tipo de prueba | Objetivo |
|---|---|
| Repository Tests | Validación de consultas y persistencia |
| Service Tests | Validación de lógica de negocio |
| Controller Tests | Verificación de endpoints MVC |
| Security Tests | Validación de permisos y seguridad |
| Selenium E2E Tests | Automatización de flujos completos de usuario |
126 / 126 Tests Superados
100 % Éxito
La suite completa ejecuta pruebas de backend, seguridad y experiencia de usuario de forma automatizada.
Las pruebas E2E reproducen el comportamiento real de los usuarios validando:
- Inicio de sesión
- Navegación por la aplicación
- Consulta de películas
- Selección de sesiones
- Selección de butacas
- Checkout
- Generación de tickets QR
- Creación de reseñas
Estas pruebas garantizan la estabilidad funcional del sistema desde la perspectiva del usuario final.
El proyecto incorpora integración continua mediante GitHub Actions.
- Tests de repositorios
- Tests de servicios
- Tests de controladores
- Tests de seguridad
- Tests Selenium E2E
- Detección temprana de errores
- Prevención de regresiones
- Validación automática de cambios
- Aumento de la calidad global del proyecto
Los workflows se ejecutan mediante
workflow_dispatchpara optimizar el consumo de minutos disponibles en el entorno académico compartido.
La calidad del proyecto es analizada mediante SonarQube.
| Métrica | Valor |
|---|---|
| Cobertura | 83.5 % |
| Maintainability | A |
| Reliability | A |
| Duplicaciones | 0 % |
El análisis continuo permite detectar:
- Código duplicado
- Deuda técnica
- Posibles defectos
- Problemas de mantenibilidad
- Hotspots de seguridad
| Acción | Visitante | Usuario | Administrador |
|---|---|---|---|
| Ver películas y sesiones | ✅ | ✅ | ✅ |
| Registrarse | ✅ | ❌ | ❌ |
| Iniciar sesión | ✅ | ❌ | ❌ |
| Comprar entradas | ❌ | ✅ | ✅ |
| Acceder a tickets QR | ❌ | ✅ | ✅ |
| Crear reseñas | ❌ | ✅ | ✅ |
| Gestionar películas | ❌ | ❌ | ✅ |
| Gestionar salas | ❌ | ❌ | ✅ |
| Gestionar sesiones | ❌ | ❌ | ✅ |
| Gestionar usuarios | ❌ | ❌ | ✅ |
| Acceder al panel de administración | ❌ | ❌ | ✅ |
La aplicación ha sido desplegada satisfactoriamente en una VPS Linux utilizando Docker.
Ubuntu Linux
Docker
Docker Compose
Spring Boot
H2 Persistente
- Aplicación contenerizada
- Persistencia de datos
- Ejecución en entorno cloud
- Configuración mediante perfiles Spring
- Despliegue reproducible
- Java 25
- Spring Boot 4
- Spring MVC
- Spring Data JPA
- Hibernate
- Thymeleaf
- Bootstrap 5
- HTML5
- CSS3
- JavaScript
- H2 Database
- JUnit 5
- Mockito
- MockMvc
- Selenium WebDriver
- Git
- GitHub
- GitHub Actions
- Docker
- SonarQube
- Java 25
- Maven
- Git
git clone https://github.com/certidevs/g1_testing.git
cd g1_testingmvn spring-boot:runAcceso:
http://localhost:8080
mvn testmvn test -Dtest=AllTestsSuitemvn test -Dtest=SeleniumTestsSuitemvn test -Dtest=RepositoryTestsSuitemvn test -Dtest=ControllerTestsSuiteLa suite completa ejecuta actualmente:
126 / 126 tests superados
| Usuario | Contraseña | Rol |
|---|---|---|
| admin | admin | Administrador |
| user | user | Usuario |
src/main/java/com/demo
├── config
├── controller
├── dto
├── model
├── repository
├── service
src/test/java/com/demo
├── controller
├── repository
├── service
├── security
└── ui
| Integrante | GitHub |
|---|---|
| Fran Ramírez Martín | https://github.com/fran-eliot |
| Adrián López de Haro | https://github.com/alopezdeharo |
| Barbara Urbano | https://github.com/barbieurbano |
| Andrés Soto | https://github.com/mrandressoto-code |
- API REST
- Autenticación JWT
- PostgreSQL / MySQL
- Integración con pasarela de pago
- Aplicación móvil
- Observabilidad y monitorización
- Kubernetes
- Despliegue multi-entorno
https://github.com/certidevs/g1_testing
Proyecto académico desarrollado con fines educativos.
Desarrollado con ☕ Java, 🍃 Spring Boot y ❤️ pasión por la calidad software









