public async Task UploadDocument_Should_Return_NotNullModel()
        {
            // Arrange
            var fakeStream = new MemoryStream();
            var uploadDocumentInputModel = new UploadDocumentInputModel
            {
                UploadedBy          = 1,
                DocumentName        = "test",
                DocumentStream      = fakeStream,
                DocumentContentType = "application/pdf"
            };

            var expected = new UploadDocumentReturnModel
            {
                DocumentId           = 0,
                OriginalDocumentName = "test"
            };

            // Act
            var actual = await _documentsFileService.UploadDocument(uploadDocumentInputModel);

            // Assert
            actual.Should().NotBeNull();
            actual.Should().Equals(expected);
        }
        public async Task <UploadDocumentReturnModel> UploadDocument(UploadDocumentInputModel uploadDocumentInputModel)
        {
            using (var transaction = await _unitOfWork.BeginTransactionAsync().ConfigureAwait(false))
            {
                try
                {
                    DocumentType documentType = await GetDocumentType(uploadDocumentInputModel).ConfigureAwait(false);

                    var uploadFileName = _fileService.UploadFile(uploadDocumentInputModel.DocumentStream, uploadDocumentInputModel.DocumentName);

                    var document = new Document()
                    {
                        OriginalDocumentName = uploadDocumentInputModel.DocumentName,
                        DocumentName         = uploadFileName,
                        DocumentTypeId       = documentType.TypeId,
                        DocumentPath         = _fileService.GetUploadsPath(),
                        DocumentSize         = uploadDocumentInputModel.DocumentStream.Length,
                        UploadedBy           = uploadDocumentInputModel.UploadedBy,
                        UploadedDate         = _dateService.UtcNow
                    };

                    await _documentsRepository.AddDocumentAsync(document).ConfigureAwait(false);

                    await _unitOfWork.SaveChangesAsync().ConfigureAwait(false);

                    var returnModel = new UploadDocumentReturnModel
                    {
                        DocumentId           = document.DocumentId,
                        OriginalDocumentName = document.OriginalDocumentName,
                    };

                    transaction.Commit();

                    return(returnModel);
                }
                catch (Exception exception)
                {
                    transaction.Rollback();
                    throw new ServiceException(ErrorCodes.UploadDocumentException, "Something went wrong while uploading a document", exception);
                }
            }
        }