@ -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 remote Album = new RemoteBook ( ) ;
remote Album . ParsedBookInfo = new ParsedBookInfo ( ) ;
remote Album . ParsedBookInfo . Quality = quality ;
var remote Book = new RemoteBook ( ) ;
remote Book . ParsedBookInfo = new ParsedBookInfo ( ) ;
remote Book . ParsedBookInfo . Quality = quality ;
remote Album . Books = new List < Book > ( ) ;
remote Album . Books . AddRange ( albums ) ;
remote Book . Books = new List < Book > ( ) ;
remote Book . Books . AddRange ( albums ) ;
remote Album . Release = new ReleaseInfo ( ) ;
remote Album . Release . PublishDate = DateTime . Now . AddDays ( - age ) ;
remote Album . Release . Size = size ;
remote Album . Release . DownloadProtocol = downloadProtocol ;
remote Book . Release = new ReleaseInfo ( ) ;
remote Book . Release . PublishDate = DateTime . Now . AddDays ( - age ) ;
remote Book . Release . Size = size ;
remote Book . Release . DownloadProtocol = downloadProtocol ;
remote Album . Author = Builder < Author > . CreateNew ( )
remote Book . Author = Builder < Author > . CreateNew ( )
. With ( e = > e . QualityProfile = new QualityProfile
{
Items = Qualities . QualityFixture . GetDefaultQualities ( )
} ) . Build ( ) ;
remote Album . DownloadAllowed = true ;
remote Book . DownloadAllowed = true ;
return remote Album ;
return remote Book ;
}
private void GivenPreferredDownloadProtocol ( DownloadProtocol downloadProtocol )
@ -72,12 +72,12 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
[Test]
public void should_put_propers_before_non_propers ( )
{
var remote Album 1 = GivenRemoteAlbum ( new List < Book > { GivenAlbum ( 1 ) } , new QualityModel ( Quality . MP3_320 , new Revision ( version : 1 ) ) ) ;
var remote Album 2 = GivenRemoteAlbum ( new List < Book > { GivenAlbum ( 1 ) } , new QualityModel ( Quality . MP3_320 , new Revision ( version : 2 ) ) ) ;
var remote Book 1 = GivenRemoteAlbum ( new List < Book > { GivenAlbum ( 1 ) } , new QualityModel ( Quality . MP3_320 , new Revision ( version : 1 ) ) ) ;
var remote Book 2 = GivenRemoteAlbum ( new List < Book > { GivenAlbum ( 1 ) } , new QualityModel ( Quality . MP3_320 , new Revision ( version : 2 ) ) ) ;
var decisions = new List < DownloadDecision > ( ) ;
decisions . Add ( new DownloadDecision ( remote Album 1) ) ;
decisions . Add ( new DownloadDecision ( remote Album 2) ) ;
decisions . Add ( new DownloadDecision ( remote Book 1) ) ;
decisions . Add ( new DownloadDecision ( remote Book 2) ) ;
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 remote Album 1 = GivenRemoteAlbum ( new List < Book > { GivenAlbum ( 1 ) } , new QualityModel ( Quality . MP3_320 ) ) ;
var remote Album 2 = GivenRemoteAlbum ( new List < Book > { GivenAlbum ( 1 ) } , new QualityModel ( Quality . MP3_320 ) ) ;
var remote Book 1 = GivenRemoteAlbum ( new List < Book > { GivenAlbum ( 1 ) } , new QualityModel ( Quality . MP3_320 ) ) ;
var remote Book 2 = GivenRemoteAlbum ( new List < Book > { GivenAlbum ( 1 ) } , new QualityModel ( Quality . MP3_320 ) ) ;
var decisions = new List < DownloadDecision > ( ) ;
decisions . Add ( new DownloadDecision ( remote Album 1) ) ;
decisions . Add ( new DownloadDecision ( remote Album 2) ) ;
decisions . Add ( new DownloadDecision ( remote Book 1) ) ;
decisions . Add ( new DownloadDecision ( remote Book 2) ) ;
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 remote Album Sd = GivenRemoteAlbum ( new List < Book > { GivenAlbum ( 1 ) } , new QualityModel ( Quality . MP3_320 ) , size : 100. Megabytes ( ) , age : 1 ) ;
var remote Album HdSmallOld = GivenRemoteAlbum ( new List < Book > { GivenAlbum ( 1 ) } , new QualityModel ( Quality . MP3_320 ) , size : 1200. Megabytes ( ) , age : 1000 ) ;
var remote Album SmallYoung = GivenRemoteAlbum ( new List < Book > { GivenAlbum ( 1 ) } , new QualityModel ( Quality . MP3_320 ) , size : 1250. Megabytes ( ) , age : 10 ) ;
var remote Album HdLargeYoung = GivenRemoteAlbum ( new List < Book > { GivenAlbum ( 1 ) } , new QualityModel ( Quality . MP3_320 ) , size : 3000. Megabytes ( ) , age : 1 ) ;
var remote Book Sd = GivenRemoteAlbum ( new List < Book > { GivenAlbum ( 1 ) } , new QualityModel ( Quality . MP3_320 ) , size : 100. Megabytes ( ) , age : 1 ) ;
var remote Book HdSmallOld = GivenRemoteAlbum ( new List < Book > { GivenAlbum ( 1 ) } , new QualityModel ( Quality . MP3_320 ) , size : 1200. Megabytes ( ) , age : 1000 ) ;
var remote Book SmallYoung = GivenRemoteAlbum ( new List < Book > { GivenAlbum ( 1 ) } , new QualityModel ( Quality . MP3_320 ) , size : 1250. Megabytes ( ) , age : 10 ) ;
var remote Book HdLargeYoung = 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 ( remote Album Sd) ) ;
decisions . Add ( new DownloadDecision ( remote Album HdSmallOld) ) ;
decisions . Add ( new DownloadDecision ( remote Album SmallYoung) ) ;
decisions . Add ( new DownloadDecision ( remote Album HdLargeYoung) ) ;
decisions . Add ( new DownloadDecision ( remote Book Sd) ) ;
decisions . Add ( new DownloadDecision ( remote Book HdSmallOld) ) ;
decisions . Add ( new DownloadDecision ( remote Book SmallYoung) ) ;
decisions . Add ( new DownloadDecision ( remote Book HdLargeYoung) ) ;
var qualifiedReports = Subject . PrioritizeDecisions ( decisions ) ;
qualifiedReports . First ( ) . RemoteBook . Should ( ) . Be ( remote Album HdLargeYoung) ;
qualifiedReports . First ( ) . RemoteBook . Should ( ) . Be ( remote Book HdLargeYoung) ;
}
[Test]
public void should_order_by_youngest ( )
{
var remote Album 1 = GivenRemoteAlbum ( new List < Book > { GivenAlbum ( 1 ) } , new QualityModel ( Quality . MP3_320 ) , age : 10 ) ;
var remote Album 2 = GivenRemoteAlbum ( new List < Book > { GivenAlbum ( 1 ) } , new QualityModel ( Quality . MP3_320 ) , age : 5 ) ;
var remote Book 1 = GivenRemoteAlbum ( new List < Book > { GivenAlbum ( 1 ) } , new QualityModel ( Quality . MP3_320 ) , age : 10 ) ;
var remote Book 2 = GivenRemoteAlbum ( new List < Book > { GivenAlbum ( 1 ) } , new QualityModel ( Quality . MP3_320 ) , age : 5 ) ;
var decisions = new List < DownloadDecision > ( ) ;
decisions . Add ( new DownloadDecision ( remote Album 1) ) ;
decisions . Add ( new DownloadDecision ( remote Album 2) ) ;
decisions . Add ( new DownloadDecision ( remote Book 1) ) ;
decisions . Add ( new DownloadDecision ( remote Book 2) ) ;
var qualifiedReports = Subject . PrioritizeDecisions ( decisions ) ;
qualifiedReports . First ( ) . RemoteBook . Should ( ) . Be ( remote Album 2) ;
qualifiedReports . First ( ) . RemoteBook . Should ( ) . Be ( remote Book 2) ;
}
[Test]
public void should_not_throw_if_no_albums_are_found ( )
{
var remote Album 1 = GivenRemoteAlbum ( new List < Book > { GivenAlbum ( 1 ) } , new QualityModel ( Quality . MP3_320 ) , size : 500. Megabytes ( ) ) ;
var remote Album 2 = GivenRemoteAlbum ( new List < Book > { GivenAlbum ( 1 ) } , new QualityModel ( Quality . MP3_320 ) , size : 500. Megabytes ( ) ) ;
var remote Book 1 = GivenRemoteAlbum ( new List < Book > { GivenAlbum ( 1 ) } , new QualityModel ( Quality . MP3_320 ) , size : 500. Megabytes ( ) ) ;
var remote Book 2 = GivenRemoteAlbum ( new List < Book > { GivenAlbum ( 1 ) } , new QualityModel ( Quality . MP3_320 ) , size : 500. Megabytes ( ) ) ;
remote Album 1. Books = new List < Book > ( ) ;
remote Book 1. Books = new List < Book > ( ) ;
var decisions = new List < DownloadDecision > ( ) ;
decisions . Add ( new DownloadDecision ( remote Album 1) ) ;
decisions . Add ( new DownloadDecision ( remote Album 2) ) ;
decisions . Add ( new DownloadDecision ( remote Book 1) ) ;
decisions . Add ( new DownloadDecision ( remote Book 2) ) ;
Subject . PrioritizeDecisions ( decisions ) ;
}
@ -149,12 +149,12 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
{
GivenPreferredDownloadProtocol ( DownloadProtocol . Usenet ) ;
var remote Album 1 = GivenRemoteAlbum ( new List < Book > { GivenAlbum ( 1 ) } , new QualityModel ( Quality . MP3_320 ) , downloadProtocol : DownloadProtocol . Torrent ) ;
var remote Album 2 = GivenRemoteAlbum ( new List < Book > { GivenAlbum ( 1 ) } , new QualityModel ( Quality . MP3_320 ) , downloadProtocol : DownloadProtocol . Usenet ) ;
var remote Book 1 = GivenRemoteAlbum ( new List < Book > { GivenAlbum ( 1 ) } , new QualityModel ( Quality . MP3_320 ) , downloadProtocol : DownloadProtocol . Torrent ) ;
var remote Book 2 = GivenRemoteAlbum ( new List < Book > { GivenAlbum ( 1 ) } , new QualityModel ( Quality . MP3_320 ) , downloadProtocol : DownloadProtocol . Usenet ) ;
var decisions = new List < DownloadDecision > ( ) ;
decisions . Add ( new DownloadDecision ( remote Album 1) ) ;
decisions . Add ( new DownloadDecision ( remote Album 2) ) ;
decisions . Add ( new DownloadDecision ( remote Book 1) ) ;
decisions . Add ( new DownloadDecision ( remote Book 2) ) ;
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 remote Album 1 = GivenRemoteAlbum ( new List < Book > { GivenAlbum ( 1 ) } , new QualityModel ( Quality . MP3_320 ) , downloadProtocol : DownloadProtocol . Torrent ) ;
var remote Album 2 = GivenRemoteAlbum ( new List < Book > { GivenAlbum ( 1 ) } , new QualityModel ( Quality . MP3_320 ) , downloadProtocol : DownloadProtocol . Usenet ) ;
var remote Book 1 = GivenRemoteAlbum ( new List < Book > { GivenAlbum ( 1 ) } , new QualityModel ( Quality . MP3_320 ) , downloadProtocol : DownloadProtocol . Torrent ) ;
var remote Book 2 = GivenRemoteAlbum ( new List < Book > { GivenAlbum ( 1 ) } , new QualityModel ( Quality . MP3_320 ) , downloadProtocol : DownloadProtocol . Usenet ) ;
var decisions = new List < DownloadDecision > ( ) ;
decisions . Add ( new DownloadDecision ( remote Album 1) ) ;
decisions . Add ( new DownloadDecision ( remote Album 2) ) ;
decisions . Add ( new DownloadDecision ( remote Book 1) ) ;
decisions . Add ( new DownloadDecision ( remote Book 2) ) ;
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 remote Album 1 = GivenRemoteAlbum ( new List < Book > { GivenAlbum ( 1 ) , GivenAlbum ( 2 ) } , new QualityModel ( Quality . FLAC ) ) ;
var remote Album 2 = GivenRemoteAlbum ( new List < Book > { GivenAlbum ( 1 ) } , new QualityModel ( Quality . FLAC ) ) ;
var remote Book 1 = GivenRemoteAlbum ( new List < Book > { GivenAlbum ( 1 ) , GivenAlbum ( 2 ) } , new QualityModel ( Quality . FLAC ) ) ;
var remote Book 2 = GivenRemoteAlbum ( new List < Book > { GivenAlbum ( 1 ) } , new QualityModel ( Quality . FLAC ) ) ;
remote Album 1. ParsedBookInfo . Discography = true ;
remote Book 1. ParsedBookInfo . Discography = true ;
var decisions = new List < DownloadDecision > ( ) ;
decisions . Add ( new DownloadDecision ( remote Album 1) ) ;
decisions . Add ( new DownloadDecision ( remote Album 2) ) ;
decisions . Add ( new DownloadDecision ( remote Book 1) ) ;
decisions . Add ( new DownloadDecision ( remote Book 2) ) ;
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 remote Album 1 = GivenRemoteAlbum ( new List < Book > { GivenAlbum ( 1 ) , GivenAlbum ( 2 ) } , new QualityModel ( Quality . MP3_320 ) ) ;
var remote Album 2 = GivenRemoteAlbum ( new List < Book > { GivenAlbum ( 1 ) } , new QualityModel ( Quality . FLAC ) ) ;
var remote Book 1 = GivenRemoteAlbum ( new List < Book > { GivenAlbum ( 1 ) , GivenAlbum ( 2 ) } , new QualityModel ( Quality . MP3_320 ) ) ;
var remote Book 2 = GivenRemoteAlbum ( new List < Book > { GivenAlbum ( 1 ) } , new QualityModel ( Quality . FLAC ) ) ;
remote Album 1. ParsedBookInfo . Discography = true ;
remote Book 1. ParsedBookInfo . Discography = true ;
var decisions = new List < DownloadDecision > ( ) ;
decisions . Add ( new DownloadDecision ( remote Album 1) ) ;
decisions . Add ( new DownloadDecision ( remote Album 2) ) ;
decisions . Add ( new DownloadDecision ( remote Book 1) ) ;
decisions . Add ( new DownloadDecision ( remote Book 2) ) ;
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 remote Album 1 = GivenRemoteAlbum ( new List < Book > { GivenAlbum ( 1 ) , GivenAlbum ( 2 ) } , new QualityModel ( Quality . MP3_320 ) ) ;
var remote Album 2 = GivenRemoteAlbum ( new List < Book > { GivenAlbum ( 1 ) } , new QualityModel ( Quality . MP3_320 ) ) ;
var remote Book 1 = GivenRemoteAlbum ( new List < Book > { GivenAlbum ( 1 ) , GivenAlbum ( 2 ) } , new QualityModel ( Quality . MP3_320 ) ) ;
var remote Book 2 = GivenRemoteAlbum ( new List < Book > { GivenAlbum ( 1 ) } , new QualityModel ( Quality . MP3_320 ) ) ;
var decisions = new List < DownloadDecision > ( ) ;
decisions . Add ( new DownloadDecision ( remote Album 1) ) ;
decisions . Add ( new DownloadDecision ( remote Album 2) ) ;
decisions . Add ( new DownloadDecision ( remote Book 1) ) ;
decisions . Add ( new DownloadDecision ( remote Book 2) ) ;
var qualifiedReports = Subject . PrioritizeDecisions ( decisions ) ;
qualifiedReports . First ( ) . RemoteBook . Books . Count . Should ( ) . Be ( remote Album 2. Books . Count ) ;
qualifiedReports . First ( ) . RemoteBook . Books . Count . Should ( ) . Be ( remote Book 2. Books . Count ) ;
}
[Test]
public void should_prefer_releases_with_more_seeders ( )
{
var remote Album 1 = GivenRemoteAlbum ( new List < Book > { GivenAlbum ( 1 ) } , new QualityModel ( Quality . MP3_320 ) ) ;
var remote Album 2 = GivenRemoteAlbum ( new List < Book > { GivenAlbum ( 1 ) } , new QualityModel ( Quality . MP3_320 ) ) ;
var remote Book 1 = GivenRemoteAlbum ( new List < Book > { GivenAlbum ( 1 ) } , new QualityModel ( Quality . MP3_320 ) ) ;
var remote Book 2 = 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 ;
remote Album 1. Release = torrentInfo1 ;
remote Album 2. Release = torrentInfo2 ;
remote Book 1. Release = torrentInfo1 ;
remote Book 2. Release = torrentInfo2 ;
var decisions = new List < DownloadDecision > ( ) ;
decisions . Add ( new DownloadDecision ( remote Album 1) ) ;
decisions . Add ( new DownloadDecision ( remote Album 2) ) ;
decisions . Add ( new DownloadDecision ( remote Book 1) ) ;
decisions . Add ( new DownloadDecision ( remote Book 2) ) ;
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 remote Album 1 = GivenRemoteAlbum ( new List < Book > { GivenAlbum ( 1 ) } , new QualityModel ( Quality . MP3_320 ) ) ;
var remote Album 2 = GivenRemoteAlbum ( new List < Book > { GivenAlbum ( 1 ) } , new QualityModel ( Quality . MP3_320 ) ) ;
var remote Book 1 = GivenRemoteAlbum ( new List < Book > { GivenAlbum ( 1 ) } , new QualityModel ( Quality . MP3_320 ) ) ;
var remote Book 2 = 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 ;
remote Album 1. Release = torrentInfo1 ;
remote Album 2. Release = torrentInfo2 ;
remote Book 1. Release = torrentInfo1 ;
remote Book 2. Release = torrentInfo2 ;
var decisions = new List < DownloadDecision > ( ) ;
decisions . Add ( new DownloadDecision ( remote Album 1) ) ;
decisions . Add ( new DownloadDecision ( remote Album 2) ) ;
decisions . Add ( new DownloadDecision ( remote Book 1) ) ;
decisions . Add ( new DownloadDecision ( remote Book 2) ) ;
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 remote Album 1 = GivenRemoteAlbum ( new List < Book > { GivenAlbum ( 1 ) } , new QualityModel ( Quality . MP3_320 ) ) ;
var remote Album 2 = GivenRemoteAlbum ( new List < Book > { GivenAlbum ( 1 ) } , new QualityModel ( Quality . MP3_320 ) ) ;
var remote Book 1 = GivenRemoteAlbum ( new List < Book > { GivenAlbum ( 1 ) } , new QualityModel ( Quality . MP3_320 ) ) ;
var remote Book 2 = 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 ;
remote Album 1. Release = torrentInfo1 ;
remote Album 2. Release = torrentInfo2 ;
remote Book 1. Release = torrentInfo1 ;
remote Book 2. Release = torrentInfo2 ;
var decisions = new List < DownloadDecision > ( ) ;
decisions . Add ( new DownloadDecision ( remote Album 1) ) ;
decisions . Add ( new DownloadDecision ( remote Album 2) ) ;
decisions . Add ( new DownloadDecision ( remote Book 1) ) ;
decisions . Add ( new DownloadDecision ( remote Book 2) ) ;
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 remote Album 1 = GivenRemoteAlbum ( new List < Book > { GivenAlbum ( 1 ) } , new QualityModel ( Quality . MP3_320 ) ) ;
var remote Album 2 = GivenRemoteAlbum ( new List < Book > { GivenAlbum ( 1 ) } , new QualityModel ( Quality . MP3_320 ) ) ;
var remote Book 1 = GivenRemoteAlbum ( new List < Book > { GivenAlbum ( 1 ) } , new QualityModel ( Quality . MP3_320 ) ) ;
var remote Book 2 = 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 ( ) ;
remote Album 1. Release = torrentInfo1 ;
remote Album 2. Release = torrentInfo2 ;
remote Book 1. Release = torrentInfo1 ;
remote Book 2. Release = torrentInfo2 ;
var decisions = new List < DownloadDecision > ( ) ;
decisions . Add ( new DownloadDecision ( remote Album 1) ) ;
decisions . Add ( new DownloadDecision ( remote Album 2) ) ;
decisions . Add ( new DownloadDecision ( remote Book 1) ) ;
decisions . Add ( new DownloadDecision ( remote Book 2) ) ;
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 remote Album 1 = GivenRemoteAlbum ( new List < Book > { GivenAlbum ( 1 ) } , new QualityModel ( Quality . MP3_320 ) ) ;
var remote Album 2 = GivenRemoteAlbum ( new List < Book > { GivenAlbum ( 1 ) } , new QualityModel ( Quality . MP3_320 ) ) ;
var remote Book 1 = GivenRemoteAlbum ( new List < Book > { GivenAlbum ( 1 ) } , new QualityModel ( Quality . MP3_320 ) ) ;
var remote Book 2 = GivenRemoteAlbum ( new List < Book > { GivenAlbum ( 1 ) } , new QualityModel ( Quality . MP3_320 ) ) ;
remote Album 1. Release . PublishDate = DateTime . UtcNow . AddDays ( - 100 ) ;
remote Album 1. Release . Size = 200. Megabytes ( ) ;
remote Book 1. Release . PublishDate = DateTime . UtcNow . AddDays ( - 100 ) ;
remote Book 1. Release . Size = 200. Megabytes ( ) ;
remote Album 2. Release . PublishDate = DateTime . UtcNow . AddDays ( - 150 ) ;
remote Album 2. Release . Size = 250. Megabytes ( ) ;
remote Book 2. Release . PublishDate = DateTime . UtcNow . AddDays ( - 150 ) ;
remote Book 2. Release . Size = 250. Megabytes ( ) ;
var decisions = new List < DownloadDecision > ( ) ;
decisions . Add ( new DownloadDecision ( remote Album 1) ) ;
decisions . Add ( new DownloadDecision ( remote Album 2) ) ;
decisions . Add ( new DownloadDecision ( remote Book 1) ) ;
decisions . Add ( new DownloadDecision ( remote Book 2) ) ;
var qualifiedReports = Subject . PrioritizeDecisions ( decisions ) ;
qualifiedReports . First ( ) . RemoteBook . Release . Should ( ) . Be ( remote Album 1. Release ) ;
qualifiedReports . First ( ) . RemoteBook . Release . Should ( ) . Be ( remote Book 1. Release ) ;
}
[Test]
public void should_prefer_quality_over_the_number_of_peers ( )
{
var remote Album 1 = GivenRemoteAlbum ( new List < Book > { GivenAlbum ( 1 ) } , new QualityModel ( Quality . MP3_320 ) ) ;
var remote Album 2 = GivenRemoteAlbum ( new List < Book > { GivenAlbum ( 1 ) } , new QualityModel ( Quality . AZW3 ) ) ;
var remote Book 1 = GivenRemoteAlbum ( new List < Book > { GivenAlbum ( 1 ) } , new QualityModel ( Quality . MP3_320 ) ) ;
var remote Book 2 = 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 ( ) ;
remote Album 1. Release = torrentInfo1 ;
remote Album 2. Release = torrentInfo2 ;
remote Book 1. Release = torrentInfo1 ;
remote Book 2. Release = torrentInfo2 ;
var decisions = new List < DownloadDecision > ( ) ;
decisions . Add ( new DownloadDecision ( remote Album 1) ) ;
decisions . Add ( new DownloadDecision ( remote Album 2) ) ;
decisions . Add ( new DownloadDecision ( remote Book 1) ) ;
decisions . Add ( new DownloadDecision ( remote Book 2) ) ;
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 remote Album 1 = GivenRemoteAlbum ( new List < Book > { GivenAlbum ( 1 ) } , new QualityModel ( Quality . MP3_320 ) ) ;
var remote Album 2 = GivenRemoteAlbum ( new List < Book > { GivenAlbum ( 1 ) } , new QualityModel ( Quality . MP3_320 ) ) ;
var remote Book 1 = GivenRemoteAlbum ( new List < Book > { GivenAlbum ( 1 ) } , new QualityModel ( Quality . MP3_320 ) ) ;
var remote Book 2 = GivenRemoteAlbum ( new List < Book > { GivenAlbum ( 1 ) } , new QualityModel ( Quality . MP3_320 ) ) ;
var decisions = new List < DownloadDecision > ( ) ;
decisions . Add ( new DownloadDecision ( remote Album 1) ) ;
decisions . Add ( new DownloadDecision ( remote Album 2) ) ;
decisions . Add ( new DownloadDecision ( remote Book 1) ) ;
decisions . Add ( new DownloadDecision ( remote Book 2) ) ;
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 remote Album 1 = GivenRemoteAlbum ( new List < Book > { GivenAlbum ( 1 ) } , new QualityModel ( Quality . FLAC ) ) ;
var remote Album 2 = GivenRemoteAlbum ( new List < Book > { GivenAlbum ( 1 ) } , new QualityModel ( Quality . FLAC ) ) ;
var remote Book 1 = GivenRemoteAlbum ( new List < Book > { GivenAlbum ( 1 ) } , new QualityModel ( Quality . FLAC ) ) ;
var remote Book 2 = GivenRemoteAlbum ( new List < Book > { GivenAlbum ( 1 ) } , new QualityModel ( Quality . FLAC ) ) ;
remote Album 1. PreferredWordScore = 10 ;
remote Album 2. PreferredWordScore = 0 ;
remote Book 1. PreferredWordScore = 10 ;
remote Book 2. PreferredWordScore = 0 ;
var decisions = new List < DownloadDecision > ( ) ;
decisions . Add ( new DownloadDecision ( remote Album 1) ) ;
decisions . Add ( new DownloadDecision ( remote Album 2) ) ;
decisions . Add ( new DownloadDecision ( remote Book 1) ) ;
decisions . Add ( new DownloadDecision ( remote Book 2) ) ;
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 remote Album 1 = GivenRemoteAlbum ( new List < Book > { GivenAlbum ( 1 ) } , new QualityModel ( Quality . FLAC , new Revision ( 1 ) ) ) ;
var remote Album 2 = GivenRemoteAlbum ( new List < Book > { GivenAlbum ( 1 ) } , new QualityModel ( Quality . FLAC , new Revision ( 2 ) ) ) ;
var remote Book 1 = GivenRemoteAlbum ( new List < Book > { GivenAlbum ( 1 ) } , new QualityModel ( Quality . FLAC , new Revision ( 1 ) ) ) ;
var remote Book 2 = GivenRemoteAlbum ( new List < Book > { GivenAlbum ( 1 ) } , new QualityModel ( Quality . FLAC , new Revision ( 2 ) ) ) ;
remote Album 1. PreferredWordScore = 10 ;
remote Album 2. PreferredWordScore = 0 ;
remote Book 1. PreferredWordScore = 10 ;
remote Book 2. PreferredWordScore = 0 ;
var decisions = new List < DownloadDecision > ( ) ;
decisions . Add ( new DownloadDecision ( remote Album 1) ) ;
decisions . Add ( new DownloadDecision ( remote Album 2) ) ;
decisions . Add ( new DownloadDecision ( remote Book 1) ) ;
decisions . Add ( new DownloadDecision ( remote Book 2) ) ;
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 remote Album 1 = GivenRemoteAlbum ( new List < Book > { GivenAlbum ( 1 ) } , new QualityModel ( Quality . FLAC , new Revision ( 1 ) ) ) ;
var remote Album 2 = GivenRemoteAlbum ( new List < Book > { GivenAlbum ( 1 ) } , new QualityModel ( Quality . FLAC , new Revision ( 2 ) ) ) ;
var remote Book 1 = GivenRemoteAlbum ( new List < Book > { GivenAlbum ( 1 ) } , new QualityModel ( Quality . FLAC , new Revision ( 1 ) ) ) ;
var remote Book 2 = GivenRemoteAlbum ( new List < Book > { GivenAlbum ( 1 ) } , new QualityModel ( Quality . FLAC , new Revision ( 2 ) ) ) ;
remote Album 1. PreferredWordScore = 10 ;
remote Album 2. PreferredWordScore = 0 ;
remote Book 1. PreferredWordScore = 10 ;
remote Book 2. PreferredWordScore = 0 ;
var decisions = new List < DownloadDecision > ( ) ;
decisions . Add ( new DownloadDecision ( remote Album 1) ) ;
decisions . Add ( new DownloadDecision ( remote Album 2) ) ;
decisions . Add ( new DownloadDecision ( remote Book 1) ) ;
decisions . Add ( new DownloadDecision ( remote Book 2) ) ;
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 remote Album 1 = GivenRemoteAlbum ( new List < Book > { GivenAlbum ( 1 ) } , new QualityModel ( Quality . FLAC , new Revision ( 1 ) ) ) ;
var remote Album 2 = GivenRemoteAlbum ( new List < Book > { GivenAlbum ( 1 ) } , new QualityModel ( Quality . FLAC , new Revision ( 2 ) ) ) ;
var remote Book 1 = GivenRemoteAlbum ( new List < Book > { GivenAlbum ( 1 ) } , new QualityModel ( Quality . FLAC , new Revision ( 1 ) ) ) ;
var remote Book 2 = GivenRemoteAlbum ( new List < Book > { GivenAlbum ( 1 ) } , new QualityModel ( Quality . FLAC , new Revision ( 2 ) ) ) ;
remote Album 1. PreferredWordScore = 10 ;
remote Album 2. PreferredWordScore = 0 ;
remote Book 1. PreferredWordScore = 10 ;
remote Book 2. PreferredWordScore = 0 ;
var decisions = new List < DownloadDecision > ( ) ;
decisions . Add ( new DownloadDecision ( remote Album 1) ) ;
decisions . Add ( new DownloadDecision ( remote Album 2) ) ;
decisions . Add ( new DownloadDecision ( remote Book 1) ) ;
decisions . Add ( new DownloadDecision ( remote Book 2) ) ;
var qualifiedReports = Subject . PrioritizeDecisions ( decisions ) ;
qualifiedReports . First ( ) . RemoteBook . ParsedBookInfo . Quality . Quality . Should ( ) . Be ( Quality . FLAC ) ;