public async Task Download_GivenValidParameters_ShouldReturnFileContentResult()
        {
            var filename    = "example.pdf";
            var contentType = "application/pdf";
            var bytes       = 1000;

            var configuration = new Mock <IConfiguration>();

            ConfigurationHelper.SetupMaximumFileSizeInBytes(configuration, Constants.MaximumFileSizeInBytes);
            ConfigurationHelper.SetupAllowedContentTypes(configuration, "application/pdf");

            var validator = new UploadRequestValidator(configuration.Object);
            var logger    = new Mock <ILogger <AzureFunctions> >();
            var mediator  = new Mock <IMediator>();

            mediator
            .Setup(m => m.Send(It.IsAny <GetDocumentQuery>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync(new ValueWrapper <Document>(
                              new Document(filename, bytes, "application/pdf", new DateTime(02, 03, 04, 05, 06, 07)), true));

            mediator
            .Setup(m => m.Send(It.IsAny <GetBlobAsMemoryStreamQuery>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync(new ValueWrapper <MemoryStream>(StreamHelper.CreateExampleStream(bytes), true));

            var function = new AzureFunctions(mediator.Object, validator, logger.Object);

            var actionResult = await function.Download(new Mock <HttpRequest>().Object, filename);

            actionResult.ShouldBeOfType <FileContentResult>();

            var createdResult = (FileResult)actionResult;

            createdResult.FileDownloadName.ShouldBe(filename);
            createdResult.ContentType.ShouldBe(contentType);
        }
        public async Task Download_GivenNonExistentFilename_ShouldReturnNotFoundObjectResult()
        {
            var filename = "example.pdf";

            var configuration = new Mock <IConfiguration>();

            ConfigurationHelper.SetupMaximumFileSizeInBytes(configuration, Constants.MaximumFileSizeInBytes);
            ConfigurationHelper.SetupAllowedContentTypes(configuration, "application/pdf");

            var validator = new UploadRequestValidator(configuration.Object);
            var logger    = new Mock <ILogger <AzureFunctions> >();
            var mediator  = new Mock <IMediator>();

            mediator
            .Setup(m => m.Send(It.IsAny <GetDocumentQuery>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync(new ValueWrapper <Document>(false));

            var function = new AzureFunctions(mediator.Object, validator, logger.Object);

            var actionResult = await function.Download(new Mock <HttpRequest>().Object, filename);

            actionResult.ShouldBeOfType <NotFoundObjectResult>();
        }