@ -1,6 +1,7 @@
// ReSharper disable RedundantUsingDirective
using System ;
using System.Collections.Generic ;
using System.IO ;
using System.Linq ;
@ -24,7 +25,8 @@ namespace NzbDrone.Core.Test.ProviderTests
// ReSharper disable InconsistentNaming
public class SabProviderTest : CoreTest
{
private void WithSabConfigValues ( )
[SetUp]
private void Setup ( )
{
//Setup
string sabHost = "192.168.5.55" ;
@ -32,56 +34,36 @@ namespace NzbDrone.Core.Test.ProviderTests
string apikey = "5c770e3197e4fe763423ee7c392c25d1" ;
string username = "admin" ;
string password = "pass" ;
string cat = "tv" ;
var fakeConfig = Mocker . GetMock < ConfigProvider > ( ) ;
fakeConfig . SetupGet ( c = > c . SabHost )
. Returns ( sabHost ) ;
fakeConfig . SetupGet ( c = > c . SabPort )
. Returns ( sabPort ) ;
fakeConfig . SetupGet ( c = > c . SabApiKey )
. Returns ( apikey ) ;
fakeConfig . SetupGet ( c = > c . SabUsername )
. Returns ( username ) ;
fakeConfig . SetupGet ( c = > c . SabPassword )
. Returns ( password ) ;
fakeConfig . SetupGet ( c = > c . SabHost ) . Returns ( sabHost ) ;
fakeConfig . SetupGet ( c = > c . SabPort ) . Returns ( sabPort ) ;
fakeConfig . SetupGet ( c = > c . SabApiKey ) . Returns ( apikey ) ;
fakeConfig . SetupGet ( c = > c . SabUsername ) . Returns ( username ) ;
fakeConfig . SetupGet ( c = > c . SabPassword ) . Returns ( password ) ;
fakeConfig . SetupGet ( c = > c . SabTvCategory ) . Returns ( cat ) ;
}
[Test]
public void AddByUrlSuccess ( )
{
//Setup
const string sabHost = "192.168.5.55" ;
const int sabPort = 2222 ;
const string apikey = "5c770e3197e4fe763423ee7c392c25d1" ;
const string username = "admin" ;
const string password = "pass" ;
const SabPriorityType priority = SabPriorityType . Normal ;
const string category = "tv" ;
private void WithFullQueue ( )
{
Mocker . GetMock < HttpProvider > ( )
. Setup ( s = > s . DownloadString ( "http://192.168.5.55:2222/api?mode=queue&output=json&start=0&limit=0&apikey=5c770e3197e4fe763423ee7c392c25d1&ma_username=admin&ma_password=pass" ) )
. Returns ( File . ReadAllText ( @".\Files\Queue.txt" ) ) ;
}
var fakeConfig = Mocker . GetMock < ConfigProvider > ( ) ;
fakeConfig . SetupGet ( c = > c . SabHost )
. Returns ( sabHost ) ;
fakeConfig . SetupGet ( c = > c . SabPort )
. Returns ( sabPort ) ;
fakeConfig . SetupGet ( c = > c . SabApiKey )
. Returns ( apikey ) ;
fakeConfig . SetupGet ( c = > c . SabUsername )
. Returns ( username ) ;
fakeConfig . SetupGet ( c = > c . SabPassword )
. Returns ( password ) ;
fakeConfig . SetupGet ( c = > c . SabTvPriority )
. Returns ( priority ) ;
fakeConfig . SetupGet ( c = > c . SabTvCategory )
. Returns ( category ) ;
private void WithFailResponse ( )
{
Mocker . GetMock < HttpProvider > ( )
. Setup ( s = > s . DownloadString ( It . IsAny < String > ( ) ) ) . Returns ( "failed" ) ;
}
[Test]
public void add_url_should_format_request_properly ( )
{
Mocker . GetMock < HttpProvider > ( MockBehavior . Strict )
. Setup (
s = >
s . DownloadString (
"http://192.168.5.55:2222/api?mode=addurl&name=http://www.nzbclub.com/nzb_download.aspx?mid=1950232&priority=0&pp=3&cat=tv&nzbname=This+is+an+Nzb&apikey=5c770e3197e4fe763423ee7c392c25d1&ma_username=admin&ma_password=pass" ) )
. Setup ( s = > s . DownloadString ( "http://192.168.5.55:2222/api?mode=addurl&name=http://www.nzbclub.com/nzb_download.aspx?mid=1950232&priority=0&pp=3&cat=tv&nzbname=This+is+an+Nzb&apikey=5c770e3197e4fe763423ee7c392c25d1&ma_username=admin&ma_password=pass" ) )
. Returns ( "ok" ) ;
//Act
@ -94,41 +76,10 @@ namespace NzbDrone.Core.Test.ProviderTests
[Test]
public void AddByUrlNewzbin ( )
public void newzbing_add_url_should_format_request_properly ( )
{
//Setup
const string sabHost = "192.168.5.55" ;
const int sabPort = 2222 ;
const string apikey = "5c770e3197e4fe763423ee7c392c25d1" ;
const string username = "admin" ;
const string password = "pass" ;
const SabPriorityType priority = SabPriorityType . Normal ;
const string category = "tv" ;
var fakeConfig = Mocker . GetMock < ConfigProvider > ( ) ;
fakeConfig . SetupGet ( c = > c . SabHost )
. Returns ( sabHost ) ;
fakeConfig . SetupGet ( c = > c . SabPort )
. Returns ( sabPort ) ;
fakeConfig . SetupGet ( c = > c . SabApiKey )
. Returns ( apikey ) ;
fakeConfig . SetupGet ( c = > c . SabUsername )
. Returns ( username ) ;
fakeConfig . SetupGet ( c = > c . SabPassword )
. Returns ( password ) ;
fakeConfig . SetupGet ( c = > c . SabTvPriority )
. Returns ( priority ) ;
fakeConfig . SetupGet ( c = > c . SabTvCategory )
. Returns ( category ) ;
Mocker . GetMock < HttpProvider > ( MockBehavior . Strict )
. Setup (
s = >
s . DownloadString (
"http://192.168.5.55:2222/api?mode=addid&name=6107863&priority=0&pp=3&cat=tv&nzbname=This+is+an+Nzb&apikey=5c770e3197e4fe763423ee7c392c25d1&ma_username=admin&ma_password=pass" ) )
. Setup ( s = > s . DownloadString ( "http://192.168.5.55:2222/api?mode=addid&name=6107863&priority=0&pp=3&cat=tv&nzbname=This+is+an+Nzb&apikey=5c770e3197e4fe763423ee7c392c25d1&ma_username=admin&ma_password=pass" ) )
. Returns ( "ok" ) ;
//Act
@ -140,37 +91,9 @@ namespace NzbDrone.Core.Test.ProviderTests
}
[Test]
public void AddByUrlError ( )
public void add_by_url_should_detect_and_handle_sab_errors ( )
{
//Setup
string sabHost = "192.168.5.55" ;
int sabPort = 2222 ;
string apikey = "5c770e3197e4fe763423ee7c392c25d1" ;
string username = "admin" ;
string password = "pass" ;
var priority = SabPriorityType . Normal ;
string category = "tv" ;
var fakeConfig = Mocker . GetMock < ConfigProvider > ( ) ;
fakeConfig . SetupGet ( c = > c . SabHost )
. Returns ( sabHost ) ;
fakeConfig . SetupGet ( c = > c . SabPort )
. Returns ( sabPort ) ;
fakeConfig . SetupGet ( c = > c . SabApiKey )
. Returns ( apikey ) ;
fakeConfig . SetupGet ( c = > c . SabUsername )
. Returns ( username ) ;
fakeConfig . SetupGet ( c = > c . SabPassword )
. Returns ( password ) ;
fakeConfig . SetupGet ( c = > c . SabTvPriority )
. Returns ( priority ) ;
fakeConfig . SetupGet ( c = > c . SabTvCategory )
. Returns ( category ) ;
Mocker . GetMock < HttpProvider > ( )
. Setup ( s = > s . DownloadString ( It . IsAny < String > ( ) ) )
. Returns ( "error" ) ;
WithFailResponse ( ) ;
//Act
var sabProvider = Mocker . Resolve < SabProvider > ( ) ;
@ -181,14 +104,14 @@ namespace NzbDrone.Core.Test.ProviderTests
ExceptionVerification . ExpectedWarns ( 1 ) ;
}
[Test]
[TestCase(1, new[] { 2 } , "My Episode Title" , QualityTypes . DVD , false , "My Series Name - 1x2 - My Episode Title [DVD]" ) ]
[TestCase(1, new[] { 2 } , "My Episode Title" , QualityTypes . DVD , true , "My Series Name - 1x2 - My Episode Title [DVD] [Proper]" ) ]
[TestCase(1, new[] { 2 } , "" , QualityTypes . DVD , true , "My Series Name - 1x2 - [DVD] [Proper]" ) ]
[TestCase(1, new[] { 2 , 4 } , "My Episode Title" , QualityTypes . HDTV , false , "My Series Name - 1x2-1x4 - My Episode Title [HDTV]" ) ]
[TestCase(1, new[] { 2 , 4 } , "My Episode Title" , QualityTypes . HDTV , true , "My Series Name - 1x2-1x4 - My Episode Title [HDTV] [Proper]" ) ]
[TestCase(1, new[] { 2 , 4 } , "" , QualityTypes . HDTV , true , "My Series Name - 1x2-1x4 - [HDTV] [Proper]" ) ]
public void sab_title( int seasons , int [ ] episodes , string title , QualityTypes quality , bool proper , string expected )
public void create_proper_ sab_titles ( int seasons , int [ ] episodes , string title , QualityTypes quality , bool proper , string expected )
{
var series = Builder < Series > . CreateNew ( )
. With ( c = > c . Title = "My Series Name" )
@ -201,7 +124,7 @@ namespace NzbDrone.Core.Test.ProviderTests
Quality = new Quality ( quality , proper ) ,
SeasonNumber = seasons ,
Series = series ,
EpisodeTitle = title
EpisodeTitle = title
} ;
//Act
@ -213,9 +136,9 @@ namespace NzbDrone.Core.Test.ProviderTests
[TestCase(true, "My Series Name - Season 1 [Bluray720p] [ Proper ] ")]
[TestCase(false, "My Series Name - Season 1 [Bluray720p] ")]
public void sab_season_title( bool proper , string expected )
public void create_proper_ sab_season_title( bool proper , string expected )
{
var series = Builder < Series > . CreateNew ( )
. With ( c = > c . Title = "My Series Name" )
@ -240,7 +163,7 @@ namespace NzbDrone.Core.Test.ProviderTests
[TestCase(true, "My Series Name - 2011-12-01 - My Episode Title [Bluray720p] [ Proper ] ")]
[TestCase(false, "My Series Name - 2011-12-01 - My Episode Title [Bluray720p] ")]
public void sab_daily_series_ title( bool proper , string expected )
public void create_proper_ sab_daily_titles ( bool proper , string expected )
{
var series = Builder < Series > . CreateNew ( )
. With ( c = > c . IsDaily = true )
@ -249,7 +172,7 @@ namespace NzbDrone.Core.Test.ProviderTests
var parsResult = new EpisodeParseResult
{
AirDate = new DateTime ( 2011 , 12 , 1 ) ,
AirDate = new DateTime ( 2011 , 12 , 1 ) ,
Quality = new Quality ( QualityTypes . Bluray720p , proper ) ,
Series = series ,
EpisodeTitle = "My Episode Title" ,
@ -263,50 +186,7 @@ namespace NzbDrone.Core.Test.ProviderTests
}
[Test]
[Explicit]
public void AddNewzbingByUrlSuccess ( )
{
//Setup
const string sabHost = "192.168.1.50" ;
const int sabPort = 8080 ;
const string apikey = "f37dc33baec2e5566f5aec666287870d" ;
const string username = "root" ;
const string password = "*************" ;
const SabPriorityType priority = SabPriorityType . Normal ;
const string category = "tv" ;
var fakeConfig = Mocker . GetMock < ConfigProvider > ( ) ;
fakeConfig . SetupGet ( c = > c . SabHost )
. Returns ( sabHost ) ;
fakeConfig . SetupGet ( c = > c . SabPort )
. Returns ( sabPort ) ;
fakeConfig . SetupGet ( c = > c . SabApiKey )
. Returns ( apikey ) ;
fakeConfig . SetupGet ( c = > c . SabUsername )
. Returns ( username ) ;
fakeConfig . SetupGet ( c = > c . SabPassword )
. Returns ( password ) ;
fakeConfig . SetupGet ( c = > c . SabTvPriority )
. Returns ( priority ) ;
fakeConfig . SetupGet ( c = > c . SabTvCategory )
. Returns ( category ) ;
Mocker . SetConstant ( new HttpProvider ( ) ) ;
//Act
bool result = Mocker . Resolve < SabProvider > ( ) . AddByUrl (
"http://www.newzbin.com/browse/post/6107863/nzb" , "Added by unit tests." ) ;
//Assert
result . Should ( ) . BeTrue ( ) ;
}
[Test]
public void Get_Categories_Success_Passed_Values ( )
public void should_be_able_to_get_categories_when_config_is_passed_in ( )
{
//Setup
const string host = "192.168.5.55" ;
@ -315,7 +195,7 @@ namespace NzbDrone.Core.Test.ProviderTests
const string username = "admin" ;
const string password = "pass" ;
Mocker . GetMock < HttpProvider > ( MockBehavior . Strict )
. Setup ( s = > s . DownloadString ( "http://192.168.5.55:2222/api?mode=get_cats&output=json&apikey=5c770e3197e4fe763423ee7c392c25d1&ma_username=admin&ma_password=pass" ) )
@ -330,32 +210,11 @@ namespace NzbDrone.Core.Test.ProviderTests
}
[Test]
public void Get_Categories_Success_Config_Values ( )
public void should_be_able_to_get_categories_using_config ( )
{
//Setup
const string host = "192.168.5.55" ;
const int port = 2222 ;
const string apikey = "5c770e3197e4fe763423ee7c392c25d1" ;
const string username = "admin" ;
const string password = "pass" ;
var fakeConfig = Mocker . GetMock < ConfigProvider > ( ) ;
fakeConfig . SetupGet ( c = > c . SabHost )
. Returns ( host ) ;
fakeConfig . SetupGet ( c = > c . SabPort )
. Returns ( port ) ;
fakeConfig . SetupGet ( c = > c . SabApiKey )
. Returns ( apikey ) ;
fakeConfig . SetupGet ( c = > c . SabUsername )
. Returns ( username ) ;
fakeConfig . SetupGet ( c = > c . SabPassword )
. Returns ( password ) ;
Mocker . GetMock < HttpProvider > ( MockBehavior . Strict )
. Setup ( s = > s . DownloadString ( "http://192.168.5.55:2222/api?mode=get_cats&output=json&apikey=5c770e3197e4fe763423ee7c392c25d1&ma_username=admin&ma_password=pass" ) )
. Returns ( File . ReadAllText ( @".\Files\Categories_json.txt" ) ) ;
. Setup ( s = > s . DownloadString ( "http://192.168.5.55:2222/api?mode=get_cats&output=json&apikey=5c770e3197e4fe763423ee7c392c25d1&ma_username=admin&ma_password=pass" ) )
. Returns ( File . ReadAllText ( @".\Files\Categories_json.txt" ) ) ;
//Act
var result = Mocker . Resolve < SabProvider > ( ) . GetCategories ( ) ;
@ -368,8 +227,6 @@ namespace NzbDrone.Core.Test.ProviderTests
[Test]
public void GetQueue_should_return_an_empty_list_when_the_queue_is_empty ( )
{
WithSabConfigValues ( ) ;
Mocker . GetMock < HttpProvider > ( )
. Setup ( s = > s . DownloadString ( "http://192.168.5.55:2222/api?mode=queue&output=json&start=0&limit=0&apikey=5c770e3197e4fe763423ee7c392c25d1&ma_username=admin&ma_password=pass" ) )
. Returns ( File . ReadAllText ( @".\Files\QueueEmpty.txt" ) ) ;
@ -382,43 +239,30 @@ namespace NzbDrone.Core.Test.ProviderTests
}
[Test]
[ExpectedException(typeof(ApplicationException), ExpectedMessage = "API Key Incorrect")]
public void GetQueue_should_return_an_empty_list_when_there_is_an_error_getting_the_queue ( )
{
WithSabConfigValues ( ) ;
Mocker . GetMock < HttpProvider > ( )
. Setup ( s = > s . DownloadString ( "http://192.168.5.55:2222/api?mode=queue&output=json&start=0&limit=0&apikey=5c770e3197e4fe763423ee7c392c25d1&ma_username=admin&ma_password=pass" ) )
. Returns ( File . ReadAllText ( @".\Files\JsonError.txt" ) ) ;
//Act
var result = Mocker . Resolve < SabProvider > ( ) . GetQueue ( ) ;
//Assert
result . Should ( ) . BeEmpty ( ) ;
Assert . Throws < ApplicationException > ( ( ) = > Mocker . Resolve < SabProvider > ( ) . GetQueue ( ) , "API Key Incorrect" ) ;
}
[Test]
public void GetQueue_should_return_a_list_with_items_when_the_queue_has_items ( )
{
WithSabConfigValues ( ) ;
Mocker . GetMock < HttpProvider > ( )
. Setup ( s = > s . DownloadString ( "http://192.168.5.55:2222/api?mode=queue&output=json&start=0&limit=0&apikey=5c770e3197e4fe763423ee7c392c25d1&ma_username=admin&ma_password=pass" ) )
. Returns ( File . ReadAllText ( @".\Files\Queue.txt" ) ) ;
WithFullQueue ( ) ;
//Act
var result = Mocker . Resolve < SabProvider > ( ) . GetQueue ( ) ;
//Assert
result . Should ( ) . HaveCount ( 2 ) ;
result . Should ( ) . HaveCount ( 3 ) ;
}
[Test]
public void GetHistory_should_return_a_list_with_items_when_the_history_has_items ( )
{
WithSabConfigValues ( ) ;
Mocker . GetMock < HttpProvider > ( )
. Setup ( s = > s . DownloadString ( "http://192.168.5.55:2222/api?mode=history&output=json&start=0&limit=0&apikey=5c770e3197e4fe763423ee7c392c25d1&ma_username=admin&ma_password=pass" ) )
. Returns ( File . ReadAllText ( @".\Files\History.txt" ) ) ;
@ -433,8 +277,6 @@ namespace NzbDrone.Core.Test.ProviderTests
[Test]
public void GetHistory_should_return_an_empty_list_when_the_queue_is_empty ( )
{
WithSabConfigValues ( ) ;
Mocker . GetMock < HttpProvider > ( )
. Setup ( s = > s . DownloadString ( "http://192.168.5.55:2222/api?mode=history&output=json&start=0&limit=0&apikey=5c770e3197e4fe763423ee7c392c25d1&ma_username=admin&ma_password=pass" ) )
. Returns ( File . ReadAllText ( @".\Files\HistoryEmpty.txt" ) ) ;
@ -447,20 +289,82 @@ namespace NzbDrone.Core.Test.ProviderTests
}
[Test]
[ExpectedException(typeof(ApplicationException), ExpectedMessage = "API Key Incorrect")]
public void GetHistory_should_return_an_empty_list_when_there_is_an_error_getting_the_queue ( )
{
WithSabConfigValues ( ) ;
Mocker . GetMock < HttpProvider > ( )
. Setup ( s = > s . DownloadString ( "http://192.168.5.55:2222/api?mode=history&output=json&start=0&limit=0&apikey=5c770e3197e4fe763423ee7c392c25d1&ma_username=admin&ma_password=pass" ) )
. Returns ( File . ReadAllText ( @".\Files\JsonError.txt" ) ) ;
//Act
var result = Mocker . Resolve < SabProvider > ( ) . GetHistory ( ) ;
Assert . Throws < ApplicationException > ( ( ) = > Mocker . Resolve < SabProvider > ( ) . GetHistory ( ) , "API Key Incorrect" ) ;
}
//Assert
result . Should ( ) . BeEmpty ( ) ;
[Test]
public void is_in_queue_should_find_if_exact_episode_is_in_queue ( )
{
WithFullQueue ( ) ;
var parseResult = new EpisodeParseResult
{
EpisodeTitle = "Title" ,
EpisodeNumbers = new List < int > { 5 } ,
SeasonNumber = 1 ,
Quality = new Quality { QualityType = QualityTypes . SDTV , Proper = false } ,
Series = new Series { Title = "30 Rock" } ,
} ;
var result = Mocker . Resolve < SabProvider > ( ) . IsInQueue ( parseResult ) ;
result . Should ( ) . BeTrue ( ) ;
}
[TestCase(2, 5, "30 Rock", QualityTypes.Bluray1080p, true, Description = "Same Series, Diffrent Season, Episode")]
[TestCase(1, 6, "30 Rock", QualityTypes.Bluray1080p, true, Description = "Same series, diffrent episode")]
[TestCase(1, 6, "Some other show", QualityTypes.Bluray1080p, true, Description = "Diffrent series, same season, episdoe")]
[TestCase(1, 5, "Rock", QualityTypes.Bluray1080p, true, Description = "Similar series, same season, episode")]
[TestCase(1, 5, "30 Rock", QualityTypes.Bluray720p, false, Description = "Same series, higher quality")]
[TestCase(1, 5, "30 Rock", QualityTypes.HDTV, true, Description = "Same series, higher quality")]
public void IsInQueue_should_not_find_diffrent_episode_queue ( int season , int episode , string title , QualityTypes qualityType , bool proper )
{
WithFullQueue ( ) ;
var parseResult = new EpisodeParseResult
{
EpisodeTitle = "Title" ,
EpisodeNumbers = new List < int > { episode } ,
SeasonNumber = season ,
Quality = new Quality { QualityType = qualityType , Proper = proper } ,
Series = new Series { Title = title } ,
} ;
var result = Mocker . Resolve < SabProvider > ( ) . IsInQueue ( parseResult ) ;
result . Should ( ) . BeFalse ( ) ;
}
[TestCase(1, 5, "30 Rock", QualityTypes.SDTV, false, Description = "Same Series, lower quality")]
[TestCase(1, 5, "30 rocK", QualityTypes.SDTV, false, Description = "Same Series, diffrent casing")]
[TestCase(1, 5, "30 RocK", QualityTypes.HDTV, false, Description = "Same Series, same quality")]
public void IsInQueue_should_find_same_or_lower_quality_episode_queue ( int season , int episode , string title , QualityTypes qualityType , bool proper )
{
WithFullQueue ( ) ;
var parseResult = new EpisodeParseResult
{
EpisodeTitle = "Title" ,
EpisodeNumbers = new List < int > { episode } ,
SeasonNumber = season ,
Quality = new Quality { QualityType = qualityType , Proper = proper } ,
Series = new Series { Title = title } ,
} ;
var result = Mocker . Resolve < SabProvider > ( ) . IsInQueue ( parseResult ) ;
result . Should ( ) . BeTrue ( ) ;
}
}
}