🏛️ Facade - EmilioCrespoPeran/pattern-designs GitHub Wiki
📚 Descripción del patrón
El patrón Facade proporciona una interfaz unificada y simplificada a un conjunto de interfaces más complejas.
🧩 Enunciado del ejercicio
En una biblioteca digital hay múltiples servicios: ServicioLibros
, ServicioUsuarios
, ServicioPrestamos
, ServicioNotificaciones
.
Tareas:
- Crea una clase
BibliotecaFacade
que simplifique el préstamo de un libro:- Verifica disponibilidad del libro.
- Verifica si el usuario está activo.
- Registra el préstamo.
- Envía notificación.
Método principal: String prestarLibro(String tituloLibro, String idUsuario)
Debe devolver mensajes claros según el estado del proceso.
🛠️ Clases base
Las clases base para el ejercicio las puedes descargar de src/main/java/es/cresdev/patterns/facade/biblioteca/servicios
🧪 Test
@SpringBootTest
public class FacadeBibliotecaTests {
private BibliotecaFacade facade;
@BeforeEach
void setUp() {
facade = new BibliotecaFacade(
new ServicioLibrosDummy(),
new ServicioPrestamosDummy(),
new ServicioUsuariosDummy(),
new ServicioNotificacionesDummy()
);
}
@Test
void deberiaPrestarLibroCuandoTodoEsCorrecto() {
String resultado = facade.prestarLibro("Clean Code", "user001");
assertEquals("Préstamo completado para el libro: Clean Code", resultado);
}
@Test
void noDeberiaPrestarLibroCuandoNoEstaDisponible() {
String resultado = facade.prestarLibro("LibroInexistente", "user002");
assertEquals("El libro LibroInexistente no está disponible", resultado);
}
@Test
void noDeberiaPrestarLibroSiUsuarioNoEstaActivo() {
String resultado = facade.prestarLibro("Clean Code", "inactivo123");
assertEquals("El usuario inactivo123 no está activo", resultado);
}
@Test
void noDeberiaPrestarLibroSiFallaRegistroPrestamo() {
String resultado = facade.prestarLibro("Fallo", "user004");
assertEquals("Error al registrar el préstamo", resultado);
}
@Test
void deberiaPrestarLibroPeroFallaNotificacion() {
String resultado = facade.prestarLibro("Kafka en la orilla", "noNotificar");
assertEquals("Préstamo completado para el libro: Kafka en la orilla (pero no se pudo notificar al usuario)", resultado);
}
}