package org.sculptor.examples.library.media.domain; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.sculptor.examples.library.media.domain.MediaProperties.title; import static org.sculptor.examples.library.media.domain.MovieProperties.playLength; 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.junit.After; import org.junit.Before; import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; import org.sculptor.examples.library.media.mapper.BookMapper; import org.sculptor.framework.accessapi.ConditionalCriteria; import org.sculptor.framework.accessimpl.mongodb.DbManager; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:applicationContext-test.xml" }) public class MediaRepositoryTest extends AbstractJUnit4SpringContextTests { @Autowired private MediaRepository mediaRepository; @Autowired private LibraryTestData testData; @Autowired private DbManager dbManager; @Before public void initialData() throws Exception { testData.saveInitialData(); } @Before public void initDbManagerThreadInstance() throws Exception { // to be able to do lazy loading of associations inside test class DbManager.setThreadInstance(dbManager); } @After public void dropDatabase() { Set<String> names = dbManager.getDB().getCollectionNames(); for (String each : names) { if (!each.startsWith("system")) { dbManager.getDB().getCollection(each).drop(); } } // dbManager.getDB().dropDatabase(); } private int countRowsInDBCollection(String name) { return (int) dbManager.getDBCollection(name).getCount(); } private int countRowsInBookCollection() { return countRowsInDBCollection(BookMapper.getInstance().getDBCollectionName()); } @Test @Ignore // TODO something wrong with FindByKeys, the $in condtion only returns "abc" 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 { int count = mediaRepository.getNumberOfMovies(testData.getLibraryId()); assertEquals(3, count); } @Test public void testSave() throws Exception { int before = countRowsInBookCollection(); Book ddd = new Book("Domain-Driven Design", "0-321-12521-5"); mediaRepository.save(ddd); assertEquals(before + 1, countRowsInBookCollection()); } @Test public void testFindMediaByLikeCondition() 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 testFindMovieByLikeCondition() 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 testFindGreaterThanCondition() throws Exception { List<ConditionalCriteria> conditionalCriteria = criteriaFor(Movie.class).withProperty(playLength()) .greaterThan(10).build(); List<Media> found = mediaRepository.findByCondition(conditionalCriteria); assertEquals(2, found.size()); } @Test public void testFindBetweenCondition() throws Exception { List<ConditionalCriteria> conditionalCriteria = criteriaFor(Movie.class).withProperty(playLength()).between(70) .to(100).build(); List<Media> found = mediaRepository.findByCondition(conditionalCriteria); assertEquals(2, found.size()); } }