mirror of
https://github.com/Sonarr/Sonarr.git
synced 2024-10-30 23:42:33 +01:00
Report size is now verified to ensure it is under the MaxSize for that quality type, with tests.
This commit is contained in:
parent
e4f01ae0d4
commit
4b2427ade7
@ -1355,5 +1355,71 @@ namespace NzbDrone.Core.Test
|
|||||||
episodes.First().ShouldHave().AllPropertiesBut(e => e.Series).EqualTo(fakeEpisode);
|
episodes.First().ShouldHave().AllPropertiesBut(e => e.Series).EqualTo(fakeEpisode);
|
||||||
mocker.VerifyAllMocks();
|
mocker.VerifyAllMocks();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void IsFirstOrLastEpisodeInSeason_false()
|
||||||
|
{
|
||||||
|
var db = MockLib.GetEmptyDatabase();
|
||||||
|
var mocker = new AutoMoqer();
|
||||||
|
mocker.SetConstant(db);
|
||||||
|
|
||||||
|
var fakeEpisodes = Builder<Episode>.CreateListOfSize(10)
|
||||||
|
.WhereAll()
|
||||||
|
.Have(c => c.SeriesId = 10)
|
||||||
|
.Have(c => c.SeasonNumber = 1)
|
||||||
|
.Build();
|
||||||
|
|
||||||
|
db.InsertMany(fakeEpisodes);
|
||||||
|
|
||||||
|
//Act
|
||||||
|
var result = mocker.Resolve<EpisodeProvider>().IsFirstOrLastEpisodeOfSeason(10, 1, 5);
|
||||||
|
|
||||||
|
//Assert
|
||||||
|
result.Should().BeFalse();
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void IsFirstOrLastEpisodeInSeason_true_first()
|
||||||
|
{
|
||||||
|
var db = MockLib.GetEmptyDatabase();
|
||||||
|
var mocker = new AutoMoqer();
|
||||||
|
mocker.SetConstant(db);
|
||||||
|
|
||||||
|
var fakeEpisodes = Builder<Episode>.CreateListOfSize(10)
|
||||||
|
.WhereAll()
|
||||||
|
.Have(c => c.SeriesId = 10)
|
||||||
|
.Have(c => c.SeasonNumber = 1)
|
||||||
|
.Build();
|
||||||
|
|
||||||
|
db.InsertMany(fakeEpisodes);
|
||||||
|
|
||||||
|
//Act
|
||||||
|
var result = mocker.Resolve<EpisodeProvider>().IsFirstOrLastEpisodeOfSeason(10, 1, 1);
|
||||||
|
|
||||||
|
//Assert
|
||||||
|
result.Should().BeFalse();
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void IsFirstOrLastEpisodeInSeason_true_last()
|
||||||
|
{
|
||||||
|
var db = MockLib.GetEmptyDatabase();
|
||||||
|
var mocker = new AutoMoqer();
|
||||||
|
mocker.SetConstant(db);
|
||||||
|
|
||||||
|
var fakeEpisodes = Builder<Episode>.CreateListOfSize(10)
|
||||||
|
.WhereAll()
|
||||||
|
.Have(c => c.SeriesId = 10)
|
||||||
|
.Have(c => c.SeasonNumber = 1)
|
||||||
|
.Build();
|
||||||
|
|
||||||
|
db.InsertMany(fakeEpisodes);
|
||||||
|
|
||||||
|
//Act
|
||||||
|
var result = mocker.Resolve<EpisodeProvider>().IsFirstOrLastEpisodeOfSeason(10, 1, 10);
|
||||||
|
|
||||||
|
//Assert
|
||||||
|
result.Should().BeFalse();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
323
NzbDrone.Core.Test/InventoryProvider_IsAcceptableSizeTest.cs
Normal file
323
NzbDrone.Core.Test/InventoryProvider_IsAcceptableSizeTest.cs
Normal file
@ -0,0 +1,323 @@
|
|||||||
|
// ReSharper disable RedundantUsingDirective
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using AutoMoq;
|
||||||
|
using FizzWare.NBuilder;
|
||||||
|
using FluentAssertions;
|
||||||
|
using Moq;
|
||||||
|
using NUnit.Framework;
|
||||||
|
using NzbDrone.Core.Model;
|
||||||
|
using NzbDrone.Core.Providers;
|
||||||
|
using NzbDrone.Core.Repository;
|
||||||
|
using NzbDrone.Core.Repository.Quality;
|
||||||
|
using NzbDrone.Core.Test.Framework;
|
||||||
|
|
||||||
|
namespace NzbDrone.Core.Test
|
||||||
|
{
|
||||||
|
[TestFixture]
|
||||||
|
// ReSharper disable InconsistentNaming
|
||||||
|
public class InventoryProvider_IsAcceptableSizeTest : TestBase
|
||||||
|
{
|
||||||
|
private EpisodeParseResult parseResultMulti;
|
||||||
|
private EpisodeParseResult parseResultSingle;
|
||||||
|
private Series series30minutes;
|
||||||
|
private Series series60minutes;
|
||||||
|
private QualityType qualityType;
|
||||||
|
|
||||||
|
[SetUp]
|
||||||
|
public new void Setup()
|
||||||
|
{
|
||||||
|
parseResultMulti = new EpisodeParseResult
|
||||||
|
{
|
||||||
|
CleanTitle = "Title",
|
||||||
|
Language = LanguageType.English,
|
||||||
|
Quality = new Quality(QualityTypes.SDTV, true),
|
||||||
|
EpisodeNumbers = new List<int> { 3, 4 },
|
||||||
|
SeasonNumber = 12,
|
||||||
|
AirDate = DateTime.Now.AddDays(-12).Date
|
||||||
|
};
|
||||||
|
|
||||||
|
parseResultSingle = new EpisodeParseResult
|
||||||
|
{
|
||||||
|
CleanTitle = "Title",
|
||||||
|
Language = LanguageType.English,
|
||||||
|
Quality = new Quality(QualityTypes.SDTV, true),
|
||||||
|
EpisodeNumbers = new List<int> { 3 },
|
||||||
|
SeasonNumber = 12,
|
||||||
|
AirDate = DateTime.Now.AddDays(-12).Date
|
||||||
|
};
|
||||||
|
|
||||||
|
series30minutes = Builder<Series>.CreateNew()
|
||||||
|
.With(c => c.Monitored = true)
|
||||||
|
.With(d => d.CleanTitle = parseResultMulti.CleanTitle)
|
||||||
|
.With(c => c.Runtime = 30)
|
||||||
|
.Build();
|
||||||
|
|
||||||
|
series60minutes = Builder<Series>.CreateNew()
|
||||||
|
.With(c => c.Monitored = true)
|
||||||
|
.With(d => d.CleanTitle = parseResultMulti.CleanTitle)
|
||||||
|
.With(c => c.Runtime = 60)
|
||||||
|
.Build();
|
||||||
|
|
||||||
|
qualityType = Builder<QualityType>.CreateNew()
|
||||||
|
.With(q => q.MinSize = 0)
|
||||||
|
.With(q => q.MaxSize = 314572800)
|
||||||
|
.With(q => q.QualityTypeId = 1)
|
||||||
|
.Build();
|
||||||
|
|
||||||
|
base.Setup();
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void IsAcceptableSize_true_single_episode_not_first_or_last_30_minute()
|
||||||
|
{
|
||||||
|
var mocker = new AutoMoqer(MockBehavior.Strict);
|
||||||
|
|
||||||
|
parseResultSingle.Series = series30minutes;
|
||||||
|
parseResultSingle.Size = 184572800;
|
||||||
|
|
||||||
|
mocker.GetMock<QualityTypeProvider>().Setup(s => s.Get(1)).Returns(qualityType);
|
||||||
|
|
||||||
|
mocker.GetMock<EpisodeProvider>().Setup(
|
||||||
|
s => s.IsFirstOrLastEpisodeOfSeason(It.IsAny<int>(), It.IsAny<int>(), It.IsAny<int>()))
|
||||||
|
.Returns(false);
|
||||||
|
|
||||||
|
//Act
|
||||||
|
bool result = mocker.Resolve<InventoryProvider>().IsAcceptableSize(parseResultSingle);
|
||||||
|
|
||||||
|
//Assert
|
||||||
|
result.Should().BeTrue();
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void IsAcceptableSize_true_single_episode_not_first_or_last_60_minute()
|
||||||
|
{
|
||||||
|
var mocker = new AutoMoqer(MockBehavior.Strict);
|
||||||
|
|
||||||
|
parseResultSingle.Series = series60minutes;
|
||||||
|
parseResultSingle.Size = 368572800;
|
||||||
|
|
||||||
|
mocker.GetMock<QualityTypeProvider>().Setup(s => s.Get(1)).Returns(qualityType);
|
||||||
|
|
||||||
|
mocker.GetMock<EpisodeProvider>().Setup(
|
||||||
|
s => s.IsFirstOrLastEpisodeOfSeason(It.IsAny<int>(), It.IsAny<int>(), It.IsAny<int>()))
|
||||||
|
.Returns(false);
|
||||||
|
|
||||||
|
//Act
|
||||||
|
bool result = mocker.Resolve<InventoryProvider>().IsAcceptableSize(parseResultSingle);
|
||||||
|
|
||||||
|
//Assert
|
||||||
|
result.Should().BeTrue();
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void IsAcceptableSize_false_single_episode_not_first_or_last_30_minute()
|
||||||
|
{
|
||||||
|
var mocker = new AutoMoqer(MockBehavior.Strict);
|
||||||
|
|
||||||
|
parseResultSingle.Series = series30minutes;
|
||||||
|
parseResultSingle.Size = 1184572800;
|
||||||
|
|
||||||
|
mocker.GetMock<QualityTypeProvider>().Setup(s => s.Get(1)).Returns(qualityType);
|
||||||
|
|
||||||
|
mocker.GetMock<EpisodeProvider>().Setup(
|
||||||
|
s => s.IsFirstOrLastEpisodeOfSeason(It.IsAny<int>(), It.IsAny<int>(), It.IsAny<int>()))
|
||||||
|
.Returns(false);
|
||||||
|
|
||||||
|
//Act
|
||||||
|
bool result = mocker.Resolve<InventoryProvider>().IsAcceptableSize(parseResultSingle);
|
||||||
|
|
||||||
|
//Assert
|
||||||
|
result.Should().BeFalse();
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void IsAcceptableSize_false_single_episode_not_first_or_last_60_minute()
|
||||||
|
{
|
||||||
|
var mocker = new AutoMoqer(MockBehavior.Strict);
|
||||||
|
|
||||||
|
parseResultSingle.Series = series60minutes;
|
||||||
|
parseResultSingle.Size = 1368572800;
|
||||||
|
|
||||||
|
mocker.GetMock<QualityTypeProvider>().Setup(s => s.Get(1)).Returns(qualityType);
|
||||||
|
|
||||||
|
mocker.GetMock<EpisodeProvider>().Setup(
|
||||||
|
s => s.IsFirstOrLastEpisodeOfSeason(It.IsAny<int>(), It.IsAny<int>(), It.IsAny<int>()))
|
||||||
|
.Returns(false);
|
||||||
|
|
||||||
|
//Act
|
||||||
|
bool result = mocker.Resolve<InventoryProvider>().IsAcceptableSize(parseResultSingle);
|
||||||
|
|
||||||
|
//Assert
|
||||||
|
result.Should().BeFalse();
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void IsAcceptableSize_true_multi_episode_not_first_or_last_30_minute()
|
||||||
|
{
|
||||||
|
var mocker = new AutoMoqer(MockBehavior.Strict);
|
||||||
|
|
||||||
|
parseResultMulti.Series = series30minutes;
|
||||||
|
parseResultMulti.Size = 184572800;
|
||||||
|
|
||||||
|
mocker.GetMock<QualityTypeProvider>().Setup(s => s.Get(1)).Returns(qualityType);
|
||||||
|
|
||||||
|
mocker.GetMock<EpisodeProvider>().Setup(
|
||||||
|
s => s.IsFirstOrLastEpisodeOfSeason(It.IsAny<int>(), It.IsAny<int>(), It.IsAny<int>()))
|
||||||
|
.Returns(false);
|
||||||
|
|
||||||
|
//Act
|
||||||
|
bool result = mocker.Resolve<InventoryProvider>().IsAcceptableSize(parseResultMulti);
|
||||||
|
|
||||||
|
//Assert
|
||||||
|
result.Should().BeTrue();
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void IsAcceptableSize_true_multi_episode_not_first_or_last_60_minute()
|
||||||
|
{
|
||||||
|
var mocker = new AutoMoqer(MockBehavior.Strict);
|
||||||
|
|
||||||
|
parseResultMulti.Series = series60minutes;
|
||||||
|
parseResultMulti.Size = 368572800;
|
||||||
|
|
||||||
|
mocker.GetMock<QualityTypeProvider>().Setup(s => s.Get(1)).Returns(qualityType);
|
||||||
|
|
||||||
|
mocker.GetMock<EpisodeProvider>().Setup(
|
||||||
|
s => s.IsFirstOrLastEpisodeOfSeason(It.IsAny<int>(), It.IsAny<int>(), It.IsAny<int>()))
|
||||||
|
.Returns(false);
|
||||||
|
|
||||||
|
//Act
|
||||||
|
bool result = mocker.Resolve<InventoryProvider>().IsAcceptableSize(parseResultMulti);
|
||||||
|
|
||||||
|
//Assert
|
||||||
|
result.Should().BeTrue();
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void IsAcceptableSize_false_multi_episode_not_first_or_last_30_minute()
|
||||||
|
{
|
||||||
|
var mocker = new AutoMoqer(MockBehavior.Strict);
|
||||||
|
|
||||||
|
parseResultMulti.Series = series30minutes;
|
||||||
|
parseResultMulti.Size = 1184572800;
|
||||||
|
|
||||||
|
mocker.GetMock<QualityTypeProvider>().Setup(s => s.Get(1)).Returns(qualityType);
|
||||||
|
|
||||||
|
mocker.GetMock<EpisodeProvider>().Setup(
|
||||||
|
s => s.IsFirstOrLastEpisodeOfSeason(It.IsAny<int>(), It.IsAny<int>(), It.IsAny<int>()))
|
||||||
|
.Returns(false);
|
||||||
|
|
||||||
|
//Act
|
||||||
|
bool result = mocker.Resolve<InventoryProvider>().IsAcceptableSize(parseResultMulti);
|
||||||
|
|
||||||
|
//Assert
|
||||||
|
result.Should().BeFalse();
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void IsAcceptableSize_false_multi_episode_not_first_or_last_60_minute()
|
||||||
|
{
|
||||||
|
var mocker = new AutoMoqer(MockBehavior.Strict);
|
||||||
|
|
||||||
|
parseResultMulti.Series = series60minutes;
|
||||||
|
parseResultMulti.Size = 1368572800;
|
||||||
|
|
||||||
|
mocker.GetMock<QualityTypeProvider>().Setup(s => s.Get(1)).Returns(qualityType);
|
||||||
|
|
||||||
|
mocker.GetMock<EpisodeProvider>().Setup(
|
||||||
|
s => s.IsFirstOrLastEpisodeOfSeason(It.IsAny<int>(), It.IsAny<int>(), It.IsAny<int>()))
|
||||||
|
.Returns(false);
|
||||||
|
|
||||||
|
//Act
|
||||||
|
bool result = mocker.Resolve<InventoryProvider>().IsAcceptableSize(parseResultMulti);
|
||||||
|
|
||||||
|
//Assert
|
||||||
|
result.Should().BeFalse();
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void IsAcceptableSize_true_single_episode_first_30_minute()
|
||||||
|
{
|
||||||
|
var mocker = new AutoMoqer(MockBehavior.Strict);
|
||||||
|
|
||||||
|
parseResultSingle.Series = series30minutes;
|
||||||
|
parseResultSingle.Size = 184572800;
|
||||||
|
|
||||||
|
mocker.GetMock<QualityTypeProvider>().Setup(s => s.Get(1)).Returns(qualityType);
|
||||||
|
|
||||||
|
mocker.GetMock<EpisodeProvider>().Setup(
|
||||||
|
s => s.IsFirstOrLastEpisodeOfSeason(It.IsAny<int>(), It.IsAny<int>(), It.IsAny<int>()))
|
||||||
|
.Returns(true);
|
||||||
|
|
||||||
|
//Act
|
||||||
|
bool result = mocker.Resolve<InventoryProvider>().IsAcceptableSize(parseResultSingle);
|
||||||
|
|
||||||
|
//Assert
|
||||||
|
result.Should().BeTrue();
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void IsAcceptableSize_true_single_episode_first_60_minute()
|
||||||
|
{
|
||||||
|
var mocker = new AutoMoqer(MockBehavior.Strict);
|
||||||
|
|
||||||
|
parseResultSingle.Series = series60minutes;
|
||||||
|
parseResultSingle.Size = 368572800;
|
||||||
|
|
||||||
|
mocker.GetMock<QualityTypeProvider>().Setup(s => s.Get(1)).Returns(qualityType);
|
||||||
|
|
||||||
|
mocker.GetMock<EpisodeProvider>().Setup(
|
||||||
|
s => s.IsFirstOrLastEpisodeOfSeason(It.IsAny<int>(), It.IsAny<int>(), It.IsAny<int>()))
|
||||||
|
.Returns(true);
|
||||||
|
|
||||||
|
//Act
|
||||||
|
bool result = mocker.Resolve<InventoryProvider>().IsAcceptableSize(parseResultSingle);
|
||||||
|
|
||||||
|
//Assert
|
||||||
|
result.Should().BeTrue();
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void IsAcceptableSize_false_single_episode_first_30_minute()
|
||||||
|
{
|
||||||
|
var mocker = new AutoMoqer(MockBehavior.Strict);
|
||||||
|
|
||||||
|
parseResultSingle.Series = series30minutes;
|
||||||
|
parseResultSingle.Size = 1184572800;
|
||||||
|
|
||||||
|
mocker.GetMock<QualityTypeProvider>().Setup(s => s.Get(1)).Returns(qualityType);
|
||||||
|
|
||||||
|
mocker.GetMock<EpisodeProvider>().Setup(
|
||||||
|
s => s.IsFirstOrLastEpisodeOfSeason(It.IsAny<int>(), It.IsAny<int>(), It.IsAny<int>()))
|
||||||
|
.Returns(true);
|
||||||
|
|
||||||
|
//Act
|
||||||
|
bool result = mocker.Resolve<InventoryProvider>().IsAcceptableSize(parseResultSingle);
|
||||||
|
|
||||||
|
//Assert
|
||||||
|
result.Should().BeFalse();
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void IsAcceptableSize_false_single_episode_first_60_minute()
|
||||||
|
{
|
||||||
|
var mocker = new AutoMoqer(MockBehavior.Strict);
|
||||||
|
|
||||||
|
parseResultSingle.Series = series60minutes;
|
||||||
|
parseResultSingle.Size = 1368572800;
|
||||||
|
|
||||||
|
mocker.GetMock<QualityTypeProvider>().Setup(s => s.Get(1)).Returns(qualityType);
|
||||||
|
|
||||||
|
mocker.GetMock<EpisodeProvider>().Setup(
|
||||||
|
s => s.IsFirstOrLastEpisodeOfSeason(It.IsAny<int>(), It.IsAny<int>(), It.IsAny<int>()))
|
||||||
|
.Returns(true);
|
||||||
|
|
||||||
|
//Act
|
||||||
|
bool result = mocker.Resolve<InventoryProvider>().IsAcceptableSize(parseResultSingle);
|
||||||
|
|
||||||
|
//Assert
|
||||||
|
result.Should().BeFalse();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -135,6 +135,10 @@ namespace NzbDrone.Core.Test
|
|||||||
.Setup(p => p.GetEpisodesByParseResult(parseResultMulti, true))
|
.Setup(p => p.GetEpisodesByParseResult(parseResultMulti, true))
|
||||||
.Returns(new List<Episode> { episode, episode2 });
|
.Returns(new List<Episode> { episode, episode2 });
|
||||||
|
|
||||||
|
mocker.GetMock<QualityTypeProvider>()
|
||||||
|
.Setup(s => s.Get(It.IsAny<int>()))
|
||||||
|
.Returns(new QualityType { MaxSize = 10.Gigabytes(), MinSize = 0 });
|
||||||
|
|
||||||
episode.EpisodeFile.Quality = QualityTypes.Bluray720p;
|
episode.EpisodeFile.Quality = QualityTypes.Bluray720p;
|
||||||
|
|
||||||
//Act
|
//Act
|
||||||
@ -145,7 +149,6 @@ namespace NzbDrone.Core.Test
|
|||||||
mocker.VerifyAllMocks();
|
mocker.VerifyAllMocks();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
public void IsQualityNeeded_file_in_history_should_be_skipped()
|
public void IsQualityNeeded_file_in_history_should_be_skipped()
|
||||||
{
|
{
|
||||||
@ -162,6 +165,14 @@ namespace NzbDrone.Core.Test
|
|||||||
.Setup(p => p.GetEpisodesByParseResult(parseResultSingle, true))
|
.Setup(p => p.GetEpisodesByParseResult(parseResultSingle, true))
|
||||||
.Returns(new List<Episode> { episode });
|
.Returns(new List<Episode> { episode });
|
||||||
|
|
||||||
|
mocker.GetMock<EpisodeProvider>()
|
||||||
|
.Setup(p => p.IsFirstOrLastEpisodeOfSeason(It.IsAny<int>(), It.IsAny<int>(), It.IsAny<int>()))
|
||||||
|
.Returns(false);
|
||||||
|
|
||||||
|
mocker.GetMock<QualityTypeProvider>()
|
||||||
|
.Setup(s => s.Get(It.IsAny<int>()))
|
||||||
|
.Returns(new QualityType { MaxSize = 10.Gigabytes(), MinSize = 0 });
|
||||||
|
|
||||||
episode.EpisodeFile.Quality = QualityTypes.SDTV;
|
episode.EpisodeFile.Quality = QualityTypes.SDTV;
|
||||||
|
|
||||||
//Act
|
//Act
|
||||||
@ -188,6 +199,14 @@ namespace NzbDrone.Core.Test
|
|||||||
.Setup(p => p.GetEpisodesByParseResult(parseResultSingle, true))
|
.Setup(p => p.GetEpisodesByParseResult(parseResultSingle, true))
|
||||||
.Returns(new List<Episode> { episode });
|
.Returns(new List<Episode> { episode });
|
||||||
|
|
||||||
|
mocker.GetMock<EpisodeProvider>()
|
||||||
|
.Setup(p => p.IsFirstOrLastEpisodeOfSeason(It.IsAny<int>(), It.IsAny<int>(), It.IsAny<int>()))
|
||||||
|
.Returns(false);
|
||||||
|
|
||||||
|
mocker.GetMock<QualityTypeProvider>()
|
||||||
|
.Setup(s => s.Get(It.IsAny<int>()))
|
||||||
|
.Returns(new QualityType { MaxSize = 10.Gigabytes(), MinSize = 0 });
|
||||||
|
|
||||||
episode.EpisodeFile.Quality = QualityTypes.SDTV;
|
episode.EpisodeFile.Quality = QualityTypes.SDTV;
|
||||||
|
|
||||||
//Act
|
//Act
|
||||||
@ -210,11 +229,18 @@ namespace NzbDrone.Core.Test
|
|||||||
.Setup(p => p.GetBestQualityInHistory(episode.EpisodeId))
|
.Setup(p => p.GetBestQualityInHistory(episode.EpisodeId))
|
||||||
.Returns<Quality>(null);
|
.Returns<Quality>(null);
|
||||||
|
|
||||||
|
|
||||||
mocker.GetMock<EpisodeProvider>()
|
mocker.GetMock<EpisodeProvider>()
|
||||||
.Setup(p => p.GetEpisodesByParseResult(parseResultSingle, true))
|
.Setup(p => p.GetEpisodesByParseResult(parseResultSingle, true))
|
||||||
.Returns(new List<Episode> { episode });
|
.Returns(new List<Episode> { episode });
|
||||||
|
|
||||||
|
mocker.GetMock<EpisodeProvider>()
|
||||||
|
.Setup(p => p.IsFirstOrLastEpisodeOfSeason(It.IsAny<int>(), It.IsAny<int>(), It.IsAny<int>()))
|
||||||
|
.Returns(false);
|
||||||
|
|
||||||
|
mocker.GetMock<QualityTypeProvider>()
|
||||||
|
.Setup(s => s.Get(It.IsAny<int>()))
|
||||||
|
.Returns(new QualityType { MaxSize = 10.Gigabytes(), MinSize = 0 });
|
||||||
|
|
||||||
episode.EpisodeFile.Quality = QualityTypes.SDTV;
|
episode.EpisodeFile.Quality = QualityTypes.SDTV;
|
||||||
//Act
|
//Act
|
||||||
bool result = mocker.Resolve<InventoryProvider>().IsQualityNeeded(parseResultSingle);
|
bool result = mocker.Resolve<InventoryProvider>().IsQualityNeeded(parseResultSingle);
|
||||||
|
@ -90,6 +90,7 @@
|
|||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Compile Include="BacklogSearchJobTest.cs" />
|
<Compile Include="BacklogSearchJobTest.cs" />
|
||||||
<Compile Include="BannerDownloadJobTest.cs" />
|
<Compile Include="BannerDownloadJobTest.cs" />
|
||||||
|
<Compile Include="InventoryProvider_IsAcceptableSizeTest.cs" />
|
||||||
<Compile Include="QualityTypeProviderTest.cs" />
|
<Compile Include="QualityTypeProviderTest.cs" />
|
||||||
<Compile Include="MisnamedProviderTest.cs" />
|
<Compile Include="MisnamedProviderTest.cs" />
|
||||||
<Compile Include="SeasonSearchJobTest.cs" />
|
<Compile Include="SeasonSearchJobTest.cs" />
|
||||||
|
@ -330,6 +330,21 @@ namespace NzbDrone.Core.Providers
|
|||||||
Logger.Info("Ignore flag for Episode:{0} successfully set to {1}", episodeId, isIgnored);
|
Logger.Info("Ignore flag for Episode:{0} successfully set to {1}", episodeId, isIgnored);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public virtual bool IsFirstOrLastEpisodeOfSeason(int seriesId, int seasonNumber, int episodeNumber)
|
||||||
|
{
|
||||||
|
var episodes = GetEpisodesBySeason(seriesId, seasonNumber).OrderBy(e => e.EpisodeNumber);
|
||||||
|
|
||||||
|
if (episodes.Count() == 0)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
//Ensure that this is either the first episode
|
||||||
|
//or is the last episode in a season that has 10 or more episodes
|
||||||
|
if (episodes.First().EpisodeNumber == episodeNumber || (episodes.Count() >= 10 && episodes.Last().EpisodeNumber == episodeNumber))
|
||||||
|
return true;
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
public IList<Episode> AttachSeries(IList<Episode> episodes)
|
public IList<Episode> AttachSeries(IList<Episode> episodes)
|
||||||
{
|
{
|
||||||
if (episodes.Count == 0) return episodes;
|
if (episodes.Count == 0) return episodes;
|
||||||
|
@ -14,15 +14,18 @@ namespace NzbDrone.Core.Providers
|
|||||||
private readonly SeriesProvider _seriesProvider;
|
private readonly SeriesProvider _seriesProvider;
|
||||||
private readonly EpisodeProvider _episodeProvider;
|
private readonly EpisodeProvider _episodeProvider;
|
||||||
private readonly HistoryProvider _historyProvider;
|
private readonly HistoryProvider _historyProvider;
|
||||||
|
private readonly QualityTypeProvider _qualityTypeProvider;
|
||||||
|
|
||||||
private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
|
private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
|
||||||
|
|
||||||
[Inject]
|
[Inject]
|
||||||
public InventoryProvider(SeriesProvider seriesProvider, EpisodeProvider episodeProvider, HistoryProvider historyProvider)
|
public InventoryProvider(SeriesProvider seriesProvider, EpisodeProvider episodeProvider,
|
||||||
|
HistoryProvider historyProvider, QualityTypeProvider qualityTypeProvider)
|
||||||
{
|
{
|
||||||
_seriesProvider = seriesProvider;
|
_seriesProvider = seriesProvider;
|
||||||
_episodeProvider = episodeProvider;
|
_episodeProvider = episodeProvider;
|
||||||
_historyProvider = historyProvider;
|
_historyProvider = historyProvider;
|
||||||
|
_qualityTypeProvider = qualityTypeProvider;
|
||||||
}
|
}
|
||||||
|
|
||||||
public InventoryProvider()
|
public InventoryProvider()
|
||||||
@ -79,6 +82,9 @@ namespace NzbDrone.Core.Providers
|
|||||||
|
|
||||||
var cutoff = parsedReport.Series.QualityProfile.Cutoff;
|
var cutoff = parsedReport.Series.QualityProfile.Cutoff;
|
||||||
|
|
||||||
|
if (!IsAcceptableSize(parsedReport))
|
||||||
|
return false;
|
||||||
|
|
||||||
foreach (var episode in _episodeProvider.GetEpisodesByParseResult(parsedReport, true))
|
foreach (var episode in _episodeProvider.GetEpisodesByParseResult(parsedReport, true))
|
||||||
{
|
{
|
||||||
//Checking File
|
//Checking File
|
||||||
@ -132,5 +138,39 @@ namespace NzbDrone.Core.Providers
|
|||||||
Logger.Debug("New item has better quality than existing item");
|
Logger.Debug("New item has better quality than existing item");
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public virtual bool IsAcceptableSize(EpisodeParseResult parseResult)
|
||||||
|
{
|
||||||
|
var qualityType = _qualityTypeProvider.Get((int) parseResult.Quality.QualityType);
|
||||||
|
|
||||||
|
//Need to determine if this is a 30 or 60 minute episode
|
||||||
|
//Is it a multi-episode release?
|
||||||
|
//Is it the first or last series of a season?
|
||||||
|
|
||||||
|
var maxSize = qualityType.MaxSize;
|
||||||
|
var series = parseResult.Series;
|
||||||
|
|
||||||
|
//If this is an hour long episode (between 50 and 65 minutes) then multiply by 2
|
||||||
|
if (series.Runtime >= 50 && series.Runtime <= 65)
|
||||||
|
maxSize = maxSize * 2;
|
||||||
|
|
||||||
|
//Multiply maxSize by the number of episodes parsed
|
||||||
|
maxSize = maxSize * parseResult.EpisodeNumbers.Count;
|
||||||
|
|
||||||
|
//Check if there was only one episode parsed
|
||||||
|
//and it is the first or last episode of the season
|
||||||
|
if (parseResult.EpisodeNumbers.Count == 1 &&
|
||||||
|
_episodeProvider.IsFirstOrLastEpisodeOfSeason(series.SeriesId,
|
||||||
|
parseResult.SeasonNumber, parseResult.EpisodeNumbers[0]))
|
||||||
|
{
|
||||||
|
maxSize = maxSize * 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
//If the parsed size is greater than maxSize we don't want it
|
||||||
|
if (parseResult.Size > maxSize)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -19,6 +19,11 @@ namespace NzbDrone.Core.Providers
|
|||||||
_database = database;
|
_database = database;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public QualityTypeProvider()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
public virtual void Update(QualityType qualityType)
|
public virtual void Update(QualityType qualityType)
|
||||||
{
|
{
|
||||||
_database.Update(qualityType);
|
_database.Update(qualityType);
|
||||||
|
Loading…
Reference in New Issue
Block a user