using System; using System.Collections.Generic; 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()); } } }