public override void Setup() { _tokenServiceClient = Substitute.For <ITokenServiceClient>(); _configuration = new ResultsAndCertificationConfiguration { ResultsAndCertificationInternalApiSettings = new ResultsAndCertificationInternalApiSettings { Uri = "http://tlevel.api.com" } }; _mockHttpResult = new BulkAssessmentResponse { IsSuccess = false, BlobUniqueReference = Guid.NewGuid(), ErrorFileSize = 1.5 }; _model = new BulkProcessRequest { AoUkprn = _ukprn, BlobFileName = "assessmenttfile.csv", BlobUniqueReference = Guid.NewGuid() }; }
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 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); }
private async Task <BulkProcessResponse> ProcessRegistrationResponse(BulkProcessRequest request, BulkProcessResponse response, RegistrationProcessResponse registrationProcessResult) { _ = registrationProcessResult.IsSuccess ? await MoveFileFromProcessingToProcessedAsync(request) : await MoveFileFromProcessingToFailedAsync(request); await CreateDocumentUploadHistory(request, registrationProcessResult.IsSuccess?DocumentUploadStatus.Processed : DocumentUploadStatus.Failed); response.IsSuccess = registrationProcessResult.IsSuccess; response.Stats = registrationProcessResult.BulkUploadStats; return(response); }
public override void Setup() { Mapper = Substitute.For <IMapper>(); Logger = Substitute.For <ILogger <ResultLoader> >(); InternalApiClient = Substitute.For <IResultsAndCertificationInternalApiClient>(); BlobStorageService = Substitute.For <IBlobStorageService>(); FormFile = Substitute.For <IFormFile>(); BlobUniqueReference = Guid.NewGuid(); BulkResultRequest = new BulkProcessRequest { AoUkprn = Ukprn }; }
private async Task <BulkProcessResponse> SaveErrorsAndUpdateResponse(BulkProcessRequest request, BulkProcessResponse response, IList <BulkProcessValidationError> registrationValidationErrors) { var errorFile = await CreateErrorFileAsync(registrationValidationErrors); 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 Task <bool> DeleteFileFromProcessingFolderAsync(BulkProcessRequest request) { if (request == null) { return(false); } await _blobStorageService.DeleteFileAsync(new BlobStorageData { ContainerName = request.DocumentType.ToString(), SourceFilePath = $"{request.AoUkprn}/{BulkProcessStatus.Processing}", BlobFileName = request.BlobFileName }); return(true); }
public async Task <bool> MoveFileFromProcessingToProcessedAsync(BulkProcessRequest request) { if (request == null) { return(false); } await _blobStorageService.MoveFileAsync(new BlobStorageData { ContainerName = request.DocumentType.ToString(), BlobFileName = request.BlobFileName, SourceFilePath = $"{request.AoUkprn}/{BulkProcessStatus.Processing}", DestinationFilePath = $"{request.AoUkprn}/{BulkProcessStatus.Processed}" }); return(true); }
public async Task <bool> UploadErrorsFileToBlobStorage(BulkProcessRequest request, byte[] errorFile) { if (errorFile == null || errorFile.Length == 0) { return(false); } await _blobStorageService.UploadFromByteArrayAsync(new BlobStorageData { ContainerName = request.DocumentType.ToString(), SourceFilePath = $"{request.AoUkprn}/{BulkProcessStatus.ValidationErrors}", BlobFileName = request.BlobFileName, UserName = request.PerformedBy, FileData = errorFile }); return(true); }
public override void Setup() { CsvService = Substitute.For <ICsvHelperService <ResultCsvRecordRequest, CsvResponseModel <ResultCsvRecordResponse>, ResultCsvRecordResponse> >(); ResultService = Substitute.For <IResultService>(); BlobService = Substitute.For <IBlobStorageService>(); Logger = Substitute.For <ILogger <BulkResultLoader> >(); DocumentUploadHistoryService = Substitute.For <IDocumentUploadHistoryService>(); BlobUniqueRef = Guid.NewGuid(); Request = new BulkProcessRequest { AoUkprn = 1234567891, BlobFileName = "Results.csv", BlobUniqueReference = BlobUniqueRef, DocumentType = DocumentType.Results, FileType = FileType.Csv, PerformedBy = "TestUser", }; }
public async Task <bool> CreateDocumentUploadHistory(BulkProcessRequest request, DocumentUploadStatus status = DocumentUploadStatus.Processed) { if (request == null) { return(false); } var model = new DocumentUploadHistoryDetails { AoUkprn = request.AoUkprn, BlobFileName = request.BlobFileName, BlobUniqueReference = request.BlobUniqueReference, DocumentType = (int)request.DocumentType, FileType = (int)request.FileType, Status = (int)status, CreatedBy = request.PerformedBy }; return(await _documentUploadHistoryService.CreateDocumentUploadHistory(model)); }
// Results endpoints public async Task <BulkResultResponse> ProcessBulkResultsAsync(BulkProcessRequest model) { var requestUri = ApiConstants.ProcessBulkResultsUri; return(await PostAsync <BulkProcessRequest, BulkResultResponse>(requestUri, model)); }
public async Task <BulkAssessmentResponse> ProcessBulkAssessmentsAsync(BulkProcessRequest request) { return(await _bulkAssementProcess.ProcessAsync(request)); }
public async Task <BulkProcessResponse> ProcessAsync(BulkProcessRequest request) { var response = new BulkProcessResponse(); try { CsvResponseModel <RegistrationCsvRecordResponse> stage2RegistrationsResponse = 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 registrations. 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 stage2RegistrationsResponse = await _csvService.ReadAndParseFileAsync(new RegistrationCsvRecordRequest { FileStream = fileStream }); if (!stage2RegistrationsResponse.IsDirty) { CheckUlnDuplicates(stage2RegistrationsResponse.Rows); } } if (stage2RegistrationsResponse.IsDirty || !stage2RegistrationsResponse.Rows.Any(x => x.IsValid)) { var validationErrors = ExtractAllValidationErrors(stage2RegistrationsResponse); return(await SaveErrorsAndUpdateResponse(request, response, validationErrors)); } // Stage 3 valiation. var stage3RegistrationsResponse = await _registrationService.ValidateRegistrationTlevelsAsync(request.AoUkprn, stage2RegistrationsResponse.Rows.Where(x => x.IsValid)); if (stage2RegistrationsResponse.Rows.Any(x => !x.IsValid) || stage3RegistrationsResponse.Any(x => !x.IsValid)) { var validationErrors = ExtractAllValidationErrors(stage2RegistrationsResponse, stage3RegistrationsResponse); return(await SaveErrorsAndUpdateResponse(request, response, validationErrors)); } // Step: Map data to DB model type. var tqRegistrationProfiles = _registrationService.TransformRegistrationModel(stage3RegistrationsResponse, request.PerformedBy); // Step: Process Stage 4 validation and DB operation var registrationProcessResult = await _registrationService.CompareAndProcessRegistrationsAsync(tqRegistrationProfiles); return(registrationProcessResult.IsValid ? await ProcessRegistrationResponse(request, response, registrationProcessResult) : await SaveErrorsAndUpdateResponse(request, response, registrationProcessResult.ValidationErrors)); } catch (Exception ex) { var errorMessage = $"Something went wrong while processing bluk registrations. Method: ProcessBulkRegistrationsAsync(BulkRegistrationRequest : {JsonConvert.SerializeObject(request)}), User: {request.PerformedBy}"; _logger.LogError(LogEvent.BulkRegistrationProcessFailed, ex, errorMessage); await DeleteFileFromProcessingFolderAsync(request); } return(response); }
public async Task <BulkResultResponse> ProcessBulkResultsAsync(BulkProcessRequest request) { return(await _bulkResultProcess.ProcessAsync(request)); }
public async Task <BulkProcessResponse> ProcessBulkRegistrationsAsync(BulkProcessRequest request) { return(await _bulkRegistrationProcess.ProcessAsync(request)); }