public override void Given()
        {
            BulkResultResponse = new BulkResultResponse
            {
                IsSuccess = true,
                Stats     = new BulkUploadStats
                {
                    TotalRecordsCount = 10
                }
            };

            UploadResultsRequestViewModel = new UploadResultsRequestViewModel {
                AoUkprn = Ukprn, File = FormFile
            };

            UploadResultsResponseViewModel = new UploadResultsResponseViewModel
            {
                IsSuccess = true,
                Stats     = new BulkUploadStatsViewModel
                {
                    TotalRecordsCount = 10
                }
            };

            Mapper.Map <BulkProcessRequest>(UploadResultsRequestViewModel).Returns(BulkResultRequest);
            Mapper.Map <UploadResultsResponseViewModel>(BulkResultResponse).Returns(UploadResultsResponseViewModel);
            InternalApiClient.ProcessBulkResultsAsync(BulkResultRequest).Returns(BulkResultResponse);
            Loader = new ResultLoader(Mapper, Logger, InternalApiClient, BlobStorageService);
        }
        public override void Given()
        {
            BulkResultResponse = new BulkResultResponse
            {
                IsSuccess           = false,
                BlobUniqueReference = BlobUniqueReference,
                ErrorFileSize       = 1.5
            };

            UploadResultsRequestViewModel = new UploadResultsRequestViewModel {
                AoUkprn = Ukprn, File = FormFile
            };

            UploadResultsResponseViewModel = new UploadResultsResponseViewModel
            {
                IsSuccess           = false,
                BlobUniqueReference = BlobUniqueReference,
                ErrorFileSize       = 1.5
            };

            Mapper.Map <BulkProcessRequest>(UploadResultsRequestViewModel).Returns(BulkResultRequest);
            Mapper.Map <UploadResultsResponseViewModel>(BulkResultResponse).Returns(UploadResultsResponseViewModel);
            InternalApiClient.ProcessBulkResultsAsync(BulkResultRequest).Returns(BulkResultResponse);
            Loader = new ResultLoader(Mapper, Logger, InternalApiClient, BlobStorageService);
        }
        public override void Given()
        {
            HttpContextAccessor = Substitute.For <IHttpContextAccessor>();
            HttpContextAccessor.HttpContext.Returns(new DefaultHttpContext
            {
                User = new ClaimsPrincipal(new ClaimsIdentity(new[]
                {
                    new Claim(ClaimTypes.GivenName, _givename),
                    new Claim(ClaimTypes.Surname, _surname),
                    new Claim(ClaimTypes.Email, _email)
                }))
            });

            CreateMapper();

            BulkResultRequest = new BulkProcessRequest {
                AoUkprn = Ukprn
            };

            BulkResultResponse = new BulkResultResponse
            {
                IsSuccess           = false,
                BlobUniqueReference = Guid.NewGuid(),
                ErrorFileSize       = 1.5
            };

            UploadResultsRequestViewModel = new UploadResultsRequestViewModel {
                AoUkprn = Ukprn, File = FormFile
            };
            InternalApiClient.ProcessBulkResultsAsync(BulkResultRequest).Returns(BulkResultResponse);
            Loader = new ResultLoader(Mapper, Logger, InternalApiClient, BlobStorageService);
        }
        public override void Given()
        {
            HttpContextAccessor = Substitute.For <IHttpContextAccessor>();
            HttpContextAccessor.HttpContext.Returns(new DefaultHttpContext
            {
                User = new ClaimsPrincipal(new ClaimsIdentity(new[]
                {
                    new Claim(ClaimTypes.GivenName, _givename),
                    new Claim(ClaimTypes.Surname, _surname),
                    new Claim(ClaimTypes.Email, _email)
                }))
            });

            CreateMapper();

            BulkResultRequest = new BulkProcessRequest {
                AoUkprn = Ukprn
            };

            BulkResultResponse = new BulkResultResponse
            {
                IsSuccess = true,
                Stats     = new BulkUploadStats
                {
                    TotalRecordsCount = 10
                }
            };

            UploadResultsRequestViewModel = new UploadResultsRequestViewModel {
                AoUkprn = Ukprn, File = FormFile
            };
            InternalApiClient.ProcessBulkResultsAsync(BulkResultRequest).Returns(BulkResultResponse);
            Loader = new ResultLoader(Mapper, Logger, InternalApiClient, BlobStorageService);
        }
