diff --git a/src/NzbDrone.Core.Test/TvTests/RefreshEpisodeServiceFixture.cs b/src/NzbDrone.Core.Test/TvTests/RefreshEpisodeServiceFixture.cs index e38470579..5725b6664 100644 --- a/src/NzbDrone.Core.Test/TvTests/RefreshEpisodeServiceFixture.cs +++ b/src/NzbDrone.Core.Test/TvTests/RefreshEpisodeServiceFixture.cs @@ -82,7 +82,7 @@ private void GivenAnimeEpisodes(List episodes) public void should_create_all_when_no_existing_episodes() { - Mocker.GetMock().Setup(c => c.GetEpisodeBySeries(It.IsAny())) + Mocker.GetMock().Setup(c => c.GetEpisodeBySeries(It.IsAny())) .Returns(new List()); Subject.RefreshEpisodeInfo(GetSeries(), GetEpisodes()); @@ -95,7 +95,7 @@ public void should_create_all_when_no_existing_episodes() [Test] public void should_update_all_when_all_existing_episodes() { - Mocker.GetMock().Setup(c => c.GetEpisodeBySeries(It.IsAny())) + Mocker.GetMock().Setup(c => c.GetEpisodeBySeries(It.IsAny())) .Returns(GetEpisodes()); Subject.RefreshEpisodeInfo(GetSeries(), GetEpisodes()); @@ -108,7 +108,7 @@ public void should_update_all_when_all_existing_episodes() [Test] public void should_delete_all_when_all_existing_episodes_are_gone_from_trakt() { - Mocker.GetMock().Setup(c => c.GetEpisodeBySeries(It.IsAny())) + Mocker.GetMock().Setup(c => c.GetEpisodeBySeries(It.IsAny())) .Returns(GetEpisodes()); Subject.RefreshEpisodeInfo(GetSeries(), new List()); @@ -123,7 +123,7 @@ public void should_delete_duplicated_episodes_based_on_season_episode_number() { var duplicateEpisodes = GetEpisodes().Skip(5).Take(2).ToList(); - Mocker.GetMock().Setup(c => c.GetEpisodeBySeries(It.IsAny())) + Mocker.GetMock().Setup(c => c.GetEpisodeBySeries(It.IsAny())) .Returns(GetEpisodes().Union(duplicateEpisodes).ToList()); Subject.RefreshEpisodeInfo(GetSeries(), GetEpisodes()); @@ -144,7 +144,7 @@ public void should_not_change_monitored_status_for_existing_episodes() episodes.ForEach(e => e.Monitored = true); - Mocker.GetMock().Setup(c => c.GetEpisodeBySeries(It.IsAny())) + Mocker.GetMock().Setup(c => c.GetEpisodeBySeries(It.IsAny())) .Returns(episodes); Subject.RefreshEpisodeInfo(series, GetEpisodes()); @@ -156,7 +156,7 @@ public void should_not_change_monitored_status_for_existing_episodes() [Test] public void should_remove_duplicate_remote_episodes_before_processing() { - Mocker.GetMock().Setup(c => c.GetEpisodeBySeries(It.IsAny())) + Mocker.GetMock().Setup(c => c.GetEpisodeBySeries(It.IsAny())) .Returns(new List()); var episodes = Builder.CreateListOfSize(5) @@ -176,12 +176,12 @@ public void should_remove_duplicate_remote_episodes_before_processing() [Test] public void should_not_set_absolute_episode_number_for_non_anime() { - Mocker.GetMock().Setup(c => c.GetEpisodeBySeries(It.IsAny())) - .Returns(new List()); + Mocker.GetMock().Setup(c => c.GetEpisodeBySeries(It.IsAny())) + .Returns(new List()); Subject.RefreshEpisodeInfo(GetSeries(), GetEpisodes()); - _insertedEpisodes.All(e => e.AbsoluteEpisodeNumber == 0).Should().BeTrue(); + _insertedEpisodes.All(e => e.AbsoluteEpisodeNumber == 0 || !e.AbsoluteEpisodeNumber.HasValue).Should().BeTrue(); } [Test] @@ -190,7 +190,7 @@ public void should_set_absolute_episode_number_for_anime() var episodes = Builder.CreateListOfSize(3).Build().ToList(); GivenAnimeEpisodes(episodes); - Mocker.GetMock().Setup(c => c.GetEpisodeBySeries(It.IsAny())) + Mocker.GetMock().Setup(c => c.GetEpisodeBySeries(It.IsAny())) .Returns(new List()); Subject.RefreshEpisodeInfo(GetAnimeSeries(), episodes); @@ -209,7 +209,7 @@ public void should_set_absolute_episode_number_even_if_not_previously_set_for_an var existingEpisodes = episodes.JsonClone(); existingEpisodes.ForEach(e => e.AbsoluteEpisodeNumber = 0); - Mocker.GetMock().Setup(c => c.GetEpisodeBySeries(It.IsAny())) + Mocker.GetMock().Setup(c => c.GetEpisodeBySeries(It.IsAny())) .Returns(existingEpisodes); Subject.RefreshEpisodeInfo(GetAnimeSeries(), episodes); @@ -237,9 +237,9 @@ public void should_get_new_season_and_episode_numbers_when_absolute_episode_numb var existingEpisode = episode.JsonClone(); existingEpisode.SeasonNumber = 1; existingEpisode.EpisodeNumber = 1; - existingEpisode.AbsoluteEpisodeNumber = 1; + existingEpisode.AbsoluteEpisodeNumber = expectedAbsoluteNumber; - Mocker.GetMock().Setup(c => c.GetEpisodeBySeries(It.IsAny())) + Mocker.GetMock().Setup(c => c.GetEpisodeBySeries(It.IsAny())) .Returns(new List{ existingEpisode }); Subject.RefreshEpisodeInfo(GetAnimeSeries(), new List { episode }); @@ -273,7 +273,7 @@ public void should_prefer_absolute_match_over_season_and_epsiode_match() AbsoluteEpisodeNumber = episodes[1].AbsoluteEpisodeNumber }; - Mocker.GetMock().Setup(c => c.GetEpisodeBySeries(It.IsAny())) + Mocker.GetMock().Setup(c => c.GetEpisodeBySeries(It.IsAny())) .Returns(new List { existingEpisode }); Subject.RefreshEpisodeInfo(GetAnimeSeries(), episodes); diff --git a/src/NzbDrone.Core/Tv/RefreshEpisodeService.cs b/src/NzbDrone.Core/Tv/RefreshEpisodeService.cs index 2bd7c901c..dbb6036ce 100644 --- a/src/NzbDrone.Core/Tv/RefreshEpisodeService.cs +++ b/src/NzbDrone.Core/Tv/RefreshEpisodeService.cs @@ -173,13 +173,15 @@ private List MapAbsoluteEpisodeNumbers(Series series, List tra return traktEpisodes.DistinctBy(e => e.AbsoluteEpisodeNumber).ToList(); } - private Episode GetEpisodeToUpdate(Series series, Episode episode, IEnumerable existingEpisodes) + private Episode GetEpisodeToUpdate(Series series, Episode episode, List existingEpisodes) { if (series.SeriesType == SeriesTypes.Anime) { if (episode.AbsoluteEpisodeNumber > 0) { - return existingEpisodes.FirstOrDefault(e => e.AbsoluteEpisodeNumber == episode.AbsoluteEpisodeNumber); + var matchingEpisode = existingEpisodes.FirstOrDefault(e => e.AbsoluteEpisodeNumber == episode.AbsoluteEpisodeNumber); + + if (matchingEpisode != null) return matchingEpisode; } }