Skip to content

Commit f24cb25

Browse files
committed
feat: Tests de JDBC: Búsqueda e Inserción de Películas por ID
1 parent 6cab1df commit f24cb25

4 files changed

Lines changed: 69 additions & 14 deletions

File tree

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

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ public MovieRepositoryJdbc(JdbcTemplate jdbcTemplate) {
1717

1818
@Override
1919
public Movie findById(long id) {
20-
return null;
20+
return jdbcTemplate.queryForObject("select * from movies where id = ?", movieMapper, id);
2121
}
2222

2323
@Override
@@ -28,12 +28,18 @@ public Collection<Movie> findAll() {
2828

2929
@Override
3030
public void saveOrUpdate(Movie movie) {
31-
31+
if (movie.getId() == null) {
32+
jdbcTemplate.update("insert into movies (name, minutes, gender) values (?, ?, ?)",
33+
movie.getName(), movie.getMinutes(), movie.getGender().toString());
34+
}
3235
}
3336

34-
private static RowMapper<Movie> movieMapper = (rs, rowNum) -> new Movie(
35-
rs.getInt("id"),
36-
rs.getString("name"),
37-
rs.getInt("minutes"),
38-
Gender.valueOf(rs.getString("gender")));
37+
private static RowMapper<Movie> movieMapper = (rs, rowNum) ->
38+
new Movie(
39+
rs.getInt("id"),
40+
rs.getString("name"),
41+
rs.getInt("minutes"),
42+
// Convertir String a Enum
43+
Gender.valueOf(rs.getString("gender"))
44+
);
3945
}

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

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package com.luigi.javatest.movies.model;
22

3+
import java.util.Objects;
4+
35
public class Movie {
46
private Integer id;
57
private String name;
@@ -32,4 +34,19 @@ public int getMinutes() {
3234
public Gender getGender() {
3335
return gender;
3436
}
37+
38+
@Override
39+
public boolean equals(Object o) {
40+
if (o == null || getClass() != o.getClass()) return false;
41+
Movie movie = (Movie) o;
42+
return minutes == movie.minutes &&
43+
Objects.equals(id, movie.id) &&
44+
Objects.equals(name, movie.name) &&
45+
gender == movie.gender;
46+
}
47+
48+
@Override
49+
public int hashCode() {
50+
return Objects.hash(id, name, minutes, gender);
51+
}
3552
}

src/main/resources/sql-scripts/test-data.sql

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ CREATE TABLE IF NOT EXISTS movies (
55
gender VARCHAR(50) NOT NULL
66
);
77

8+
TRUNCATE TABLE movies;
9+
810
INSERT INTO movies (name, minutes, gender) VALUES
911
('Dark Knight', 152, 'ACTION'),
1012
('Memento', 113, 'THRILLER'),

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

Lines changed: 37 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,25 @@
11
package com.luigi.javatest.movies.data;
22

3+
import com.luigi.javatest.movies.model.Gender;
34
import com.luigi.javatest.movies.model.Movie;
5+
import org.junit.jupiter.api.AfterAll;
46
import org.junit.jupiter.api.BeforeEach;
57
import org.junit.jupiter.api.Test;
68
import org.springframework.core.io.ClassPathResource;
79
import org.springframework.jdbc.core.JdbcTemplate;
810
import org.springframework.jdbc.datasource.DriverManagerDataSource;
911
import org.springframework.jdbc.datasource.init.ResourceDatabasePopulator;
10-
import org.springframework.jdbc.datasource.init.ScriptUtils;
11-
import javax.sql.DataSource;
1212
import java.sql.SQLException;
13+
import java.sql.Statement;
1314
import java.util.Arrays;
1415
import java.util.Collection;
1516
import java.util.List;
1617
import java.util.stream.Collectors;
17-
18-
import static com.luigi.javatest.movies.service.MovieServiceShould.getMoviesIds;
1918
import static org.junit.jupiter.api.Assertions.*;
2019

2120
public class MovieRepositoryIntegrationTest {
2221
private MovieRepositoryJdbc movieRepository;
23-
private DriverManagerDataSource dataSource;
22+
private static DriverManagerDataSource dataSource;
2423

2524
@BeforeEach
2625
void setUp() {
@@ -33,8 +32,8 @@ void setUp() {
3332
dataSource.setPassword("sa");
3433

3534
// 2. Cargamos el script
36-
ResourceDatabasePopulator populator = new ResourceDatabasePopulator();
37-
populator.addScript(new ClassPathResource("sql-scripts/test-data.sql"));
35+
ResourceDatabasePopulator populator = new ResourceDatabasePopulator();
36+
populator.addScript(new ClassPathResource("sql-scripts/test-data.sql"));
3837

3938
// 3. Ejecutamos el populator sobre el datasource
4039
populator.execute(dataSource);
@@ -54,5 +53,36 @@ public void load_all_movies() throws SQLException {
5453
assertEquals(Arrays.asList(1, 2, 3), moviesIds);
5554
}
5655

56+
@Test
57+
public void load_movie_by_id() {
58+
// Ejecutar
59+
Movie movie = movieRepository.findById(2);
60+
61+
// Validar
62+
assertEquals(2, movie.getId());
63+
assertEquals("Memento", movie.getName());
64+
}
65+
66+
@Test
67+
public void insert_a_movie() {
68+
// Preparar
69+
Movie movie = new Movie(null, "Super 8", 112, Gender.THRILLER);
70+
71+
// Ejecutar
72+
movieRepository.saveOrUpdate(movie);
5773

74+
// Validar
75+
Movie movieFromDb = movieRepository.findById(4);
76+
assertEquals(4, movieFromDb.getId());
77+
assertEquals("Super 8", movieFromDb.getName());
78+
}
79+
80+
@AfterAll
81+
public static void tearDown() throws Exception { // Añadido 'static'
82+
if (dataSource != null) {
83+
try (Statement s = dataSource.getConnection().createStatement()) {
84+
s.execute("DROP ALL OBJECTS DELETE FILES");
85+
}
86+
}
87+
}
5888
}

0 commit comments

Comments
 (0)