2018-03-14 20:41:36 +00:00
|
|
|
using System;
|
2013-06-13 01:37:05 +00:00
|
|
|
using System.Collections.Generic;
|
2020-10-07 20:45:04 +00:00
|
|
|
using System.IO;
|
2015-01-22 22:12:35 +00:00
|
|
|
using System.Linq;
|
|
|
|
using FizzWare.NBuilder;
|
2013-06-13 01:37:05 +00:00
|
|
|
using FluentAssertions;
|
|
|
|
using Moq;
|
|
|
|
using NUnit.Framework;
|
2014-01-06 06:20:08 +00:00
|
|
|
using NzbDrone.Common.Disk;
|
2013-06-28 00:04:52 +00:00
|
|
|
using NzbDrone.Common.EnvironmentInfo;
|
2013-03-04 05:53:02 +00:00
|
|
|
using NzbDrone.Core.MediaCover;
|
2018-03-14 20:41:36 +00:00
|
|
|
using NzbDrone.Core.Movies;
|
|
|
|
using NzbDrone.Core.Movies.Events;
|
2019-12-22 22:08:53 +00:00
|
|
|
using NzbDrone.Core.Test.Framework;
|
2013-03-04 05:53:02 +00:00
|
|
|
|
|
|
|
namespace NzbDrone.Core.Test.MediaCoverTests
|
|
|
|
{
|
|
|
|
[TestFixture]
|
|
|
|
public class MediaCoverServiceFixture : CoreTest<MediaCoverService>
|
|
|
|
{
|
2019-12-22 22:08:53 +00:00
|
|
|
private Movie _movie;
|
2015-01-22 22:12:35 +00:00
|
|
|
|
2013-03-04 05:53:02 +00:00
|
|
|
[SetUp]
|
|
|
|
public void Setup()
|
|
|
|
{
|
2014-01-06 06:20:08 +00:00
|
|
|
Mocker.SetConstant<IAppFolderInfo>(new AppFolderInfo(Mocker.Resolve<IStartupContext>()));
|
2015-01-22 22:12:35 +00:00
|
|
|
|
2018-03-14 20:41:36 +00:00
|
|
|
_movie = Builder<Movie>.CreateNew()
|
2015-01-22 22:12:35 +00:00
|
|
|
.With(v => v.Id = 2)
|
2022-03-20 15:55:47 +00:00
|
|
|
.With(v => v.MovieMetadata.Value.Images = new List<MediaCover.MediaCover> { new MediaCover.MediaCover(MediaCoverTypes.Poster, "") })
|
2015-01-22 22:12:35 +00:00
|
|
|
.Build();
|
2018-12-14 17:48:36 +00:00
|
|
|
|
|
|
|
Mocker.GetMock<IMovieService>().Setup(m => m.GetMovie(It.Is<int>(id => id == _movie.Id))).Returns(_movie);
|
|
|
|
}
|
|
|
|
|
2013-06-13 01:37:05 +00:00
|
|
|
[Test]
|
2014-12-31 22:11:45 +00:00
|
|
|
public void should_convert_cover_urls_to_local()
|
2013-06-13 01:37:05 +00:00
|
|
|
{
|
|
|
|
var covers = new List<MediaCover.MediaCover>
|
|
|
|
{
|
2019-12-22 22:08:53 +00:00
|
|
|
new MediaCover.MediaCover { CoverType = MediaCoverTypes.Banner }
|
2013-06-13 01:37:05 +00:00
|
|
|
};
|
|
|
|
|
2020-10-07 20:45:04 +00:00
|
|
|
var path = Path.Combine(TestContext.CurrentContext.TestDirectory, "Files", "Media", "H264_sample.mp4");
|
|
|
|
var fileInfo = new FileInfo(path);
|
2013-06-13 01:37:05 +00:00
|
|
|
|
2020-10-07 20:45:04 +00:00
|
|
|
Mocker.GetMock<IDiskProvider>()
|
|
|
|
.Setup(c => c.GetFileInfo(It.IsAny<string>()))
|
|
|
|
.Returns(fileInfo);
|
2013-06-13 01:37:05 +00:00
|
|
|
|
|
|
|
Subject.ConvertToLocalUrls(12, covers);
|
|
|
|
|
2020-10-07 20:45:04 +00:00
|
|
|
covers.Single().Url.Should().Be($"/MediaCover/12/banner.jpg?lastWrite={fileInfo.LastWriteTimeUtc.Ticks}");
|
2013-06-13 01:37:05 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
[Test]
|
2014-12-31 22:11:45 +00:00
|
|
|
public void should_convert_media_urls_to_local_without_time_if_file_doesnt_exist()
|
2013-06-13 01:37:05 +00:00
|
|
|
{
|
|
|
|
var covers = new List<MediaCover.MediaCover>
|
|
|
|
{
|
2019-12-22 22:08:53 +00:00
|
|
|
new MediaCover.MediaCover { CoverType = MediaCoverTypes.Banner }
|
2013-06-13 01:37:05 +00:00
|
|
|
};
|
|
|
|
|
2020-10-07 20:45:04 +00:00
|
|
|
var path = Path.Combine(TestContext.CurrentContext.TestDirectory, "Files", "Media", "NonExistant.mp4");
|
|
|
|
var fileInfo = new FileInfo(path);
|
|
|
|
|
|
|
|
Mocker.GetMock<IDiskProvider>()
|
|
|
|
.Setup(c => c.GetFileInfo(It.IsAny<string>()))
|
|
|
|
.Returns(fileInfo);
|
|
|
|
|
2013-06-13 01:37:05 +00:00
|
|
|
Subject.ConvertToLocalUrls(12, covers);
|
|
|
|
|
2013-07-24 06:26:10 +00:00
|
|
|
covers.Single().Url.Should().Be("/MediaCover/12/banner.jpg");
|
2013-03-04 05:53:02 +00:00
|
|
|
}
|
|
|
|
|
2015-01-22 22:12:35 +00:00
|
|
|
[Test]
|
|
|
|
public void should_resize_covers_if_main_downloaded()
|
|
|
|
{
|
|
|
|
Mocker.GetMock<ICoverExistsSpecification>()
|
|
|
|
.Setup(v => v.AlreadyExists(It.IsAny<string>(), It.IsAny<string>()))
|
|
|
|
.Returns(false);
|
|
|
|
|
|
|
|
Mocker.GetMock<IDiskProvider>()
|
|
|
|
.Setup(v => v.FileExists(It.IsAny<string>()))
|
|
|
|
.Returns(true);
|
|
|
|
|
2019-12-30 15:00:34 +00:00
|
|
|
Subject.HandleAsync(new MovieUpdatedEvent(_movie));
|
2015-01-22 22:12:35 +00:00
|
|
|
|
|
|
|
Mocker.GetMock<IImageResizer>()
|
|
|
|
.Verify(v => v.Resize(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<int>()), Times.Exactly(2));
|
|
|
|
}
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
public void should_resize_covers_if_missing()
|
|
|
|
{
|
|
|
|
Mocker.GetMock<ICoverExistsSpecification>()
|
|
|
|
.Setup(v => v.AlreadyExists(It.IsAny<string>(), It.IsAny<string>()))
|
|
|
|
.Returns(true);
|
|
|
|
|
|
|
|
Mocker.GetMock<IDiskProvider>()
|
|
|
|
.Setup(v => v.FileExists(It.IsAny<string>()))
|
|
|
|
.Returns(false);
|
|
|
|
|
2019-12-30 15:00:34 +00:00
|
|
|
Subject.HandleAsync(new MovieUpdatedEvent(_movie));
|
2015-01-22 22:12:35 +00:00
|
|
|
|
|
|
|
Mocker.GetMock<IImageResizer>()
|
|
|
|
.Verify(v => v.Resize(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<int>()), Times.Exactly(2));
|
|
|
|
}
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
public void should_not_resize_covers_if_exists()
|
|
|
|
{
|
|
|
|
Mocker.GetMock<ICoverExistsSpecification>()
|
|
|
|
.Setup(v => v.AlreadyExists(It.IsAny<string>(), It.IsAny<string>()))
|
|
|
|
.Returns(true);
|
|
|
|
|
|
|
|
Mocker.GetMock<IDiskProvider>()
|
|
|
|
.Setup(v => v.FileExists(It.IsAny<string>()))
|
|
|
|
.Returns(true);
|
|
|
|
|
2015-02-03 19:46:51 +00:00
|
|
|
Mocker.GetMock<IDiskProvider>()
|
|
|
|
.Setup(v => v.GetFileSize(It.IsAny<string>()))
|
|
|
|
.Returns(1000);
|
|
|
|
|
2019-12-30 15:00:34 +00:00
|
|
|
Subject.HandleAsync(new MovieUpdatedEvent(_movie));
|
2015-01-22 22:12:35 +00:00
|
|
|
|
|
|
|
Mocker.GetMock<IImageResizer>()
|
|
|
|
.Verify(v => v.Resize(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<int>()), Times.Never());
|
|
|
|
}
|
2015-02-03 19:46:51 +00:00
|
|
|
|
|
|
|
[Test]
|
|
|
|
public void should_resize_covers_if_existing_is_empty()
|
|
|
|
{
|
|
|
|
Mocker.GetMock<ICoverExistsSpecification>()
|
|
|
|
.Setup(v => v.AlreadyExists(It.IsAny<string>(), It.IsAny<string>()))
|
|
|
|
.Returns(true);
|
|
|
|
|
|
|
|
Mocker.GetMock<IDiskProvider>()
|
|
|
|
.Setup(v => v.FileExists(It.IsAny<string>()))
|
|
|
|
.Returns(true);
|
|
|
|
|
|
|
|
Mocker.GetMock<IDiskProvider>()
|
|
|
|
.Setup(v => v.GetFileSize(It.IsAny<string>()))
|
|
|
|
.Returns(0);
|
|
|
|
|
2019-12-30 15:00:34 +00:00
|
|
|
Subject.HandleAsync(new MovieUpdatedEvent(_movie));
|
2015-02-03 19:46:51 +00:00
|
|
|
|
|
|
|
Mocker.GetMock<IImageResizer>()
|
|
|
|
.Verify(v => v.Resize(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<int>()), Times.Exactly(2));
|
|
|
|
}
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
public void should_log_error_if_resize_failed()
|
|
|
|
{
|
|
|
|
Mocker.GetMock<ICoverExistsSpecification>()
|
|
|
|
.Setup(v => v.AlreadyExists(It.IsAny<string>(), It.IsAny<string>()))
|
|
|
|
.Returns(true);
|
|
|
|
|
|
|
|
Mocker.GetMock<IDiskProvider>()
|
|
|
|
.Setup(v => v.FileExists(It.IsAny<string>()))
|
|
|
|
.Returns(false);
|
|
|
|
|
|
|
|
Mocker.GetMock<IImageResizer>()
|
|
|
|
.Setup(v => v.Resize(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<int>()))
|
|
|
|
.Throws<ApplicationException>();
|
|
|
|
|
2019-12-30 15:00:34 +00:00
|
|
|
Subject.HandleAsync(new MovieUpdatedEvent(_movie));
|
2015-02-03 19:46:51 +00:00
|
|
|
|
2015-02-05 21:15:30 +00:00
|
|
|
Mocker.GetMock<IImageResizer>()
|
|
|
|
.Verify(v => v.Resize(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<int>()), Times.Exactly(2));
|
2015-02-03 19:46:51 +00:00
|
|
|
}
|
2013-03-04 05:53:02 +00:00
|
|
|
}
|
2018-03-14 20:41:36 +00:00
|
|
|
}
|