示例#1
0
        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();
        }
示例#2
0
        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));
        }
示例#3
0
        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);
        }
示例#4
0
 public async Task <BulkUploadMeterReadingsResponse> BuklUploadMeterReadings(BulkUploadMeterReadingsRequest request)
 {
     return(await _mediator.ExecuteAsync <BulkUploadMeterReadingsRequest, BulkUploadMeterReadingsResponse>(request));
 }