@ -5,7 +5,7 @@ using Moq;
using NzbDrone.Core.Indexers ;
using NzbDrone.Core.Profiles.Delay ;
using NzbDrone.Core.Tv ;
using NzbDrone.Core.Profiles ;
using NzbDrone.Core.Profiles .Qualities ;
using NzbDrone.Core.Qualities ;
using NzbDrone.Core.Parser.Model ;
using NzbDrone.Core.DecisionEngine ;
@ -14,6 +14,9 @@ using FluentAssertions;
using FizzWare.NBuilder ;
using NzbDrone.Common.Extensions ;
using NzbDrone.Core.Test.Framework ;
using NzbDrone.Core.Languages ;
using NzbDrone.Core.Profiles.Languages ;
using NzbDrone.Core.Test.Languages ;
namespace NzbDrone.Core.Test.DecisionEngineTests
{
@ -34,11 +37,12 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
. Build ( ) ;
}
private RemoteEpisode GivenRemoteEpisode ( List < Episode > episodes , QualityModel quality , int age = 0 , long size = 0 , DownloadProtocol downloadProtocol = DownloadProtocol . Usenet )
private RemoteEpisode GivenRemoteEpisode ( List < Episode > episodes , QualityModel quality , Language language , int age = 0 , long size = 0 , DownloadProtocol downloadProtocol = DownloadProtocol . Usenet )
{
var remoteEpisode = new RemoteEpisode ( ) ;
remoteEpisode . ParsedEpisodeInfo = new ParsedEpisodeInfo ( ) ;
remoteEpisode . ParsedEpisodeInfo . Quality = quality ;
remoteEpisode . ParsedEpisodeInfo . Language = language ;
remoteEpisode . Episodes = new List < Episode > ( ) ;
remoteEpisode . Episodes . AddRange ( episodes ) ;
@ -49,7 +53,15 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
remoteEpisode . Release . DownloadProtocol = downloadProtocol ;
remoteEpisode . Series = Builder < Series > . CreateNew ( )
. With ( e = > e . Profile = new Profile { Items = Qualities . QualityFixture . GetDefaultQualities ( ) } )
. With ( e = > e . Profile = new Profile
{
Items = Qualities . QualityFixture . GetDefaultQualities ( )
} )
. With ( l = > l . LanguageProfile = new LanguageProfile
{
Languages = LanguageFixture . GetDefaultLanguages ( ) ,
Cutoff = Language . Spanish
} )
. Build ( ) ;
return remoteEpisode ;
@ -68,8 +80,8 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
[Test]
public void should_put_propers_before_non_propers ( )
{
var remoteEpisode1 = GivenRemoteEpisode ( new List < Episode > { GivenEpisode ( 1 ) } , new QualityModel ( Quality . HDTV720p , new Revision ( version : 1 ) ) );
var remoteEpisode2 = GivenRemoteEpisode ( new List < Episode > { GivenEpisode ( 1 ) } , new QualityModel ( Quality . HDTV720p , new Revision ( version : 2 ) ) );
var remoteEpisode1 = GivenRemoteEpisode ( new List < Episode > { GivenEpisode ( 1 ) } , new QualityModel ( Quality . HDTV720p , new Revision ( version : 1 ) ) , Language . English );
var remoteEpisode2 = GivenRemoteEpisode ( new List < Episode > { GivenEpisode ( 1 ) } , new QualityModel ( Quality . HDTV720p , new Revision ( version : 2 ) ) , Language . English );
var decisions = new List < DownloadDecision > ( ) ;
decisions . Add ( new DownloadDecision ( remoteEpisode1 ) ) ;
@ -82,8 +94,8 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
[Test]
public void should_put_higher_quality_before_lower ( )
{
var remoteEpisode1 = GivenRemoteEpisode ( new List < Episode > { GivenEpisode ( 1 ) } , new QualityModel ( Quality . SDTV ) );
var remoteEpisode2 = GivenRemoteEpisode ( new List < Episode > { GivenEpisode ( 1 ) } , new QualityModel ( Quality . HDTV720p ) );
var remoteEpisode1 = GivenRemoteEpisode ( new List < Episode > { GivenEpisode ( 1 ) } , new QualityModel ( Quality . SDTV ) , Language . English );
var remoteEpisode2 = GivenRemoteEpisode ( new List < Episode > { GivenEpisode ( 1 ) } , new QualityModel ( Quality . HDTV720p ) , Language . English );
var decisions = new List < DownloadDecision > ( ) ;
decisions . Add ( new DownloadDecision ( remoteEpisode1 ) ) ;
@ -96,8 +108,8 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
[Test]
public void should_order_by_lowest_number_of_episodes ( )
{
var remoteEpisode1 = GivenRemoteEpisode ( new List < Episode > { GivenEpisode ( 2 ) } , new QualityModel ( Quality . HDTV720p ) );
var remoteEpisode2 = GivenRemoteEpisode ( new List < Episode > { GivenEpisode ( 1 ) } , new QualityModel ( Quality . HDTV720p ) );
var remoteEpisode1 = GivenRemoteEpisode ( new List < Episode > { GivenEpisode ( 2 ) } , new QualityModel ( Quality . HDTV720p ) , Language . English );
var remoteEpisode2 = GivenRemoteEpisode ( new List < Episode > { GivenEpisode ( 1 ) } , new QualityModel ( Quality . HDTV720p ) , Language . English );
var decisions = new List < DownloadDecision > ( ) ;
decisions . Add ( new DownloadDecision ( remoteEpisode1 ) ) ;
@ -110,8 +122,8 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
[Test]
public void should_order_by_lowest_number_of_episodes_with_multiple_episodes ( )
{
var remoteEpisode1 = GivenRemoteEpisode ( new List < Episode > { GivenEpisode ( 2 ) , GivenEpisode ( 3 ) } , new QualityModel ( Quality . HDTV720p ) );
var remoteEpisode2 = GivenRemoteEpisode ( new List < Episode > { GivenEpisode ( 1 ) , GivenEpisode ( 2 ) } , new QualityModel ( Quality . HDTV720p ) );
var remoteEpisode1 = GivenRemoteEpisode ( new List < Episode > { GivenEpisode ( 2 ) , GivenEpisode ( 3 ) } , new QualityModel ( Quality . HDTV720p ) , Language . English );
var remoteEpisode2 = GivenRemoteEpisode ( new List < Episode > { GivenEpisode ( 1 ) , GivenEpisode ( 2 ) } , new QualityModel ( Quality . HDTV720p ) , Language . English );
var decisions = new List < DownloadDecision > ( ) ;
decisions . Add ( new DownloadDecision ( remoteEpisode1 ) ) ;
@ -124,10 +136,10 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
[Test]
public void should_order_by_age_then_largest_rounded_to_200mb ( )
{
var remoteEpisodeSd = GivenRemoteEpisode ( new List < Episode > { GivenEpisode ( 1 ) } , new QualityModel ( Quality . SDTV ) , size: 100. Megabytes ( ) , age : 1 ) ;
var remoteEpisodeHdSmallOld = GivenRemoteEpisode ( new List < Episode > { GivenEpisode ( 1 ) } , new QualityModel ( Quality . HDTV720p ) , size: 1200. Megabytes ( ) , age : 1000 ) ;
var remoteEpisodeSmallYoung = GivenRemoteEpisode ( new List < Episode > { GivenEpisode ( 1 ) } , new QualityModel ( Quality . HDTV720p ) , size: 1250. Megabytes ( ) , age : 10 ) ;
var remoteEpisodeHdLargeYoung = GivenRemoteEpisode ( new List < Episode > { GivenEpisode ( 1 ) } , new QualityModel ( Quality . HDTV720p ) , size: 3000. Megabytes ( ) , age : 1 ) ;
var remoteEpisodeSd = GivenRemoteEpisode ( new List < Episode > { GivenEpisode ( 1 ) } , new QualityModel ( Quality . SDTV ) , Language. English , size: 100. Megabytes ( ) , age : 1 ) ;
var remoteEpisodeHdSmallOld = GivenRemoteEpisode ( new List < Episode > { GivenEpisode ( 1 ) } , new QualityModel ( Quality . HDTV720p ) , Language. English , size: 1200. Megabytes ( ) , age : 1000 ) ;
var remoteEpisodeSmallYoung = GivenRemoteEpisode ( new List < Episode > { GivenEpisode ( 1 ) } , new QualityModel ( Quality . HDTV720p ) , Language. English , size: 1250. Megabytes ( ) , age : 10 ) ;
var remoteEpisodeHdLargeYoung = GivenRemoteEpisode ( new List < Episode > { GivenEpisode ( 1 ) } , new QualityModel ( Quality . HDTV720p ) , Language. English , size: 3000. Megabytes ( ) , age : 1 ) ;
var decisions = new List < DownloadDecision > ( ) ;
decisions . Add ( new DownloadDecision ( remoteEpisodeSd ) ) ;
@ -142,8 +154,8 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
[Test]
public void should_order_by_youngest ( )
{
var remoteEpisode1 = GivenRemoteEpisode ( new List < Episode > { GivenEpisode ( 1 ) } , new QualityModel ( Quality . HDTV720p ) , age: 10 ) ;
var remoteEpisode2 = GivenRemoteEpisode ( new List < Episode > { GivenEpisode ( 1 ) } , new QualityModel ( Quality . HDTV720p ) , age: 5 ) ;
var remoteEpisode1 = GivenRemoteEpisode ( new List < Episode > { GivenEpisode ( 1 ) } , new QualityModel ( Quality . HDTV720p ) , Language. English , age: 10 ) ;
var remoteEpisode2 = GivenRemoteEpisode ( new List < Episode > { GivenEpisode ( 1 ) } , new QualityModel ( Quality . HDTV720p ) , Language. English , age: 5 ) ;
var decisions = new List < DownloadDecision > ( ) ;
@ -157,8 +169,8 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
[Test]
public void should_not_throw_if_no_episodes_are_found ( )
{
var remoteEpisode1 = GivenRemoteEpisode ( new List < Episode > { GivenEpisode ( 1 ) } , new QualityModel ( Quality . HDTV720p ) , size: 500. Megabytes ( ) ) ;
var remoteEpisode2 = GivenRemoteEpisode ( new List < Episode > { GivenEpisode ( 1 ) } , new QualityModel ( Quality . HDTV720p ) , size: 500. Megabytes ( ) ) ;
var remoteEpisode1 = GivenRemoteEpisode ( new List < Episode > { GivenEpisode ( 1 ) } , new QualityModel ( Quality . HDTV720p ) , Language. English , size: 500. Megabytes ( ) ) ;
var remoteEpisode2 = GivenRemoteEpisode ( new List < Episode > { GivenEpisode ( 1 ) } , new QualityModel ( Quality . HDTV720p ) , Language. English , size: 500. Megabytes ( ) ) ;
remoteEpisode1 . Episodes = new List < Episode > ( ) ;
@ -174,8 +186,8 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
{
GivenPreferredDownloadProtocol ( DownloadProtocol . Usenet ) ;
var remoteEpisode1 = GivenRemoteEpisode ( new List < Episode > { GivenEpisode ( 1 ) } , new QualityModel ( Quality . HDTV720p ) , downloadProtocol: DownloadProtocol . Torrent ) ;
var remoteEpisode2 = GivenRemoteEpisode ( new List < Episode > { GivenEpisode ( 1 ) } , new QualityModel ( Quality . HDTV720p ) , downloadProtocol: DownloadProtocol . Usenet ) ;
var remoteEpisode1 = GivenRemoteEpisode ( new List < Episode > { GivenEpisode ( 1 ) } , new QualityModel ( Quality . HDTV720p ) , Language. English , downloadProtocol: DownloadProtocol . Torrent ) ;
var remoteEpisode2 = GivenRemoteEpisode ( new List < Episode > { GivenEpisode ( 1 ) } , new QualityModel ( Quality . HDTV720p ) , Language. English , downloadProtocol: DownloadProtocol . Usenet ) ;
var decisions = new List < DownloadDecision > ( ) ;
decisions . Add ( new DownloadDecision ( remoteEpisode1 ) ) ;
@ -190,8 +202,8 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
{
GivenPreferredDownloadProtocol ( DownloadProtocol . Torrent ) ;
var remoteEpisode1 = GivenRemoteEpisode ( new List < Episode > { GivenEpisode ( 1 ) } , new QualityModel ( Quality . HDTV720p ) , downloadProtocol: DownloadProtocol . Torrent ) ;
var remoteEpisode2 = GivenRemoteEpisode ( new List < Episode > { GivenEpisode ( 1 ) } , new QualityModel ( Quality . HDTV720p ) , downloadProtocol: DownloadProtocol . Usenet ) ;
var remoteEpisode1 = GivenRemoteEpisode ( new List < Episode > { GivenEpisode ( 1 ) } , new QualityModel ( Quality . HDTV720p ) , Language. English , downloadProtocol: DownloadProtocol . Torrent ) ;
var remoteEpisode2 = GivenRemoteEpisode ( new List < Episode > { GivenEpisode ( 1 ) } , new QualityModel ( Quality . HDTV720p ) , Language. English , downloadProtocol: DownloadProtocol . Usenet ) ;
var decisions = new List < DownloadDecision > ( ) ;
decisions . Add ( new DownloadDecision ( remoteEpisode1 ) ) ;
@ -204,8 +216,8 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
[Test]
public void should_prefer_season_pack_above_single_episode ( )
{
var remoteEpisode1 = GivenRemoteEpisode ( new List < Episode > { GivenEpisode ( 1 ) , GivenEpisode ( 2 ) } , new QualityModel ( Quality . HDTV720p ) );
var remoteEpisode2 = GivenRemoteEpisode ( new List < Episode > { GivenEpisode ( 1 ) } , new QualityModel ( Quality . HDTV720p ) );
var remoteEpisode1 = GivenRemoteEpisode ( new List < Episode > { GivenEpisode ( 1 ) , GivenEpisode ( 2 ) } , new QualityModel ( Quality . HDTV720p ) , Language . English );
var remoteEpisode2 = GivenRemoteEpisode ( new List < Episode > { GivenEpisode ( 1 ) } , new QualityModel ( Quality . HDTV720p ) , Language . English );
remoteEpisode1 . ParsedEpisodeInfo . FullSeason = true ;
@ -220,8 +232,8 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
[Test]
public void should_prefer_multiepisode_over_single_episode_for_anime ( )
{
var remoteEpisode1 = GivenRemoteEpisode ( new List < Episode > { GivenEpisode ( 1 ) , GivenEpisode ( 2 ) } , new QualityModel ( Quality . HDTV720p ) );
var remoteEpisode2 = GivenRemoteEpisode ( new List < Episode > { GivenEpisode ( 1 ) } , new QualityModel ( Quality . HDTV720p ) );
var remoteEpisode1 = GivenRemoteEpisode ( new List < Episode > { GivenEpisode ( 1 ) , GivenEpisode ( 2 ) } , new QualityModel ( Quality . HDTV720p ) , Language . English );
var remoteEpisode2 = GivenRemoteEpisode ( new List < Episode > { GivenEpisode ( 1 ) } , new QualityModel ( Quality . HDTV720p ) , Language . English );
remoteEpisode1 . Series . SeriesType = SeriesTypes . Anime ;
remoteEpisode2 . Series . SeriesType = SeriesTypes . Anime ;
@ -237,8 +249,8 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
[Test]
public void should_prefer_single_episode_over_multi_episode_for_non_anime ( )
{
var remoteEpisode1 = GivenRemoteEpisode ( new List < Episode > { GivenEpisode ( 1 ) , GivenEpisode ( 2 ) } , new QualityModel ( Quality . HDTV720p ) );
var remoteEpisode2 = GivenRemoteEpisode ( new List < Episode > { GivenEpisode ( 1 ) } , new QualityModel ( Quality . HDTV720p ) );
var remoteEpisode1 = GivenRemoteEpisode ( new List < Episode > { GivenEpisode ( 1 ) , GivenEpisode ( 2 ) } , new QualityModel ( Quality . HDTV720p ) , Language . English );
var remoteEpisode2 = GivenRemoteEpisode ( new List < Episode > { GivenEpisode ( 1 ) } , new QualityModel ( Quality . HDTV720p ) , Language . English );
var decisions = new List < DownloadDecision > ( ) ;
decisions . Add ( new DownloadDecision ( remoteEpisode1 ) ) ;
@ -251,8 +263,8 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
[Test]
public void should_prefer_releases_with_more_seeders ( )
{
var remoteEpisode1 = GivenRemoteEpisode ( new List < Episode > { GivenEpisode ( 1 ) } , new QualityModel ( Quality . HDTV720p ) );
var remoteEpisode2 = GivenRemoteEpisode ( new List < Episode > { GivenEpisode ( 1 ) } , new QualityModel ( Quality . HDTV720p ) );
var remoteEpisode1 = GivenRemoteEpisode ( new List < Episode > { GivenEpisode ( 1 ) } , new QualityModel ( Quality . HDTV720p ) , Language . English );
var remoteEpisode2 = GivenRemoteEpisode ( new List < Episode > { GivenEpisode ( 1 ) } , new QualityModel ( Quality . HDTV720p ) , Language . English );
var torrentInfo1 = new TorrentInfo ( ) ;
torrentInfo1 . PublishDate = DateTime . Now ;
@ -277,8 +289,8 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
[Test]
public void should_prefer_releases_with_more_peers_given_equal_number_of_seeds ( )
{
var remoteEpisode1 = GivenRemoteEpisode ( new List < Episode > { GivenEpisode ( 1 ) } , new QualityModel ( Quality . HDTV720p ) );
var remoteEpisode2 = GivenRemoteEpisode ( new List < Episode > { GivenEpisode ( 1 ) } , new QualityModel ( Quality . HDTV720p ) );
var remoteEpisode1 = GivenRemoteEpisode ( new List < Episode > { GivenEpisode ( 1 ) } , new QualityModel ( Quality . HDTV720p ) , Language . English );
var remoteEpisode2 = GivenRemoteEpisode ( new List < Episode > { GivenEpisode ( 1 ) } , new QualityModel ( Quality . HDTV720p ) , Language . English );
var torrentInfo1 = new TorrentInfo ( ) ;
torrentInfo1 . PublishDate = DateTime . Now ;
@ -305,8 +317,8 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
[Test]
public void should_prefer_releases_with_more_peers_no_seeds ( )
{
var remoteEpisode1 = GivenRemoteEpisode ( new List < Episode > { GivenEpisode ( 1 ) } , new QualityModel ( Quality . HDTV720p ) );
var remoteEpisode2 = GivenRemoteEpisode ( new List < Episode > { GivenEpisode ( 1 ) } , new QualityModel ( Quality . HDTV720p ) );
var remoteEpisode1 = GivenRemoteEpisode ( new List < Episode > { GivenEpisode ( 1 ) } , new QualityModel ( Quality . HDTV720p ) , Language . English );
var remoteEpisode2 = GivenRemoteEpisode ( new List < Episode > { GivenEpisode ( 1 ) } , new QualityModel ( Quality . HDTV720p ) , Language . English );
var torrentInfo1 = new TorrentInfo ( ) ;
torrentInfo1 . PublishDate = DateTime . Now ;
@ -334,8 +346,8 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
[Test]
public void should_prefer_first_release_if_peers_and_size_are_too_similar ( )
{
var remoteEpisode1 = GivenRemoteEpisode ( new List < Episode > { GivenEpisode ( 1 ) } , new QualityModel ( Quality . HDTV720p ) );
var remoteEpisode2 = GivenRemoteEpisode ( new List < Episode > { GivenEpisode ( 1 ) } , new QualityModel ( Quality . HDTV720p ) );
var remoteEpisode1 = GivenRemoteEpisode ( new List < Episode > { GivenEpisode ( 1 ) } , new QualityModel ( Quality . HDTV720p ) , Language . English );
var remoteEpisode2 = GivenRemoteEpisode ( new List < Episode > { GivenEpisode ( 1 ) } , new QualityModel ( Quality . HDTV720p ) , Language . English );
var torrentInfo1 = new TorrentInfo ( ) ;
torrentInfo1 . PublishDate = DateTime . Now ;
@ -363,8 +375,8 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
[Test]
public void should_prefer_first_release_if_age_and_size_are_too_similar ( )
{
var remoteEpisode1 = GivenRemoteEpisode ( new List < Episode > { GivenEpisode ( 1 ) } , new QualityModel ( Quality . HDTV720p ) );
var remoteEpisode2 = GivenRemoteEpisode ( new List < Episode > { GivenEpisode ( 1 ) } , new QualityModel ( Quality . HDTV720p ) );
var remoteEpisode1 = GivenRemoteEpisode ( new List < Episode > { GivenEpisode ( 1 ) } , new QualityModel ( Quality . HDTV720p ) , Language . English );
var remoteEpisode2 = GivenRemoteEpisode ( new List < Episode > { GivenEpisode ( 1 ) } , new QualityModel ( Quality . HDTV720p ) , Language . English );
remoteEpisode1 . Release . PublishDate = DateTime . UtcNow . AddDays ( - 100 ) ;
remoteEpisode1 . Release . Size = 200. Megabytes ( ) ;
@ -383,8 +395,8 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
[Test]
public void should_prefer_quality_over_the_number_of_peers ( )
{
var remoteEpisode1 = GivenRemoteEpisode ( new List < Episode > { GivenEpisode ( 1 ) } , new QualityModel ( Quality . Bluray1080p ) );
var remoteEpisode2 = GivenRemoteEpisode ( new List < Episode > { GivenEpisode ( 1 ) } , new QualityModel ( Quality . SDTV ) );
var remoteEpisode1 = GivenRemoteEpisode ( new List < Episode > { GivenEpisode ( 1 ) } , new QualityModel ( Quality . Bluray1080p ) , Language . English );
var remoteEpisode2 = GivenRemoteEpisode ( new List < Episode > { GivenEpisode ( 1 ) } , new QualityModel ( Quality . SDTV ) , Language . English );
var torrentInfo1 = new TorrentInfo ( ) ;
torrentInfo1 . PublishDate = DateTime . Now ;
@ -408,5 +420,37 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
var qualifiedReports = Subject . PrioritizeDecisions ( decisions ) ;
( ( TorrentInfo ) qualifiedReports . First ( ) . RemoteEpisode . Release ) . Should ( ) . Be ( torrentInfo1 ) ;
}
[Test]
public void should_order_by_language ( )
{
var remoteEpisode1 = GivenRemoteEpisode ( new List < Episode > { GivenEpisode ( 1 ) } , new QualityModel ( Quality . HDTV720p ) , Language . English ) ;
var remoteEpisode2 = GivenRemoteEpisode ( new List < Episode > { GivenEpisode ( 1 ) } , new QualityModel ( Quality . HDTV720p ) , Language . French ) ;
var remoteEpisode3 = GivenRemoteEpisode ( new List < Episode > { GivenEpisode ( 1 ) } , new QualityModel ( Quality . HDTV720p ) , Language . German ) ;
var decisions = new List < DownloadDecision > ( ) ;
decisions . Add ( new DownloadDecision ( remoteEpisode1 ) ) ;
decisions . Add ( new DownloadDecision ( remoteEpisode2 ) ) ;
decisions . Add ( new DownloadDecision ( remoteEpisode3 ) ) ;
var qualifiedReports = Subject . PrioritizeDecisions ( decisions ) ;
qualifiedReports . First ( ) . RemoteEpisode . ParsedEpisodeInfo . Language . Should ( ) . Be ( Language . French ) ;
qualifiedReports . Last ( ) . RemoteEpisode . ParsedEpisodeInfo . Language . Should ( ) . Be ( Language . German ) ;
}
[Test]
public void should_put_higher_quality_before_lower_allways ( )
{
var remoteEpisode1 = GivenRemoteEpisode ( new List < Episode > { GivenEpisode ( 1 ) } , new QualityModel ( Quality . SDTV ) , Language . French ) ;
var remoteEpisode2 = GivenRemoteEpisode ( new List < Episode > { GivenEpisode ( 1 ) } , new QualityModel ( Quality . HDTV720p ) , Language . German ) ;
var decisions = new List < DownloadDecision > ( ) ;
decisions . Add ( new DownloadDecision ( remoteEpisode1 ) ) ;
decisions . Add ( new DownloadDecision ( remoteEpisode2 ) ) ;
var qualifiedReports = Subject . PrioritizeDecisions ( decisions ) ;
qualifiedReports . First ( ) . RemoteEpisode . ParsedEpisodeInfo . Quality . Quality . Should ( ) . Be ( Quality . HDTV720p ) ;
}
}
}