/* * Copyright (c) 2004-2013 Stuart Boston * * This file is part of TheMovieDB API. * * TheMovieDB API is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * TheMovieDB API is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with TheMovieDB API. If not, see . * */ package com.omertron.themoviedbapi; import com.omertron.themoviedbapi.model.AlternativeTitle; import com.omertron.themoviedbapi.model.Artwork; import com.omertron.themoviedbapi.model.Collection; import com.omertron.themoviedbapi.model.CollectionInfo; import com.omertron.themoviedbapi.model.Company; import com.omertron.themoviedbapi.model.Genre; import com.omertron.themoviedbapi.model.Keyword; import com.omertron.themoviedbapi.model.KeywordMovie; import com.omertron.themoviedbapi.model.MovieChanges; import com.omertron.themoviedbapi.model.MovieDb; import com.omertron.themoviedbapi.model.MovieDbList; import com.omertron.themoviedbapi.model.MovieList; import com.omertron.themoviedbapi.model.Person; import com.omertron.themoviedbapi.model.PersonCredit; import com.omertron.themoviedbapi.model.ReleaseInfo; import com.omertron.themoviedbapi.model.TmdbConfiguration; import com.omertron.themoviedbapi.model.TokenAuthorisation; import com.omertron.themoviedbapi.model.TokenSession; import com.omertron.themoviedbapi.model.Trailer; import com.omertron.themoviedbapi.model.Translation; import com.omertron.themoviedbapi.tools.FilteringLayout; import java.io.IOException; import java.util.Collections; import java.util.List; import org.apache.commons.lang3.StringUtils; import org.apache.log4j.BasicConfigurator; import org.apache.log4j.Level; import org.apache.log4j.Logger; import org.junit.*; import static org.junit.Assert.*; /** * Test cases for TheMovieDbApi API * * @author stuart.boston */ public class TheMovieDbApiTest { // Logger private static final Logger logger = Logger.getLogger(TheMovieDbApiTest.class); // API Key private static final String API_KEY = "5a1a77e2eba8984804586122754f969f"; private static TheMovieDbApi tmdb; // Test data private static final int ID_MOVIE_BLADE_RUNNER = 78; private static final int ID_MOVIE_STAR_WARS_COLLECTION = 10; private static final int ID_PERSON_BRUCE_WILLIS = 62; private static final int ID_COMPANY_LUCASFILM = 1; private static final String COMPANY_NAME = "Marvel Studios"; private static final int ID_GENRE_ACTION = 28; private static final String ID_KEYWORD = "1721"; // Languages private static final String LANGUAGE_DEFAULT = ""; private static final String LANGUAGE_ENGLISH = "en"; public TheMovieDbApiTest() throws MovieDbException { } @BeforeClass public static void setUpClass() throws Exception { BasicConfigurator.configure(); // Set the logger level to TRACE Logger.getRootLogger().setLevel(Level.TRACE); tmdb = new TheMovieDbApi(API_KEY); } @AfterClass public static void tearDownClass() throws Exception { } @Before public void setUp() { // Make sure the filter isn't applied to the test output FilteringLayout.addReplacementString("DO_NOT_MATCH"); } @After public void tearDown() { } /** * Test of getConfiguration method, of class TheMovieDbApi. */ @Test public void testConfiguration() throws IOException { logger.info("Test Configuration"); TmdbConfiguration tmdbConfig = tmdb.getConfiguration(); assertNotNull("Configuration failed", tmdbConfig); assertTrue("No base URL", StringUtils.isNotBlank(tmdbConfig.getBaseUrl())); assertTrue("No backdrop sizes", tmdbConfig.getBackdropSizes().size() > 0); assertTrue("No poster sizes", tmdbConfig.getPosterSizes().size() > 0); assertTrue("No profile sizes", tmdbConfig.getProfileSizes().size() > 0); logger.info(tmdbConfig.toString()); } /** * Test of searchMovie method, of class TheMovieDbApi. */ @Test public void testSearchMovie() throws MovieDbException { logger.info("searchMovie"); // Try a movie with less than 1 page of results List movieList = tmdb.searchMovie("Blade Runner", 0, "", true, 0); // List movieList = tmdb.searchMovie("Blade Runner", "", true); assertTrue("No movies found, should be at least 1", movieList.size() > 0); // Try a russian langugage movie movieList = tmdb.searchMovie("О чём говорят мужчины", 0, "ru", true, 0); assertTrue("No movies found, should be at least 1", movieList.size() > 0); // Try a movie with more than 20 results movieList = tmdb.searchMovie("Star Wars", 0, "en", false, 0); assertTrue("Not enough movies found, should be over 15, found " + movieList.size(), movieList.size() >= 15); } /** * Test of getMovieInfo method, of class TheMovieDbApi. */ @Test public void testGetMovieInfo() throws MovieDbException { logger.info("getMovieInfo"); String language = "en"; MovieDb result = tmdb.getMovieInfo(ID_MOVIE_BLADE_RUNNER, language); assertEquals("Incorrect movie information", "Blade Runner", result.getOriginalTitle()); } /** * Test of getMovieAlternativeTitles method, of class TheMovieDbApi. */ @Test public void testGetMovieAlternativeTitles() throws MovieDbException { logger.info("getMovieAlternativeTitles"); String country = ""; List results = tmdb.getMovieAlternativeTitles(ID_MOVIE_BLADE_RUNNER, country); assertTrue("No alternative titles found", results.size() > 0); country = "US"; results = tmdb.getMovieAlternativeTitles(ID_MOVIE_BLADE_RUNNER, country); assertTrue("No alternative titles found", results.size() > 0); } /** * Test of getMovieCasts method, of class TheMovieDbApi. */ @Test public void testGetMovieCasts() throws MovieDbException { logger.info("getMovieCasts"); List people = tmdb.getMovieCasts(ID_MOVIE_BLADE_RUNNER); assertTrue("No cast information", people.size() > 0); String name1 = "Harrison Ford"; String name2 = "Charles Knode"; boolean foundName1 = Boolean.FALSE; boolean foundName2 = Boolean.FALSE; for (Person person : people) { if (!foundName1 && person.getName().equalsIgnoreCase(name1)) { foundName1 = Boolean.TRUE; } if (!foundName2 && person.getName().equalsIgnoreCase(name2)) { foundName2 = Boolean.TRUE; } } assertTrue("Couldn't find " + name1, foundName1); assertTrue("Couldn't find " + name2, foundName2); } /** * Test of getMovieImages method, of class TheMovieDbApi. */ @Test public void testGetMovieImages() throws MovieDbException { logger.info("getMovieImages"); String language = ""; List result = tmdb.getMovieImages(ID_MOVIE_BLADE_RUNNER, language); assertFalse("No artwork found", result.isEmpty()); } /** * Test of getMovieKeywords method, of class TheMovieDbApi. */ @Test public void testGetMovieKeywords() throws MovieDbException { logger.info("getMovieKeywords"); List result = tmdb.getMovieKeywords(ID_MOVIE_BLADE_RUNNER); assertFalse("No keywords found", result.isEmpty()); } /** * Test of getMovieReleaseInfo method, of class TheMovieDbApi. */ @Test public void testGetMovieReleaseInfo() throws MovieDbException { logger.info("getMovieReleaseInfo"); List result = tmdb.getMovieReleaseInfo(ID_MOVIE_BLADE_RUNNER, ""); assertFalse("Release information missing", result.isEmpty()); } /** * Test of getMovieTrailers method, of class TheMovieDbApi. */ @Test public void testGetMovieTrailers() throws MovieDbException { logger.info("getMovieTrailers"); List result = tmdb.getMovieTrailers(ID_MOVIE_BLADE_RUNNER, ""); assertFalse("Movie trailers missing", result.isEmpty()); } /** * Test of getMovieTranslations method, of class TheMovieDbApi. */ @Test public void testGetMovieTranslations() throws MovieDbException { logger.info("getMovieTranslations"); List result = tmdb.getMovieTranslations(ID_MOVIE_BLADE_RUNNER); assertFalse("No translations found", result.isEmpty()); } /** * Test of getCollectionInfo method, of class TheMovieDbApi. */ @Test public void testGetCollectionInfo() throws MovieDbException { logger.info("getCollectionInfo"); String language = ""; CollectionInfo result = tmdb.getCollectionInfo(ID_MOVIE_STAR_WARS_COLLECTION, language); assertFalse("No collection information", result.getParts().isEmpty()); } /** * Test of createImageUrl method, of class TheMovieDbApi. * * @throws MovieDbException */ @Test public void testCreateImageUrl() throws MovieDbException { logger.info("createImageUrl"); MovieDb movie = tmdb.getMovieInfo(ID_MOVIE_BLADE_RUNNER, ""); String result = tmdb.createImageUrl(movie.getPosterPath(), "original").toString(); assertTrue("Error compiling image URL", !result.isEmpty()); } /** * Test of getMovieInfoImdb method, of class TheMovieDbApi. */ @Test public void testGetMovieInfoImdb() throws MovieDbException { logger.info("getMovieInfoImdb"); MovieDb result = tmdb.getMovieInfoImdb("tt0076759", "en-US"); assertTrue("Error getting the movie from IMDB ID", result.getId() == 11); } /** * Test of getApiKey method, of class TheMovieDbApi. */ @Test public void testGetApiKey() { // Not required } /** * Test of getApiBase method, of class TheMovieDbApi. */ @Test public void testGetApiBase() { // Not required } /** * Test of getConfiguration method, of class TheMovieDbApi. */ @Test public void testGetConfiguration() { // Not required } /** * Test of searchPeople method, of class TheMovieDbApi. */ @Test public void testSearchPeople() throws MovieDbException { logger.info("searchPeople"); String personName = "Bruce Willis"; boolean includeAdult = false; List result = tmdb.searchPeople(personName, includeAdult, 0); assertTrue("Couldn't find the person", result.size() > 0); } /** * Test of getPersonInfo method, of class TheMovieDbApi. */ @Test public void testGetPersonInfo() throws MovieDbException { logger.info("getPersonInfo"); Person result = tmdb.getPersonInfo(ID_PERSON_BRUCE_WILLIS); assertTrue("Wrong actor returned", result.getId() == ID_PERSON_BRUCE_WILLIS); } /** * Test of getPersonCredits method, of class TheMovieDbApi. */ @Test public void testGetPersonCredits() throws MovieDbException { logger.info("getPersonCredits"); List people = tmdb.getPersonCredits(ID_PERSON_BRUCE_WILLIS); assertTrue("No cast information", people.size() > 0); } /** * Test of getPersonImages method, of class TheMovieDbApi. */ @Test public void testGetPersonImages() throws MovieDbException { logger.info("getPersonImages"); List artwork = tmdb.getPersonImages(ID_PERSON_BRUCE_WILLIS); assertTrue("No cast information", artwork.size() > 0); } /** * Test of getLatestMovie method, of class TheMovieDbApi. */ @Test public void testGetLatestMovie() throws MovieDbException { logger.info("getLatestMovie"); MovieDb result = tmdb.getLatestMovie(); assertTrue("No latest movie found", result != null); assertTrue("No latest movie found", result.getId() > 0); } /** * Test of compareMovies method, of class TheMovieDbApi. */ @Test public void testCompareMovies() { // Not required } /** * Test of setProxy method, of class TheMovieDbApi. */ @Test public void testSetProxy() { // Not required } /** * Test of setTimeout method, of class TheMovieDbApi. */ @Test public void testSetTimeout() { // Not required } /** * Test of getNowPlayingMovies method, of class TheMovieDbApi. */ @Test public void testGetNowPlayingMovies() throws MovieDbException { logger.info("getNowPlayingMovies"); List results = tmdb.getNowPlayingMovies(LANGUAGE_DEFAULT, 0); assertTrue("No now playing movies found", !results.isEmpty()); } /** * Test of getPopularMovieList method, of class TheMovieDbApi. */ @Test public void testGetPopularMovieList() throws MovieDbException { logger.info("getPopularMovieList"); List results = tmdb.getPopularMovieList(LANGUAGE_DEFAULT, 0); assertTrue("No popular movies found", !results.isEmpty()); } /** * Test of getTopRatedMovies method, of class TheMovieDbApi. */ @Test public void testGetTopRatedMovies() throws MovieDbException { logger.info("getTopRatedMovies"); List results = tmdb.getTopRatedMovies(LANGUAGE_DEFAULT, 0); assertTrue("No top rated movies found", !results.isEmpty()); } /** * Test of getCompanyInfo method, of class TheMovieDbApi. */ @Test public void testGetCompanyInfo() throws MovieDbException { logger.info("getCompanyInfo"); Company company = tmdb.getCompanyInfo(ID_COMPANY_LUCASFILM); assertTrue("No company information found", company.getCompanyId() > 0); } /** * Test of getCompanyMovies method, of class TheMovieDbApi. */ @Test public void testGetCompanyMovies() throws MovieDbException { logger.info("getCompanyMovies"); List results = tmdb.getCompanyMovies(ID_COMPANY_LUCASFILM, LANGUAGE_DEFAULT, 0); assertTrue("No company movies found", !results.isEmpty()); } /** * Test of searchCompanies method, of class TheMovieDbApi. */ @Test public void testSearchCompanies() throws MovieDbException { logger.info("searchCompanies"); List results = tmdb.searchCompanies(COMPANY_NAME, 0); assertTrue("No company information found", !results.isEmpty()); } /** * Test of getSimilarMovies method, of class TheMovieDbApi. */ @Test public void testGetSimilarMovies() throws MovieDbException { logger.info("getSimilarMovies"); List results = tmdb.getSimilarMovies(ID_MOVIE_BLADE_RUNNER, LANGUAGE_DEFAULT, 0); assertTrue("No similar movies found", !results.isEmpty()); } /** * Test of getGenreList method, of class TheMovieDbApi. */ @Test public void testGetGenreList() throws MovieDbException { logger.info("getGenreList"); List results = tmdb.getGenreList(LANGUAGE_DEFAULT); assertTrue("No genres found", !results.isEmpty()); } /** * Test of getGenreMovies method, of class TheMovieDbApi. */ @Test public void testGetGenreMovies() throws MovieDbException { logger.info("getGenreMovies"); List results = tmdb.getGenreMovies(ID_GENRE_ACTION, LANGUAGE_DEFAULT, 0); assertTrue("No genre movies found", !results.isEmpty()); } /** * Test of getUpcoming method, of class TheMovieDbApi. */ @Test public void testGetUpcoming() throws Exception { logger.info("getUpcoming"); List results = tmdb.getUpcoming(LANGUAGE_DEFAULT, 0); assertTrue("No upcoming movies found", !results.isEmpty()); } /** * Test of getCollectionImages method, of class TheMovieDbApi. */ @Test public void testGetCollectionImages() throws Exception { logger.info("getCollectionImages"); List result = tmdb.getCollectionImages(ID_MOVIE_STAR_WARS_COLLECTION, LANGUAGE_DEFAULT); assertFalse("No artwork found", result.isEmpty()); } /** * Test of getAuthorisationToken method, of class TheMovieDbApi. */ @Test public void testGetAuthorisationToken() throws Exception { logger.info("getAuthorisationToken"); TokenAuthorisation result = tmdb.getAuthorisationToken(); assertFalse("Token is null", result == null); assertTrue("Token is not valid", result.getSuccess()); logger.info(result.toString()); } /** * Test of getSessionToken method, of class TheMovieDbApi. * * TODO: Cannot be tested without a HTTP authorisation: http://help.themoviedb.org/kb/api/user-authentication */ public void testGetSessionToken() throws Exception { logger.info("getSessionToken"); TokenAuthorisation token = tmdb.getAuthorisationToken(); assertFalse("Token is null", token == null); assertTrue("Token is not valid", token.getSuccess()); logger.info(token.toString()); TokenSession result = tmdb.getSessionToken(token); assertFalse("Session token is null", result == null); assertTrue("Session token is not valid", result.getSuccess()); logger.info(result.toString()); } /** * Test of getGuestSessionToken method, of class TheMovieDbApi. */ @Test public void testGetGuestSessionToken() throws Exception { logger.info("getGuestSessionToken"); TokenSession result = tmdb.getGuestSessionToken(); assertTrue("Failed to get guest session", result.getSuccess()); } @Test public void testGetMovieLists() throws Exception { logger.info("getMovieLists"); String language = "en"; List results = tmdb.getMovieLists(ID_MOVIE_BLADE_RUNNER, language, 0); assertNotNull("No results found", results); assertTrue("No results found", results.size() > 0); } /** * Test of getMovieChanges method,of class TheMovieDbApi * * TODO: Do not test this until it is fixed */ public void testGetMovieChanges() throws Exception { logger.info("getMovieChanges"); String startDate = ""; String endDate = null; List results = Collections.EMPTY_LIST; // Get some popular movies List movieList = tmdb.getPopularMovieList(LANGUAGE_DEFAULT, 0); for (MovieDb movie : movieList) { results = tmdb.getMovieChanges(movie.getId(), startDate, endDate); logger.info(movie.getTitle() + " has " + results.size() + " changes."); } assertNotNull("No results found", results); assertTrue("No results found", results.size() > 0); } @Test public void testGetPersonLatest() throws Exception { logger.info("getPersonLatest"); Person result = tmdb.getPersonLatest(); assertNotNull("No results found", result); assertTrue("No results found", StringUtils.isNotBlank(result.getName())); } /** * Test of searchCollection method, of class TheMovieDbApi. */ @Test public void testSearchCollection() throws Exception { logger.info("searchCollection"); String query = "batman"; int page = 0; List result = tmdb.searchCollection(query, LANGUAGE_DEFAULT, page); assertFalse("No collections found", result == null); assertTrue("No collections found", result.size() > 0); } /** * Test of searchList method, of class TheMovieDbApi. */ @Test public void testSearchList() throws Exception { logger.info("searchList"); String query = "watch"; int page = 0; List result = tmdb.searchList(query, LANGUAGE_DEFAULT, page); assertFalse("No lists found", result == null); assertTrue("No lists found", result.size() > 0); } /** * Test of searchKeyword method, of class TheMovieDbApi. */ @Test public void testSearchKeyword() throws Exception { logger.info("searchKeyword"); String query = "action"; int page = 0; List result = tmdb.searchKeyword(query, page); assertFalse("No keywords found", result == null); assertTrue("No keywords found", result.size() > 0); } /** * Test of postMovieRating method, of class TheMovieDbApi. * * TODO: Cannot be tested without a HTTP authorisation: http://help.themoviedb.org/kb/api/user-authentication */ public void testPostMovieRating() throws Exception { logger.info("postMovieRating"); String sessionId = ""; String rating = ""; boolean expResult = false; boolean result = tmdb.postMovieRating(sessionId, rating); assertEquals(expResult, result); // TODO review the generated test code and remove the default call to fail. fail("The test case is a prototype."); } /** * Test of getPersonChanges method, of class TheMovieDbApi. * * TODO: Fix the method before testing */ public void testGetPersonChanges() throws Exception { logger.info("getPersonChanges"); String startDate = ""; String endDate = ""; tmdb.getPersonChanges(ID_PERSON_BRUCE_WILLIS, startDate, endDate); } /** * Test of getList method, of class TheMovieDbApi. */ @Test public void testGetList() throws Exception { logger.info("getList"); String listId = "509ec17b19c2950a0600050d"; MovieDbList result = tmdb.getList(listId); assertFalse("List not found", result.getItems().isEmpty()); } /** * Test of getKeyword method, of class TheMovieDbApi. */ @Test public void testGetKeyword() throws Exception { logger.info("getKeyword"); Keyword result = tmdb.getKeyword(ID_KEYWORD); assertEquals("fight", result.getName()); } /** * Test of getKeywordMovies method, of class TheMovieDbApi. */ @Test public void testGetKeywordMovies() throws Exception { logger.info("getKeywordMovies"); int page = 0; List result = tmdb.getKeywordMovies(ID_KEYWORD, LANGUAGE_DEFAULT, page); assertFalse("No keyword movies found", result.isEmpty()); } }