|
|
|
@ -36,27 +36,27 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
|
|
|
|
|
|
|
|
|
|
private RemoteBook GivenRemoteAlbum(List<Book> albums, QualityModel quality, int age = 0, long size = 0, DownloadProtocol downloadProtocol = DownloadProtocol.Usenet)
|
|
|
|
|
{
|
|
|
|
|
var remoteAlbum = new RemoteBook();
|
|
|
|
|
remoteAlbum.ParsedBookInfo = new ParsedBookInfo();
|
|
|
|
|
remoteAlbum.ParsedBookInfo.Quality = quality;
|
|
|
|
|
var remoteBook = new RemoteBook();
|
|
|
|
|
remoteBook.ParsedBookInfo = new ParsedBookInfo();
|
|
|
|
|
remoteBook.ParsedBookInfo.Quality = quality;
|
|
|
|
|
|
|
|
|
|
remoteAlbum.Books = new List<Book>();
|
|
|
|
|
remoteAlbum.Books.AddRange(albums);
|
|
|
|
|
remoteBook.Books = new List<Book>();
|
|
|
|
|
remoteBook.Books.AddRange(albums);
|
|
|
|
|
|
|
|
|
|
remoteAlbum.Release = new ReleaseInfo();
|
|
|
|
|
remoteAlbum.Release.PublishDate = DateTime.Now.AddDays(-age);
|
|
|
|
|
remoteAlbum.Release.Size = size;
|
|
|
|
|
remoteAlbum.Release.DownloadProtocol = downloadProtocol;
|
|
|
|
|
remoteBook.Release = new ReleaseInfo();
|
|
|
|
|
remoteBook.Release.PublishDate = DateTime.Now.AddDays(-age);
|
|
|
|
|
remoteBook.Release.Size = size;
|
|
|
|
|
remoteBook.Release.DownloadProtocol = downloadProtocol;
|
|
|
|
|
|
|
|
|
|
remoteAlbum.Author = Builder<Author>.CreateNew()
|
|
|
|
|
remoteBook.Author = Builder<Author>.CreateNew()
|
|
|
|
|
.With(e => e.QualityProfile = new QualityProfile
|
|
|
|
|
{
|
|
|
|
|
Items = Qualities.QualityFixture.GetDefaultQualities()
|
|
|
|
|
}).Build();
|
|
|
|
|
|
|
|
|
|
remoteAlbum.DownloadAllowed = true;
|
|
|
|
|
remoteBook.DownloadAllowed = true;
|
|
|
|
|
|
|
|
|
|
return remoteAlbum;
|
|
|
|
|
return remoteBook;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void GivenPreferredDownloadProtocol(DownloadProtocol downloadProtocol)
|
|
|
|
@ -72,12 +72,12 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
|
|
|
|
|
[Test]
|
|
|
|
|
public void should_put_propers_before_non_propers()
|
|
|
|
|
{
|
|
|
|
|
var remoteAlbum1 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.MP3_320, new Revision(version: 1)));
|
|
|
|
|
var remoteAlbum2 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.MP3_320, new Revision(version: 2)));
|
|
|
|
|
var remoteBook1 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.MP3_320, new Revision(version: 1)));
|
|
|
|
|
var remoteBook2 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.MP3_320, new Revision(version: 2)));
|
|
|
|
|
|
|
|
|
|
var decisions = new List<DownloadDecision>();
|
|
|
|
|
decisions.Add(new DownloadDecision(remoteAlbum1));
|
|
|
|
|
decisions.Add(new DownloadDecision(remoteAlbum2));
|
|
|
|
|
decisions.Add(new DownloadDecision(remoteBook1));
|
|
|
|
|
decisions.Add(new DownloadDecision(remoteBook2));
|
|
|
|
|
|
|
|
|
|
var qualifiedReports = Subject.PrioritizeDecisions(decisions);
|
|
|
|
|
qualifiedReports.First().RemoteBook.ParsedBookInfo.Quality.Revision.Version.Should().Be(2);
|
|
|
|
@ -86,12 +86,12 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
|
|
|
|
|
[Test]
|
|
|
|
|
public void should_put_higher_quality_before_lower()
|
|
|
|
|
{
|
|
|
|
|
var remoteAlbum1 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.MP3_320));
|
|
|
|
|
var remoteAlbum2 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.MP3_320));
|
|
|
|
|
var remoteBook1 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.MP3_320));
|
|
|
|
|
var remoteBook2 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.MP3_320));
|
|
|
|
|
|
|
|
|
|
var decisions = new List<DownloadDecision>();
|
|
|
|
|
decisions.Add(new DownloadDecision(remoteAlbum1));
|
|
|
|
|
decisions.Add(new DownloadDecision(remoteAlbum2));
|
|
|
|
|
decisions.Add(new DownloadDecision(remoteBook1));
|
|
|
|
|
decisions.Add(new DownloadDecision(remoteBook2));
|
|
|
|
|
|
|
|
|
|
var qualifiedReports = Subject.PrioritizeDecisions(decisions);
|
|
|
|
|
qualifiedReports.First().RemoteBook.ParsedBookInfo.Quality.Quality.Should().Be(Quality.MP3_320);
|
|
|
|
@ -100,46 +100,46 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
|
|
|
|
|
[Test]
|
|
|
|
|
public void should_order_by_age_then_largest_rounded_to_200mb()
|
|
|
|
|
{
|
|
|
|
|
var remoteAlbumSd = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.MP3_320), size: 100.Megabytes(), age: 1);
|
|
|
|
|
var remoteAlbumHdSmallOld = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.MP3_320), size: 1200.Megabytes(), age: 1000);
|
|
|
|
|
var remoteAlbumSmallYoung = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.MP3_320), size: 1250.Megabytes(), age: 10);
|
|
|
|
|
var remoteAlbumHdLargeYoung = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.MP3_320), size: 3000.Megabytes(), age: 1);
|
|
|
|
|
var remoteBookSd = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.MP3_320), size: 100.Megabytes(), age: 1);
|
|
|
|
|
var remoteBookHdSmallOld = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.MP3_320), size: 1200.Megabytes(), age: 1000);
|
|
|
|
|
var remoteBookSmallYoung = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.MP3_320), size: 1250.Megabytes(), age: 10);
|
|
|
|
|
var remoteBookHdLargeYoung = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.MP3_320), size: 3000.Megabytes(), age: 1);
|
|
|
|
|
|
|
|
|
|
var decisions = new List<DownloadDecision>();
|
|
|
|
|
decisions.Add(new DownloadDecision(remoteAlbumSd));
|
|
|
|
|
decisions.Add(new DownloadDecision(remoteAlbumHdSmallOld));
|
|
|
|
|
decisions.Add(new DownloadDecision(remoteAlbumSmallYoung));
|
|
|
|
|
decisions.Add(new DownloadDecision(remoteAlbumHdLargeYoung));
|
|
|
|
|
decisions.Add(new DownloadDecision(remoteBookSd));
|
|
|
|
|
decisions.Add(new DownloadDecision(remoteBookHdSmallOld));
|
|
|
|
|
decisions.Add(new DownloadDecision(remoteBookSmallYoung));
|
|
|
|
|
decisions.Add(new DownloadDecision(remoteBookHdLargeYoung));
|
|
|
|
|
|
|
|
|
|
var qualifiedReports = Subject.PrioritizeDecisions(decisions);
|
|
|
|
|
qualifiedReports.First().RemoteBook.Should().Be(remoteAlbumHdLargeYoung);
|
|
|
|
|
qualifiedReports.First().RemoteBook.Should().Be(remoteBookHdLargeYoung);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
|
public void should_order_by_youngest()
|
|
|
|
|
{
|
|
|
|
|
var remoteAlbum1 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.MP3_320), age: 10);
|
|
|
|
|
var remoteAlbum2 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.MP3_320), age: 5);
|
|
|
|
|
var remoteBook1 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.MP3_320), age: 10);
|
|
|
|
|
var remoteBook2 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.MP3_320), age: 5);
|
|
|
|
|
|
|
|
|
|
var decisions = new List<DownloadDecision>();
|
|
|
|
|
decisions.Add(new DownloadDecision(remoteAlbum1));
|
|
|
|
|
decisions.Add(new DownloadDecision(remoteAlbum2));
|
|
|
|
|
decisions.Add(new DownloadDecision(remoteBook1));
|
|
|
|
|
decisions.Add(new DownloadDecision(remoteBook2));
|
|
|
|
|
|
|
|
|
|
var qualifiedReports = Subject.PrioritizeDecisions(decisions);
|
|
|
|
|
qualifiedReports.First().RemoteBook.Should().Be(remoteAlbum2);
|
|
|
|
|
qualifiedReports.First().RemoteBook.Should().Be(remoteBook2);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
|
public void should_not_throw_if_no_albums_are_found()
|
|
|
|
|
{
|
|
|
|
|
var remoteAlbum1 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.MP3_320), size: 500.Megabytes());
|
|
|
|
|
var remoteAlbum2 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.MP3_320), size: 500.Megabytes());
|
|
|
|
|
var remoteBook1 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.MP3_320), size: 500.Megabytes());
|
|
|
|
|
var remoteBook2 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.MP3_320), size: 500.Megabytes());
|
|
|
|
|
|
|
|
|
|
remoteAlbum1.Books = new List<Book>();
|
|
|
|
|
remoteBook1.Books = new List<Book>();
|
|
|
|
|
|
|
|
|
|
var decisions = new List<DownloadDecision>();
|
|
|
|
|
decisions.Add(new DownloadDecision(remoteAlbum1));
|
|
|
|
|
decisions.Add(new DownloadDecision(remoteAlbum2));
|
|
|
|
|
decisions.Add(new DownloadDecision(remoteBook1));
|
|
|
|
|
decisions.Add(new DownloadDecision(remoteBook2));
|
|
|
|
|
|
|
|
|
|
Subject.PrioritizeDecisions(decisions);
|
|
|
|
|
}
|
|
|
|
@ -149,12 +149,12 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
|
|
|
|
|
{
|
|
|
|
|
GivenPreferredDownloadProtocol(DownloadProtocol.Usenet);
|
|
|
|
|
|
|
|
|
|
var remoteAlbum1 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.MP3_320), downloadProtocol: DownloadProtocol.Torrent);
|
|
|
|
|
var remoteAlbum2 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.MP3_320), downloadProtocol: DownloadProtocol.Usenet);
|
|
|
|
|
var remoteBook1 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.MP3_320), downloadProtocol: DownloadProtocol.Torrent);
|
|
|
|
|
var remoteBook2 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.MP3_320), downloadProtocol: DownloadProtocol.Usenet);
|
|
|
|
|
|
|
|
|
|
var decisions = new List<DownloadDecision>();
|
|
|
|
|
decisions.Add(new DownloadDecision(remoteAlbum1));
|
|
|
|
|
decisions.Add(new DownloadDecision(remoteAlbum2));
|
|
|
|
|
decisions.Add(new DownloadDecision(remoteBook1));
|
|
|
|
|
decisions.Add(new DownloadDecision(remoteBook2));
|
|
|
|
|
|
|
|
|
|
var qualifiedReports = Subject.PrioritizeDecisions(decisions);
|
|
|
|
|
qualifiedReports.First().RemoteBook.Release.DownloadProtocol.Should().Be(DownloadProtocol.Usenet);
|
|
|
|
@ -165,12 +165,12 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
|
|
|
|
|
{
|
|
|
|
|
GivenPreferredDownloadProtocol(DownloadProtocol.Torrent);
|
|
|
|
|
|
|
|
|
|
var remoteAlbum1 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.MP3_320), downloadProtocol: DownloadProtocol.Torrent);
|
|
|
|
|
var remoteAlbum2 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.MP3_320), downloadProtocol: DownloadProtocol.Usenet);
|
|
|
|
|
var remoteBook1 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.MP3_320), downloadProtocol: DownloadProtocol.Torrent);
|
|
|
|
|
var remoteBook2 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.MP3_320), downloadProtocol: DownloadProtocol.Usenet);
|
|
|
|
|
|
|
|
|
|
var decisions = new List<DownloadDecision>();
|
|
|
|
|
decisions.Add(new DownloadDecision(remoteAlbum1));
|
|
|
|
|
decisions.Add(new DownloadDecision(remoteAlbum2));
|
|
|
|
|
decisions.Add(new DownloadDecision(remoteBook1));
|
|
|
|
|
decisions.Add(new DownloadDecision(remoteBook2));
|
|
|
|
|
|
|
|
|
|
var qualifiedReports = Subject.PrioritizeDecisions(decisions);
|
|
|
|
|
qualifiedReports.First().RemoteBook.Release.DownloadProtocol.Should().Be(DownloadProtocol.Torrent);
|
|
|
|
@ -179,14 +179,14 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
|
|
|
|
|
[Test]
|
|
|
|
|
public void should_prefer_discography_pack_above_single_album()
|
|
|
|
|
{
|
|
|
|
|
var remoteAlbum1 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1), GivenAlbum(2) }, new QualityModel(Quality.FLAC));
|
|
|
|
|
var remoteAlbum2 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.FLAC));
|
|
|
|
|
var remoteBook1 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1), GivenAlbum(2) }, new QualityModel(Quality.FLAC));
|
|
|
|
|
var remoteBook2 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.FLAC));
|
|
|
|
|
|
|
|
|
|
remoteAlbum1.ParsedBookInfo.Discography = true;
|
|
|
|
|
remoteBook1.ParsedBookInfo.Discography = true;
|
|
|
|
|
|
|
|
|
|
var decisions = new List<DownloadDecision>();
|
|
|
|
|
decisions.Add(new DownloadDecision(remoteAlbum1));
|
|
|
|
|
decisions.Add(new DownloadDecision(remoteAlbum2));
|
|
|
|
|
decisions.Add(new DownloadDecision(remoteBook1));
|
|
|
|
|
decisions.Add(new DownloadDecision(remoteBook2));
|
|
|
|
|
|
|
|
|
|
var qualifiedReports = Subject.PrioritizeDecisions(decisions);
|
|
|
|
|
qualifiedReports.First().RemoteBook.ParsedBookInfo.Discography.Should().BeTrue();
|
|
|
|
@ -195,14 +195,14 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
|
|
|
|
|
[Test]
|
|
|
|
|
public void should_prefer_quality_over_discography_pack()
|
|
|
|
|
{
|
|
|
|
|
var remoteAlbum1 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1), GivenAlbum(2) }, new QualityModel(Quality.MP3_320));
|
|
|
|
|
var remoteAlbum2 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.FLAC));
|
|
|
|
|
var remoteBook1 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1), GivenAlbum(2) }, new QualityModel(Quality.MP3_320));
|
|
|
|
|
var remoteBook2 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.FLAC));
|
|
|
|
|
|
|
|
|
|
remoteAlbum1.ParsedBookInfo.Discography = true;
|
|
|
|
|
remoteBook1.ParsedBookInfo.Discography = true;
|
|
|
|
|
|
|
|
|
|
var decisions = new List<DownloadDecision>();
|
|
|
|
|
decisions.Add(new DownloadDecision(remoteAlbum1));
|
|
|
|
|
decisions.Add(new DownloadDecision(remoteAlbum2));
|
|
|
|
|
decisions.Add(new DownloadDecision(remoteBook1));
|
|
|
|
|
decisions.Add(new DownloadDecision(remoteBook2));
|
|
|
|
|
|
|
|
|
|
var qualifiedReports = Subject.PrioritizeDecisions(decisions);
|
|
|
|
|
qualifiedReports.First().RemoteBook.ParsedBookInfo.Discography.Should().BeFalse();
|
|
|
|
@ -211,22 +211,22 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
|
|
|
|
|
[Test]
|
|
|
|
|
public void should_prefer_single_album_over_multi_album()
|
|
|
|
|
{
|
|
|
|
|
var remoteAlbum1 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1), GivenAlbum(2) }, new QualityModel(Quality.MP3_320));
|
|
|
|
|
var remoteAlbum2 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.MP3_320));
|
|
|
|
|
var remoteBook1 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1), GivenAlbum(2) }, new QualityModel(Quality.MP3_320));
|
|
|
|
|
var remoteBook2 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.MP3_320));
|
|
|
|
|
|
|
|
|
|
var decisions = new List<DownloadDecision>();
|
|
|
|
|
decisions.Add(new DownloadDecision(remoteAlbum1));
|
|
|
|
|
decisions.Add(new DownloadDecision(remoteAlbum2));
|
|
|
|
|
decisions.Add(new DownloadDecision(remoteBook1));
|
|
|
|
|
decisions.Add(new DownloadDecision(remoteBook2));
|
|
|
|
|
|
|
|
|
|
var qualifiedReports = Subject.PrioritizeDecisions(decisions);
|
|
|
|
|
qualifiedReports.First().RemoteBook.Books.Count.Should().Be(remoteAlbum2.Books.Count);
|
|
|
|
|
qualifiedReports.First().RemoteBook.Books.Count.Should().Be(remoteBook2.Books.Count);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
|
public void should_prefer_releases_with_more_seeders()
|
|
|
|
|
{
|
|
|
|
|
var remoteAlbum1 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.MP3_320));
|
|
|
|
|
var remoteAlbum2 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.MP3_320));
|
|
|
|
|
var remoteBook1 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.MP3_320));
|
|
|
|
|
var remoteBook2 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.MP3_320));
|
|
|
|
|
|
|
|
|
|
var torrentInfo1 = new TorrentInfo();
|
|
|
|
|
torrentInfo1.PublishDate = DateTime.Now;
|
|
|
|
@ -237,12 +237,12 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
|
|
|
|
|
var torrentInfo2 = torrentInfo1.JsonClone();
|
|
|
|
|
torrentInfo2.Seeders = 100;
|
|
|
|
|
|
|
|
|
|
remoteAlbum1.Release = torrentInfo1;
|
|
|
|
|
remoteAlbum2.Release = torrentInfo2;
|
|
|
|
|
remoteBook1.Release = torrentInfo1;
|
|
|
|
|
remoteBook2.Release = torrentInfo2;
|
|
|
|
|
|
|
|
|
|
var decisions = new List<DownloadDecision>();
|
|
|
|
|
decisions.Add(new DownloadDecision(remoteAlbum1));
|
|
|
|
|
decisions.Add(new DownloadDecision(remoteAlbum2));
|
|
|
|
|
decisions.Add(new DownloadDecision(remoteBook1));
|
|
|
|
|
decisions.Add(new DownloadDecision(remoteBook2));
|
|
|
|
|
|
|
|
|
|
var qualifiedReports = Subject.PrioritizeDecisions(decisions);
|
|
|
|
|
((TorrentInfo)qualifiedReports.First().RemoteBook.Release).Seeders.Should().Be(torrentInfo2.Seeders);
|
|
|
|
@ -251,8 +251,8 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
|
|
|
|
|
[Test]
|
|
|
|
|
public void should_prefer_releases_with_more_peers_given_equal_number_of_seeds()
|
|
|
|
|
{
|
|
|
|
|
var remoteAlbum1 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.MP3_320));
|
|
|
|
|
var remoteAlbum2 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.MP3_320));
|
|
|
|
|
var remoteBook1 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.MP3_320));
|
|
|
|
|
var remoteBook2 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.MP3_320));
|
|
|
|
|
|
|
|
|
|
var torrentInfo1 = new TorrentInfo();
|
|
|
|
|
torrentInfo1.PublishDate = DateTime.Now;
|
|
|
|
@ -264,12 +264,12 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
|
|
|
|
|
var torrentInfo2 = torrentInfo1.JsonClone();
|
|
|
|
|
torrentInfo2.Peers = 100;
|
|
|
|
|
|
|
|
|
|
remoteAlbum1.Release = torrentInfo1;
|
|
|
|
|
remoteAlbum2.Release = torrentInfo2;
|
|
|
|
|
remoteBook1.Release = torrentInfo1;
|
|
|
|
|
remoteBook2.Release = torrentInfo2;
|
|
|
|
|
|
|
|
|
|
var decisions = new List<DownloadDecision>();
|
|
|
|
|
decisions.Add(new DownloadDecision(remoteAlbum1));
|
|
|
|
|
decisions.Add(new DownloadDecision(remoteAlbum2));
|
|
|
|
|
decisions.Add(new DownloadDecision(remoteBook1));
|
|
|
|
|
decisions.Add(new DownloadDecision(remoteBook2));
|
|
|
|
|
|
|
|
|
|
var qualifiedReports = Subject.PrioritizeDecisions(decisions);
|
|
|
|
|
((TorrentInfo)qualifiedReports.First().RemoteBook.Release).Peers.Should().Be(torrentInfo2.Peers);
|
|
|
|
@ -278,8 +278,8 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
|
|
|
|
|
[Test]
|
|
|
|
|
public void should_prefer_releases_with_more_peers_no_seeds()
|
|
|
|
|
{
|
|
|
|
|
var remoteAlbum1 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.MP3_320));
|
|
|
|
|
var remoteAlbum2 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.MP3_320));
|
|
|
|
|
var remoteBook1 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.MP3_320));
|
|
|
|
|
var remoteBook2 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.MP3_320));
|
|
|
|
|
|
|
|
|
|
var torrentInfo1 = new TorrentInfo();
|
|
|
|
|
torrentInfo1.PublishDate = DateTime.Now;
|
|
|
|
@ -292,12 +292,12 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
|
|
|
|
|
torrentInfo2.Seeders = 0;
|
|
|
|
|
torrentInfo2.Peers = 100;
|
|
|
|
|
|
|
|
|
|
remoteAlbum1.Release = torrentInfo1;
|
|
|
|
|
remoteAlbum2.Release = torrentInfo2;
|
|
|
|
|
remoteBook1.Release = torrentInfo1;
|
|
|
|
|
remoteBook2.Release = torrentInfo2;
|
|
|
|
|
|
|
|
|
|
var decisions = new List<DownloadDecision>();
|
|
|
|
|
decisions.Add(new DownloadDecision(remoteAlbum1));
|
|
|
|
|
decisions.Add(new DownloadDecision(remoteAlbum2));
|
|
|
|
|
decisions.Add(new DownloadDecision(remoteBook1));
|
|
|
|
|
decisions.Add(new DownloadDecision(remoteBook2));
|
|
|
|
|
|
|
|
|
|
var qualifiedReports = Subject.PrioritizeDecisions(decisions);
|
|
|
|
|
((TorrentInfo)qualifiedReports.First().RemoteBook.Release).Peers.Should().Be(torrentInfo2.Peers);
|
|
|
|
@ -306,8 +306,8 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
|
|
|
|
|
[Test]
|
|
|
|
|
public void should_prefer_first_release_if_peers_and_size_are_too_similar()
|
|
|
|
|
{
|
|
|
|
|
var remoteAlbum1 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.MP3_320));
|
|
|
|
|
var remoteAlbum2 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.MP3_320));
|
|
|
|
|
var remoteBook1 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.MP3_320));
|
|
|
|
|
var remoteBook2 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.MP3_320));
|
|
|
|
|
|
|
|
|
|
var torrentInfo1 = new TorrentInfo();
|
|
|
|
|
torrentInfo1.PublishDate = DateTime.Now;
|
|
|
|
@ -321,12 +321,12 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
|
|
|
|
|
torrentInfo2.Peers = 10;
|
|
|
|
|
torrentInfo1.Size = 250.Megabytes();
|
|
|
|
|
|
|
|
|
|
remoteAlbum1.Release = torrentInfo1;
|
|
|
|
|
remoteAlbum2.Release = torrentInfo2;
|
|
|
|
|
remoteBook1.Release = torrentInfo1;
|
|
|
|
|
remoteBook2.Release = torrentInfo2;
|
|
|
|
|
|
|
|
|
|
var decisions = new List<DownloadDecision>();
|
|
|
|
|
decisions.Add(new DownloadDecision(remoteAlbum1));
|
|
|
|
|
decisions.Add(new DownloadDecision(remoteAlbum2));
|
|
|
|
|
decisions.Add(new DownloadDecision(remoteBook1));
|
|
|
|
|
decisions.Add(new DownloadDecision(remoteBook2));
|
|
|
|
|
|
|
|
|
|
var qualifiedReports = Subject.PrioritizeDecisions(decisions);
|
|
|
|
|
((TorrentInfo)qualifiedReports.First().RemoteBook.Release).Should().Be(torrentInfo1);
|
|
|
|
@ -335,28 +335,28 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
|
|
|
|
|
[Test]
|
|
|
|
|
public void should_prefer_first_release_if_age_and_size_are_too_similar()
|
|
|
|
|
{
|
|
|
|
|
var remoteAlbum1 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.MP3_320));
|
|
|
|
|
var remoteAlbum2 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.MP3_320));
|
|
|
|
|
var remoteBook1 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.MP3_320));
|
|
|
|
|
var remoteBook2 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.MP3_320));
|
|
|
|
|
|
|
|
|
|
remoteAlbum1.Release.PublishDate = DateTime.UtcNow.AddDays(-100);
|
|
|
|
|
remoteAlbum1.Release.Size = 200.Megabytes();
|
|
|
|
|
remoteBook1.Release.PublishDate = DateTime.UtcNow.AddDays(-100);
|
|
|
|
|
remoteBook1.Release.Size = 200.Megabytes();
|
|
|
|
|
|
|
|
|
|
remoteAlbum2.Release.PublishDate = DateTime.UtcNow.AddDays(-150);
|
|
|
|
|
remoteAlbum2.Release.Size = 250.Megabytes();
|
|
|
|
|
remoteBook2.Release.PublishDate = DateTime.UtcNow.AddDays(-150);
|
|
|
|
|
remoteBook2.Release.Size = 250.Megabytes();
|
|
|
|
|
|
|
|
|
|
var decisions = new List<DownloadDecision>();
|
|
|
|
|
decisions.Add(new DownloadDecision(remoteAlbum1));
|
|
|
|
|
decisions.Add(new DownloadDecision(remoteAlbum2));
|
|
|
|
|
decisions.Add(new DownloadDecision(remoteBook1));
|
|
|
|
|
decisions.Add(new DownloadDecision(remoteBook2));
|
|
|
|
|
|
|
|
|
|
var qualifiedReports = Subject.PrioritizeDecisions(decisions);
|
|
|
|
|
qualifiedReports.First().RemoteBook.Release.Should().Be(remoteAlbum1.Release);
|
|
|
|
|
qualifiedReports.First().RemoteBook.Release.Should().Be(remoteBook1.Release);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
|
public void should_prefer_quality_over_the_number_of_peers()
|
|
|
|
|
{
|
|
|
|
|
var remoteAlbum1 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.MP3_320));
|
|
|
|
|
var remoteAlbum2 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.AZW3));
|
|
|
|
|
var remoteBook1 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.MP3_320));
|
|
|
|
|
var remoteBook2 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.AZW3));
|
|
|
|
|
|
|
|
|
|
var torrentInfo1 = new TorrentInfo();
|
|
|
|
|
torrentInfo1.PublishDate = DateTime.Now;
|
|
|
|
@ -370,12 +370,12 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
|
|
|
|
|
torrentInfo2.Peers = 10;
|
|
|
|
|
torrentInfo1.Size = 250.Megabytes();
|
|
|
|
|
|
|
|
|
|
remoteAlbum1.Release = torrentInfo1;
|
|
|
|
|
remoteAlbum2.Release = torrentInfo2;
|
|
|
|
|
remoteBook1.Release = torrentInfo1;
|
|
|
|
|
remoteBook2.Release = torrentInfo2;
|
|
|
|
|
|
|
|
|
|
var decisions = new List<DownloadDecision>();
|
|
|
|
|
decisions.Add(new DownloadDecision(remoteAlbum1));
|
|
|
|
|
decisions.Add(new DownloadDecision(remoteAlbum2));
|
|
|
|
|
decisions.Add(new DownloadDecision(remoteBook1));
|
|
|
|
|
decisions.Add(new DownloadDecision(remoteBook2));
|
|
|
|
|
|
|
|
|
|
var qualifiedReports = Subject.PrioritizeDecisions(decisions);
|
|
|
|
|
((TorrentInfo)qualifiedReports.First().RemoteBook.Release).Should().Be(torrentInfo1);
|
|
|
|
@ -384,12 +384,12 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
|
|
|
|
|
[Test]
|
|
|
|
|
public void should_put_higher_quality_before_lower_always()
|
|
|
|
|
{
|
|
|
|
|
var remoteAlbum1 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.MP3_320));
|
|
|
|
|
var remoteAlbum2 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.MP3_320));
|
|
|
|
|
var remoteBook1 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.MP3_320));
|
|
|
|
|
var remoteBook2 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.MP3_320));
|
|
|
|
|
|
|
|
|
|
var decisions = new List<DownloadDecision>();
|
|
|
|
|
decisions.Add(new DownloadDecision(remoteAlbum1));
|
|
|
|
|
decisions.Add(new DownloadDecision(remoteAlbum2));
|
|
|
|
|
decisions.Add(new DownloadDecision(remoteBook1));
|
|
|
|
|
decisions.Add(new DownloadDecision(remoteBook2));
|
|
|
|
|
|
|
|
|
|
var qualifiedReports = Subject.PrioritizeDecisions(decisions);
|
|
|
|
|
qualifiedReports.First().RemoteBook.ParsedBookInfo.Quality.Quality.Should().Be(Quality.MP3_320);
|
|
|
|
@ -398,15 +398,15 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
|
|
|
|
|
[Test]
|
|
|
|
|
public void should_prefer_higher_score_over_lower_score()
|
|
|
|
|
{
|
|
|
|
|
var remoteAlbum1 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.FLAC));
|
|
|
|
|
var remoteAlbum2 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.FLAC));
|
|
|
|
|
var remoteBook1 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.FLAC));
|
|
|
|
|
var remoteBook2 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.FLAC));
|
|
|
|
|
|
|
|
|
|
remoteAlbum1.PreferredWordScore = 10;
|
|
|
|
|
remoteAlbum2.PreferredWordScore = 0;
|
|
|
|
|
remoteBook1.PreferredWordScore = 10;
|
|
|
|
|
remoteBook2.PreferredWordScore = 0;
|
|
|
|
|
|
|
|
|
|
var decisions = new List<DownloadDecision>();
|
|
|
|
|
decisions.Add(new DownloadDecision(remoteAlbum1));
|
|
|
|
|
decisions.Add(new DownloadDecision(remoteAlbum2));
|
|
|
|
|
decisions.Add(new DownloadDecision(remoteBook1));
|
|
|
|
|
decisions.Add(new DownloadDecision(remoteBook2));
|
|
|
|
|
|
|
|
|
|
var qualifiedReports = Subject.PrioritizeDecisions(decisions);
|
|
|
|
|
qualifiedReports.First().RemoteBook.PreferredWordScore.Should().Be(10);
|
|
|
|
@ -419,15 +419,15 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
|
|
|
|
|
.Setup(s => s.DownloadPropersAndRepacks)
|
|
|
|
|
.Returns(ProperDownloadTypes.PreferAndUpgrade);
|
|
|
|
|
|
|
|
|
|
var remoteAlbum1 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.FLAC, new Revision(1)));
|
|
|
|
|
var remoteAlbum2 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.FLAC, new Revision(2)));
|
|
|
|
|
var remoteBook1 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.FLAC, new Revision(1)));
|
|
|
|
|
var remoteBook2 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.FLAC, new Revision(2)));
|
|
|
|
|
|
|
|
|
|
remoteAlbum1.PreferredWordScore = 10;
|
|
|
|
|
remoteAlbum2.PreferredWordScore = 0;
|
|
|
|
|
remoteBook1.PreferredWordScore = 10;
|
|
|
|
|
remoteBook2.PreferredWordScore = 0;
|
|
|
|
|
|
|
|
|
|
var decisions = new List<DownloadDecision>();
|
|
|
|
|
decisions.Add(new DownloadDecision(remoteAlbum1));
|
|
|
|
|
decisions.Add(new DownloadDecision(remoteAlbum2));
|
|
|
|
|
decisions.Add(new DownloadDecision(remoteBook1));
|
|
|
|
|
decisions.Add(new DownloadDecision(remoteBook2));
|
|
|
|
|
|
|
|
|
|
var qualifiedReports = Subject.PrioritizeDecisions(decisions);
|
|
|
|
|
qualifiedReports.First().RemoteBook.ParsedBookInfo.Quality.Revision.Version.Should().Be(2);
|
|
|
|
@ -440,15 +440,15 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
|
|
|
|
|
.Setup(s => s.DownloadPropersAndRepacks)
|
|
|
|
|
.Returns(ProperDownloadTypes.DoNotUpgrade);
|
|
|
|
|
|
|
|
|
|
var remoteAlbum1 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.FLAC, new Revision(1)));
|
|
|
|
|
var remoteAlbum2 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.FLAC, new Revision(2)));
|
|
|
|
|
var remoteBook1 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.FLAC, new Revision(1)));
|
|
|
|
|
var remoteBook2 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.FLAC, new Revision(2)));
|
|
|
|
|
|
|
|
|
|
remoteAlbum1.PreferredWordScore = 10;
|
|
|
|
|
remoteAlbum2.PreferredWordScore = 0;
|
|
|
|
|
remoteBook1.PreferredWordScore = 10;
|
|
|
|
|
remoteBook2.PreferredWordScore = 0;
|
|
|
|
|
|
|
|
|
|
var decisions = new List<DownloadDecision>();
|
|
|
|
|
decisions.Add(new DownloadDecision(remoteAlbum1));
|
|
|
|
|
decisions.Add(new DownloadDecision(remoteAlbum2));
|
|
|
|
|
decisions.Add(new DownloadDecision(remoteBook1));
|
|
|
|
|
decisions.Add(new DownloadDecision(remoteBook2));
|
|
|
|
|
|
|
|
|
|
var qualifiedReports = Subject.PrioritizeDecisions(decisions);
|
|
|
|
|
qualifiedReports.First().RemoteBook.ParsedBookInfo.Quality.Revision.Version.Should().Be(2);
|
|
|
|
@ -461,15 +461,15 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
|
|
|
|
|
.Setup(s => s.DownloadPropersAndRepacks)
|
|
|
|
|
.Returns(ProperDownloadTypes.DoNotPrefer);
|
|
|
|
|
|
|
|
|
|
var remoteAlbum1 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.FLAC, new Revision(1)));
|
|
|
|
|
var remoteAlbum2 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.FLAC, new Revision(2)));
|
|
|
|
|
var remoteBook1 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.FLAC, new Revision(1)));
|
|
|
|
|
var remoteBook2 = GivenRemoteAlbum(new List<Book> { GivenAlbum(1) }, new QualityModel(Quality.FLAC, new Revision(2)));
|
|
|
|
|
|
|
|
|
|
remoteAlbum1.PreferredWordScore = 10;
|
|
|
|
|
remoteAlbum2.PreferredWordScore = 0;
|
|
|
|
|
remoteBook1.PreferredWordScore = 10;
|
|
|
|
|
remoteBook2.PreferredWordScore = 0;
|
|
|
|
|
|
|
|
|
|
var decisions = new List<DownloadDecision>();
|
|
|
|
|
decisions.Add(new DownloadDecision(remoteAlbum1));
|
|
|
|
|
decisions.Add(new DownloadDecision(remoteAlbum2));
|
|
|
|
|
decisions.Add(new DownloadDecision(remoteBook1));
|
|
|
|
|
decisions.Add(new DownloadDecision(remoteBook2));
|
|
|
|
|
|
|
|
|
|
var qualifiedReports = Subject.PrioritizeDecisions(decisions);
|
|
|
|
|
qualifiedReports.First().RemoteBook.ParsedBookInfo.Quality.Quality.Should().Be(Quality.FLAC);
|
|
|
|
|