package org.podcastpedia.dao.mybatis; import java.util.ArrayList; import java.util.List; import org.apache.log4j.Logger; import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; import org.podcastpedia.common.domain.Category; import org.podcastpedia.common.domain.Episode; import org.podcastpedia.common.domain.Podcast; import org.podcastpedia.common.types.LanguageCode; import org.podcastpedia.common.types.OrderByOption; import org.podcastpedia.common.types.SearchModeType; import org.podcastpedia.web.categories.CategoryDao; import org.podcastpedia.web.searching.SearchDao; import org.podcastpedia.web.searching.SearchData; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = "/test-spring-context.xml") // the Spring context file public class SearchDaoTest { private static Logger LOG = Logger.getLogger(SearchDaoTest.class); @Autowired private SearchDao searchDao; @Autowired private CategoryDao categoryDao; @Test public void testSearchResultsInNaturalLanguageMode() throws Exception { LOG.debug(" \n\n------ executing SearchDaoTest.testSearchResultsInNaturalLanguageMode -------"); LOG.debug("Attempting to search podcasts that containg <quarks> either in title or description in natural language mode"); SearchData searchCriteria = new SearchData(); searchCriteria.setQueryText("quarks"); searchCriteria.setLanguageCode(LanguageCode.de); searchCriteria.setSearchMode(SearchModeType.NATURAL_MODE.getValue()); searchCriteria.setMediaType(null); List<Podcast> results = searchDao.getPodcastsForSearchCriteria(searchCriteria); LOG.debug("Number of podcasts found for text search <quarks> in natural language mode - " + results.size()); assert results.size() == 1; } @Test public void testSearchResultsInBooleanMode() throws Exception { LOG.debug(" \n\n------ executing SearchDaoTest.testSearchResultsInBooleanMode -------"); LOG.debug("Attempting to search podcasts that containing <quarks> either in title or description"); SearchData searchCriteria = new SearchData(); searchCriteria.setQueryText("+quarks -noWord"); searchCriteria.setLanguageCode(LanguageCode.de); searchCriteria.setSearchMode(SearchModeType.BOOLEAN_MODE.getValue()); searchCriteria.setMediaType(null); searchCriteria.setOrderBy(OrderByOption.NEW_ENTRIES); List<Podcast> results = searchDao.getPodcastsForSearchCriteria(searchCriteria); LOG.debug("Number of podcasts found for text search <quarks> in boolean Mode - " + results.size()); assert results.size() == 1; } @Test public void testSearchResultsInBooleanModeWithFalseLanguageCodeSet() throws Exception { LOG.debug(" \n\n------ executing SearchDaoTest.testSearchResultsInBooleanModeWithFalseLanguageCodeSet -------"); LOG.debug("Attempting to search podcasts that containing <quarks> either in title or description with language code set"); SearchData searchCriteria = new SearchData(); searchCriteria.setQueryText("+quarks -noWord"); searchCriteria.setLanguageCode(LanguageCode.fr); searchCriteria.setSearchMode(SearchModeType.BOOLEAN_MODE.getValue()); searchCriteria.setMediaType(null); searchCriteria.setOrderBy(OrderByOption.NEW_ENTRIES); List<Podcast> results = searchDao.getPodcastsForSearchCriteria(searchCriteria); LOG.debug("Number of podcasts found for text search <quarks> in boolean Mode - " + results.size()); assert results.size() == 0; } @Test public void testSearchResultsWithoutLanguageCodeAndSearchTextSet() throws Exception { LOG.debug(" \n\n------ executing SearchDaoTest.testSearchResultsWithoutLanguageCodeAndSearchTextSet -------"); LOG.debug("Attempting to search podcasts that containing <quarks> either in title or description with language code set"); SearchData searchCriteria = new SearchData(); searchCriteria.setSearchMode(SearchModeType.BOOLEAN_MODE.getValue()); searchCriteria.setMediaType(null); searchCriteria.setOrderBy(OrderByOption.POPULARITY); List<Podcast> results = searchDao.getPodcastsForSearchCriteria(searchCriteria); LOG.debug("Number of podcasts found without search text and language is " + results.size()); // assert results.size() == 0; } @Test public void testSearchResultsWithLanguageCodeAndWithoutSearchTextSet() throws Exception { LOG.debug(" \n\n------ executing SearchDaoTest.testSearchResultsWithLanguageCodeAndWithoutSearchTextSet -------"); LOG.debug("Attempting to search podcasts that containing <quarks> either in title or description with language code set"); SearchData searchCriteria = new SearchData(); searchCriteria.setLanguageCode(LanguageCode.de); searchCriteria.setSearchMode(SearchModeType.NATURAL_MODE.getValue()); searchCriteria.setMediaType(null); searchCriteria.setOrderBy(OrderByOption.PUBLICATION_DATE); searchCriteria.setSearchTarget("episodes"); List<Podcast> results = searchDao.getPodcastsForSearchCriteria(searchCriteria); LOG.debug("Number of podcasts found without search text but with de language set is " + results.size()); // assert results.size() == 0; } @Test public void testGetNumberOfResultsInBooleanSearchMode() throws Exception { LOG.debug("\n\n"); LOG.debug(" ------ executing SearchDaoTest.testGetNumberOfResultsInBooleanSearchMode ------- "); LOG.debug("Get number of podcasts that are in German Language"); SearchData searchCriteria = new SearchData(); searchCriteria.setLanguageCode(LanguageCode.de); searchCriteria.setSearchMode(SearchModeType.BOOLEAN_MODE.getValue()); searchCriteria.setMediaType(null); int noOfPodcastsInGerman = searchDao.getNumberOfPodcastsForSearchCriteria(searchCriteria); LOG.debug("Number of podcasts in German is " + noOfPodcastsInGerman); // assert results.size() == 0; } @Test public void testGetNumberOfResultsInNaturalSearchMode() throws Exception { LOG.debug(" \n\n------ executing SearchDaoTest.testGetNumberOfResultsInNaturalSearchMode -------"); LOG.debug("Get number of podcasts that are in German Language"); SearchData searchCriteria = new SearchData(); searchCriteria.setSearchMode(SearchModeType.NATURAL_MODE.getValue()); searchCriteria.setMediaType(null); int totalNumberOfPodcasts = searchDao.getNumberOfPodcastsForSearchCriteria(searchCriteria); LOG.debug("Total number of podcasts " + totalNumberOfPodcasts); // assert results.size() == 0; } @Test public void testGetPodcastsFromCategory() throws Exception { LOG.debug(" \n\n------ executing SearchDaoTest.testGetNumberOfPodcastsFromCategory -------"); LOG.debug("Get number of podcasts that are in category TV&FILM"); SearchData searchCriteria = new SearchData(); List<Integer> categIds = new ArrayList<Integer>(); categIds.add(29); searchCriteria.setCategId(categIds); searchCriteria.setMediaType(null); int totalNumberOfPodcasts = searchDao.getNumberOfPodcastsForSearchCriteria(searchCriteria); LOG.debug("Total number of podcasts " + totalNumberOfPodcasts); assert totalNumberOfPodcasts > 5; } @Ignore @Test public void testGetNumberOfPodcastsWithTag() throws Exception { LOG.debug(" \n\n------ executing SearchDaoTest.testGetNumberOfPodcastsFromCategory -------"); LOG.debug("Get number of podcasts that are in category TV&FILM"); SearchData searchCriteria = new SearchData(); searchCriteria.setTagId(378); searchCriteria.setMediaType(null); int totalNumberOfPodcasts = searchDao.getNumberOfPodcastsForSearchCriteria(searchCriteria); LOG.debug("Total number of podcasts " + totalNumberOfPodcasts); assert totalNumberOfPodcasts > 5; } @Ignore @Test public void testGetPodcastsWithTag() throws Exception { LOG.debug(" \n\n------ executing SearchDaoTest.testGetNumberOfPodcastsFromCategory -------"); LOG.debug("Get number of podcasts that are in category TV&FILM"); SearchData searchCriteria = new SearchData(); searchCriteria.setTagId(378);//DW searchCriteria.setMediaType(null); List<Podcast> podcasts = searchDao.getPodcastsForSearchCriteria(searchCriteria); LOG.debug("Total number of podcasts " + podcasts.size()); assert podcasts.size() > 5; } @Ignore @Test public void testGetLimitedNumberOfPodcasts() throws Exception { LOG.debug(" \n\n------ executing SearchDaoTest.testGetLimitedNumberOfPodcasts -------"); LOG.debug("Get [10-19] podcasts that are in German Language and are recorded between 10 and 19 in the database"); SearchData searchCriteria = new SearchData(); searchCriteria.setFirstItemOnPage(0); searchCriteria.setLanguageCode(LanguageCode.de); searchCriteria.setNumberResultsPerPage(10); searchCriteria.setSearchMode(SearchModeType.NATURAL_MODE.getValue()); searchCriteria.setMediaType(null); List<Podcast> results = searchDao.getPodcastsForSearchCriteria(searchCriteria); for(Podcast i : results){ LOG.debug("Podcast : " + i.getTitle()); } assert results.size() == 10; } // @Test public void testGetPodcastsWithCategory() throws Exception { LOG.debug(" \n\n------ executing SearchDaoTest.testGetPodcastsFromCategory -------"); Category category = categoryDao.getCategoryByName("TV & Film"); SearchData searchCriteria = new SearchData(); List<Integer> podcastCategIds = new ArrayList<Integer>(); podcastCategIds.add(category.getCategoryId()); searchCriteria.setCategId(podcastCategIds); searchCriteria.setSearchMode(SearchModeType.NATURAL_MODE.getValue()); searchCriteria.setMediaType(null); List<Podcast> results = searchDao.getPodcastsForSearchCriteria(searchCriteria); for(Podcast i : results){ LOG.debug("Podcast : " + i.getTitle()); } assert results.size() == 4; } @Test public void testGetNumberOfEpisodes() throws Exception { LOG.debug(" \n\n------ executing SearchDaoTest.testGetNumberOfEpisodesInNaturalSearchMode -------"); LOG.debug("Get number of episodes that are in romanian language are in category TV&Film and contain mircea"); SearchData searchCriteria = new SearchData(); searchCriteria.setQueryText("mircea"); searchCriteria.setSearchMode(SearchModeType.NATURAL_MODE.getValue()); searchCriteria.setLanguageCode(LanguageCode.de); searchCriteria.setMediaType(null); int totalNumberOfEpisodes = searchDao.getNumberOfEpisodesForSearchCriteria(searchCriteria); LOG.debug("Total number of episodes that contain \"mircea\" is " + totalNumberOfEpisodes); // assert totalNumberOfEpisodes == 25; } @Test public void testGetNumberOfEpisodes2() throws Exception { LOG.debug(" \n\n------ executing SearchDaoTest.testGetNumberOfEpisodes2 -------"); LOG.debug("Get number of episodes that are in romanian language are in category TV&Film and contain mircea"); SearchData searchCriteria = new SearchData(); searchCriteria.setQueryText("cucuvea"); searchCriteria.setSearchMode(SearchModeType.NATURAL_MODE.getValue()); searchCriteria.setLanguageCode(LanguageCode.de); searchCriteria.setMediaType(null); int totalNumberOfEpisodes = searchDao.getNumberOfEpisodesForSearchCriteria(searchCriteria); LOG.debug("Total number of episodes that contain \"mircea\" is " + totalNumberOfEpisodes); assert totalNumberOfEpisodes == 0; } @Test public void testGetNumberOfEpisodes3() throws Exception { LOG.debug(" \n\n------ executing SearchDaoTest.testGetNumberOfEpisodes3 -------"); LOG.debug("Get number of episodes that are in romanian language are in category Science and contain mircea"); SearchData searchCriteria = new SearchData(); Category category = categoryDao.getCategoryByName("science_technology"); List<Integer> podcastCategIds = new ArrayList<Integer>(); podcastCategIds.add(category.getCategoryId()); searchCriteria.setCategId(podcastCategIds); searchCriteria.setQueryText("mircea"); searchCriteria.setSearchMode(SearchModeType.NATURAL_MODE.getValue()); searchCriteria.setLanguageCode(LanguageCode.ro); searchCriteria.setMediaType(null); int totalNumberOfEpisodes = searchDao.getNumberOfEpisodesForSearchCriteria(searchCriteria); LOG.debug("Total number of episodes that contain \"mircea\" is " + totalNumberOfEpisodes); //there no mircea words in science assert totalNumberOfEpisodes == 0; } @Test public void testGetEpisodesWithMirceaAsTextSearch() throws Exception { LOG.debug("\n\n"); LOG.debug(" ------ executing SearchDaoTest.testGetEpisodesWithMirceaAsTextSearch -------"); LOG.debug("Get number of episodes that are in romanian language are in category TV&Film and contain mircea"); SearchData searchCriteria = new SearchData(); searchCriteria.setQueryText("mircea"); searchCriteria.setSearchMode(SearchModeType.BOOLEAN_MODE.getValue()); searchCriteria.setLanguageCode(LanguageCode.ro); searchCriteria.setMediaType(null); List<Episode> episodes = searchDao.getEpisodesForSearchCriteria(searchCriteria); LOG.debug("Total number of episodes that contain \"mircea\" is " + episodes.size()); // assert episodes.size() == 25; } }