Skip to content
Snippets Groups Projects
Select Git revision
  • 5a5c387f3d3be20fee810f7ce2317c8358797b2d
  • master default protected
2 results

TestDB.java

Blame
  • 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());
        }
    
    }