2020-05-14 02:19:22 +00:00
|
|
|
using System;
|
|
|
|
using System.Collections.Generic;
|
|
|
|
using System.IO;
|
|
|
|
using FizzWare.NBuilder;
|
|
|
|
using FluentAssertions;
|
|
|
|
using FluentValidation;
|
|
|
|
using FluentValidation.Results;
|
|
|
|
using Moq;
|
|
|
|
using NUnit.Framework;
|
|
|
|
using NzbDrone.Core.Exceptions;
|
|
|
|
using NzbDrone.Core.MetadataSource;
|
|
|
|
using NzbDrone.Core.Movies;
|
|
|
|
using NzbDrone.Core.Movies.Credits;
|
|
|
|
using NzbDrone.Core.Organizer;
|
|
|
|
using NzbDrone.Core.Test.Framework;
|
|
|
|
using NzbDrone.Test.Common;
|
|
|
|
|
|
|
|
namespace NzbDrone.Core.Test.MovieTests
|
|
|
|
{
|
|
|
|
[TestFixture]
|
|
|
|
public class AddMovieFixture : CoreTest<AddMovieService>
|
|
|
|
{
|
2022-03-20 15:55:47 +00:00
|
|
|
private MovieMetadata _fakeMovie;
|
2020-05-14 02:19:22 +00:00
|
|
|
|
|
|
|
[SetUp]
|
|
|
|
public void Setup()
|
|
|
|
{
|
2022-03-20 15:55:47 +00:00
|
|
|
_fakeMovie = Builder<MovieMetadata>
|
2020-05-14 02:19:22 +00:00
|
|
|
.CreateNew()
|
2022-03-08 02:03:00 +00:00
|
|
|
.With(x => x.CollectionTitle = null)
|
|
|
|
.With(x => x.CollectionTmdbId = 0)
|
2020-05-14 02:19:22 +00:00
|
|
|
.Build();
|
|
|
|
}
|
|
|
|
|
|
|
|
private void GivenValidMovie(int tmdbId)
|
|
|
|
{
|
|
|
|
Mocker.GetMock<IProvideMovieInfo>()
|
2020-05-10 01:49:09 +00:00
|
|
|
.Setup(s => s.GetMovieInfo(tmdbId))
|
2022-03-20 15:55:47 +00:00
|
|
|
.Returns(new Tuple<MovieMetadata, List<Credit>>(_fakeMovie, new List<Credit>()));
|
2020-05-14 02:19:22 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
private void GivenValidPath()
|
|
|
|
{
|
|
|
|
Mocker.GetMock<IBuildFileNames>()
|
|
|
|
.Setup(s => s.GetMovieFolder(It.IsAny<Movie>(), null))
|
|
|
|
.Returns<Movie, NamingConfig>((c, n) => c.Title);
|
|
|
|
|
|
|
|
Mocker.GetMock<IAddMovieValidator>()
|
|
|
|
.Setup(s => s.Validate(It.IsAny<Movie>()))
|
|
|
|
.Returns(new ValidationResult());
|
|
|
|
}
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
public void should_be_able_to_add_a_movie_without_passing_in_title()
|
|
|
|
{
|
|
|
|
var newMovie = new Movie
|
|
|
|
{
|
|
|
|
TmdbId = 1,
|
|
|
|
RootFolderPath = @"C:\Test\Movies"
|
|
|
|
};
|
|
|
|
|
|
|
|
GivenValidMovie(newMovie.TmdbId);
|
|
|
|
GivenValidPath();
|
|
|
|
|
|
|
|
var series = Subject.AddMovie(newMovie);
|
|
|
|
|
|
|
|
series.Title.Should().Be(_fakeMovie.Title);
|
|
|
|
}
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
public void should_have_proper_path()
|
|
|
|
{
|
|
|
|
var newMovie = new Movie
|
|
|
|
{
|
|
|
|
TmdbId = 1,
|
|
|
|
RootFolderPath = @"C:\Test\Movies"
|
|
|
|
};
|
|
|
|
|
|
|
|
GivenValidMovie(newMovie.TmdbId);
|
|
|
|
GivenValidPath();
|
|
|
|
|
|
|
|
var series = Subject.AddMovie(newMovie);
|
|
|
|
|
|
|
|
series.Path.Should().Be(Path.Combine(newMovie.RootFolderPath, _fakeMovie.Title));
|
|
|
|
}
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
public void should_throw_if_movie_validation_fails()
|
|
|
|
{
|
|
|
|
var newMovie = new Movie
|
|
|
|
{
|
|
|
|
TmdbId = 1,
|
|
|
|
Path = @"C:\Test\Movie\Title1"
|
|
|
|
};
|
|
|
|
|
|
|
|
GivenValidMovie(newMovie.TmdbId);
|
|
|
|
|
|
|
|
Mocker.GetMock<IAddMovieValidator>()
|
|
|
|
.Setup(s => s.Validate(It.IsAny<Movie>()))
|
|
|
|
.Returns(new ValidationResult(new List<ValidationFailure>
|
|
|
|
{
|
|
|
|
new ValidationFailure("Path", "Test validation failure")
|
|
|
|
}));
|
|
|
|
|
|
|
|
Assert.Throws<ValidationException>(() => Subject.AddMovie(newMovie));
|
|
|
|
}
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
public void should_throw_if_movie_cannot_be_found()
|
|
|
|
{
|
|
|
|
var newMovie = new Movie
|
|
|
|
{
|
|
|
|
TmdbId = 1,
|
|
|
|
Path = @"C:\Test\Movie\Title1"
|
|
|
|
};
|
|
|
|
|
|
|
|
Mocker.GetMock<IProvideMovieInfo>()
|
2020-05-10 01:49:09 +00:00
|
|
|
.Setup(s => s.GetMovieInfo(newMovie.TmdbId))
|
2020-05-14 02:19:22 +00:00
|
|
|
.Throws(new MovieNotFoundException("Movie Not Found"));
|
|
|
|
|
|
|
|
Mocker.GetMock<IAddMovieValidator>()
|
|
|
|
.Setup(s => s.Validate(It.IsAny<Movie>()))
|
|
|
|
.Returns(new ValidationResult(new List<ValidationFailure>
|
|
|
|
{
|
|
|
|
new ValidationFailure("Path", "Test validation failure")
|
|
|
|
}));
|
|
|
|
|
|
|
|
Assert.Throws<ValidationException>(() => Subject.AddMovie(newMovie));
|
|
|
|
|
|
|
|
ExceptionVerification.ExpectedErrors(1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|