示例#5
0
        public override void Setup()
        {
            _tokenServiceClient = Substitute.For <ITokenServiceClient>();

            _configuration = new ResultsAndCertificationConfiguration
            {
                ResultsAndCertificationInternalApiSettings = new ResultsAndCertificationInternalApiSettings {
                    Uri = "http://tlevel.api.com"
                }
            };

            _mockHttpResult = new BulkResultResponse
            {
                IsSuccess           = false,
                BlobUniqueReference = Guid.NewGuid(),
                ErrorFileSize       = 1.5
            };

            _model = new BulkProcessRequest
            {
                AoUkprn             = _ukprn,
                BlobFileName        = "Resultfile.csv",
                BlobUniqueReference = Guid.NewGuid()
            };
        }
        public async Task <BulkResultResponse> ProcessAsync(BulkProcessRequest request)
        {
            var response = new BulkResultResponse();

            try
            {
                CsvResponseModel <ResultCsvRecordResponse> stage2Response = null;

                // Step 1:  Read file from Blob
                using (var fileStream = await _blobStorageService.DownloadFileAsync(new BlobStorageData
                {
                    ContainerName = request.DocumentType.ToString(),
                    BlobFileName = request.BlobFileName,
                    SourceFilePath = $"{request.AoUkprn}/{BulkProcessStatus.Processing}",
                    UserName = request.PerformedBy
                }))
                {
                    if (fileStream == null)
                    {
                        var blobReadError = $"No FileStream found to process bluk results. Method: DownloadFileAsync(ContainerName: {request.DocumentType}, BlobFileName = {request.BlobFileName}, SourceFilePath = {request.AoUkprn}/{BulkProcessStatus.Processing}, UserName = {request.PerformedBy}), User: {request.PerformedBy}";
                        _logger.LogInformation(LogEvent.FileStreamNotFound, blobReadError);
                        throw new Exception(blobReadError);
                    }

                    // Stage 2 validation
                    stage2Response = await _csvService.ReadAndParseFileAsync(new ResultCsvRecordRequest { FileStream = fileStream });

                    if (!stage2Response.IsDirty)
                    {
                        CheckUlnDuplicates(stage2Response.Rows);
                    }
                }

                // Step 2: Stage 2 validations
                if (stage2Response.IsDirty || !stage2Response.Rows.Any(x => x.IsValid))
                {
                    var validationErrors = ExtractAllValidationErrors(stage2Response);
                    return(await SaveErrorsAndUpdateResponse(request, response, validationErrors));
                }

                // Stage 3 valiation.
                var stage3Response = await _resultService.ValidateResultsAsync(request.AoUkprn, stage2Response.Rows.Where(x => x.IsValid));

                if (stage2Response.Rows.Any(x => !x.IsValid) || stage3Response.Any(x => !x.IsValid))
                {
                    var validationErrors = ExtractAllValidationErrors(stage2Response, stage3Response);
                    return(await SaveErrorsAndUpdateResponse(request, response, validationErrors));
                }

                // Step: Map data to DB model type.
                var results = _resultService.TransformResultsModel(stage3Response, request.PerformedBy);

                // Step: DB operation
                var resultsProcessResult = await _resultService.CompareAndProcessResultsAsync(results);

                // update total assessment records stats
                resultsProcessResult.BulkUploadStats = new BulkUploadStats {
                    TotalRecordsCount = stage3Response.Count
                };

                return(await ProcessResultsResponse(request, response, resultsProcessResult));
            }
            catch (Exception ex)
            {
                var errorMessage = $"Something went wrong while processing bluk results. Method: ProcessBulkResultsAsync(BulkProcessRequest : {JsonConvert.SerializeObject(request)}), User: {request.PerformedBy}";
                _logger.LogError(LogEvent.BulkResultProcessFailed, ex, errorMessage);
                await DeleteFileFromProcessingFolderAsync(request);
            }

            return(response);
        }
        private async Task <BulkResultResponse> ProcessResultsResponse(BulkProcessRequest request, BulkResultResponse response, ResultProcessResponse resultProcessResult)
        {
            _ = resultProcessResult.IsSuccess ? await MoveFileFromProcessingToProcessedAsync(request) : await MoveFileFromProcessingToFailedAsync(request);
            await CreateDocumentUploadHistory(request, resultProcessResult.IsSuccess?DocumentUploadStatus.Processed : DocumentUploadStatus.Failed);

            response.IsSuccess = resultProcessResult.IsSuccess;
            response.Stats     = resultProcessResult.BulkUploadStats;
            return(response);
        }
        private async Task <BulkResultResponse> SaveErrorsAndUpdateResponse(BulkProcessRequest request, BulkResultResponse response, IList <BulkProcessValidationError> validationErrors)
        {
            var errorFile = await CreateErrorFileAsync(validationErrors);

            await UploadErrorsFileToBlobStorage(request, errorFile);
            await MoveFileFromProcessingToFailedAsync(request);
            await CreateDocumentUploadHistory(request, DocumentUploadStatus.Failed);

            response.IsSuccess           = false;
            response.BlobUniqueReference = request.BlobUniqueReference;
            response.ErrorFileSize       = Math.Round((errorFile.Length / 1024D), 2);

            return(response);
        }
示例#9
0
 public async override Task When()
 {
     _result = await _apiClient.ProcessBulkResultsAsync(_model);
 }