Skip to content

Commit 319a53d

Browse files
committed
feat: Tests de Búsqueda de Películas por Nombre y Director
1 parent f24cb25 commit 319a53d

6 files changed

Lines changed: 62 additions & 23 deletions

File tree

src/main/java/com/luigi/javatest/movies/data/MovieRepositoryJdbc.java

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,15 +22,19 @@ public Movie findById(long id) {
2222

2323
@Override
2424
public Collection<Movie> findAll() {
25-
2625
return jdbcTemplate.query("select * from movies", movieMapper);
2726
}
2827

2928
@Override
3029
public void saveOrUpdate(Movie movie) {
3130
if (movie.getId() == null) {
32-
jdbcTemplate.update("insert into movies (name, minutes, gender) values (?, ?, ?)",
33-
movie.getName(), movie.getMinutes(), movie.getGender().toString());
31+
// Actualizamos el INSERT para incluir el director
32+
jdbcTemplate.update("insert into movies (name, minutes, gender, director) values (?, ?, ?, ?)",
33+
movie.getName(), movie.getMinutes(), movie.getGender().toString(), movie.getDirector());
34+
} else {
35+
// Implementamos el UPDATE (opcional pero recomendado)
36+
jdbcTemplate.update("update movies set name = ?, minutes = ?, gender = ?, director = ? where id = ?",
37+
movie.getName(), movie.getMinutes(), movie.getGender().toString(), movie.getDirector(), movie.getId());
3438
}
3539
}
3640

@@ -39,7 +43,8 @@ public void saveOrUpdate(Movie movie) {
3943
rs.getInt("id"),
4044
rs.getString("name"),
4145
rs.getInt("minutes"),
42-
// Convertir String a Enum
43-
Gender.valueOf(rs.getString("gender"))
46+
Gender.valueOf(rs.getString("gender")),
47+
// Obtenemos el director de la base de datos
48+
rs.getString("director")
4449
);
4550
}

