@ -3,18 +3,16 @@ using Moq.AutoMock;
using NUnit.Framework ;
using Ombi.Api.Plex ;
using Ombi.Api.Plex.Models ;
using Ombi.Core.Authentication ;
using Ombi.Core.Engine ;
using Ombi.Core.Engine.Interfaces ;
using Ombi.Core.Models.Requests ;
using Ombi.Core.Settings ;
using Ombi.Core.Settings.Models.External ;
using Ombi.Schedule.Jobs.Plex ;
using Ombi.Store.Entities ;
using Ombi.Test.Common ;
using Quartz ;
using System ;
using System.Collections.Generic ;
using System.Linq ;
using System.Security.Principal ;
using System.Text ;
using System.Threading ;
using System.Threading.Tasks ;
@ -27,11 +25,11 @@ namespace Ombi.Schedule.Tests
private PlexWatchlistImport _subject ;
private AutoMocker _mocker ;
private Mock < IJobExecutionContext > _context ;
[SetUp]
public void Setup ( )
{
_mocker = new AutoMocker ( ) ;
_mocker = new AutoMocker ( ) ;
var um = MockHelper . MockUserManager ( new List < OmbiUser > { new OmbiUser { Id = "abc" , UserType = UserType . PlexUser , MediaServerToken = "abc" , UserName = "abc" , NormalizedUserName = "ABC" } } ) ;
_mocker . Use ( um ) ;
_context = _mocker . GetMock < IJobExecutionContext > ( ) ;
@ -42,16 +40,194 @@ namespace Ombi.Schedule.Tests
[Test]
public async Task TerminatesWhenPlexIsNotEnabled ( )
{
_mocker . Setup < ISettingsService < PlexSettings > , Task < PlexSettings > > ( x = > x . GetSettingsAsync ( ) ) . ReturnsAsync ( new PlexSettings { Enable = false } ) ;
_mocker . Setup < ISettingsService < PlexSettings > , Task < PlexSettings > > ( x = > x . GetSettingsAsync ( ) ) . ReturnsAsync ( new PlexSettings { Enable = false , EnableWatchlistImport = true } ) ;
await _subject . Execute ( null ) ;
_mocker . Verify < IMovieRequestEngine > ( x = > x . RequestMovie ( It . IsAny < MovieRequestViewModel > ( ) ) , Times . Never ) ;
_mocker . Verify < IPlexApi > ( x = > x . GetWatchlist ( It . IsAny < string > ( ) , It . IsAny < CancellationToken > ( ) ) , Times . Never ) ;
_mocker . Verify < IMovieRequestEngine > ( x = > x . RequestMovie ( It . IsAny < MovieRequestViewModel > ( ) ) , Times . Never ) ;
}
[Test]
public async Task TerminatesWhenWatchlistIsNotEnabled ( )
{
_mocker . Setup < ISettingsService < PlexSettings > , Task < PlexSettings > > ( x = > x . GetSettingsAsync ( ) ) . ReturnsAsync ( new PlexSettings { Enable = true , EnableWatchlistImport = false } ) ;
await _subject . Execute ( null ) ;
_mocker . Verify < IMovieRequestEngine > ( x = > x . RequestMovie ( It . IsAny < MovieRequestViewModel > ( ) ) , Times . Never ) ;
_mocker . Verify < IPlexApi > ( x = > x . GetWatchlist ( It . IsAny < string > ( ) , It . IsAny < CancellationToken > ( ) ) , Times . Never ) ;
_mocker . Verify < IMovieRequestEngine > ( x = > x . RequestMovie ( It . IsAny < MovieRequestViewModel > ( ) ) , Times . Never ) ;
}
[Test]
public async Task EmptyWatchList ( )
{
_mocker . Setup < ISettingsService < PlexSettings > , Task < PlexSettings > > ( x = > x . GetSettingsAsync ( ) ) . ReturnsAsync ( new PlexSettings { Enable = true } ) ;
_mocker . Setup < IPlexApi , Task < PlexWatchlist > > ( x = > x . GetWatchlist ( It . IsAny < string > ( ) , It . IsAny < CancellationToken > ( ) ) ) . ReturnsAsync ( new PlexWatchlist ( ) ) ;
_mocker . Setup < ISettingsService < PlexSettings > , Task < PlexSettings > > ( x = > x . GetSettingsAsync ( ) ) . ReturnsAsync ( new PlexSettings { Enable = true , EnableWatchlistImport = true } ) ;
_mocker . Setup < IPlexApi , Task < PlexWatchlistContainer > > ( x = > x . GetWatchlist ( It . IsAny < string > ( ) , It . IsAny < CancellationToken > ( ) ) ) . ReturnsAsync ( new PlexWatchlistContainer ( ) ) ;
await _subject . Execute ( _context . Object ) ;
_mocker . Verify < IMovieRequestEngine > ( x = > x . RequestMovie ( It . IsAny < MovieRequestViewModel > ( ) ) , Times . Never ) ;
_mocker . Verify < IPlexApi > ( x = > x . GetWatchlist ( It . IsAny < string > ( ) , It . IsAny < CancellationToken > ( ) ) , Times . Once ) ;
_mocker . Verify < IMovieRequestEngine > ( x = > x . RequestMovie ( It . IsAny < MovieRequestViewModel > ( ) ) , Times . Never ) ;
}
[Test]
public async Task NoPlexUsersWithToken ( )
{
_mocker . Setup < ISettingsService < PlexSettings > , Task < PlexSettings > > ( x = > x . GetSettingsAsync ( ) ) . ReturnsAsync ( new PlexSettings { Enable = true , EnableWatchlistImport = true } ) ;
var um = MockHelper . MockUserManager ( new List < OmbiUser >
{
new OmbiUser { Id = "abc" , UserType = UserType . EmbyUser , MediaServerToken = "abc" , UserName = "abc" , NormalizedUserName = "ABC" } ,
new OmbiUser { Id = "abc" , UserType = UserType . LocalUser , MediaServerToken = "abc" , UserName = "abc" , NormalizedUserName = "ABC" } ,
new OmbiUser { Id = "abc" , UserType = UserType . SystemUser , MediaServerToken = "abc" , UserName = "abc" , NormalizedUserName = "ABC" } ,
new OmbiUser { Id = "abc" , UserType = UserType . JellyfinUser , MediaServerToken = "abc" , UserName = "abc" , NormalizedUserName = "ABC" } ,
new OmbiUser { Id = "abc" , UserType = UserType . EmbyConnectUser , MediaServerToken = "abc" , UserName = "abc" , NormalizedUserName = "ABC" } ,
new OmbiUser { Id = "abc" , UserType = UserType . PlexUser , UserName = "abc" , NormalizedUserName = "ABC" } ,
} ) ;
_mocker . Use ( um ) ;
_subject = _mocker . CreateInstance < PlexWatchlistImport > ( ) ;
await _subject . Execute ( _context . Object ) ;
_mocker . Verify < IPlexApi > ( x = > x . GetWatchlist ( It . IsAny < string > ( ) , It . IsAny < CancellationToken > ( ) ) , Times . Never ) ;
_mocker . Verify < IMovieRequestEngine > ( x = > x . RequestMovie ( It . IsAny < MovieRequestViewModel > ( ) ) , Times . Never ) ;
}
[Test]
public async Task MovieRequestFromWatchList_NoGuid ( )
{
_mocker . Setup < ISettingsService < PlexSettings > , Task < PlexSettings > > ( x = > x . GetSettingsAsync ( ) ) . ReturnsAsync ( new PlexSettings { Enable = true , EnableWatchlistImport = true } ) ;
_mocker . Setup < IPlexApi , Task < PlexWatchlistContainer > > ( x = > x . GetWatchlist ( It . IsAny < string > ( ) , It . IsAny < CancellationToken > ( ) ) ) . ReturnsAsync ( new PlexWatchlistContainer
{
MediaContainer = new PlexWatchlist
{
Metadata = new List < Metadata >
{
new Metadata
{
type = "movie" ,
ratingKey = "abc"
}
}
}
} ) ;
_mocker . Setup < IPlexApi , Task < PlexWatchlistMetadataContainer > > ( x = > x . GetWatchlistMetadata ( "abc" , It . IsAny < string > ( ) , It . IsAny < CancellationToken > ( ) ) )
. ReturnsAsync ( new PlexWatchlistMetadataContainer
{
MediaContainer = new PlexWatchlistMetadata
{
Metadata = new WatchlistMetadata [ ]
{
new WatchlistMetadata
{
Guid = new List < PlexGuids >
{
new PlexGuids
{
Id = "tmdb://123"
}
}
}
}
}
} ) ;
_mocker . Setup < IMovieRequestEngine , Task < RequestEngineResult > > ( x = > x . RequestMovie ( It . IsAny < MovieRequestViewModel > ( ) ) )
. ReturnsAsync ( new RequestEngineResult { RequestId = 1 } ) ;
await _subject . Execute ( _context . Object ) ;
_mocker . Verify < IMovieRequestEngine > ( x = > x . RequestMovie ( It . Is < MovieRequestViewModel > ( x = > x . TheMovieDbId = = 123 ) ) , Times . Once ) ;
_mocker . Verify < IPlexApi > ( x = > x . GetWatchlistMetadata ( "abc" , It . IsAny < string > ( ) , It . IsAny < CancellationToken > ( ) ) , Times . Once ) ;
_mocker . Verify < IMovieRequestEngine > ( x = > x . SetUser ( It . Is < OmbiUser > ( x = > x . Id = = "abc" ) ) , Times . Once ) ;
}
[Test]
public async Task MovieRequestFromWatchList_AlreadyRequested ( )
{
_mocker . Setup < ISettingsService < PlexSettings > , Task < PlexSettings > > ( x = > x . GetSettingsAsync ( ) ) . ReturnsAsync ( new PlexSettings { Enable = true , EnableWatchlistImport = true } ) ;
_mocker . Setup < IPlexApi , Task < PlexWatchlistContainer > > ( x = > x . GetWatchlist ( It . IsAny < string > ( ) , It . IsAny < CancellationToken > ( ) ) ) . ReturnsAsync ( new PlexWatchlistContainer
{
MediaContainer = new PlexWatchlist
{
Metadata = new List < Metadata >
{
new Metadata
{
type = "movie" ,
ratingKey = "abc"
}
}
}
} ) ;
_mocker . Setup < IPlexApi , Task < PlexWatchlistMetadataContainer > > ( x = > x . GetWatchlistMetadata ( "abc" , It . IsAny < string > ( ) , It . IsAny < CancellationToken > ( ) ) )
. ReturnsAsync ( new PlexWatchlistMetadataContainer
{
MediaContainer = new PlexWatchlistMetadata
{
Metadata = new WatchlistMetadata [ ]
{
new WatchlistMetadata
{
Guid = new List < PlexGuids >
{
new PlexGuids
{
Id = "tmdb://123"
}
}
}
}
}
} ) ;
_mocker . Setup < IMovieRequestEngine , Task < RequestEngineResult > > ( x = > x . RequestMovie ( It . IsAny < MovieRequestViewModel > ( ) ) )
. ReturnsAsync ( new RequestEngineResult { ErrorCode = ErrorCode . AlreadyRequested , ErrorMessage = "Requested" } ) ;
await _subject . Execute ( _context . Object ) ;
_mocker . Verify < IMovieRequestEngine > ( x = > x . RequestMovie ( It . Is < MovieRequestViewModel > ( x = > x . TheMovieDbId = = 123 ) ) , Times . Once ) ;
_mocker . Verify < IPlexApi > ( x = > x . GetWatchlistMetadata ( "abc" , It . IsAny < string > ( ) , It . IsAny < CancellationToken > ( ) ) , Times . Once ) ;
_mocker . Verify < IMovieRequestEngine > ( x = > x . SetUser ( It . Is < OmbiUser > ( x = > x . Id = = "abc" ) ) , Times . Once ) ;
}
[Test]
public async Task MovieRequestFromWatchList_NoTmdbGuid ( )
{
_mocker . Setup < ISettingsService < PlexSettings > , Task < PlexSettings > > ( x = > x . GetSettingsAsync ( ) ) . ReturnsAsync ( new PlexSettings { Enable = true , EnableWatchlistImport = true } ) ;
_mocker . Setup < IPlexApi , Task < PlexWatchlistContainer > > ( x = > x . GetWatchlist ( It . IsAny < string > ( ) , It . IsAny < CancellationToken > ( ) ) ) . ReturnsAsync ( new PlexWatchlistContainer
{
MediaContainer = new PlexWatchlist
{
Metadata = new List < Metadata >
{
new Metadata
{
type = "movie" ,
ratingKey = "abc"
}
}
}
} ) ;
_mocker . Setup < IPlexApi , Task < PlexWatchlistMetadataContainer > > ( x = > x . GetWatchlistMetadata ( "abc" , It . IsAny < string > ( ) , It . IsAny < CancellationToken > ( ) ) )
. ReturnsAsync ( new PlexWatchlistMetadataContainer
{
MediaContainer = new PlexWatchlistMetadata
{
Metadata = new WatchlistMetadata [ ]
{
new WatchlistMetadata
{
Guid = new List < PlexGuids >
{
new PlexGuids
{
Id = "imdb://123"
}
}
}
}
}
} ) ;
_mocker . Setup < IMovieRequestEngine , Task < RequestEngineResult > > ( x = > x . RequestMovie ( It . IsAny < MovieRequestViewModel > ( ) ) )
. ReturnsAsync ( new RequestEngineResult { RequestId = 1 } ) ;
await _subject . Execute ( _context . Object ) ;
_mocker . Verify < IMovieRequestEngine > ( x = > x . RequestMovie ( It . IsAny < MovieRequestViewModel > ( ) ) , Times . Never ) ;
_mocker . Verify < IPlexApi > ( x = > x . GetWatchlistMetadata ( "abc" , It . IsAny < string > ( ) , It . IsAny < CancellationToken > ( ) ) , Times . Once ) ;
_mocker . Verify < IMovieRequestEngine > ( x = > x . SetUser ( It . Is < OmbiUser > ( x = > x . Id = = "abc" ) ) , Times . Never ) ;
}
}
}