using System; using System.Collections.Generic; using FizzWare.NBuilder; using FluentAssertions; using Moq; using NUnit.Framework; using NzbDrone.Core.MetadataSource; using NzbDrone.Core.Tv; using NzbDrone.Core.Test.Framework; using NzbDrone.Test.Common; namespace NzbDrone.Core.Test.TvTests { [TestFixture] public class RefreshEpisodeServiceFixture : CoreTest<RefreshEpisodeService> { private List<Episode> _insertedEpisodes; private List<Episode> _updatedEpisodes; private List<Episode> _deletedEpisodes; private Tuple<Series, List<Episode>> _gameOfThrones; [TestFixtureSetUp] public void TestFixture() { _gameOfThrones = Mocker.Resolve<TraktProxy>().GetSeriesInfo(121361);//Game of thrones } private List<Episode> GetEpisodes() { return _gameOfThrones.Item2.JsonClone(); } private Series GetSeries() { return _gameOfThrones.Item1.JsonClone(); } [SetUp] public void Setup() { _insertedEpisodes = new List<Episode>(); _updatedEpisodes = new List<Episode>(); _deletedEpisodes = new List<Episode>(); Mocker.GetMock<IEpisodeService>().Setup(c => c.InsertMany(It.IsAny<List<Episode>>())) .Callback<List<Episode>>(e => _insertedEpisodes = e); Mocker.GetMock<IEpisodeService>().Setup(c => c.UpdateMany(It.IsAny<List<Episode>>())) .Callback<List<Episode>>(e => _updatedEpisodes = e); Mocker.GetMock<IEpisodeService>().Setup(c => c.DeleteMany(It.IsAny<List<Episode>>())) .Callback<List<Episode>>(e => _deletedEpisodes = e); } [Test] public void should_create_all_when_no_existing_episodes() { Mocker.GetMock<IEpisodeService>().Setup(c => c.GetEpisodeBySeries(It.IsAny<int>())) .Returns(new List<Episode>()); Mocker.GetMock<ISeasonService>().Setup(c => c.GetSeasonsBySeries(It.IsAny<int>())) .Returns(new List<Season>()); Subject.RefreshEpisodeInfo(GetSeries(), GetEpisodes()); _insertedEpisodes.Should().HaveSameCount(GetEpisodes()); _updatedEpisodes.Should().BeEmpty(); _deletedEpisodes.Should().BeEmpty(); } [Test] public void should_update_all_when_all_existing_episodes() { Mocker.GetMock<IEpisodeService>().Setup(c => c.GetEpisodeBySeries(It.IsAny<int>())) .Returns(GetEpisodes()); Mocker.GetMock<ISeasonService>().Setup(c => c.GetSeasonsBySeries(It.IsAny<int>())) .Returns(new List<Season>()); Subject.RefreshEpisodeInfo(GetSeries(), GetEpisodes()); _insertedEpisodes.Should().BeEmpty(); _updatedEpisodes.Should().HaveSameCount(GetEpisodes()); _deletedEpisodes.Should().BeEmpty(); } [Test] public void should_delete_all_when_all_existing_episodes_are_gone_from_trakt() { Mocker.GetMock<IEpisodeService>().Setup(c => c.GetEpisodeBySeries(It.IsAny<int>())) .Returns(GetEpisodes()); Mocker.GetMock<ISeasonService>().Setup(c => c.GetSeasonsBySeries(It.IsAny<int>())) .Returns(new List<Season>()); Subject.RefreshEpisodeInfo(GetSeries(), new List<Episode>()); _insertedEpisodes.Should().BeEmpty(); _updatedEpisodes.Should().BeEmpty(); _deletedEpisodes.Should().HaveSameCount(GetEpisodes()); } [Test] public void should_update_tvdb_episode_id_when_it_changes() { var existingEpisode = Builder<Episode> .CreateNew() .With(e => e.TvDbEpisodeId = 55) .Build(); var newEpisode = Builder<Episode> .CreateNew() .With(e => e.TvDbEpisodeId = 99) .Build(); existingEpisode.ShouldHave().AllPropertiesBut(e => e.TvDbEpisodeId).EqualTo(newEpisode); Mocker.GetMock<IEpisodeService>().Setup(c => c.GetEpisodeBySeries(It.IsAny<int>())) .Returns(new List<Episode> { existingEpisode }); Mocker.GetMock<ISeasonService>().Setup(c => c.GetSeasonsBySeries(It.IsAny<int>())) .Returns(new List<Season>()); Subject.RefreshEpisodeInfo(GetSeries(), new List<Episode> { newEpisode }); _insertedEpisodes.Should().BeEmpty(); _updatedEpisodes.Should().Contain(e => e.TvDbEpisodeId == newEpisode.TvDbEpisodeId); _deletedEpisodes.Should().BeEmpty(); } } }�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������