From c0d046fa994b84d0ac2ad386e5c9d11008dd4484 Mon Sep 17 00:00:00 2001 From: Uwe Trottmann Date: Fri, 7 Jun 2024 15:41:57 +0200 Subject: [PATCH] TvService: support aggregate credits --- .../tmdb2/entities/BaseTvCredit.java | 16 ++++++ .../tmdb2/entities/TvCastCredit.java | 16 ++++++ .../tmdb2/entities/TvCredits.java | 12 +++++ .../tmdb2/entities/TvCrewCredit.java | 17 ++++++ .../tmdb2/services/TvService.java | 16 ++++-- .../tmdb2/services/TvServiceTest.java | 53 ++++++++++++++++++- 6 files changed, 123 insertions(+), 7 deletions(-) create mode 100644 src/main/java/com/uwetrottmann/tmdb2/entities/BaseTvCredit.java create mode 100644 src/main/java/com/uwetrottmann/tmdb2/entities/TvCastCredit.java create mode 100644 src/main/java/com/uwetrottmann/tmdb2/entities/TvCredits.java create mode 100644 src/main/java/com/uwetrottmann/tmdb2/entities/TvCrewCredit.java diff --git a/src/main/java/com/uwetrottmann/tmdb2/entities/BaseTvCredit.java b/src/main/java/com/uwetrottmann/tmdb2/entities/BaseTvCredit.java new file mode 100644 index 0000000..3df9d61 --- /dev/null +++ b/src/main/java/com/uwetrottmann/tmdb2/entities/BaseTvCredit.java @@ -0,0 +1,16 @@ +package com.uwetrottmann.tmdb2.entities; + +public class BaseTvCredit { + + public Integer id; + + public Boolean adult; + public Integer gender; + public String known_for_department; + public String name; + public String original_name; + public Double popularity; + public String profile_path; + public Integer total_episode_count; + +} diff --git a/src/main/java/com/uwetrottmann/tmdb2/entities/TvCastCredit.java b/src/main/java/com/uwetrottmann/tmdb2/entities/TvCastCredit.java new file mode 100644 index 0000000..847b9fa --- /dev/null +++ b/src/main/java/com/uwetrottmann/tmdb2/entities/TvCastCredit.java @@ -0,0 +1,16 @@ +package com.uwetrottmann.tmdb2.entities; + +import java.util.List; + +public class TvCastCredit extends BaseTvCredit { + + public List roles; + public Integer order; + + public static class Role { + public String credit_id; + public String character; + public Integer episode_count; + } + +} diff --git a/src/main/java/com/uwetrottmann/tmdb2/entities/TvCredits.java b/src/main/java/com/uwetrottmann/tmdb2/entities/TvCredits.java new file mode 100644 index 0000000..3d8c3e5 --- /dev/null +++ b/src/main/java/com/uwetrottmann/tmdb2/entities/TvCredits.java @@ -0,0 +1,12 @@ +package com.uwetrottmann.tmdb2.entities; + +import java.util.List; + +public class TvCredits { + + public Integer id; + + public List cast; + public List crew; + +} diff --git a/src/main/java/com/uwetrottmann/tmdb2/entities/TvCrewCredit.java b/src/main/java/com/uwetrottmann/tmdb2/entities/TvCrewCredit.java new file mode 100644 index 0000000..11c1adc --- /dev/null +++ b/src/main/java/com/uwetrottmann/tmdb2/entities/TvCrewCredit.java @@ -0,0 +1,17 @@ +package com.uwetrottmann.tmdb2.entities; + +import java.util.List; + +public class TvCrewCredit extends BaseTvCredit { + + public List jobs; + public String department; + + public static class Job { + public String credit_id; + public String job; + public Integer episode_count; + } + +} + diff --git a/src/main/java/com/uwetrottmann/tmdb2/services/TvService.java b/src/main/java/com/uwetrottmann/tmdb2/services/TvService.java index a434033..63e7a98 100644 --- a/src/main/java/com/uwetrottmann/tmdb2/services/TvService.java +++ b/src/main/java/com/uwetrottmann/tmdb2/services/TvService.java @@ -12,6 +12,7 @@ import com.uwetrottmann.tmdb2.entities.Status; import com.uwetrottmann.tmdb2.entities.TmdbDate; import com.uwetrottmann.tmdb2.entities.Translations; +import com.uwetrottmann.tmdb2.entities.TvCredits; import com.uwetrottmann.tmdb2.entities.TvExternalIds; import com.uwetrottmann.tmdb2.entities.TvShow; import com.uwetrottmann.tmdb2.entities.TvShowResultsPage; @@ -121,11 +122,16 @@ Call changes( ); /** - * Get the cast and crew information about a TV series. Just like the website, we pull this information from the - * last season of the series. - * - * @param tvShowId A Tv Show TMDb id. - * @param language Optional. ISO 639-1 code. + * @see Aggregate Credits + */ + @GET("tv/{tv_id}/aggregate_credits") + Call aggregateCredits( + @Path("tv_id") int tvShowId, + @Query("language") String language + ); + + /** + * @see Credits */ @GET("tv/{tv_id}/credits") Call credits( diff --git a/src/test/java/com/uwetrottmann/tmdb2/services/TvServiceTest.java b/src/test/java/com/uwetrottmann/tmdb2/services/TvServiceTest.java index 962086e..fe66a65 100644 --- a/src/test/java/com/uwetrottmann/tmdb2/services/TvServiceTest.java +++ b/src/test/java/com/uwetrottmann/tmdb2/services/TvServiceTest.java @@ -21,6 +21,7 @@ import com.uwetrottmann.tmdb2.assertions.TvAssertions; import com.uwetrottmann.tmdb2.entities.AlternativeTitles; import com.uwetrottmann.tmdb2.entities.AppendToResponse; +import com.uwetrottmann.tmdb2.entities.BaseTvCredit; import com.uwetrottmann.tmdb2.entities.Changes; import com.uwetrottmann.tmdb2.entities.ContentRatings; import com.uwetrottmann.tmdb2.entities.Credits; @@ -28,6 +29,9 @@ import com.uwetrottmann.tmdb2.entities.Keywords; import com.uwetrottmann.tmdb2.entities.TmdbDate; import com.uwetrottmann.tmdb2.entities.Translations; +import com.uwetrottmann.tmdb2.entities.TvCastCredit; +import com.uwetrottmann.tmdb2.entities.TvCredits; +import com.uwetrottmann.tmdb2.entities.TvCrewCredit; import com.uwetrottmann.tmdb2.entities.TvExternalIds; import com.uwetrottmann.tmdb2.entities.TvShow; import com.uwetrottmann.tmdb2.entities.TvShowResultsPage; @@ -140,15 +144,60 @@ public void test_alternative_titles() throws IOException { assertAlternativeTitles(titles); } + @Test + public void test_aggregateCredits() throws IOException { + Call call = + getUnauthenticatedInstance().tvService().aggregateCredits(1416 /* Grey's Anatomy */, null); + TvCredits credits = call.execute().body(); + assertThat(credits).isNotNull(); + assertThat(credits.id).isPositive(); + + assertThat(credits.cast).isNotEmpty(); + // cast is ordered, so Ellen which has all values is always first + TvCastCredit ellenPompeo = credits.cast.get(0); + assertThat(ellenPompeo.order).isEqualTo(0); + assertTvCredit(ellenPompeo); + assertThat(ellenPompeo.roles).isNotEmpty(); + TvCastCredit.Role role = ellenPompeo.roles.get(0); + assertThat(role.credit_id).isNotNull(); + assertThat(role.character).isNotNull(); + assertThat(role.episode_count).isPositive(); + + assertThat(credits.crew).isNotEmpty(); + for (TvCrewCredit credit : credits.crew) { + // Shonda Rhimes does have all values, unlikely to be removed + if ("Shonda Rhimes".equals(credit.name)) { + assertTvCredit(credit); + assertThat(credit.jobs).isNotEmpty(); + TvCrewCredit.Job job = credit.jobs.get(0); + assertThat(job.credit_id).isNotNull(); + assertThat(job.job).isNotNull(); + assertThat(job.episode_count).isPositive(); + assertThat(credit.department).isNotNull(); + break; + } + } + } + + private static void assertTvCredit(BaseTvCredit credit) { + assertThat(credit.id).isPositive(); + assertThat(credit.adult).isNotNull(); + assertThat(credit.gender).isNotNull(); + assertThat(credit.known_for_department).isNotNull(); + assertThat(credit.name).isNotNull(); + assertThat(credit.original_name).isNotNull(); + assertThat(credit.popularity).isPositive(); + assertThat(credit.profile_path).isNotNull(); + assertThat(credit.total_episode_count).isPositive(); + } + @Test public void test_credits() throws IOException { Call call = getUnauthenticatedInstance().tvService().credits( testTvShow.id, null ); - Credits credits = call.execute().body(); - assertCredits(credits); }