src/main/java/com/luigi/javatest/movies/model/Movie.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,18 @@ public class Movie {
77
private String name;
88
private int minutes;
99
private Gender gender;
10+
private String director; // Nuevo atributo
1011

11-
public Movie(String name, int minutes, Gender gender) {
12-
this(null, name, minutes, gender);
12+
public Movie(String name, int minutes, Gender gender, String director) {
13+
this(null, name, minutes, gender, director);
1314
}
1415

15-
public Movie(Integer id, String name, int minutes, Gender gender) {
16+
public Movie(Integer id, String name, int minutes, Gender gender, String director) {
1617
this.id = id;
1718
this.name = name;
1819
this.minutes = minutes;
1920
this.gender = gender;
21+
this.director = director;
2022
}
2123

2224
public Integer getId() {
@@ -35,6 +37,8 @@ public Gender getGender() {
3537
return gender;
3638
}
3739

40+
public String getDirector() { return director; }
41+
3842
@Override
3943
public boolean equals(Object o) {
4044
if (o == null || getClass() != o.getClass()) return false;

src/main/java/com/luigi/javatest/movies/service/MovieService.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,4 +24,16 @@ public Collection<Movie> findMoviesByLength(int length) {
2424
return movieRepository.findAll().stream()
2525
.filter(movie -> movie.getMinutes() <= length).collect(Collectors.toList());
2626
}
27+
28+
public Collection<Movie> findMoviesByName(String name) {
29+
return movieRepository.findAll().stream()
30+
.filter(movie -> movie.getName().toLowerCase().contains(name.toLowerCase()))
31+
.collect(Collectors.toList());
32+
}
33+
34+
public Collection<Movie> findMoviesByDirector(String director) {
35+
return movieRepository.findAll().stream()
36+
.filter(movie -> movie.getDirector().toLowerCase().contains(director.toLowerCase()))
37+
.collect(Collectors.toList());
38+
}
2739
}
Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
CREATE TABLE IF NOT EXISTS movies (
22
id INT AUTO_INCREMENT PRIMARY KEY,
3-
name VARCHAR(50) NOT NULL,
3+
name VARCHAR(100) NOT NULL,
44
minutes INT NOT NULL,
5-
gender VARCHAR(50) NOT NULL
5+
gender VARCHAR(50) NOT NULL,
6+
director VARCHAR(100) NOT NULL -- Nueva columna obligatoria
67
);
78

89
TRUNCATE TABLE movies;
910

10-
INSERT INTO movies (name, minutes, gender) VALUES
11-
('Dark Knight', 152, 'ACTION'),
12-
('Memento', 113, 'THRILLER'),
13-
('Matrix', 136, 'ACTION')
11+
INSERT INTO movies (name, minutes, gender, director) VALUES
12+
('Dark Knight', 152, 'ACTION', 'Christopher Nolan'),
13+
('Memento', 113, 'THRILLER', 'Christopher Nolan'),
14+
('Matrix', 136, 'ACTION', 'Lana Wachowski');

src/test/java/com/luigi/javatest/movies/data/MovieRepositoryIntegrationTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ public void load_movie_by_id() {
6666
@Test
6767
public void insert_a_movie() {
6868
// Preparar
69-
Movie movie = new Movie(null, "Super 8", 112, Gender.THRILLER);
69+
Movie movie = new Movie(null, "Super 8", 112, Gender.THRILLER, "J.J. Abrams");
7070

7171
// Ejecutar
7272
movieRepository.saveOrUpdate(movie);

src/test/java/com/luigi/javatest/movies/service/MovieServiceShould.java

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -28,13 +28,13 @@ void setUp() {
2828
// GIVEN
2929
Mockito.when(movieRepository.findAll()).thenReturn(
3030
Arrays.asList(
31-
new Movie(1, "Dark Knight", 152, Gender.ACTION),
32-
new Movie(2, "Memento", 113, Gender.THRILLER),
33-
new Movie(3, "Matrix", 120, Gender.COMEDY),
34-
new Movie(4, "Super 8", 112, Gender.THRILLER),
35-
new Movie(5, "Scream", 111, Gender.HORROR),
36-
new Movie(6, "Home Alone", 103, Gender.COMEDY),
37-
new Movie(7, "Matrix", 136, Gender.ACTION)
31+
new Movie(1, "Dark Knight", 152, Gender.ACTION, "Christopher Nolan"),
32+
new Movie(2, "Memento", 113, Gender.THRILLER, "Christopher Nolan"),
33+
new Movie(3, "Super 8", 112, Gender.THRILLER, "J.J. Abrams"),
34+
new Movie(4, "Superman", 103, Gender.ACTION, "Richard Donner"),
35+
new Movie(5, "Home Alone", 103, Gender.COMEDY, "Chris Columbus"),
36+
new Movie(6, "Home Alone", 120, Gender.COMEDY, "director1"),
37+
new Movie(7, "Matrix", 136, Gender.ACTION, "director2")
3838
)
3939
);
4040
}
@@ -46,7 +46,7 @@ public void return_movies_by_gender() {
4646
// THEN
4747
// Cambiamos assertThat por assertEquals de JUnit 5
4848
// El orden es: assertEquals(esperado, actual)
49-
assertEquals(Arrays.asList(3, 6), getMoviesIds(movies));
49+
assertEquals(Arrays.asList(5, 6), getMoviesIds(movies));
5050
}
5151

5252
@Test
@@ -62,4 +62,21 @@ public static List<Integer> getMoviesIds(Collection<Movie> movies) {
6262
.map(Movie::getId)
6363
.collect(Collectors.toList());
6464
}
65+
@Test
66+
void return_movies_by_name() {
67+
// Buscamos "super" (en minúsculas) para probar case-insensitivity
68+
Collection<Movie> movies = movieService.findMoviesByName("super");
69+
70+
List<Integer> ids = movies.stream().map(Movie::getId).collect(Collectors.toList());
71+
assertEquals(Arrays.asList(3, 4), ids); // Super 8 y Superman
72+
}
73+
74+
@Test
75+
void return_movies_by_director() {
76+
// Buscamos una parte del nombre "Nolan"
77+
Collection<Movie> movies = movieService.findMoviesByDirector("nolan");
78+
79+
List<Integer> ids = movies.stream().map(Movie::getId).collect(Collectors.toList());
80+
assertEquals(Arrays.asList(1, 2), ids); // Dark Knight y Memento
81+
}
6582
}

0 commit comments

Comments
 (0)