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 { private List _insertedEpisodes; private List _updatedEpisodes; private List _deletedEpisodes; private Tuple> _gameOfThrones; [TestFixtureSetUp] public void TestFixture() { _gameOfThrones = Mocker.Resolve().GetSeriesInfo(121361);//Game of thrones } private List GetEpisodes() { return _gameOfThrones.Item2.JsonClone(); } private Series GetSeries() { return _gameOfThrones.Item1.JsonClone(); } [SetUp] public void Setup() { _insertedEpisodes = new List(); _updatedEpisodes = new List(); _deletedEpisodes = new List(); Mocker.GetMock().Setup(c => c.InsertMany(It.IsAny>())) .Callback>(e => _insertedEpisodes = e); Mocker.GetMock().Setup(c => c.UpdateMany(It.IsAny>())) .Callback>(e => _updatedEpisodes = e); Mocker.GetMock().Setup(c => c.DeleteMany(It.IsAny>())) .Callback>(e => _deletedEpisodes = e); } [Test] public void should_create_all_when_no_existing_episodes() { Mocker.GetMock().Setup(c => c.GetEpisodeBySeries(It.IsAny())) .Returns(new List()); Mocker.GetMock().Setup(c => c.GetSeasonsBySeries(It.IsAny())) .Returns(new List()); 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().Setup(c => c.GetEpisodeBySeries(It.IsAny())) .Returns(GetEpisodes()); Mocker.GetMock().Setup(c => c.GetSeasonsBySeries(It.IsAny())) .Returns(new List()); 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().Setup(c => c.GetEpisodeBySeries(It.IsAny())) .Returns(GetEpisodes()); Mocker.GetMock().Setup(c => c.GetSeasonsBySeries(It.IsAny())) .Returns(new List()); Subject.RefreshEpisodeInfo(GetSeries(), new List()); _insertedEpisodes.Should().BeEmpty(); _updatedEpisodes.Should().BeEmpty(); _deletedEpisodes.Should().HaveSameCount(GetEpisodes()); } [Test] public void should_update_tvdb_episode_id_when_it_changes() { var existingEpisode = Builder .CreateNew() .With(e => e.TvDbEpisodeId = 55) .Build(); var newEpisode = Builder .CreateNew() .With(e => e.TvDbEpisodeId = 99) .Build(); existingEpisode.ShouldHave().AllPropertiesBut(e => e.TvDbEpisodeId).EqualTo(newEpisode); Mocker.GetMock().Setup(c => c.GetEpisodeBySeries(It.IsAny())) .Returns(new List { existingEpisode }); Mocker.GetMock().Setup(c => c.GetSeasonsBySeries(It.IsAny())) .Returns(new List()); Subject.RefreshEpisodeInfo(GetSeries(), new List { newEpisode }); _insertedEpisodes.Should().BeEmpty(); _updatedEpisodes.Should().Contain(e => e.TvDbEpisodeId == newEpisode.TvDbEpisodeId); _deletedEpisodes.Should().BeEmpty(); } } }