com.omertron.themoviedbapi.methods.TmdbMoviesTest.java Source code

Java tutorial

Introduction

Here is the source code for com.omertron.themoviedbapi.methods.TmdbMoviesTest.java

Source

/*
 *      Copyright (c) 2004-2016 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 <http://www.gnu.org/licenses/>.
 *
 */
package com.omertron.themoviedbapi.methods;

import com.omertron.themoviedbapi.AbstractTests;
import com.omertron.themoviedbapi.ArtworkResults;
import com.omertron.themoviedbapi.MovieDbException;
import com.omertron.themoviedbapi.TestID;
import com.omertron.themoviedbapi.TestSuite;
import com.omertron.themoviedbapi.enumeration.ArtworkType;
import com.omertron.themoviedbapi.enumeration.MovieMethod;
import com.omertron.themoviedbapi.model.StatusCode;
import com.omertron.themoviedbapi.model.artwork.Artwork;
import com.omertron.themoviedbapi.model.change.ChangeKeyItem;
import com.omertron.themoviedbapi.model.change.ChangeListItem;
import com.omertron.themoviedbapi.model.credits.MediaCreditCast;
import com.omertron.themoviedbapi.model.keyword.Keyword;
import com.omertron.themoviedbapi.model.list.UserList;
import com.omertron.themoviedbapi.model.media.AlternativeTitle;
import com.omertron.themoviedbapi.model.media.MediaCreditList;
import com.omertron.themoviedbapi.model.media.MediaState;
import com.omertron.themoviedbapi.model.media.Translation;
import com.omertron.themoviedbapi.model.media.Video;
import com.omertron.themoviedbapi.model.movie.MovieInfo;
import com.omertron.themoviedbapi.model.movie.ReleaseDates;
import com.omertron.themoviedbapi.model.movie.ReleaseInfo;
import com.omertron.themoviedbapi.model.review.Review;
import com.omertron.themoviedbapi.results.ResultList;
import com.omertron.themoviedbapi.tools.MethodBase;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.time.DateUtils;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import org.junit.BeforeClass;
import org.junit.Test;

/**
 *
 * @author stuart.boston
 */
public class TmdbMoviesTest extends AbstractTests {

    private static TmdbMovies instance;
    private static final List<TestID> FILM_IDS = new ArrayList<>();
    private static final String WRONG_TITLE = "Wrong title";

    @BeforeClass
    public static void setUpClass() throws MovieDbException {
        doConfiguration();
        instance = new TmdbMovies(getApiKey(), getHttpTools());

        FILM_IDS.add(new TestID("Blade Runner", "tt0083658", 78, "Harrison Ford"));
        FILM_IDS.add(new TestID("Jupiter Ascending", "tt1617661", 76757, "Mila Kunis"));
        FILM_IDS.add(new TestID("Lucy", "tt2872732", 240832, "Morgan Freeman"));

    }

    /**
     * Test of Append_To_Response method, of class TmdbMovies.
     *
     * @throws com.omertron.themoviedbapi.MovieDbException
     */
    @Test
    public void testAppendToResponse() throws MovieDbException {
        LOG.info("appendToResponse");

        String language = LANGUAGE_DEFAULT;
        String appendToResponse = appendToResponseBuilder(MovieMethod.class);

        for (TestID test : FILM_IDS) {
            // Just test Blade Runner
            if (test.getTmdb() != 78) {
                continue;
            }

            MovieInfo result = instance.getMovieInfo(test.getTmdb(), language, appendToResponse);
            assertEquals("Wrong IMDB ID", test.getImdb(), result.getImdbID());
            assertEquals(WRONG_TITLE, test.getName(), result.getTitle());
            TestSuite.test(result);
            TestSuite.testATR(result, MovieMethod.class, MovieMethod.CHANGES);
            TestSuite.test(result.getAlternativeTitles(), "Alt titles");
            TestSuite.test(result.getCast(), "Cast");
            TestSuite.test(result.getCrew(), "Crew");
            TestSuite.test(result.getImages(), "Images");
            TestSuite.test(result.getKeywords(), "Keywords");
            TestSuite.test(result.getReleases(), "Releases");
            TestSuite.test(result.getVideos(), "Videos");
            TestSuite.test(result.getTranslations(), "Translations");
            TestSuite.test(result.getSimilarMovies(), "Similar");
            TestSuite.test(result.getLists(), "Lists");
            TestSuite.test(result.getReviews(), "Reviews");
            // There are rarely any changes, so skip this test
        }
    }

