using System.Collections.Generic; using FizzWare.NBuilder; using Moq; using NUnit.Framework; using NzbDrone.Common.Extensions; using NzbDrone.Core.History; using NzbDrone.Core.MediaFiles; using NzbDrone.Core.MediaFiles.Commands; using NzbDrone.Core.Parser; using NzbDrone.Core.Parser.Model; using NzbDrone.Core.Qualities; using NzbDrone.Core.Test.Framework; using NzbDrone.Test.Common; namespace NzbDrone.Core.Test.MediaFiles { [TestFixture] public class UpdateMovieFileQualityServiceFixture : CoreTest { private MovieFile _movieFile; private QualityModel _oldQuality; private QualityModel _newQuality; private ParsedMovieInfo _newInfo; [SetUp] public void Setup() { _movieFile = Builder.CreateNew().With(m => m.MovieId = 0).Build(); _oldQuality = new QualityModel(Quality.Bluray720p); _movieFile.Quality = _oldQuality; _newQuality = _oldQuality.JsonClone(); var format = new CustomFormats.CustomFormat("Awesome Format"); format.Id = 1; _newQuality.CustomFormats = new List{format}; _newInfo = new ParsedMovieInfo { Quality = _newQuality }; Mocker.GetMock().Setup(s => s.GetMovies(It.IsAny>())) .Returns(new List{_movieFile}); Mocker.GetMock().Setup(s => s.FindByMovieId(It.IsAny())) .Returns(new List()); } private void ExecuteCommand() { Subject.Execute(new UpdateMovieFileQualityCommand(new List{0})); } [Test] public void should_not_update_if_unable_to_parse() { ExecuteCommand(); ExceptionVerification.ExpectedWarns(1); Mocker.GetMock().Verify(s => s.Update(It.IsAny()), Times.Never()); } [Test] public void should_update_with_new_formats() { Mocker.GetMock().Setup(s => s.ParseMovieInfo(It.IsAny(), It.IsAny>())) .Returns(_newInfo); ExecuteCommand(); Mocker.GetMock().Verify(s => s.Update(It.Is(f => f.Quality.CustomFormats == _newQuality.CustomFormats)), Times.Once()); } [Test] public void should_use_imported_history_title() { var imported = Builder.CreateNew() .With(h => h.EventType = HistoryEventType.DownloadFolderImported) .With(h => h.SourceTitle = "My Movie 2018.mkv").Build(); Mocker.GetMock().Setup(s => s.FindByMovieId(It.IsAny())) .Returns(new List {imported}); ExecuteCommand(); Mocker.GetMock().Verify(s => s.ParseMovieInfo("My Movie 2018.mkv", It.IsAny>())); } } }