public override void Setup() { _tokenServiceClient = Substitute.For <ITokenServiceClient>(); _configuration = new ResultsAndCertificationConfiguration { ResultsAndCertificationInternalApiSettings = new ResultsAndCertificationInternalApiSettings { Uri = "http://tlevel.api.com" } }; _mockHttpResult = new BulkProcessResponse { IsSuccess = false, BlobUniqueReference = Guid.NewGuid(), ErrorFileSize = 1.5 }; _model = new BulkProcessRequest { AoUkprn = _ukprn, BlobFileName = "inputfile_1.csv", BlobUniqueReference = Guid.NewGuid() }; }
public override void Given() { BulkRegistrationResponse = new BulkProcessResponse { IsSuccess = false, BlobUniqueReference = BlobUniqueReference, ErrorFileSize = 1.5 }; UploadRegistrationsRequestViewModel = new UploadRegistrationsRequestViewModel { AoUkprn = Ukprn, File = FormFile }; UploadRegistrationsResponseViewModel = new UploadRegistrationsResponseViewModel { IsSuccess = false, BlobUniqueReference = BlobUniqueReference, ErrorFileSize = 1.5 }; Mapper.Map <BulkProcessRequest>(UploadRegistrationsRequestViewModel).Returns(BulkRegistrationRequest); Mapper.Map <UploadRegistrationsResponseViewModel>(BulkRegistrationResponse).Returns(UploadRegistrationsResponseViewModel); InternalApiClient.ProcessBulkRegistrationsAsync(BulkRegistrationRequest).Returns(BulkRegistrationResponse); Loader = new RegistrationLoader(Mapper, Logger, InternalApiClient, BlobStorageService); }
public override void Given() { BulkRegistrationResponse = new BulkProcessResponse { IsSuccess = true, Stats = new BulkUploadStats { TotalRecordsCount = 10, NewRecordsCount = 5, AmendedRecordsCount = 3, UnchangedRecordsCount = 2 } }; UploadRegistrationsRequestViewModel = new UploadRegistrationsRequestViewModel { AoUkprn = Ukprn, File = FormFile }; UploadRegistrationsResponseViewModel = new UploadRegistrationsResponseViewModel { IsSuccess = true, Stats = new BulkUploadStatsViewModel { TotalRecordsCount = 10, NewRecordsCount = 5, AmendedRecordsCount = 3, UnchangedRecordsCount = 2 } }; Mapper.Map <BulkProcessRequest>(UploadRegistrationsRequestViewModel).Returns(BulkRegistrationRequest); Mapper.Map <UploadRegistrationsResponseViewModel>(BulkRegistrationResponse).Returns(UploadRegistrationsResponseViewModel); InternalApiClient.ProcessBulkRegistrationsAsync(BulkRegistrationRequest).Returns(BulkRegistrationResponse); Loader = new RegistrationLoader(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(); BulkRegistrationRequest = new BulkProcessRequest { AoUkprn = Ukprn }; BulkRegistrationResponse = new BulkProcessResponse { IsSuccess = false, BlobUniqueReference = Guid.NewGuid(), ErrorFileSize = 1.5 }; UploadRegistrationsRequestViewModel = new UploadRegistrationsRequestViewModel { AoUkprn = Ukprn, File = FormFile }; InternalApiClient.ProcessBulkRegistrationsAsync(BulkRegistrationRequest).Returns(BulkRegistrationResponse); Loader = new RegistrationLoader(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(); BulkRegistrationRequest = new BulkProcessRequest { AoUkprn = Ukprn }; BulkRegistrationResponse = new BulkProcessResponse { IsSuccess = true, Stats = new BulkUploadStats { TotalRecordsCount = 10, NewRecordsCount = 5, AmendedRecordsCount = 3, UnchangedRecordsCount = 2 } }; UploadRegistrationsRequestViewModel = new UploadRegistrationsRequestViewModel { AoUkprn = Ukprn, File = FormFile }; InternalApiClient.ProcessBulkRegistrationsAsync(BulkRegistrationRequest).Returns(BulkRegistrationResponse); Loader = new RegistrationLoader(Mapper, Logger, InternalApiClient, BlobStorageService); }
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); }
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); }
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 async override Task When() { _loader = new BulkResultLoader(CsvService, ResultService, BlobService, DocumentUploadHistoryService, Logger); Response = await _loader.ProcessAsync(Request); }
public async override Task When() { _result = await _apiClient.ProcessBulkRegistrationsAsync(_model); }