Commit f285aa39 by Antonio Rueda

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

parent 9e490125
...@@ -45,4 +45,12 @@ public class Hotel { ...@@ -45,4 +45,12 @@ public class Hotel {
public int id() { public int id() {
return id; return id;
} }
public String nombre() {
return nombre;
}
public String localidad() {
return localidad;
}
} }
...@@ -5,6 +5,7 @@ import es.ujaen.dae.reservahoteles.entidades.Cliente; ...@@ -5,6 +5,7 @@ import es.ujaen.dae.reservahoteles.entidades.Cliente;
import es.ujaen.dae.reservahoteles.entidades.Hotel; import es.ujaen.dae.reservahoteles.entidades.Hotel;
import es.ujaen.dae.reservahoteles.entidades.Reserva; import es.ujaen.dae.reservahoteles.entidades.Reserva;
import es.ujaen.dae.reservahoteles.excepciones.ClienteYaRegistrado; import es.ujaen.dae.reservahoteles.excepciones.ClienteYaRegistrado;
import es.ujaen.dae.reservahoteles.util.UtilString;
import java.time.LocalDate; import java.time.LocalDate;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
...@@ -54,10 +55,20 @@ public class ServicioReservas { ...@@ -54,10 +55,20 @@ public class ServicioReservas {
throw new UnsupportedOperationException(); throw new UnsupportedOperationException();
} }
public Optional<Hotel> buscarHotel(String nombre, String localidad) { /**
* 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);
// Por implementar return hoteles.values().stream().filter(h ->
throw new UnsupportedOperationException(); UtilString.normalizar(h.localidad()).contains(localidadNorm) &&
UtilString.normalizar(h.nombre()).contains(nombreNorm))
.toList();
} }
public Reserva reserva(Cliente cliente, Hotel hotel, public Reserva reserva(Cliente cliente, Hotel hotel,
......
...@@ -7,7 +7,7 @@ import java.text.Normalizer; ...@@ -7,7 +7,7 @@ import java.text.Normalizer;
* Utilidades para comparación flexible de cadenas * Utilidades para comparación flexible de cadenas
* @author ajrueda * @author ajrueda
*/ */
public class UtilidadesCadenas { public class UtilString {
/** /**
* Normaliza una cadena pasando a minúsculas, quitando espacios al principio, * Normaliza una cadena pasando a minúsculas, quitando espacios al principio,
* final y duplicados y eliminando acentos. * final y duplicados y eliminando acentos.
......
...@@ -2,7 +2,9 @@ ...@@ -2,7 +2,9 @@
package es.ujaen.dae.reservahoteles.servicios; package es.ujaen.dae.reservahoteles.servicios;
import es.ujaen.dae.reservahoteles.entidades.Cliente; 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.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest;
...@@ -25,8 +27,21 @@ public class TestServicioReservas { ...@@ -25,8 +27,21 @@ public class TestServicioReservas {
var cliente = new Cliente("Pedro", "Jaén Jaén", "611203025", "pjaen@gmail.com", "miClAvE"); var cliente = new Cliente("Pedro", "Jaén Jaén", "611203025", "pjaen@gmail.com", "miClAvE");
servicio.nuevoCliente(cliente); servicio.nuevoCliente(cliente);
Assertions.assertThat(servicio.login("ppp@gmail.com", "miClAvE")).isEmpty(); assertThat(servicio.login("ppp@gmail.com", "miClAvE")).isEmpty();
Assertions.assertThat(servicio.login("pjaen@gmail.com", "xyz")).isEmpty(); 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("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; ...@@ -14,6 +14,6 @@ import org.junit.jupiter.api.Test;
public class TestUtilidadesCadenas { public class TestUtilidadesCadenas {
@Test @Test
void testNormalizar() { 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