public async Task CreateSharedAccessSignature_returns_token_created_using_StorageSharedKeyCredential()
        {
            var config = new CvpConfiguration()
            {
                StorageEndpoint    = "https://container.blob.core.windows.net/", StorageContainerName = "container",
                StorageAccountName = "accountName", StorageAccountKey = "YWNjb3VudEtleQ=="
            };
            var blobServiceClient = new Mock <BlobServiceClient>();
            var service           = new CvpAzureStorageService(blobServiceClient.Object, config, false);

            var result = await service.CreateSharedAccessSignature("myFilePath", It.IsAny <TimeSpan>());

            result.Should().NotBeNullOrEmpty();
            result.Should().StartWith($"{config.StorageEndpoint}{config.StorageContainerName}/myFilePath?");

            blobServiceClient
            .Verify(x => x.GetUserDelegationKeyAsync(It.IsAny <DateTimeOffset>(), It.IsAny <DateTimeOffset>(), It.IsAny <CancellationToken>()), Times.Never);
        }
        public async Task GetAllBlobsAsync_returns_blob_clients()
        {
            var config = new CvpConfiguration()
            {
                StorageEndpoint    = "https://container.blob.core.windows.net/", StorageContainerName = "container",
                StorageAccountName = "accountName", StorageAccountKey = "YWNjb3VudEtleQ=="
            };

            var filePathPrefix          = "myFilePath";
            var blobServiceClient       = new Mock <BlobServiceClient>();
            var blobContainerClientMock = new Mock <BlobContainerClient>();
            var blobClientMock          = new Mock <BlobClient>();

            blobServiceClient.Setup(x => x.GetBlobContainerClient(config.StorageContainerName)).Returns(blobContainerClientMock.Object);
            var pageable = new Mock <AsyncPageable <BlobItem> >();

            blobContainerClientMock.Setup(x => x.GetBlobsAsync(BlobTraits.None, BlobStates.None, filePathPrefix, default))
            .Returns(pageable.Object);
            pageable.Setup(x => x.GetAsyncEnumerator(default)).Returns(GetMockBlobItems());
        public async Task CreateSharedAccessSignature_returns_token_created_using_DelegationKey()
        {
            var config = new CvpConfiguration()
            {
                StorageEndpoint    = "https://container.blob.core.windows.net/", StorageContainerName = "container",
                StorageAccountName = "accountName", StorageAccountKey = "YWNjb3VudEtleQ=="
            };

            var blobServiceClient = new Mock <BlobServiceClient>();

            blobServiceClient
            .Setup(x => x.GetUserDelegationKeyAsync(It.IsAny <DateTimeOffset>(), It.IsAny <DateTimeOffset>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync(Response.FromValue(BlobsModelFactory.UserDelegationKey("", "", "", "", "", DateTimeOffset.Now, DateTimeOffset.Now), null));

            var service = new CvpAzureStorageService(blobServiceClient.Object, config, true);

            var result = await service.CreateSharedAccessSignature("myFilePath", TimeSpan.FromDays(7));

            result.Should().NotBeNullOrEmpty();
            result.Should().StartWith($"{config.StorageEndpoint}{config.StorageContainerName}/myFilePath?");

            blobServiceClient
            .Verify(x => x.GetUserDelegationKeyAsync(It.IsAny <DateTimeOffset>(), It.IsAny <DateTimeOffset>(), It.IsAny <CancellationToken>()), Times.Once);
        }
 public CvpAzureStorageService(BlobServiceClient serviceClient, CvpConfiguration cvpConfig, bool useUserDelegation)
     : base(serviceClient, cvpConfig, useUserDelegation)
 {
 }