Select Git revision
TestDB.java
TestDB.java 6.73 KiB
package edu.hsh.dbs2.imdb;
import edu.hsh.dbs2.imdb.entity.Genre;
import edu.hsh.dbs2.imdb.entity.Person;
import edu.hsh.dbs2.imdb.entity.Sex;
import edu.hsh.dbs2.imdb.logic.ManagerFactory;
import edu.hsh.dbs2.imdb.logic.MovieManager;
import edu.hsh.dbs2.imdb.logic.dto.CharacterDTO;
import edu.hsh.dbs2.imdb.logic.dto.MovieDTO;
import jakarta.persistence.EntityManagerFactory;
import jakarta.persistence.Persistence;
import jakarta.persistence.PersistenceException;
import lombok.Cleanup;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import static org.junit.Assert.*;
public class TestDB {
private static EntityManagerFactory sessionFactory;
private static MovieManager movieManager;
@BeforeClass
public static void setUp() {
sessionFactory = Persistence.createEntityManagerFactory("edu.hsh.dbs2.imdb");
ManagerFactory.instance.setSessionFactory(sessionFactory);
movieManager = ManagerFactory.instance.getMovieManager();
}
@AfterClass
public static void tearDown() {
sessionFactory.close();
}
@Test
public void testDB() {
@Cleanup var em = sessionFactory.createEntityManager();
em.getTransaction().begin();
var genre = new Genre();
genre.setGenre("testGenre");
em.persist(genre);
em.flush();
em.getTransaction().commit();
var result = em.createQuery("from Genre where genre = :genre", Genre.class).setParameter("genre", genre.getGenre()).getSingleResult();
assertEquals("testGenre", result.getGenre());
assertEquals(10L, genre.getId().longValue());
}
@Test(expected = PersistenceException.class)
public void testNullNotPermitted() {
@Cleanup var em = sessionFactory.createEntityManager();
var person = new Person();
person.setSex(Sex.f);
em.getTransaction().begin();
em.persist(person);
em.flush();
em.getTransaction().commit();
}
@Test
public void testInsertDeleteMovie() {
var movie = new MovieDTO();
movie.setTitle("The Matrix");
movie.setType("C");
movie.setYear(1998);
movieManager.insertUpdateMovie(movie);
var sameMovie = movieManager.getMovie(10);
assertEquals(movie.getTitle(), sameMovie.getTitle());
assertEquals(movie.getType(), sameMovie.getType());
assertEquals(movie.getYear(), sameMovie.getYear());
movieManager.deleteMovie(sameMovie.getId());
var noMovie = movieManager.getMovie(10);
assertNull(noMovie);
}
@Test
public void testUpdateMovie() {
var movie = movieManager.getMovie(1);
assertEquals("Testmovie", movie.getTitle());
assertEquals(2020, movie.getYear());
assertEquals("C", movie.getType());
movie.setYear(2021);
movie.setTitle("A Testmovie");
movie.setType("T");
movieManager.insertUpdateMovie(movie);
var after = movieManager.getMovie(1);
assertEquals(movie.getTitle(), after.getTitle());
assertEquals(movie.getYear(), after.getYear());
assertEquals(movie.getType(), after.getType());
}
@Test
public void testInsertDeleteGenre() {
var movie = movieManager.getMovie(1);
var genres = movie.getGenres();
assertEquals(1, genres.size());
assertEquals("Action", genres.stream().findAny().orElseThrow());
genres.add("Komödie");
genres.add("Thriller");
movieManager.insertUpdateMovie(movie);
var after = movieManager.getMovie(1);
var genresAfter = after.getGenres();
assertEquals(3, genres.size());
assertTrue(genresAfter.containsAll(genres));
genresAfter.remove("Komödie");
genresAfter.remove("Thriller");
movieManager.insertUpdateMovie(after);
after = movieManager.getMovie(1);
genresAfter = after.getGenres();
assertEquals(1, genresAfter.size());
assertEquals("Action", genresAfter.stream().findAny().orElseThrow());
}
@Test
public void testInsertDeleteCharacter() {
var movie = movieManager.getMovie(1);
var newCharacter = new CharacterDTO();
newCharacter.setCharacter("John");
newCharacter.setAlias("Johnny");
newCharacter.setPlayer("Alice");
movie.getCharacters().add(newCharacter);
movieManager.insertUpdateMovie(movie);
var after = movieManager.getMovie(1);
var characters = after.getCharacters();
assertEquals(2, characters.size());
var sameCharacter = characters.stream().filter(mChar -> mChar.getCharacter().equals("John")).findAny().orElseThrow();
assertEquals(newCharacter.getAlias(), sameCharacter.getAlias());
assertEquals(newCharacter.getPlayer(), sameCharacter.getPlayer());
characters.remove(sameCharacter);
assertEquals(1, characters.size());
movieManager.insertUpdateMovie(after);
after = movieManager.getMovie(1);
characters = after.getCharacters();
assertEquals(1, characters.size());
sameCharacter = characters.stream().filter(mChar -> mChar.getCharacter().equals("John")).findAny().orElse(null);
assertNull(sameCharacter);
characters.stream().filter(mChar -> mChar.getCharacter().equals("character1")).findAny().orElseThrow();
}
@Test
public void testUpdateCharacter() {
var movie = movieManager.getMovie(1);
var character = movie.getCharacters().stream().findAny().orElseThrow();
assertEquals("character1", character.getCharacter());
assertEquals("Bob", character.getAlias());
assertEquals("Bob", character.getPlayer());
var newCharacter = new CharacterDTO();
newCharacter.setCharacter(character.getCharacter());
newCharacter.setAlias("Mr. President");
newCharacter.setPlayer("Alice");
movie.getCharacters().remove(character);
movie.getCharacters().add(newCharacter);
movieManager.insertUpdateMovie(movie);
var after = movieManager.getMovie(1);
assertEquals(1, after.getCharacters().size());
var charAfter = after.getCharacters().stream().findAny().orElseThrow();
assertEquals(newCharacter.getCharacter(), charAfter.getCharacter());
assertEquals(newCharacter.getAlias(), charAfter.getAlias());
assertEquals(newCharacter.getPlayer(), charAfter.getPlayer());
after.getCharacters().clear();
after.getCharacters().add(character);
movieManager.insertUpdateMovie(after);
charAfter = movieManager.getMovie(1).getCharacters().stream().findAny().orElseThrow();
assertEquals("character1", charAfter.getCharacter());
assertEquals("Bob", charAfter.getAlias());
assertEquals("Bob", charAfter.getPlayer());
}
}