    /**
     * Test of getMovieInfo method, of class TmdbMovies.
     *
     * @throws com.omertron.themoviedbapi.MovieDbException
     */
    @Test
    public void testGetMovieInfo() throws MovieDbException {
        LOG.info("getMovieInfo");

        String language = LANGUAGE_DEFAULT;
        String[] appendToResponse = null;

        for (TestID test : FILM_IDS) {
            MovieInfo result = instance.getMovieInfo(test.getTmdb(), language, appendToResponse);
            assertEquals("Wrong IMDB ID", test.getImdb(), result.getImdbID());
            assertEquals(WRONG_TITLE, test.getName(), result.getTitle());
            TestSuite.test(result);
        }
    }

    /**
     * Test of getMovieInfoImdb method, of class TmdbMovies.
     *
     * @throws com.omertron.themoviedbapi.MovieDbException
     */
    @Test
    public void testGetMovieInfoImdb() throws MovieDbException {
        LOG.info("getMovieInfoImdb");
        String language = LANGUAGE_DEFAULT;
        String[] appendToResponse = null;

        for (TestID test : FILM_IDS) {
            MovieInfo result = instance.getMovieInfoImdb(test.getImdb(), language, appendToResponse);
            assertEquals("Wrong TMDB ID", test.getTmdb(), result.getId());
            assertEquals(WRONG_TITLE, test.getName(), result.getTitle());
            TestSuite.test(result);
        }
    }

    /**
     * Test of getMovieAccountState method, of class TmdbMovies.
     *
     * @throws com.omertron.themoviedbapi.MovieDbException
     */
    @Test
    public void testGetMovieAccountState() throws MovieDbException {
        LOG.info("getMovieAccountState");

        for (TestID test : FILM_IDS) {
            MediaState result = instance.getMovieAccountState(test.getTmdb(), getSessionId());
            assertNotNull("Null result", result);
            assertTrue("Invalid rating", result.getRated() > -2f);
        }
    }

    /**
     * Test of getMovieAlternativeTitles method, of class TmdbMovies.
     *
     * @throws com.omertron.themoviedbapi.MovieDbException
     */
    @Test
    public void testGetMovieAlternativeTitles() throws MovieDbException {
        LOG.info("getMovieAlternativeTitles");

        String country = "";

        for (TestID test : FILM_IDS) {
            ResultList<AlternativeTitle> result = instance.getMovieAlternativeTitles(test.getTmdb(), country);
            TestSuite.test(result, "Alt Titles");
        }
    }

    /**
     * Test of getMovieCredits method, of class TmdbMovies.
     *
     * @throws com.omertron.themoviedbapi.MovieDbException
     */
    @Test
    public void testGetMovieCredits() throws MovieDbException {
        LOG.info("getMovieCredits");

        for (TestID test : FILM_IDS) {
            MediaCreditList result = instance.getMovieCredits(test.getTmdb());
            assertNotNull(result);
            assertFalse(result.getCast().isEmpty());
            TestSuite.test(result.getCast(), "Cast");
            TestSuite.test(result.getCrew(), "Crew");

            boolean found = false;
            for (MediaCreditCast p : result.getCast()) {
                if (test.getOther().equals(p.getName())) {
                    found = true;
                    break;
                }
            }
            assertTrue(test.getOther() + " not found in cast!", found);

            assertFalse(result.getCrew().isEmpty());
        }
    }

    /**
     * Test of getMovieImages method, of class TmdbMovies.
     *
     * @throws com.omertron.themoviedbapi.MovieDbException
     */
    @Test
    public void testGetMovieImages() throws MovieDbException {
        LOG.info("getMovieImages");

        String language = LANGUAGE_DEFAULT;

        ArtworkResults results = new ArtworkResults();

        for (TestID test : FILM_IDS) {
            ResultList<Artwork> result = instance.getMovieImages(test.getTmdb(), language);
            assertFalse("No artwork", result.isEmpty());
            for (Artwork artwork : result.getResults()) {
                results.found(artwork.getArtworkType());
            }

            // We should only have posters & backdrops
            results.validateResults(ArtworkType.POSTER, ArtworkType.BACKDROP);
        }
    }

