package moviescraper.doctord.controller.siteparsingprofile.test; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import java.io.File; import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; import java.util.Comparator; import org.apache.commons.lang3.StringUtils; import org.junit.Test; import moviescraper.doctord.controller.siteparsingprofile.SiteParsingProfile; import moviescraper.doctord.model.Movie; import moviescraper.doctord.model.dataitem.Actor; import moviescraper.doctord.model.dataitem.Director; public abstract class GenericParsingProfileTest { protected static Movie expectedMovie; protected static Movie actualMovie; protected static File expectedValueFile; protected static SiteParsingProfile overloadedScraper; /** * Set up values of expectedValueMovie, scrapedValueMovie, expectedValueFile, and overloadedScraper in one of the subclasses with * the correct values for the scraper you are testing. This should be the only method you need to implement * in a subclass of GenericParsingProfileTest to run a unit test for that parsing profile. * Unfortunately, I couldn't make this method abstract due to limitations of java in that a static method can not be abstract, * so I have commented this method out */ //@BeforeClass //public static void initialize(){}; @Test public void testTitle(){ assertEquals(expectedMovie.getTitle().getTitle(), actualMovie.getTitle().getTitle()); } @Test public void testOriginalTitle(){ assertEquals(expectedMovie.getOriginalTitle().getOriginalTitle(), actualMovie.getOriginalTitle().getOriginalTitle()); } @Test public void testSet(){ assertEquals(expectedMovie.getSet().getSet(), actualMovie.getSet().getSet()); } @Test public void testPlot(){ //allow a few differences because they may have just added a space or two in there or fixed a small typo assertTrue(StringUtils.getLevenshteinDistance(expectedMovie.getPlot().getPlot(), actualMovie.getPlot().getPlot()) < 4); //assertEquals(expectedValueMovie.getPlot().getPlot(), scrapedValueMovie.getPlot().getPlot()); } @Test public void testRuntime(){ assertEquals(expectedMovie.getRuntime().getRuntime(), actualMovie.getRuntime().getRuntime()); } @Test public void testID() { assertEquals(expectedMovie.getId().getId(), actualMovie.getId().getId()); } @Test public void testYear() { assertEquals(expectedMovie.getYear().getYear(), actualMovie.getYear().getYear()); } @Test public void testTrailer() { assertEquals(expectedMovie.getTrailer().getTrailer(), actualMovie.getTrailer().getTrailer()); } @Test public void testReleaseDate() { assertEquals(expectedMovie.getReleaseDate().getReleaseDate(), actualMovie.getReleaseDate().getReleaseDate()); } @Test public void testGenre() { assertEquals(expectedMovie.getGenres(), actualMovie.getGenres()); } @Test public void testTop250() { assertEquals(expectedMovie.getTop250().getTop250(), actualMovie.getTop250().getTop250()); } @Test public void testTagline() { assertEquals(expectedMovie.getTagline().getTagline(), actualMovie.getTagline().getTagline()); } @Test public void testOutline() { assertEquals(expectedMovie.getOutline().getOutline(), actualMovie.getOutline().getOutline()); } @Test public void testMPAARating() { assertEquals(expectedMovie.getMpaa().getMPAARating(), actualMovie.getMpaa().getMPAARating()); } @Test public void testSortTitle() { assertEquals(expectedMovie.getSortTitle().getSortTitle(), actualMovie.getSortTitle().getSortTitle()); } @Test public void testStudio() { assertEquals(expectedMovie.getStudio().getStudio(), actualMovie.getStudio().getStudio()); } @Test public void testActor() { assertEquals(expectedMovie.getActors().size(), actualMovie.getActors().size()); Comparator<Actor> sortByActorName = new Comparator<Actor>() { @Override public int compare(Actor actor1, Actor actor2) { return actor1.getName().compareTo(actor2.getName()); } }; expectedMovie.getActors().sort(sortByActorName); actualMovie.getActors().sort(sortByActorName); for (int i = 0; i < expectedMovie.getActors().size(); i++) { Actor actorExpected = expectedMovie.getActors().get(i); Actor actorActual = actualMovie.getActors().get(i); assertEquals(actorExpected.getName(), actorActual.getName()); assertEquals(actorExpected.getRole(), actorActual.getRole()); assertEquals(actorExpected.getThumb(), actorActual.getThumb()); } } @Test public void testDirector() { assertEquals(expectedMovie.getDirectors().size(), actualMovie.getDirectors().size()); Comparator<Director> sortByDirectorName = new Comparator<Director>() { @Override public int compare(Director director1, Director director2) { return director1.getName().compareTo(director2.getName()); } }; expectedMovie.getDirectors().sort(sortByDirectorName); actualMovie.getDirectors().sort(sortByDirectorName); for (int i = 0; i < expectedMovie.getDirectors().size(); i++) { Director directorExpected = expectedMovie.getDirectors().get(i); Director directorActual = actualMovie.getDirectors().get(i); assertEquals(directorExpected.getName(), directorActual.getName()); //Oddly, directors cannot have thumbnails in Kodi, so we aren't writing this info to the nfo //That is why I have removed the line below. If they ever allow it, we can uncomment this //assertEquals(directorExpected.getThumb(), directorActual.getThumb()); } } @Test public void testPosters() { assertEquals(expectedMovie.getPosters().length, actualMovie.getPosters().length); for(int i = 0; i < expectedMovie.getPosters().length; i++) { assertEquals(expectedMovie.getPosters()[i], actualMovie.getPosters()[i]); } } @Test public void testFanart() { assertEquals(expectedMovie.getFanart().length, actualMovie.getFanart().length); for(int i = 0; i < expectedMovie.getFanart().length; i++) { assertEquals(expectedMovie.getFanart()[i], actualMovie.getFanart()[i]); } } public static Movie createMovieFromFileName(String fileName) { Movie scrapedMovieFromFile = null; URI movieOneURI; try { movieOneURI = new Object().getClass().getResource("/res/testdata/" + fileName).toURI(); System.out.println("movieOneUri = " + movieOneURI); scrapedMovieFromFile = Movie.createMovieFromNfo(new File(movieOneURI)); } catch (URISyntaxException | IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return scrapedMovieFromFile; } }