Ignore specials when doing sample check

#ND-168 fixed
Fixed: Ignore sample check when importing specials (Season 0)
This commit is contained in:
Mark McDowall 2013-02-07 17:47:24 -08:00
parent 6e7ec4505f
commit b6ed048f94
2 changed files with 85 additions and 20 deletions

View File

@ -28,6 +28,16 @@ namespace NzbDrone.Core.Test.ProviderTests.DiskScanProviderTests
}; };
private readonly long SIZE = 80.Megabytes(); private readonly long SIZE = 80.Megabytes();
private Series _series;
[SetUp]
public void Setup()
{
_series = Builder<Series>
.CreateNew()
.With(s => s.IsDaily = false)
.Build();
}
public void With80MBFile() public void With80MBFile()
{ {
@ -36,6 +46,11 @@ namespace NzbDrone.Core.Test.ProviderTests.DiskScanProviderTests
.Returns(80.Megabytes()); .Returns(80.Megabytes());
} }
public void WithDailySeries()
{
_series.IsDaily = true;
}
[Test] [Test]
public void import_new_file_should_succeed() public void import_new_file_should_succeed()
{ {
@ -403,10 +418,6 @@ namespace NzbDrone.Core.Test.ProviderTests.DiskScanProviderTests
[Test] [Test]
public void should_return_null_if_file_size_is_under_70MB_and_runTime_under_3_minutes() public void should_return_null_if_file_size_is_under_70MB_and_runTime_under_3_minutes()
{ {
var series = Builder<Series>
.CreateNew()
.Build();
const string path = @"C:\Test\TV\30.rock.s01e01.pilot.avi"; const string path = @"C:\Test\TV\30.rock.s01e01.pilot.avi";
Mocker.GetMock<MediaFileProvider>() Mocker.GetMock<MediaFileProvider>()
@ -421,14 +432,12 @@ namespace NzbDrone.Core.Test.ProviderTests.DiskScanProviderTests
.Setup(s => s.GetRunTime(path)) .Setup(s => s.GetRunTime(path))
.Returns(60); .Returns(60);
Mocker.Resolve<DiskScanProvider>().ImportFile(series, path).Should().BeNull(); Mocker.Resolve<DiskScanProvider>().ImportFile(_series, path).Should().BeNull();
} }
[Test] [Test]
public void should_import_if_file_size_is_under_70MB_but_runTime_over_3_minutes() public void should_import_if_file_size_is_under_70MB_but_runTime_over_3_minutes()
{ {
var fakeSeries = Builder<Series>.CreateNew().Build();
var fakeEpisode = Builder<Episode>.CreateNew() var fakeEpisode = Builder<Episode>.CreateNew()
.With(e => e.EpisodeFileId = 0) .With(e => e.EpisodeFileId = 0)
.With(e => e.EpisodeFile = null) .With(e => e.EpisodeFile = null)
@ -451,7 +460,7 @@ namespace NzbDrone.Core.Test.ProviderTests.DiskScanProviderTests
Mocker.GetMock<EpisodeProvider>() Mocker.GetMock<EpisodeProvider>()
.Setup(e => e.GetEpisodesByParseResult(It.IsAny<EpisodeParseResult>())).Returns(new List<Episode> { fakeEpisode }); .Setup(e => e.GetEpisodesByParseResult(It.IsAny<EpisodeParseResult>())).Returns(new List<Episode> { fakeEpisode });
var result = Mocker.Resolve<DiskScanProvider>().ImportFile(fakeSeries, path); var result = Mocker.Resolve<DiskScanProvider>().ImportFile(_series, path);
VerifyFileImport(result, Mocker, fakeEpisode, 20.Megabytes()); VerifyFileImport(result, Mocker, fakeEpisode, 20.Megabytes());
Mocker.GetMock<DiskProvider>().Verify(p => p.DeleteFile(It.IsAny<string>()), Times.Never()); Mocker.GetMock<DiskProvider>().Verify(p => p.DeleteFile(It.IsAny<string>()), Times.Never());
@ -462,8 +471,6 @@ namespace NzbDrone.Core.Test.ProviderTests.DiskScanProviderTests
{ {
With80MBFile(); With80MBFile();
var fakeSeries = Builder<Series>.CreateNew().Build();
var fakeEpisode = Builder<Episode>.CreateNew() var fakeEpisode = Builder<Episode>.CreateNew()
.With(e => e.EpisodeFileId = 0) .With(e => e.EpisodeFileId = 0)
.With(e => e.EpisodeFile = null) .With(e => e.EpisodeFile = null)
@ -482,12 +489,67 @@ namespace NzbDrone.Core.Test.ProviderTests.DiskScanProviderTests
Mocker.GetMock<EpisodeProvider>() Mocker.GetMock<EpisodeProvider>()
.Setup(e => e.GetEpisodesByParseResult(It.IsAny<EpisodeParseResult>())).Returns(new List<Episode> { fakeEpisode }); .Setup(e => e.GetEpisodesByParseResult(It.IsAny<EpisodeParseResult>())).Returns(new List<Episode> { fakeEpisode });
var result = Mocker.Resolve<DiskScanProvider>().ImportFile(fakeSeries, path); var result = Mocker.Resolve<DiskScanProvider>().ImportFile(_series, path);
VerifyFileImport(result, Mocker, fakeEpisode, SIZE); VerifyFileImport(result, Mocker, fakeEpisode, SIZE);
Mocker.GetMock<DiskProvider>().Verify(p => p.DeleteFile(It.IsAny<string>()), Times.Never()); Mocker.GetMock<DiskProvider>().Verify(p => p.DeleteFile(It.IsAny<string>()), Times.Never());
} }
[Test]
public void should_import_special_even_if_file_size_is_under_70MB_and_runTime_under_3_minutes()
{
With80MBFile();
var fakeEpisode = Builder<Episode>.CreateNew()
.With(e => e.EpisodeFileId = 0)
.With(e => e.EpisodeFile = null)
.Build();
const string path = @"C:\Test\TV\30.rock.s00e01.pre-pilot.avi";
Mocker.GetMock<MediaFileProvider>()
.Setup(m => m.Exists(path))
.Returns(false);
Mocker.GetMock<DiskProvider>()
.Setup(d => d.GetSize(path))
.Returns(20.Megabytes());
Mocker.GetMock<MediaInfoProvider>()
.Setup(s => s.GetRunTime(path))
.Returns(60);
Mocker.GetMock<EpisodeProvider>()
.Setup(e => e.GetEpisodesByParseResult(It.IsAny<EpisodeParseResult>())).Returns(new List<Episode> { fakeEpisode });
var result = Mocker.Resolve<DiskScanProvider>().ImportFile(_series, path);
VerifyFileImport(result, Mocker, fakeEpisode, 20.Megabytes());
Mocker.GetMock<DiskProvider>().Verify(p => p.DeleteFile(It.IsAny<string>()), Times.Never());
}
[Test]
public void should_return_null_if_daily_series_with_file_size_is_under_70MB_and_runTime_under_3_minutes()
{
WithDailySeries();
const string path = @"C:\Test\TV\30.rock.s01e01.pilot.avi";
Mocker.GetMock<MediaFileProvider>()
.Setup(m => m.Exists(path))
.Returns(false);
Mocker.GetMock<DiskProvider>()
.Setup(d => d.GetSize(path))
.Returns(20.Megabytes());
Mocker.GetMock<MediaInfoProvider>()
.Setup(s => s.GetRunTime(path))
.Returns(60);
Mocker.Resolve<DiskScanProvider>().ImportFile(_series, path).Should().BeNull();
}
private static void VerifyFileImport(EpisodeFile result, AutoMoqer Mocker, Episode fakeEpisode, long size) private static void VerifyFileImport(EpisodeFile result, AutoMoqer Mocker, Episode fakeEpisode, long size)
{ {
result.Should().NotBeNull(); result.Should().NotBeNull();

View File

@ -111,20 +111,23 @@ namespace NzbDrone.Core.Providers
return null; return null;
} }
long size = _diskProvider.GetSize(filePath);
var runTime = _mediaInfoProvider.GetRunTime(filePath);
if(size < Constants.IgnoreFileSize && runTime < 180)
{
Logger.Trace("[{0}] appears to be a sample. skipping.", filePath);
return null;
}
var parseResult = Parser.ParsePath(filePath); var parseResult = Parser.ParsePath(filePath);
if (parseResult == null) if (parseResult == null)
return null; return null;
var size = _diskProvider.GetSize(filePath);
var runTime = _mediaInfoProvider.GetRunTime(filePath);
if(series.IsDaily || parseResult.SeasonNumber > 0)
{
if (size < Constants.IgnoreFileSize && runTime < 180)
{
Logger.Trace("[{0}] appears to be a sample. skipping.", filePath);
return null;
}
}
if (!_diskProvider.IsChildOfPath(filePath, series.Path)) if (!_diskProvider.IsChildOfPath(filePath, series.Path))
parseResult.SceneSource = true; parseResult.SceneSource = true;