public void WhenDeleteAssetIsCalledWithAnExistingIdThenDeleteIsCalledOnAsset() { bool deleteCalled = false; var client = new AzureMediaServicesClient("myAccountName", "myAccountKey"); using (ShimsContext.Create()) { const string AssetId = "nb:cid:UUID:8131a85d-5999-555c-a30f-468cb087701c"; var asset1 = new StubIAsset { IdGet = () => AssetId }; var asset2 = new StubIAsset { IdGet = () => "myId" }; asset1.Delete = () => { deleteCalled = true; }; var assets = new List <IAsset> { asset1, asset2 }; var collection = new StubAssetBaseCollection { QueryableGet = assets.AsQueryable }; ShimCloudMediaContext.ConstructorStringString = (context, accountName, accountKey) => { }; ShimCloudMediaContext.AllInstances.AssetsGet = context => collection; client.DeleteAsset(AssetId); Assert.IsTrue(deleteCalled); } }
public void WhenDeleteAssetIsCalledThenMediaServicesContextIsCreatedWithTheAccountProvided() { const string AccountName = "myAccount"; const string AccountKey = "myKey"; var client = new AzureMediaServicesClient(AccountName, AccountKey); using (ShimsContext.Create()) { string providedAccountName = null; string providedAccountKey = null; var sampleAssets = new List <IAsset>().AsQueryable(); var collection = new StubAssetBaseCollection { QueryableGet = () => sampleAssets }; ShimCloudMediaContext.ConstructorStringString = (context, accountName, accountKey) => { providedAccountName = accountName; providedAccountKey = accountKey; }; ShimCloudMediaContext.AllInstances.AssetsGet = context => collection; ShimQueryable.WhereOf1IQueryableOfM0ExpressionOfFuncOfM0Boolean <IAsset>((assets, predicate) => sampleAssets); client.DeleteAsset("nb:cid:UUID:8131a85d-5999-555c-a30f-468cb087701c"); Assert.AreEqual(AccountName, providedAccountName); Assert.AreEqual(AccountKey, providedAccountKey); } }
public void WhenGetAssetIsCalledWithANonExistingIdThenNullIsReturned() { var client = new AzureMediaServicesClient("myAccountName", "myAccountKey"); using (ShimsContext.Create()) { const string AssetId = "nb:cid:UUID:8131a85d-5999-555c-a30f-468cb087701c"; var asset = new StubIAsset { IdGet = () => "myId" }; var assets = new List <IAsset> { asset }; var collection = new StubAssetBaseCollection { QueryableGet = assets.AsQueryable }; ShimCloudMediaContext.ConstructorStringString = (context, accountName, accountKey) => { }; ShimCloudMediaContext.AllInstances.AssetsGet = context => collection; var returnedAsset = client.GetAsset(AssetId); Assert.IsNull(returnedAsset); } }
public void WhenGetAssetsIsCalledWithNoPredicateThenAllAssetsAreReturned() { var client = new AzureMediaServicesClient("myAccountName", "myAccountKey"); using (ShimsContext.Create()) { var asset = new StubIAsset { NameGet = () => "EZ" }; var assets = new List <IAsset> { asset }; var collection = new StubAssetBaseCollection { QueryableGet = assets.AsQueryable }; ShimCloudMediaContext.ConstructorStringString = (context, accountName, accountKey) => { }; ShimCloudMediaContext.AllInstances.AssetsGet = context => collection; var returnedAssets = client.GetAssets(); Assert.AreEqual(1, returnedAssets.Count()); Assert.AreSame(collection, returnedAssets); } }
public void WhenGetAssetsIsCalledWithAPredicateThenAssetsCollectionIsFiltered() { var client = new AzureMediaServicesClient("myAccountName", "myAccountKey"); using (ShimsContext.Create()) { var asset1 = new StubIAsset { NameGet = () => "EZ" }; var asset2 = new StubIAsset { NameGet = () => "VOD" }; var sampleAssets = new List <IAsset> { asset1, asset2 }; var collection = new StubAssetBaseCollection { QueryableGet = sampleAssets.AsQueryable }; Expression <Func <IAsset, bool> > filter = asset => asset.Name == "EZ"; Expression <Func <IAsset, bool> > providedPredicate = null; ShimCloudMediaContext.ConstructorStringString = (context, accountName, accountKey) => { }; ShimCloudMediaContext.AllInstances.AssetsGet = context => collection; ShimQueryable.WhereOf1IQueryableOfM0ExpressionOfFuncOfM0Boolean <IAsset>((assets, predicate) => { Assert.AreEqual(2, assets.Count()); providedPredicate = predicate; return(ShimsContext.ExecuteWithoutShims(() => assets.Where(predicate))); }); var returnedAssets = client.GetAssets(filter); Assert.AreSame(filter, providedPredicate); Assert.AreEqual(1, returnedAssets.Count()); Assert.AreEqual(asset1.NameGet(), returnedAssets.First().Name); } }
public void WhenBlobTransferProgressChangedEventIsRaisedThenProgressCallbackIsCalled() { const int Percentage = 10; var progressCalled = false; var providedPercentage = -1; EventHandler <BlobTransferProgressChangedEventArgs> blobTransferProgressHandler = null; var stubAsset = new StubIAsset { NameGet = () => "test" }; var stubAssetFile = new StubIAssetFile(); var stubAccessPolicy = new StubIAccessPolicy(); var stubLocator = new StubILocator(); using (ShimsContext.Create()) { var stubAssets = new StubAssetBaseCollection { CreateStringAssetCreationOptions = (name, options) => stubAsset }; var stubAssetsFiles = new StubAssetFileBaseCollection { CreateString = path => stubAssetFile }; stubAsset.AssetFilesGet = () => stubAssetsFiles; var accessPolicies = new ShimAccessPolicyBaseCollection { CreateStringTimeSpanAccessPermissions = (name, timesSpan, accessPermissions) => stubAccessPolicy }; var locators = new ShimLocatorBaseCollection { CreateSasLocatorIAssetIAccessPolicy = (asset, acccessPolicy) => stubLocator }; ShimPath.GetFileNameString = fileName => string.Empty; ShimBlobTransferClient.Constructor = client => { }; stubAssetFile.UploadAsyncStringBlobTransferClientILocatorCancellationToken = (filePath, blobTransferClient, locator, cancellationToken) => Task.Delay(0); var context = new ShimCloudMediaContext { AssetsGet = () => stubAssets, AccessPoliciesGet = () => accessPolicies, LocatorsGet = () => locators, }; Func <CloudMediaContext> createContext = () => context; ShimBlobTransferClient.AllInstances.TransferProgressChangedAddEventHandlerOfBlobTransferProgressChangedEventArgs = (client, handler) => { blobTransferProgressHandler = handler; }; var uploader = new AzureMediaServicesUploader("myVideo", @"C:\videos\myvideo.mp4", createContext); Action <int> onProgress = progressPercentage => { progressCalled = true; providedPercentage = progressPercentage; }; uploader.On(progress: onProgress); uploader.Start(); } var args = new BlobTransferProgressChangedEventArgs(0, 0, 0, Percentage, 0, new Uri("http://myvideo"), @"C:\videos\myvideo.mp4", null); blobTransferProgressHandler.Invoke(null, args); Assert.IsTrue(progressCalled); Assert.AreEqual(Percentage, providedPercentage); }
public async Task WhenBlobTransferCompleteEventIsRaisedThenAccessPolicyAndLocatorAreDeleted() { EventHandler <BlobTransferCompleteEventArgs> blobTransferCompletedHandler = null; var stubAsset = new StubIAsset { IdGet = () => "myId", NameGet = () => "test" }; var stubAssetFile = new StubIAssetFile(); var stubAccessPolicy = new StubIAccessPolicy(); var stubLocator = new StubILocator() { AccessPolicyGet = () => stubAccessPolicy }; bool accessPolicyDeleteCalled = false; bool locatorDeletedCalled = false; using (ShimsContext.Create()) { var stubAssets = new StubAssetBaseCollection { CreateAsyncStringAssetCreationOptionsCancellationToken = (name, options, cancellationToken) => Task.FromResult((IAsset)stubAsset) }; var stubAssetsFiles = new StubAssetFileBaseCollection { CreateAsyncStringCancellationToken = (path, cancellationToken) => Task.FromResult((IAssetFile)stubAssetFile) }; stubAsset.AssetFilesGet = () => stubAssetsFiles; var accessPolicies = new ShimAccessPolicyBaseCollection { CreateAsyncStringTimeSpanAccessPermissions = (name, timesSpan, accessPermissions) => Task.FromResult((IAccessPolicy)stubAccessPolicy) }; stubAccessPolicy.Delete = () => { accessPolicyDeleteCalled = true; }; var locators = new ShimLocatorBaseCollection { CreateSasLocatorAsyncIAssetIAccessPolicy = (asset, acccessPolicy) => Task.FromResult((ILocator)stubLocator), }; stubLocator.Delete = () => { locatorDeletedCalled = true; }; ShimPath.GetFileNameString = fileName => string.Empty; ShimBlobTransferClient.Constructor = client => { }; stubAssetFile.UploadAsyncStringBlobTransferClientILocatorCancellationToken = (filePath, blobTransferClient, locator, cancellationToken) => Task.Delay(0); var context = new ShimCloudMediaContext { AssetsGet = () => stubAssets, AccessPoliciesGet = () => accessPolicies, LocatorsGet = () => locators, }; Func <CloudMediaContext> createContext = () => context; ShimBlobTransferClient.AllInstances.TransferCompletedAddEventHandlerOfBlobTransferCompleteEventArgs = (client, handler) => { blobTransferCompletedHandler = handler; }; var uploader = new AzureMediaServicesUploader("myVideo", @"C:\videos\myvideo.mp4", createContext); uploader.On(); await uploader.Start(); } var args = new BlobTransferCompleteEventArgs(null, true, null, @"C:\videos\myvideo.mp4", new Uri("http://myvideo"), BlobTransferType.Upload); blobTransferCompletedHandler.Invoke(null, args); Assert.IsTrue(locatorDeletedCalled); Assert.IsTrue(accessPolicyDeleteCalled); }
public async Task WhenStartIsCalledThenUploadAsyncOnAssetFileIsCalled() { bool uploadAsyncCalled = false; var stubAsset = new StubIAsset { NameGet = () => "test" }; var stubAssetFile = new StubIAssetFile(); var stubAccessPolicy = new StubIAccessPolicy(); var stubLocator = new StubILocator(); using (ShimsContext.Create()) { var stubAssets = new StubAssetBaseCollection { CreateAsyncStringAssetCreationOptionsCancellationToken = (name, options, cancellationToken) => Task.FromResult((IAsset)stubAsset) }; var stubAssetsFiles = new StubAssetFileBaseCollection { CreateAsyncStringCancellationToken = (path, cancellationToken) => Task.FromResult((IAssetFile)stubAssetFile) }; stubAsset.AssetFilesGet = () => stubAssetsFiles; var accessPolicies = new ShimAccessPolicyBaseCollection { CreateAsyncStringTimeSpanAccessPermissions = (name, timesSpan, accessPermissions) => Task.FromResult((IAccessPolicy)stubAccessPolicy) }; var locators = new ShimLocatorBaseCollection { CreateSasLocatorAsyncIAssetIAccessPolicy = (asset, acccessPolicy) => Task.FromResult((ILocator)stubLocator) }; ShimPath.GetFileNameString = fileName => string.Empty; ShimBlobTransferClient.Constructor = client => { }; stubAssetFile.UploadAsyncStringBlobTransferClientILocatorCancellationToken = (filePath, blobTransferClient, locator, cancellationToken) => { uploadAsyncCalled = true; return(Task.Delay(0)); }; var context = new ShimCloudMediaContext { AssetsGet = () => stubAssets, AccessPoliciesGet = () => accessPolicies, LocatorsGet = () => locators, }; Func <CloudMediaContext> createContext = () => context; var uploader = new AzureMediaServicesUploader("myVideo", @"C:\videos\myvideo.mp4", createContext); await uploader.Start(); } Assert.IsTrue(uploadAsyncCalled); }
public void WhenBlobTransferProgressChangedEventIsRaisedThenProgressCallbackIsCalled() { const int Percentage = 10; var progressCalled = false; var providedPercentage = -1; EventHandler<BlobTransferProgressChangedEventArgs> blobTransferProgressHandler = null; var stubAsset = new StubIAsset { NameGet = () => "test" }; var stubAssetFile = new StubIAssetFile(); var stubAccessPolicy = new StubIAccessPolicy(); var stubLocator = new StubILocator(); using (ShimsContext.Create()) { var stubAssets = new StubAssetBaseCollection { CreateStringAssetCreationOptions = (name, options) => stubAsset }; var stubAssetsFiles = new StubAssetFileBaseCollection { CreateString = path => stubAssetFile }; stubAsset.AssetFilesGet = () => stubAssetsFiles; var accessPolicies = new ShimAccessPolicyBaseCollection { CreateStringTimeSpanAccessPermissions = (name, timesSpan, accessPermissions) => stubAccessPolicy }; var locators = new ShimLocatorBaseCollection { CreateSasLocatorIAssetIAccessPolicy = (asset, acccessPolicy) => stubLocator }; ShimPath.GetFileNameString = fileName => string.Empty; ShimBlobTransferClient.Constructor = client => { }; stubAssetFile.UploadAsyncStringBlobTransferClientILocatorCancellationToken = (filePath, blobTransferClient, locator, cancellationToken) => Task.Delay(0); var context = new ShimCloudMediaContext { AssetsGet = () => stubAssets, AccessPoliciesGet = () => accessPolicies, LocatorsGet = () => locators, }; Func<CloudMediaContext> createContext = () => context; ShimBlobTransferClient.AllInstances.TransferProgressChangedAddEventHandlerOfBlobTransferProgressChangedEventArgs = (client, handler) => { blobTransferProgressHandler = handler; }; var uploader = new AzureMediaServicesUploader("myVideo", @"C:\videos\myvideo.mp4", createContext); Action<int> onProgress = progressPercentage => { progressCalled = true; providedPercentage = progressPercentage; }; uploader.On(progress: onProgress); uploader.Start(); } var args = new BlobTransferProgressChangedEventArgs(0, 0, 0, Percentage, 0, new Uri("http://myvideo"), @"C:\videos\myvideo.mp4", null); blobTransferProgressHandler.Invoke(null, args); Assert.IsTrue(progressCalled); Assert.AreEqual(Percentage, providedPercentage); }
public async Task WhenBlobTransferCompleteEventIsRaisedThenAccessPolicyAndLocatorAreDeleted() { EventHandler<BlobTransferCompleteEventArgs> blobTransferCompletedHandler = null; var stubAsset = new StubIAsset { IdGet = () => "myId", NameGet = () => "test" }; var stubAssetFile = new StubIAssetFile(); var stubAccessPolicy = new StubIAccessPolicy(); var stubLocator = new StubILocator() { AccessPolicyGet = () => stubAccessPolicy }; bool accessPolicyDeleteCalled = false; bool locatorDeletedCalled = false; using (ShimsContext.Create()) { var stubAssets = new StubAssetBaseCollection { CreateAsyncStringAssetCreationOptionsCancellationToken = (name, options, cancellationToken) => Task.FromResult((IAsset)stubAsset) }; var stubAssetsFiles = new StubAssetFileBaseCollection { CreateAsyncStringCancellationToken = (path, cancellationToken) => Task.FromResult((IAssetFile)stubAssetFile) }; stubAsset.AssetFilesGet = () => stubAssetsFiles; var accessPolicies = new ShimAccessPolicyBaseCollection { CreateAsyncStringTimeSpanAccessPermissions = (name, timesSpan, accessPermissions) => Task.FromResult((IAccessPolicy)stubAccessPolicy) }; stubAccessPolicy.Delete = () => { accessPolicyDeleteCalled = true; }; var locators = new ShimLocatorBaseCollection { CreateSasLocatorAsyncIAssetIAccessPolicy = (asset, acccessPolicy) => Task.FromResult((ILocator)stubLocator), }; stubLocator.Delete = () => { locatorDeletedCalled = true; }; ShimPath.GetFileNameString = fileName => string.Empty; ShimBlobTransferClient.Constructor = client => { }; stubAssetFile.UploadAsyncStringBlobTransferClientILocatorCancellationToken = (filePath, blobTransferClient, locator, cancellationToken) => Task.Delay(0); var context = new ShimCloudMediaContext { AssetsGet = () => stubAssets, AccessPoliciesGet = () => accessPolicies, LocatorsGet = () => locators, }; Func<CloudMediaContext> createContext = () => context; ShimBlobTransferClient.AllInstances.TransferCompletedAddEventHandlerOfBlobTransferCompleteEventArgs = (client, handler) => { blobTransferCompletedHandler = handler; }; var uploader = new AzureMediaServicesUploader("myVideo", @"C:\videos\myvideo.mp4", createContext); uploader.On(); await uploader.Start(); } var args = new BlobTransferCompleteEventArgs(null, true, null, @"C:\videos\myvideo.mp4", new Uri("http://myvideo"), BlobTransferType.Upload); blobTransferCompletedHandler.Invoke(null, args); Assert.IsTrue(locatorDeletedCalled); Assert.IsTrue(accessPolicyDeleteCalled); }
public async Task WhenStartIsCalledThenUploadAsyncOnAssetFileIsCalled() { bool uploadAsyncCalled = false; var stubAsset = new StubIAsset { NameGet = () => "test" }; var stubAssetFile = new StubIAssetFile(); var stubAccessPolicy = new StubIAccessPolicy(); var stubLocator = new StubILocator(); using (ShimsContext.Create()) { var stubAssets = new StubAssetBaseCollection { CreateAsyncStringAssetCreationOptionsCancellationToken = (name, options, cancellationToken) => Task.FromResult((IAsset)stubAsset) }; var stubAssetsFiles = new StubAssetFileBaseCollection { CreateAsyncStringCancellationToken = (path, cancellationToken) => Task.FromResult((IAssetFile)stubAssetFile) }; stubAsset.AssetFilesGet = () => stubAssetsFiles; var accessPolicies = new ShimAccessPolicyBaseCollection { CreateAsyncStringTimeSpanAccessPermissions = (name, timesSpan, accessPermissions) => Task.FromResult((IAccessPolicy)stubAccessPolicy) }; var locators = new ShimLocatorBaseCollection { CreateSasLocatorAsyncIAssetIAccessPolicy = (asset, acccessPolicy) => Task.FromResult((ILocator)stubLocator) }; ShimPath.GetFileNameString = fileName => string.Empty; ShimBlobTransferClient.Constructor = client => { }; stubAssetFile.UploadAsyncStringBlobTransferClientILocatorCancellationToken = (filePath, blobTransferClient, locator, cancellationToken) => { uploadAsyncCalled = true; return Task.Delay(0); }; var context = new ShimCloudMediaContext { AssetsGet = () => stubAssets, AccessPoliciesGet = () => accessPolicies, LocatorsGet = () => locators, }; Func<CloudMediaContext> createContext = () => context; var uploader = new AzureMediaServicesUploader("myVideo", @"C:\videos\myvideo.mp4", createContext); await uploader.Start(); } Assert.IsTrue(uploadAsyncCalled); }
public void WhenDeleteAssetIsCalledThenMediaServicesContextIsCreatedWithTheAccountProvided() { const string AccountName = "myAccount"; const string AccountKey = "myKey"; var client = new AzureMediaServicesClient(AccountName, AccountKey); using (ShimsContext.Create()) { string providedAccountName = null; string providedAccountKey = null; var sampleAssets = new List<IAsset>().AsQueryable(); var collection = new StubAssetBaseCollection { QueryableGet = () => sampleAssets }; ShimCloudMediaContext.ConstructorStringString = (context, accountName, accountKey) => { providedAccountName = accountName; providedAccountKey = accountKey; }; ShimCloudMediaContext.AllInstances.AssetsGet = context => collection; ShimQueryable.WhereOf1IQueryableOfM0ExpressionOfFuncOfM0Boolean<IAsset>((assets, predicate) => sampleAssets); client.DeleteAsset("nb:cid:UUID:8131a85d-5999-555c-a30f-468cb087701c"); Assert.AreEqual(AccountName, providedAccountName); Assert.AreEqual(AccountKey, providedAccountKey); } }
public void WhenGetAssetsIsCalledWithNoPredicateThenAllAssetsAreReturned() { var client = new AzureMediaServicesClient("myAccountName", "myAccountKey"); using (ShimsContext.Create()) { var asset = new StubIAsset { NameGet = () => "EZ" }; var assets = new List<IAsset> { asset }; var collection = new StubAssetBaseCollection { QueryableGet = assets.AsQueryable }; ShimCloudMediaContext.ConstructorStringString = (context, accountName, accountKey) => { }; ShimCloudMediaContext.AllInstances.AssetsGet = context => collection; var returnedAssets = client.GetAssets(); Assert.AreEqual(1, returnedAssets.Count()); Assert.AreSame(collection, returnedAssets); } }
public void WhenGetAssetsIsCalledWithAPredicateThenAssetsCollectionIsFiltered() { var client = new AzureMediaServicesClient("myAccountName", "myAccountKey"); using (ShimsContext.Create()) { var asset1 = new StubIAsset { NameGet = () => "EZ" }; var asset2 = new StubIAsset { NameGet = () => "VOD" }; var sampleAssets = new List<IAsset> { asset1, asset2 }; var collection = new StubAssetBaseCollection { QueryableGet = sampleAssets.AsQueryable }; Expression<Func<IAsset, bool>> filter = asset => asset.Name == "EZ"; Expression<Func<IAsset, bool>> providedPredicate = null; ShimCloudMediaContext.ConstructorStringString = (context, accountName, accountKey) => { }; ShimCloudMediaContext.AllInstances.AssetsGet = context => collection; ShimQueryable.WhereOf1IQueryableOfM0ExpressionOfFuncOfM0Boolean<IAsset>((assets, predicate) => { Assert.AreEqual(2, assets.Count()); providedPredicate = predicate; return ShimsContext.ExecuteWithoutShims(() => assets.Where(predicate)); }); var returnedAssets = client.GetAssets(filter); Assert.AreSame(filter, providedPredicate); Assert.AreEqual(1, returnedAssets.Count()); Assert.AreEqual(asset1.NameGet(), returnedAssets.First().Name); } }
public void WhenGetAssetIsCalledWithANonExistingIdThenNullIsReturned() { var client = new AzureMediaServicesClient("myAccountName", "myAccountKey"); using (ShimsContext.Create()) { const string AssetId = "nb:cid:UUID:8131a85d-5999-555c-a30f-468cb087701c"; var asset = new StubIAsset { IdGet = () => "myId" }; var assets = new List<IAsset> { asset }; var collection = new StubAssetBaseCollection { QueryableGet = assets.AsQueryable }; ShimCloudMediaContext.ConstructorStringString = (context, accountName, accountKey) => { }; ShimCloudMediaContext.AllInstances.AssetsGet = context => collection; var returnedAsset = client.GetAsset(AssetId); Assert.IsNull(returnedAsset); } }
public void WhenDeleteAssetIsCalledWithAnExistingIdThenDeleteIsCalledOnAsset() { bool deleteCalled = false; var client = new AzureMediaServicesClient("myAccountName", "myAccountKey"); using (ShimsContext.Create()) { const string AssetId = "nb:cid:UUID:8131a85d-5999-555c-a30f-468cb087701c"; var asset1 = new StubIAsset { IdGet = () => AssetId }; var asset2 = new StubIAsset { IdGet = () => "myId" }; asset1.Delete = () => { deleteCalled = true; }; var assets = new List<IAsset> { asset1, asset2 }; var collection = new StubAssetBaseCollection { QueryableGet = assets.AsQueryable }; ShimCloudMediaContext.ConstructorStringString = (context, accountName, accountKey) => { }; ShimCloudMediaContext.AllInstances.AssetsGet = context => collection; client.DeleteAsset(AssetId); Assert.IsTrue(deleteCalled); } }