    /**
     * Test of getMovieKeywords method, of class TmdbMovies.
     *
     * @throws com.omertron.themoviedbapi.MovieDbException
     */
    @Test
    public void testGetMovieKeywords() throws MovieDbException {
        LOG.info("getMovieKeywords");

        for (TestID test : FILM_IDS) {
            ResultList<Keyword> result = instance.getMovieKeywords(test.getTmdb());
            TestSuite.test(result, "Keywords");
        }
    }

    /**
     * Test of getMovieReleaseInfo method, of class TmdbMovies.
     *
     * @throws com.omertron.themoviedbapi.MovieDbException
     */
    @Test
    public void testGetMovieReleaseInfo() throws MovieDbException {
        LOG.info("getMovieReleaseInfo");

        String language = LANGUAGE_DEFAULT;

        for (TestID test : FILM_IDS) {
            ResultList<ReleaseInfo> result = instance.getMovieReleaseInfo(test.getTmdb(), language);
            TestSuite.test(result, "Rel Info");
        }
    }

    /**
     * Test of getMovieVideos method, of class TmdbMovies.
     *
     * @throws com.omertron.themoviedbapi.MovieDbException
     */
    @Test
    public void testGetMovieVideos() throws MovieDbException {
        LOG.info("getMovieVideos");

        String language = LANGUAGE_DEFAULT;
        boolean found = false;

        for (TestID test : FILM_IDS) {
            ResultList<Video> result = instance.getMovieVideos(test.getTmdb(), language);
            found = found || !result.isEmpty();
        }
        assertTrue("No videos", found);
    }

    /**
     * Test of getMovieTranslations method, of class TmdbMovies.
     *
     * @throws com.omertron.themoviedbapi.MovieDbException
     */
    @Test
    public void testGetMovieTranslations() throws MovieDbException {
        LOG.info("getMovieTranslations");

        for (TestID test : FILM_IDS) {
            ResultList<Translation> result = instance.getMovieTranslations(test.getTmdb());
            TestSuite.test(result, "Translations");
        }
    }

    /**
     * Test of getSimilarMovies method, of class TmdbMovies.
     *
     * @throws com.omertron.themoviedbapi.MovieDbException
     */
    @Test
    public void testGetSimilarMovies() throws MovieDbException {
        LOG.info("getSimilarMovies");

        Integer page = null;
        String language = LANGUAGE_DEFAULT;

        for (TestID test : FILM_IDS) {
            ResultList<MovieInfo> result = instance.getSimilarMovies(test.getTmdb(), page, language);
            TestSuite.test(result, "Similar");
        }
    }

    /**
     * Test of getMovieReviews method, of class TmdbMovies.
     *
     * @throws com.omertron.themoviedbapi.MovieDbException
     */
    @Test
    public void testGetMovieReviews() throws MovieDbException {
        LOG.info("getMovieReviews");

        Integer page = null;
        String language = LANGUAGE_DEFAULT;

        for (TestID test : FILM_IDS) {
            if (test.getTmdb() == 76757) {
                // Has no reviews
                continue;
            }
            ResultList<Review> result = instance.getMovieReviews(test.getTmdb(), page, language);
            TestSuite.test(result, "Reviews");
        }
    }

    /**
     * Test of getMovieLists method, of class TmdbMovies.
     *
     * @throws com.omertron.themoviedbapi.MovieDbException
     */
    @Test
    public void testGetMovieLists() throws MovieDbException {
        LOG.info("getMovieLists");

        Integer page = null;
        String language = LANGUAGE_DEFAULT;

        for (TestID test : FILM_IDS) {
            ResultList<UserList> result = instance.getMovieLists(test.getTmdb(), page, language);
            TestSuite.test(result, "Lists");
        }
    }

    /**
     * Test of getMovieChanges method, of class TmdbMovies.
     *
     * @throws com.omertron.themoviedbapi.MovieDbException
     */
    @Test
    public void testGetMovieChanges() throws MovieDbException {
        LOG.info("getMovieChanges");
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        String startDate = sdf.format(DateUtils.addDays(new Date(), -14));
        String endDate = "";
        int maxCheck = 5;

        TmdbChanges chgs = new TmdbChanges(getApiKey(), getHttpTools());
        ResultList<ChangeListItem> changeList = chgs.getChangeList(MethodBase.MOVIE, null, null, null);
        LOG.info("Found {} changes to check, will check maximum of {}", changeList.getResults().size(), maxCheck);

        int count = 1;
        ResultList<ChangeKeyItem> result;
        for (ChangeListItem item : changeList.getResults()) {
            result = instance.getMovieChanges(item.getId(), startDate, endDate);
            for (ChangeKeyItem ci : result.getResults()) {
                assertNotNull("Null changes", ci);
            }

            if (count++ > maxCheck) {
                break;
            }
        }
    }

