public async Task EndToEndEmptyFileTest()
        {
            // TODO: Если иерархия классов будет разростаться, следует заменить явное создание экземпляров на использование контейнера ServiceProvider
            var env      = new PaperAnalyzerEnvironment();
            var analyzer = new PapersAnalyzer(env);
            var service  = new PaperAnalyzerService(analyzer);

            var controller = new HomeController(_mockLogger.Object, service, _mockRepository.Object);

            var memoryStream = new MemoryStream();

            _mockFile.Setup(f => f.Length).Returns(memoryStream.Length);
            _mockFile.Setup(f => f.FileName).Returns("testfile.pdf");
            _mockFile.Setup(f => f.CopyToAsync(It.IsAny <Stream>(), It.IsAny <CancellationToken>()))
            .Callback <Stream, CancellationToken>((stream, token) => memoryStream.CopyTo(stream))
            .Returns(Task.CompletedTask);

            var result = await controller.UploadFile(_mockFile.Object, string.Empty, string.Empty, string.Empty);

            var errorResult = result as ViewResult;

            Assert.IsNotNull(errorResult);
            var errorModel = errorResult.Model as ErrorViewModel;

            // RequestID не будет присвоен
            Assert.IsNull(errorModel.RequestId);
            // Если RequestID не присвоен, то он не показывается
            Assert.IsFalse(errorModel.ShowRequestId);
            // Сообщение об ошибке должено быть непустым
            Assert.AreNotEqual(errorModel.Message, string.Empty);

            memoryStream.Close();
        }
        public async Task EndToEndUnsupportedFileTypeTest()
        {
            // TODO: Если иерархия классов будет разростаться, следует заменить явное создание экземпляров на использование контейнера ServiceProvider
            var env      = new PaperAnalyzerEnvironment();
            var analyzer = new PapersAnalyzer(env);
            var service  = new PaperAnalyzerService(analyzer);

            var controller = new HomeController(_mockLogger.Object, service, _mockRepository.Object);

            // Загрузка pdf файла для тестирования из текущей директории
            // TODO: Нестабильное решение с множеством сторонних эффектов (если кто-то поменяет структуру папок в решении?)
            // Следует использовать отдельную сборку с тестовыми ресурсами
            var path = Path.GetFullPath(Path.Combine(_currentPath, $"..{_sep}..{_sep}..{_sep}TestResources{_sep}paper_short.pdf"));

            var fileStream   = new FileStream(path, FileMode.Open, FileAccess.Read);
            var memoryStream = new MemoryStream();

            fileStream.CopyTo(memoryStream);
            memoryStream.Position = 0;

            _mockFile.Setup(f => f.Length).Returns(memoryStream.Length);
            _mockFile.Setup(f => f.FileName).Returns("testfile.xls");
            _mockFile.Setup(f => f.CopyToAsync(It.IsAny <Stream>(), It.IsAny <CancellationToken>()))
            .Callback <Stream, CancellationToken>((stream, token) => memoryStream.CopyTo(stream))
            .Returns(Task.CompletedTask);

            var result = await controller.UploadFile(_mockFile.Object, string.Empty, string.Empty, string.Empty);

            var errorResult = result as ViewResult;

            Assert.IsNotNull(errorResult);
            var errorModel = errorResult.Model as ErrorViewModel;

            // RequestID не будет присвоен
            Assert.IsNull(errorModel.RequestId);
            // Если RequestID не присвоен, то он не показывается
            Assert.IsFalse(errorModel.ShowRequestId);
            // Сообщение об ошибке должено быть непустым
            Assert.AreNotEqual(errorModel.Message, string.Empty);

            fileStream.Close();
            memoryStream.Close();
        }
        public async Task EndToEndSuccessTest()
        {
            // TODO: Если иерархия классов будет разростаться, следует заменить явное создание экземпляров на использование контейнера ServiceProvider
            var env      = new PaperAnalyzerEnvironment();
            var analyzer = new PapersAnalyzer(env);
            var service  = new PaperAnalyzerService(analyzer);

            var controller = new HomeController(_mockLogger.Object, service, _mockRepository.Object);

            // Загрузка pdf файла для тестирования из текущей директории
            // TODO: Нестабильное решение с множеством сторонних эффектов (если кто-то поменяет структуру папок в решении?)
            // Следует использовать отдельную сборку с тестовыми ресурсами
            var path = Path.GetFullPath(Path.Combine(_currentPath, $"..{_sep}..{_sep}..{_sep}TestResources{_sep}paper_short.pdf"));

            var fileStream   = new FileStream(path, FileMode.Open, FileAccess.Read);
            var memoryStream = new MemoryStream();

            fileStream.CopyTo(memoryStream);
            memoryStream.Position = 0;

            _mockFile.Setup(f => f.Length).Returns(memoryStream.Length);
            _mockFile.Setup(f => f.FileName).Returns("paper_short.pdf");
            _mockFile.Setup(f => f.CopyToAsync(It.IsAny <Stream>(), It.IsAny <CancellationToken>()))
            .Callback <Stream, CancellationToken>((stream, token) => memoryStream.CopyTo(stream))
            .Returns(Task.CompletedTask);

            var result = await controller.UploadFile(_mockFile.Object, string.Empty, string.Empty, string.Empty);

            var okResult = result as OkObjectResult;

            Assert.IsNotNull(okResult);
            Assert.AreEqual(StatusCodes.Status200OK, okResult.StatusCode);
            Assert.IsNotNull(okResult.Value);

            fileStream.Close();
            memoryStream.Close();
        }