public async Task ItShouldPublishAndUpdateThenContinueWhenThereAreExpiredRecords() { A.CallTo(() => _dao.GetExpiredSpfRecords()) .Returns(CreateSchedulerStates("ncsc.gov.uk", "fco.gov.uk")); ProcessResult result = await _sut.Process(); A.CallTo(() => _publisher.Publish(A <SpfRecordExpired> ._, A <string> ._)) .MustHaveHappenedTwiceExactly(); A.CallTo(() => _dao.UpdateLastChecked(A <List <SpfSchedulerState> > ._)) .MustHaveHappenedOnceExactly(); Assert.AreEqual(ProcessResult.Continue, result); }
public async Task <ProcessResult> Process() { Stopwatch stopwatch = Stopwatch.StartNew(); List <SpfSchedulerState> expiredRecords = await _dao.GetExpiredSpfRecords(); _log.LogInformation($"Found {expiredRecords.Count} expired records."); if (expiredRecords.Any()) { expiredRecords .Select(_ => _publisher.Publish(_.ToSpfRecordExpiredMessage(), _config.PublisherConnectionString)) .Batch(10) .ToList() .ForEach(async _ => await Task.WhenAll(_)); await _dao.UpdateLastChecked(expiredRecords); _log.LogInformation($"Processing for domains {string.Join(',', expiredRecords.Select(_ => _.Id))} took {stopwatch.Elapsed}."); } stopwatch.Stop(); return(expiredRecords.Any() ? ProcessResult.Continue : ProcessResult.Stop); }