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); }
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); }
public async override Task When() { _result = await _apiClient.ProcessBulkResultsAsync(_model); }