public async Task When_Execute_Uploads_MeterReadings_Invalid_Values() { //Arrange var repository = A.Fake <IDataSetFactory>(); var sut = new BulkUploadMeterReadingsHandler(A.Fake <IUnitOfWork>(), repository, new BuklUploadMeterReadingsValidator()); var accountDataset = A.Fake <IDataSet <Account> >(); A.CallTo(() => repository.Resolve <Account>()).Returns(accountDataset); A.CallTo(() => accountDataset.AnyAsync(A <Expression <Func <Account, bool> > > .Ignored, A <CancellationToken> ._)).Returns(false); var meterReadingDataset = A.Fake <IDataSet <MeterReading> >(); A.CallTo(() => repository.Resolve <MeterReading>()).Returns(meterReadingDataset); A.CallTo(() => meterReadingDataset.AnyAsync(A <Expression <Func <MeterReading, bool> > > .Ignored, A <CancellationToken> ._)).Returns(true); var ms = new MemoryStream(); TextWriter tw = new StreamWriter(ms); await tw.WriteLineAsync("AccountId,MeterReadingDateTime,MeterReadValue"); await tw.WriteLineAsync("INVALID,22/04/2019 09:24,01002"); await tw.WriteLineAsync("2344,22/22/2019 09:24,01002"); await tw.WriteLineAsync("2344,22/04/2019 09:24,100200"); await tw.WriteLineAsync("2345,22/04/2019 09:24,01002"); await tw.FlushAsync(); ms.Position = 0; var request = new BulkUploadMeterReadingsRequest { UploadFile = ms }; //Act var result = await sut.HandleAsync(request); //Assert result.Should().NotBeNull(); result.SuccesfulUploads.Should().Be(0); result.FailedUploads.Should().Be(4); result.UploadErrors.Count.Should().Be(4); result.UploadErrors.Any(e => e.Contains("INVALID' is not a valid number for AccountId")).Should().BeTrue(); result.UploadErrors.Any(e => e.Contains("22/22/2019 09:24' is not a valid date time for MeterReadingDateTime")).Should().BeTrue(); result.UploadErrors.Any(e => e.Contains("100200' is not a valid number for MeterReadValue")).Should().BeTrue(); result.UploadErrors.Any(e => e.Contains("Account with AccountId '2345' not found!")).Should().BeTrue(); }
public async Task <IActionResult> BulkUpload(IFormFile file) { if (file == null) { throw new ValidationException("File is null"); } if (file.Length == 0) { throw new ValidationException("File is empty"); } var request = new BulkUploadMeterReadingsRequest { UploadFile = new MemoryStream() }; await file.CopyToAsync(request.UploadFile); var result = await _meterService.BuklUploadMeterReadings(request); return(Ok(result)); }
public async Task When_Execute_Uploads_MeterReadings() { //Arrange var repository = A.Fake <IDataSetFactory>(); var sut = new BulkUploadMeterReadingsHandler(A.Fake <IUnitOfWork>(), repository, new BuklUploadMeterReadingsValidator()); var dataset = A.Fake <IDataSet <Account> >(); dataset.Add(new Account { AccountId = 2344 }); A.CallTo(() => repository.Resolve <Account>()).Returns(dataset); A.CallTo(() => dataset.AnyAsync(A <Expression <Func <Account, bool> > > .Ignored, A <CancellationToken> ._)).Returns(true); var ms = new MemoryStream(); TextWriter tw = new StreamWriter(ms); await tw.WriteLineAsync("AccountId,MeterReadingDateTime,MeterReadValue"); await tw.WriteLineAsync("2344,22/04/2019 09:24,01002"); await tw.FlushAsync(); ms.Position = 0; var request = new BulkUploadMeterReadingsRequest { UploadFile = ms }; //Act var result = await sut.HandleAsync(request); //Assert result.Should().NotBeNull(); result.SuccesfulUploads.Should().Be(1); result.FailedUploads.Should().Be(0); result.UploadErrors.Count.Should().Be(0); }
public async Task <BulkUploadMeterReadingsResponse> BuklUploadMeterReadings(BulkUploadMeterReadingsRequest request) { return(await _mediator.ExecuteAsync <BulkUploadMeterReadingsRequest, BulkUploadMeterReadingsResponse>(request)); }