public void Fetch()
        {
            TimeRunner.Run(async(time, th) =>
            {
                var downloader = new FakeElexonDownloader();
                var dir        = new FakeDirectory(th);
                var fetcher    = new FetchB1610(th, downloader, dir, time, null);

                var cts     = new CancellationTokenSource();
                Task unused = th.Run(async() =>
                {
                    await th.Delay(NodaTime.Duration.FromMinutes(5)).ConfigureAwait(th);
                    cts.Cancel();
                });

                await fetcher.Start(cts.Token).ConfigureAwaitHideCancel(th);

                var reader = new B1610.Reader(th, dir);
                Assert.Equal(100 + 103, await reader.CountAsync().ConfigureAwait(th));
                Assert.Equal(new B1610.Data("GRAI-6", Instant.FromUtc(2017, 7, 31, 23, 0), Power.FromKilowatts(226_200)),
                             await(await reader.ReadAsync(0, 1)).First());
                Assert.Equal(new B1610.Data("GRGBW-1", Instant.FromUtc(2017, 7, 31, 23, 30), Power.FromKilowatts(43_390)),
                             await(await reader.ReadAsync(100 + 103 - 1, 100 + 103)).First());
            }, startInstant: NodaTime.Instant.FromUtc(2017, 8, 10, 22, 30));
        }
 public FetchB1610(ITaskHelper taskHelper, IElexonDownloader downloader, IDirectory dir, ITime time,
                   string errorLogFilename)
 {
     _taskHelper       = taskHelper;
     _time             = time;
     _scheduler        = new Scheduler(time, taskHelper);
     _b1610            = new B1610(taskHelper, downloader);
     _reader           = new B1610.Reader(taskHelper, dir);
     _writer           = new B1610.Writer(taskHelper, dir);
     _errorLogFilename = errorLogFilename;
 }