    /**
     * Test of postMovieRating method, of class TmdbMovies.
     *
     * @throws com.omertron.themoviedbapi.MovieDbException
     */
    @Test
    public void testPostMovieRating() throws MovieDbException {
        LOG.info("postMovieRating");
        int rating = TestSuite.randomRating();

        for (TestID test : FILM_IDS) {
            StatusCode result = instance.postMovieRating(test.getTmdb(), rating, getSessionId(), null);
            assertEquals("failed to post rating", 12, result.getCode());
        }
    }

    /**
     * Test of getLatestMovie method, of class TmdbMovies.
     *
     * @throws com.omertron.themoviedbapi.MovieDbException
     */
    @Test
    public void testGetLatestMovie() throws MovieDbException {
        LOG.info("getLatestMovie");

        MovieInfo result = instance.getLatestMovie();
        assertNotNull("Null movie returned", result);
        assertTrue("No ID", result.getId() > 0);
        assertTrue("No title", StringUtils.isNotBlank(result.getTitle()));
    }

    /**
     * Test of getUpcoming method, of class TmdbMovies.
     *
     * @throws com.omertron.themoviedbapi.MovieDbException
     */
    @Test
    public void testGetUpcoming() throws MovieDbException {
        LOG.info("getUpcoming");
        Integer page = null;
        String language = LANGUAGE_DEFAULT;

        ResultList<MovieInfo> result = instance.getUpcoming(page, language);
        assertFalse("No results found", result.isEmpty());
    }

    /**
     * Test of getNowPlayingMovies method, of class TmdbMovies.
     *
     * @throws com.omertron.themoviedbapi.MovieDbException
     */
    @Test
    public void testGetNowPlayingMovies() throws MovieDbException {
        LOG.info("getNowPlayingMovies");
        Integer page = null;
        String language = LANGUAGE_DEFAULT;

        ResultList<MovieInfo> result = instance.getNowPlayingMovies(page, language);
        TestSuite.test(result, "Now Playing");
    }

    /**
     * Test of getPopularMovieList method, of class TmdbMovies.
     *
     * @throws com.omertron.themoviedbapi.MovieDbException
     */
    @Test
    public void testGetPopularMovieList() throws MovieDbException {
        LOG.info("getPopularMovieList");
        Integer page = null;
        String language = LANGUAGE_DEFAULT;

        ResultList<MovieInfo> result = instance.getPopularMovieList(page, language);
        TestSuite.test(result, "Popular");
    }

    /**
     * Test of getTopRatedMovies method, of class TmdbMovies.
     *
     * @throws com.omertron.themoviedbapi.MovieDbException
     */
    @Test
    public void testGetTopRatedMovies() throws MovieDbException {
        LOG.info("getTopRatedMovies");
        Integer page = null;
        String language = LANGUAGE_DEFAULT;

        ResultList<MovieInfo> result = instance.getTopRatedMovies(page, language);
        TestSuite.test(result, "Top Rated");
    }

    /**
     * Test of getReleaseDates method, of class TmdbMovies.
     *
     * @throws com.omertron.themoviedbapi.MovieDbException
     */
    @Test
    public void testGetReleaseDates() throws MovieDbException {
        LOG.info("getReleaseDates");

        for (TestID test : FILM_IDS) {
            ResultList<ReleaseDates> result = instance.getReleaseDates(test.getTmdb());
            LOG.info("ID: {}, Page {} of {}, {} results", result.getId(), result.getPage(), result.getTotalPages(),
                    result.getTotalResults());

            TestSuite.test(result, "release dates");

            // There should always be a US release
            boolean found = false;
            for (ReleaseDates check : result.getResults()) {
                if ("US".equals(check.getCountry())) {
                    found = true;
                    break;
                }
            }
            assertTrue("No US release found", found);

        }

    }

}