package org.sculptor.examples.library.media.domain; import static org.sculptor.examples.library.media.domain.MediaProperties.title; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.sculptor.framework.accessapi.ConditionalCriteriaBuilder.criteriaFor; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; import org.sculptor.examples.library.media.domain.Book; import org.sculptor.examples.library.media.domain.MediaProperties; import org.sculptor.examples.library.media.domain.MediaRepository; import org.sculptor.examples.library.media.domain.MovieProperties; import org.junit.Assume; import org.junit.Test; import org.sculptor.examples.library.media.domain.Media; import org.sculptor.examples.library.media.domain.Movie; import org.sculptor.framework.accessapi.ConditionalCriteria; import org.sculptor.framework.accessimpl.jpa.JpaHelper; import org.sculptor.framework.test.AbstractDbUnitJpaTests; import org.springframework.beans.factory.annotation.Autowired; /** * Spring based transactional test with DbUnit support. */ public class MediaRepositoryTest extends AbstractDbUnitJpaTests { private MediaRepository mediaRepository; @Autowired public void setMediaRepository(MediaRepository mediaRepository) { this.mediaRepository = mediaRepository; } @Override protected String getDataSetFile() { if (JpaHelper.isJpaProviderEclipselink(getEntityManager())) { return "dbunit/LibraryServiceTest_eclipselink.xml"; } // datanucleus bug. PrimaryKeyJoinColumn is not working correctly for entities inherited from mappedsuperclass // TODO: report to datanucleus issue tracker else if (JpaHelper.isJpaProviderDataNucleus(getEntityManager())) { return "dbunit/LibraryServiceTest_datanucleus.xml"; } return "dbunit/LibraryServiceTest.xml"; } @Override protected String getSequenceName() { if (JpaHelper.isJpaProviderHibernate(getEntityManager())) { return "hibernate_seq"; } else if (JpaHelper.isJpaProviderEclipselink(getEntityManager())) { return "SEQ_GEN"; } else { return null; } } @Test public void testFindMovieByKeys() throws Exception { Set<String> keys = new HashSet<String>(); keys.add("abc"); keys.add("def"); keys.add("xyz"); Map<String, Movie> movies = mediaRepository.findMovieByUrlIMDB(keys); assertEquals(2, movies.size()); assertNotNull(movies.get("abc")); assertNotNull(movies.get("def")); } @Test public void testGetNumberOfMovies() throws Exception { long count = mediaRepository.getNumberOfMovies(1L); assertEquals(2, count); } @Test public void testSave() throws Exception { int before = countRowsInTable(Book.class); Book ddd = new Book("Domain-Driven Design", "0-321-12521-5"); mediaRepository.save(ddd); assertEquals(before + 1, countRowsInTable(Book.class)); } @Test public void testFindMediaByCondition() throws Exception { List<ConditionalCriteria> conditionalCriteria = criteriaFor(Media.class).withProperty(title()).ignoreCaseLike("pippi%").build(); List<Media> found = mediaRepository.findByCondition(conditionalCriteria); assertEquals(1, found.size()); assertEquals("Pippi L�ngstrump i S�derhavet", found.get(0).getTitle()); } @Test public void testFindMovieByCondition() throws Exception { List<ConditionalCriteria> conditionalCriteria = criteriaFor(Movie.class).withProperty(MovieProperties.title()) .like("Pippi%").build(); List<Media> found = mediaRepository.findByCondition(conditionalCriteria); assertEquals(1, found.size()); assertEquals("Pippi L�ngstrump i S�derhavet", found.get(0).getTitle()); } @Test public void testFindByNestedCondition() throws Exception { // hibernate seems not to support this nested condition // TODO: watch hibernate issue HHH-5948 Assume.assumeTrue(!JpaHelper.isJpaProviderHibernate(getEntityManager())); // datanucleus seems not to support this nested condition Assume.assumeTrue(!JpaHelper.isJpaProviderDataNucleus(getEntityManager())); List<ConditionalCriteria> conditionalCriteria = criteriaFor(Media.class).withProperty( MediaProperties.physicalMedia().location()).eq("abc123").build(); List<Media> found = mediaRepository.findByCondition(conditionalCriteria); assertEquals(1, found.size()); assertEquals("Pippi L�ngstrump i S�derhavet", found.get(0).getTitle()); } }