public async Task DeleteArchivedBlobsAsync_PassGreaterThan0RetainedBlobCountLimit_DeletesSuccessfully(string blobNameFormat, string[] fakeBlobs)
        {
            const int            retainedBlobCountLimit = 1;
            List <IListBlobItem> fakeBlobItems          = new List <IListBlobItem>();

            string          fakeBlob1     = fakeBlobs[0];
            CloudAppendBlob fakeBlobItem1 = SetupCloudAppendBlobReference(fakeBlob1, 1, 1000);

            fakeBlobItems.Add(fakeBlobItem1);

            string          fakeBlob2     = fakeBlobs[1];
            CloudAppendBlob fakeBlobItem2 = SetupCloudAppendBlobReference(fakeBlob2, 1, 1000);

            fakeBlobItems.Add(fakeBlobItem2);

            string          fakeBlob3     = fakeBlobs[2];
            CloudAppendBlob fakeBlobItem3 = SetupCloudAppendBlobReference(fakeBlob3, 1, 1000);

            fakeBlobItems.Add(fakeBlobItem3);

            BlobResultSegment fakeBlobResultSegment = new BlobResultSegment(fakeBlobItems, null);

            A.CallTo(() => blobContainer.ListBlobsSegmentedAsync(null, true, BlobListingDetails.None, null, A <BlobContinuationToken> .Ignored, null, null)).Returns(Task.FromResult(fakeBlobResultSegment));

            await defaultCloudBlobProvider.DeleteArchivedBlobsAsync(blobClient, blobContainerName, blobNameFormat, retainedBlobCountLimit);

            A.CallTo(() => fakeBlobItem1.DeleteIfExistsAsync()).MustHaveHappenedOnceExactly();
            A.CallTo(() => fakeBlobItem2.DeleteIfExistsAsync()).MustHaveHappenedOnceExactly();
            A.CallTo(() => fakeBlobItem3.DeleteIfExistsAsync()).MustNotHaveHappened();
        }
        private CloudAppendBlob SetupCloudAppendBlobReference(string blobName, int blockCount, int filesize)
        {
            CloudAppendBlob cloudAppendBlob = A.Fake <CloudAppendBlob>(opt => opt.WithArgumentsForConstructor(new object[] { new Uri("https://account.suffix.blobs.com/logcontainer/" + blobName) }));

            SetCloudBlobBlockCount(cloudAppendBlob, blockCount);
            SetBlobLength(cloudAppendBlob, filesize);

            A.CallTo(() => cloudAppendBlob.Name).Returns(blobName);
            A.CallTo(() => cloudAppendBlob.CreateOrReplaceAsync(A <AccessCondition> .Ignored, null, null)).Returns(Task.FromResult(true));
            A.CallTo(() => cloudAppendBlob.FetchAttributesAsync()).Returns(Task.FromResult(true));
            A.CallTo(() => cloudAppendBlob.DeleteIfExistsAsync()).Returns(Task.FromResult(true));

            A.CallTo(() => blobContainer.GetAppendBlobReference(blobName)).Returns(cloudAppendBlob);

            return(cloudAppendBlob);
        }