Beispiel #1
0
        public async Task CreateDocument_ShouldCreateDocument()
        {
            var filename = "example.pdf";
            var stream   = StreamHelper.CreateExampleStream();

            var configuration = new Mock <IConfiguration>();

            ConfigurationHelper.SetupMaximumFileSizeInBytes(configuration, Constants.MaximumFileSizeInBytes);
            ConfigurationHelper.SetupAllowedContentTypes(configuration, "application/pdf");
            var validator = new UploadRequestValidator(configuration.Object);
            var logger    = new TestLogger <AzureFunctions>();

            var mediator = new Mock <IMediator>();

            mediator
            .Setup(m => m.Send(It.IsAny <CreateDocumentCommand>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync(new ValueWrapper <bool>(true));

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

            await function.CreateDocument(stream, filename);

            var msg = logger.Logs[0];

            Assert.Contains("Document created", msg);
        }
        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 List_GivenNoParametersProvided_ShouldReturnDocumentCollection()
        {
            var sortProperty  = "Filename";
            var sortDirection = "Ascending";

            var expectedResults = new List <Document>
            {
                new Document("example1.pdf", 1000, "application/pdf", new DateTime(02, 03, 04, 05, 06, 07)),
                new Document("example2.pdf", 1000, "application/pdf", new DateTime(01, 02, 03, 04, 05, 06)),
                new Document("example3.pdf", 1000, "application/pdf", new DateTime(08, 06, 05, 04, 03, 02)),
            };

            var expectedContentResult = new CreatedResult("/", expectedResults);

            var configuration = new Mock <IConfiguration>();

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

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

            mediator
            .Setup(m => m.Send(It.IsAny <GetDocumentCollectionQuery>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync(new ValueWrapper <IEnumerable <Document> >(new List <Document>(), true));

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

            var httpRequest  = HttpRequestHelper.CreateMockRequest(expectedResults);
            var actionResult = await function.List(httpRequest.Object, sortProperty, sortDirection);

            var statusCodeResult = (IStatusCodeActionResult)actionResult;

            var createdResult = (OkObjectResult)actionResult;

            createdResult.Value.ShouldNotBeSameAs(expectedContentResult.Value);

            statusCodeResult.StatusCode.ShouldBe((int)HttpStatusCode.OK);

            var msg = logger.Logs[0];

            Assert.Contains("documents found", msg);
        }
        public async Task Upload_GivenValidParameters_ShouldUploadToBlobStorage()
        {
            var filename = "example.pdf";
            var stream   = StreamHelper.CreateExampleStream();
            var base64   = StreamHelper.ConvertStreamToBase64(stream);

            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 <UploadBlobCommand>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync(new ValueWrapper <bool>(true))
            .Verifiable($"{nameof(UploadBlobCommand)} was not called");

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

            Mock <HttpRequest> httpRequest = HttpRequestHelper.CreateMockRequest(new UploadRequest
            {
                Filename = filename,
                Data     = base64
            });

            var expectedContentResult = new CreatedResult("/", new
            {
                Filename = filename,
                Size     = stream.Length
            });

            var actionResult = await function.Upload(httpRequest.Object);

            var statusCodeResult = (IStatusCodeActionResult)actionResult;

            var createdResult = (ObjectResult)actionResult;

            createdResult.Value.Equals(expectedContentResult.Value);
            statusCodeResult.StatusCode.ShouldBe((int)HttpStatusCode.Created);
        }
        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>();
        }