Commit f285aa39 by Antonio Rueda

Implementación de búsqueda de hoteles por nombre parcial y localidad

parent 9e490125
......@@ -44,5 +44,13 @@ public class Hotel {
public int id() {
return id;
}
}
public String nombre() {
return nombre;
}
public String localidad() {
return localidad;
}
}
......@@ -5,6 +5,7 @@ import es.ujaen.dae.reservahoteles.entidades.Cliente;
import es.ujaen.dae.reservahoteles.entidades.Hotel;
import es.ujaen.dae.reservahoteles.entidades.Reserva;
import es.ujaen.dae.reservahoteles.excepciones.ClienteYaRegistrado;
import es.ujaen.dae.reservahoteles.util.UtilString;
import java.time.LocalDate;
import java.util.List;
import java.util.Map;
......@@ -54,10 +55,20 @@ public class ServicioReservas {
throw new UnsupportedOperationException();
}
public Optional<Hotel> buscarHotel(String nombre, String localidad) {
// Por implementar
throw new UnsupportedOperationException();
/**
* Búsqueda de hoteles por nombre o localidad aproximados
* @param nombre el nombre total o parcial del hotel
* @param localidad el nombre total o parcial de la localidad
* @return la lista de hoteles candidatos
*/
public List<Hotel> buscarHotel(String nombre, String localidad) {
var nombreNorm = UtilString.normalizar(nombre);
var localidadNorm = UtilString.normalizar(localidad);
return hoteles.values().stream().filter(h ->
UtilString.normalizar(h.localidad()).contains(localidadNorm) &&
UtilString.normalizar(h.nombre()).contains(nombreNorm))
.toList();
}
public Reserva reserva(Cliente cliente, Hotel hotel,
......
......@@ -7,7 +7,7 @@ import java.text.Normalizer;
* Utilidades para comparación flexible de cadenas
* @author ajrueda
*/
public class UtilidadesCadenas {
public class UtilString {
/**
* Normaliza una cadena pasando a minúsculas, quitando espacios al principio,
* final y duplicados y eliminando acentos.
......
......@@ -2,7 +2,9 @@
package es.ujaen.dae.reservahoteles.servicios;
import es.ujaen.dae.reservahoteles.entidades.Cliente;
import org.assertj.core.api.Assertions;
import es.ujaen.dae.reservahoteles.entidades.Hotel;
import java.util.List;
import static org.assertj.core.api.Assertions.assertThat;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
......@@ -25,8 +27,21 @@ public class TestServicioReservas {
var cliente = new Cliente("Pedro", "Jaén Jaén", "611203025", "pjaen@gmail.com", "miClAvE");
servicio.nuevoCliente(cliente);
Assertions.assertThat(servicio.login("ppp@gmail.com", "miClAvE")).isEmpty();
Assertions.assertThat(servicio.login("pjaen@gmail.com", "xyz")).isEmpty();
Assertions.assertThat(servicio.login("pjaen@gmail.com", "miClAvE")).hasValueSatisfying(c -> c.email().equals(cliente.email()));
assertThat(servicio.login("ppp@gmail.com", "miClAvE")).isEmpty();
assertThat(servicio.login("pjaen@gmail.com", "xyz")).isEmpty();
assertThat(servicio.login("pjaen@gmail.com", "miClAvE")).hasValueSatisfying(c -> c.email().equals(cliente.email()));
}
@Test
@DirtiesContext
void testBuscarHotel() {
var hotel1 = new Hotel(1, "Gran Hotel Almería", "Almería", "Almería", 04001, 25, 50, 100, 180);
var hotel2 = new Hotel(2, "Hotel Infanta Cristina", "Jaén", "Jaén", 23009, 30, 60, 120, 200);
servicio.nuevoHotel(hotel1);
servicio.nuevoHotel(hotel2);
List<Hotel> hoteles = servicio.buscarHotel("gran hotel", "almeria");
assertThat(hoteles).containsOnly(hotel1);
}
}
......@@ -14,6 +14,6 @@ import org.junit.jupiter.api.Test;
public class TestUtilidadesCadenas {
@Test
void testNormalizar() {
Assertions.assertThat(UtilidadesCadenas.normalizar(" áÁaaa ´ OO_OO ")).isEqualTo("aaaaa oooo");
Assertions.assertThat(UtilString.normalizar(" áÁaaa ´ OO_OO ")).isEqualTo("aaaaa oooo");
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment