On my common sense, below figure should display 6/6 instead of 1/6 and green arrow on the first test case. What should I do next?
package space.bumtiger.test.reposi;
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.assertNotEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertTrue;
import java.time.LocalDate;
import java.time.Month;
import java.util.Collection;
import java.util.stream.StreamSupport;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.data.jdbc.DataJdbcTest;
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
import space.bumtiger.test.model.Movie;
@DataJdbcTest
@DisplayName("H2 database movie table operations")
public class MovieRepositoryTest {
@Autowired
private MovieRepository repository;
@Test
@DisplayName("movie saved OK")
void save() {
// Arrange
var movie = new Movie();
movie.setName("WWII");
movie.setGenera("War");
movie.setReleaseDate(LocalDate.of(2009, Month.NOVEMBER, 10));
// Act
var savedMovie = repository.save(movie);
// Assert
assertNotNull(savedMovie);
assertThat(savedMovie.getId()).isNotEqualTo(null);
}
@Test
@DisplayName("movie list read OK")
void fetchAll() {
// Arrange
var movie = new Movie();
movie.setName("WWII");
movie.setGenera("War");
movie.setReleaseDate(LocalDate.of(2009, Month.NOVEMBER, 10));
repository.save(movie);
movie = new Movie();
movie.setName("WWII");
movie.setGenera("War");
movie.setReleaseDate(LocalDate.of(2009, Month.NOVEMBER, 10));
repository.save(movie);
// act
Iterable<Movie> movies = repository.findAll();
// Assert 1
assertNotNull(movies);
var iter = movies.iterator();
int count = 0;
while (iter.hasNext()) {
iter.next();
count++;
}
// Assert 2
assertThat(count).isEqualTo(1);
}
@Test
@DisplayName("genera movie read OK")
void findRomanceMovie() {
// arrange
var movie = new Movie();
movie.setName("WWII");
String genera = "역사";
movie.setGenera(genera);
var relDate = LocalDate.of(2009, Month.NOVEMBER, 10);
movie.setReleaseDate(relDate);
repository.save(movie);
movie = new Movie();
movie.setName("Romio and Julliet");
movie.setGenera("Romance");
movie.setReleaseDate(relDate);
repository.save(movie);
// act
var romances = repository.findByGenera("Romance");
// assert
assertNotNull(romances);
assertThat(romances.size()).isEqualTo(1);
}
@Test
@DisplayName("movie deleted OK")
void deleteMovie() {
// arrange
var movie = new Movie();
movie.setName("WWII");
String genera = "War";
movie.setGenera(genera);
var relDate = LocalDate.of(2009, Month.NOVEMBER, 10);
movie.setReleaseDate(relDate);
Movie firstMovie = repository.save(movie);
movie = new Movie();
movie.setName("WWII");
movie.setGenera(genera);
movie.setReleaseDate(relDate);
repository.save(movie); // save movie again
// act
repository.delete(firstMovie);
// assert
var optionalMovie = repository.findById(firstMovie.getId());
assertTrue(optionalMovie.isEmpty());
int count = 0;
var movies = repository.findAll();
var iter = movies.iterator();
while (iter.hasNext()) {
count++;
}
assertThat(count).isEqualTo(10);
}
@Test
@DisplayName("movie genera updated OK")
void updateMovie() {
// arrange
var movie = new Movie();
movie.setName("WWII");
String genera = "War";
movie.setGenera(genera);
var relDate = LocalDate.of(2009, Month.NOVEMBER, 10);
movie.setReleaseDate(relDate);
repository.save(movie);
var foundMovie = repository.findById(movie.getId());
// act
String newGenere = "역사";
foundMovie.ifPresent(m -> m.setGenera(newGenere));
repository.save(foundMovie.get());
foundMovie = repository.findById(movie.getId());
// assert
assertNotNull(foundMovie);
assertThat(foundMovie.get().getGenera()).isEqualTo(newGenere);
assertNotEquals(movie.getGenera(), foundMovie.get().getGenera());
}
@Test
@DisplayName("movie found by ID OK")
void findMovieById() {
// Arrange
var movie = new Movie();
movie.setName("WWII");
String genera = "War";
movie.setGenera(genera);
var relDate = LocalDate.of(2009, Month.NOVEMBER, 10);
movie.setReleaseDate(relDate);
var savedMovie = repository.save(movie);
// Act
var foundMovie = repository.findById(savedMovie.getId());
// Assert
assertNotNull(foundMovie);
Movie fMovie = foundMovie.isPresent() ? foundMovie.get() : null;
assertThat(fMovie.getGenera()).isEqualTo(genera);
assertThat(fMovie.getReleaseDate()).isAfter(relDate.minusDays(1L));
}
}
pom.xml:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.0.5</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>space.bumtiger.test</groupId>
<artifactId>spring-jdbc-junit</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>spring-jdbc-junit</name>
<description>Demo project for thymeleaf layout example</description>
<properties>
<java.version>17</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jdbc</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</project>
