public async Task <Establishment[]> DownloadEstablishmentsAsync(CancellationToken cancellationToken) { var downloadLinks = await GetAvailableDownloadLinksAsync(cancellationToken); var downloadLinksNames = downloadLinks.Select(x => x.Title).Aggregate((x, y) => $"{x}, {y}"); _logger.Debug($"Found {downloadLinks.Length} download links - {downloadLinksNames}"); var establishmentLink = downloadLinks.SingleOrDefault(l => l.Title.Equals("Establishment fields", StringComparison.CurrentCultureIgnoreCase)); if (establishmentLink == null) { _logger.Debug($"Failed to find link with text 'Establishment fields'"); return(new Establishment[0]); } var csv = await DownloadCsvAsync(establishmentLink.Url, cancellationToken); _logger.Debug($"Downloaded csv of {csv.Length} bytes"); using (var stream = new MemoryStream(csv)) using (var reader = new StreamReader(stream)) using (var parser = new EstablishmentFileParser(reader)) { var establishments = parser.GetRecords(); return(establishments); } }
public void ThenItShouldParseWithSuccess() { FileInfo sampleFile = new FileInfo( "Samples/edubasealldata20200210.csv"); FileStream fileStream = sampleFile.OpenRead(); StreamReader streamReader = new StreamReader(fileStream); EstablishmentFileParser establishmentFileParser = new EstablishmentFileParser(streamReader); Establishment[] establishments = establishmentFileParser.GetRecords(); Assert.AreEqual(establishments.Length, 48354); }
public async Task <Establishment[]> DownloadEstablishmentsAsync(CancellationToken cancellationToken) { if (_zip == null) { await AcquireExtract(cancellationToken); } var zipEntry = _zip.Entries.SingleOrDefault(e => e.Name == _configuration.ExtractEstablishmentsFileName); if (zipEntry == null) { throw new Exception($"Extract does not contain entry for {_configuration.ExtractEstablishmentsFileName}"); } using (var stream = zipEntry.Open()) using (var reader = new StreamReader(stream)) using (var parser = new EstablishmentFileParser(reader)) { var establishments = parser.GetRecords(); return(establishments); } }