mirror of
https://github.com/Radarr/Radarr.git
synced 2024-11-05 10:32:35 +01:00
4c1e6e14aa
Upgraded episodes will no longer be auto unmonitored EpsiodeFiles will be removed from db if parsing rules have changed EpisodeFiles will be removed from db if they are not in their series' folder (or subfolder)
120 lines
5.6 KiB
C#
120 lines
5.6 KiB
C#
using System.Linq;
|
|
using FizzWare.NBuilder;
|
|
using Marr.Data;
|
|
using Moq;
|
|
using NUnit.Framework;
|
|
using NzbDrone.Core.MediaFiles;
|
|
using NzbDrone.Core.Parser.Model;
|
|
using NzbDrone.Core.Test.Framework;
|
|
using NzbDrone.Core.Tv;
|
|
|
|
namespace NzbDrone.Core.Test.MediaFileTests
|
|
{
|
|
public class UpgradeMediaFileServiceFixture : CoreTest<UpgradeMediaFileService>
|
|
{
|
|
private EpisodeFile _episodeFile;
|
|
private LocalEpisode _localEpisode;
|
|
|
|
[SetUp]
|
|
public void Setup()
|
|
{
|
|
_localEpisode = new LocalEpisode();
|
|
|
|
_episodeFile = Builder<EpisodeFile>
|
|
.CreateNew()
|
|
.Build();
|
|
}
|
|
|
|
private void GivenSingleEpisodeWithSingleEpisodeFile()
|
|
{
|
|
_localEpisode.Episodes = Builder<Episode>.CreateListOfSize(1)
|
|
.All()
|
|
.With(e => e.EpisodeFileId = 1)
|
|
.With(e => e.EpisodeFile = new LazyLoaded<EpisodeFile>(
|
|
new EpisodeFile
|
|
{
|
|
Id = 1,
|
|
Path = @"C:\Test\30 Rock\Season 01\30.rock.s01e01.avi",
|
|
}))
|
|
.Build()
|
|
.ToList();
|
|
}
|
|
|
|
private void GivenMultipleEpisodesWithSingleEpisodeFile()
|
|
{
|
|
_localEpisode.Episodes = Builder<Episode>.CreateListOfSize(2)
|
|
.All()
|
|
.With(e => e.EpisodeFileId = 1)
|
|
.With(e => e.EpisodeFile = new LazyLoaded<EpisodeFile>(
|
|
new EpisodeFile
|
|
{
|
|
Id = 1,
|
|
Path = @"C:\Test\30 Rock\Season 01\30.rock.s01e01.avi",
|
|
}))
|
|
.Build()
|
|
.ToList();
|
|
}
|
|
|
|
private void GivenMultipleEpisodesWithMultipleEpisodeFiles()
|
|
{
|
|
_localEpisode.Episodes = Builder<Episode>.CreateListOfSize(2)
|
|
.TheFirst(1)
|
|
.With(e => e.EpisodeFile = new LazyLoaded<EpisodeFile>(
|
|
new EpisodeFile
|
|
{
|
|
Id = 1,
|
|
Path = @"C:\Test\30 Rock\Season 01\30.rock.s01e01.avi",
|
|
}))
|
|
.TheNext(1)
|
|
.With(e => e.EpisodeFile = new LazyLoaded<EpisodeFile>(
|
|
new EpisodeFile
|
|
{
|
|
Id = 2,
|
|
Path = @"C:\Test\30 Rock\Season 01\30.rock.s01e02.avi",
|
|
}))
|
|
.Build()
|
|
.ToList();
|
|
}
|
|
|
|
[Test]
|
|
public void should_delete_single_episode_file_once()
|
|
{
|
|
GivenSingleEpisodeWithSingleEpisodeFile();
|
|
|
|
Subject.UpgradeEpisodeFile(_episodeFile, _localEpisode);
|
|
|
|
Mocker.GetMock<IRecycleBinProvider>().Verify(v => v.DeleteFile(It.IsAny<string>()), Times.Once());
|
|
}
|
|
|
|
[Test]
|
|
public void should_delete_the_same_episode_file_only_once()
|
|
{
|
|
GivenMultipleEpisodesWithSingleEpisodeFile();
|
|
|
|
Subject.UpgradeEpisodeFile(_episodeFile, _localEpisode);
|
|
|
|
Mocker.GetMock<IRecycleBinProvider>().Verify(v => v.DeleteFile(It.IsAny<string>()), Times.Once());
|
|
}
|
|
|
|
[Test]
|
|
public void should_delete_multiple_different_episode_files()
|
|
{
|
|
GivenMultipleEpisodesWithMultipleEpisodeFiles();
|
|
|
|
Subject.UpgradeEpisodeFile(_episodeFile, _localEpisode);
|
|
|
|
Mocker.GetMock<IRecycleBinProvider>().Verify(v => v.DeleteFile(It.IsAny<string>()), Times.Exactly(2));
|
|
}
|
|
|
|
[Test]
|
|
public void should_delete_episode_file_from_database()
|
|
{
|
|
GivenSingleEpisodeWithSingleEpisodeFile();
|
|
|
|
Subject.UpgradeEpisodeFile(_episodeFile, _localEpisode);
|
|
|
|
Mocker.GetMock<IMediaFileService>().Verify(v => v.Delete(It.IsAny<EpisodeFile>(), true), Times.Once());
|
|
}
|
|
}
|
|
}
|