@ -2,7 +2,6 @@
using System.Collections.Generic ;
using System.Collections.Generic ;
using System.Linq ;
using System.Linq ;
using NzbDrone.Core.Tv ;
using NzbDrone.Core.Tv ;
using NzbDrone.Core.Download ;
using NzbDrone.Core.Qualities ;
using NzbDrone.Core.Qualities ;
using NzbDrone.Core.Parser.Model ;
using NzbDrone.Core.Parser.Model ;
using NzbDrone.Core.DecisionEngine ;
using NzbDrone.Core.DecisionEngine ;
@ -17,7 +16,7 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
[TestFixture]
[TestFixture]
public class PrioritizeDownloadDecisionFixture : CoreTest < DownloadDecisionPriorizationService >
public class PrioritizeDownloadDecisionFixture : CoreTest < DownloadDecisionPriorizationService >
{
{
private Episode G et Episode( int id )
private Episode G iven Episode( int id )
{
{
return Builder < Episode > . CreateNew ( )
return Builder < Episode > . CreateNew ( )
. With ( e = > e . Id = id )
. With ( e = > e . Id = id )
@ -25,7 +24,7 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
. Build ( ) ;
. Build ( ) ;
}
}
private RemoteEpisode G et RemoteEpisode( List < Episode > episodes , QualityModel quality , int A ge = 0 , long size = 0 )
private RemoteEpisode G iven RemoteEpisode( List < Episode > episodes , QualityModel quality , int a ge = 0 , long size = 0 )
{
{
var remoteEpisode = new RemoteEpisode ( ) ;
var remoteEpisode = new RemoteEpisode ( ) ;
remoteEpisode . ParsedEpisodeInfo = new ParsedEpisodeInfo ( ) ;
remoteEpisode . ParsedEpisodeInfo = new ParsedEpisodeInfo ( ) ;
@ -35,7 +34,7 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
remoteEpisode . Episodes . AddRange ( episodes ) ;
remoteEpisode . Episodes . AddRange ( episodes ) ;
remoteEpisode . Release = new ReleaseInfo ( ) ;
remoteEpisode . Release = new ReleaseInfo ( ) ;
remoteEpisode . Release . PublishDate = DateTime . Now . AddDays ( - A ge) ;
remoteEpisode . Release . PublishDate = DateTime . Now . AddDays ( - a ge) ;
remoteEpisode . Release . Size = size ;
remoteEpisode . Release . Size = size ;
remoteEpisode . Series = Builder < Series > . CreateNew ( )
remoteEpisode . Series = Builder < Series > . CreateNew ( )
@ -48,8 +47,8 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
[Test]
[Test]
public void should_put_propers_before_non_propers ( )
public void should_put_propers_before_non_propers ( )
{
{
var remoteEpisode1 = G et RemoteEpisode( new List < Episode > { G et Episode( 1 ) } , new QualityModel ( Quality . HDTV720p , false ) ) ;
var remoteEpisode1 = G iven RemoteEpisode( new List < Episode > { G iven Episode( 1 ) } , new QualityModel ( Quality . HDTV720p , false ) ) ;
var remoteEpisode2 = G et RemoteEpisode( new List < Episode > { G et Episode( 1 ) } , new QualityModel ( Quality . HDTV720p , true ) ) ;
var remoteEpisode2 = G iven RemoteEpisode( new List < Episode > { G iven Episode( 1 ) } , new QualityModel ( Quality . HDTV720p , true ) ) ;
var decisions = new List < DownloadDecision > ( ) ;
var decisions = new List < DownloadDecision > ( ) ;
decisions . Add ( new DownloadDecision ( remoteEpisode1 ) ) ;
decisions . Add ( new DownloadDecision ( remoteEpisode1 ) ) ;
@ -62,8 +61,8 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
[Test]
[Test]
public void should_put_higher_quality_before_lower ( )
public void should_put_higher_quality_before_lower ( )
{
{
var remoteEpisode1 = G et RemoteEpisode( new List < Episode > { G et Episode( 1 ) } , new QualityModel ( Quality . SDTV ) ) ;
var remoteEpisode1 = G iven RemoteEpisode( new List < Episode > { G iven Episode( 1 ) } , new QualityModel ( Quality . SDTV ) ) ;
var remoteEpisode2 = G et RemoteEpisode( new List < Episode > { G et Episode( 1 ) } , new QualityModel ( Quality . HDTV720p ) ) ;
var remoteEpisode2 = G iven RemoteEpisode( new List < Episode > { G iven Episode( 1 ) } , new QualityModel ( Quality . HDTV720p ) ) ;
var decisions = new List < DownloadDecision > ( ) ;
var decisions = new List < DownloadDecision > ( ) ;
decisions . Add ( new DownloadDecision ( remoteEpisode1 ) ) ;
decisions . Add ( new DownloadDecision ( remoteEpisode1 ) ) ;
@ -76,8 +75,8 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
[Test]
[Test]
public void should_order_by_lowest_number_of_episodes ( )
public void should_order_by_lowest_number_of_episodes ( )
{
{
var remoteEpisode1 = G et RemoteEpisode( new List < Episode > { G et Episode( 2 ) } , new QualityModel ( Quality . HDTV720p ) ) ;
var remoteEpisode1 = G iven RemoteEpisode( new List < Episode > { G iven Episode( 2 ) } , new QualityModel ( Quality . HDTV720p ) ) ;
var remoteEpisode2 = G et RemoteEpisode( new List < Episode > { G et Episode( 1 ) } , new QualityModel ( Quality . HDTV720p ) ) ;
var remoteEpisode2 = G iven RemoteEpisode( new List < Episode > { G iven Episode( 1 ) } , new QualityModel ( Quality . HDTV720p ) ) ;
var decisions = new List < DownloadDecision > ( ) ;
var decisions = new List < DownloadDecision > ( ) ;
decisions . Add ( new DownloadDecision ( remoteEpisode1 ) ) ;
decisions . Add ( new DownloadDecision ( remoteEpisode1 ) ) ;
@ -90,8 +89,8 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
[Test]
[Test]
public void should_order_by_lowest_number_of_episodes_with_multiple_episodes ( )
public void should_order_by_lowest_number_of_episodes_with_multiple_episodes ( )
{
{
var remoteEpisode1 = G et RemoteEpisode( new List < Episode > { G etEpisode( 2 ) , Get Episode( 3 ) } , new QualityModel ( Quality . HDTV720p ) ) ;
var remoteEpisode1 = G iven RemoteEpisode( new List < Episode > { G ivenEpisode( 2 ) , Given Episode( 3 ) } , new QualityModel ( Quality . HDTV720p ) ) ;
var remoteEpisode2 = G et RemoteEpisode( new List < Episode > { G etEpisode( 1 ) , Get Episode( 2 ) } , new QualityModel ( Quality . HDTV720p ) ) ;
var remoteEpisode2 = G iven RemoteEpisode( new List < Episode > { G ivenEpisode( 1 ) , Given Episode( 2 ) } , new QualityModel ( Quality . HDTV720p ) ) ;
var decisions = new List < DownloadDecision > ( ) ;
var decisions = new List < DownloadDecision > ( ) ;
decisions . Add ( new DownloadDecision ( remoteEpisode1 ) ) ;
decisions . Add ( new DownloadDecision ( remoteEpisode1 ) ) ;
@ -101,30 +100,29 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
qualifiedReports . First ( ) . RemoteEpisode . Episodes . First ( ) . EpisodeNumber . Should ( ) . Be ( 1 ) ;
qualifiedReports . First ( ) . RemoteEpisode . Episodes . First ( ) . EpisodeNumber . Should ( ) . Be ( 1 ) ;
}
}
[Test]
[Test]
public void should_order_by_smallest_rounded_to_200mb_then_age ( )
public void should_order_by_smallest_rounded_to_200mb_then_age ( )
{
{
var remoteEpisodeSd = G et RemoteEpisode( new List < Episode > { G et Episode( 1 ) } , new QualityModel ( Quality . SDTV ) , size : 100. Megabytes ( ) , A ge: 1 ) ;
var remoteEpisodeSd = G iven RemoteEpisode( new List < Episode > { G iven Episode( 1 ) } , new QualityModel ( Quality . SDTV ) , size : 100. Megabytes ( ) , a ge: 1 ) ;
var remoteEpisodeHdSmallOld = G et RemoteEpisode( new List < Episode > { G et Episode( 1 ) } , new QualityModel ( Quality . HDTV720p ) , size : 1200. Megabytes ( ) , A ge: 1000 ) ;
var remoteEpisodeHdSmallOld = G iven RemoteEpisode( new List < Episode > { G iven Episode( 1 ) } , new QualityModel ( Quality . HDTV720p ) , size : 1200. Megabytes ( ) , a ge: 1000 ) ;
var remoteEpisode HdSmallYounge = Get RemoteEpisode( new List < Episode > { G et Episode( 1 ) } , new QualityModel ( Quality . HDTV720p ) , size : 1250. Megabytes ( ) , A ge: 10 ) ;
var remoteEpisode SmallYoung = Given RemoteEpisode( new List < Episode > { G iven Episode( 1 ) } , new QualityModel ( Quality . HDTV720p ) , size : 1250. Megabytes ( ) , a ge: 10 ) ;
var remoteEpisodeHdLargeYoung e = Get RemoteEpisode( new List < Episode > { G et Episode( 1 ) } , new QualityModel ( Quality . HDTV720p ) , size : 3000. Megabytes ( ) , A ge: 1 ) ;
var remoteEpisodeHdLargeYoung = Given RemoteEpisode( new List < Episode > { G iven Episode( 1 ) } , new QualityModel ( Quality . HDTV720p ) , size : 3000. Megabytes ( ) , a ge: 1 ) ;
var decisions = new List < DownloadDecision > ( ) ;
var decisions = new List < DownloadDecision > ( ) ;
decisions . Add ( new DownloadDecision ( remoteEpisodeSd ) ) ;
decisions . Add ( new DownloadDecision ( remoteEpisodeSd ) ) ;
decisions . Add ( new DownloadDecision ( remoteEpisodeHdSmallOld ) ) ;
decisions . Add ( new DownloadDecision ( remoteEpisodeHdSmallOld ) ) ;
decisions . Add ( new DownloadDecision ( remoteEpisode Hd SmallYounge ) ) ;
decisions . Add ( new DownloadDecision ( remoteEpisode SmallYoung) ) ;
decisions . Add ( new DownloadDecision ( remoteEpisodeHdLargeYoung e ) ) ;
decisions . Add ( new DownloadDecision ( remoteEpisodeHdLargeYoung ) ) ;
var qualifiedReports = Subject . PrioritizeDecisions ( decisions ) ;
var qualifiedReports = Subject . PrioritizeDecisions ( decisions ) ;
qualifiedReports . First ( ) . RemoteEpisode . Should ( ) . Be ( remoteEpisode Hd SmallYounge ) ;
qualifiedReports . First ( ) . RemoteEpisode . Should ( ) . Be ( remoteEpisode SmallYoung) ;
}
}
[Test]
[Test]
public void should_order_by_youngest ( )
public void should_order_by_youngest ( )
{
{
var remoteEpisode1 = G et RemoteEpisode( new List < Episode > { G et Episode( 1 ) } , new QualityModel ( Quality . HDTV720p ) , A ge: 10 ) ;
var remoteEpisode1 = G iven RemoteEpisode( new List < Episode > { G iven Episode( 1 ) } , new QualityModel ( Quality . HDTV720p ) , a ge: 10 ) ;
var remoteEpisode2 = G et RemoteEpisode( new List < Episode > { G et Episode( 1 ) } , new QualityModel ( Quality . HDTV720p ) , A ge: 5 ) ;
var remoteEpisode2 = G iven RemoteEpisode( new List < Episode > { G iven Episode( 1 ) } , new QualityModel ( Quality . HDTV720p ) , a ge: 5 ) ;
var decisions = new List < DownloadDecision > ( ) ;
var decisions = new List < DownloadDecision > ( ) ;
@ -134,5 +132,20 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
var qualifiedReports = Subject . PrioritizeDecisions ( decisions ) ;
var qualifiedReports = Subject . PrioritizeDecisions ( decisions ) ;
qualifiedReports . First ( ) . RemoteEpisode . Should ( ) . Be ( remoteEpisode2 ) ;
qualifiedReports . First ( ) . RemoteEpisode . Should ( ) . Be ( remoteEpisode2 ) ;
}
}
[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 ( ) ) ;
remoteEpisode1 . Episodes = new List < Episode > ( ) ;
var decisions = new List < DownloadDecision > ( ) ;
decisions . Add ( new DownloadDecision ( remoteEpisode1 ) ) ;
decisions . Add ( new DownloadDecision ( remoteEpisode2 ) ) ;
Subject . PrioritizeDecisions ( decisions ) ;
}
}
}
}
}