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);
            }
        }