private async Task SendScheduledRemindersAsync() { var reminders = await _storage.FindAsync(ReminderItemFilter.CreatedAtNow()); foreach (var reminder in reminders) { reminder.MarkReady(); await _storage.UpdateAsync(reminder); try { await _sender.SendAsync(new ReminderNotification( reminder.DateTime, reminder.Message, reminder.ChatId ) ); await OnReminderSentAsync(reminder); } catch (ReminderSenderException) { await OnReminderFailedAsync(reminder); } } }
private async Task OnTickAsync() { _logger.LogDebug("Ticked timer"); foreach (var reminder in await _storage.FindByAsync(ReminderItemFilter.CreatedAtNow())) { _logger.LogInformation($"Mark reminder {reminder.Id:N} as ready"); reminder.MarkReady(); await _storage.UpdateAsync(reminder); try { _logger.LogInformation($"Sending reminder {reminder.Id:N}"); await _sender.SendAsync( new ReminderNotification( reminder.ContactId, reminder.Message, reminder.DateTime ) ); await OnReminderSentAsync(reminder); } catch (ReminderSenderException exception) { _logger.LogError(exception, "Exception occured while sending notification"); await OnReminderFailedAsync(reminder); } } }
public async Task FindAsync_WithCorrectDate_ShouldReturnReminders() { var storage = new ReminderStorage(Factory.CreateClient()); await storage.AddAsync(Create.Reminder.InPast()); var foundReminders = await storage.FindAsync(ReminderItemFilter.CreatedAtNow()); CollectionAssert.IsNotEmpty(foundReminders); }
public async Task WhenReminderList_IfDatetimeSpecified_ShouldReturnMatchingItems() { using var factory = new ReminderWebApplicationFactory(); var storage = factory .WithItems( Create.Reminder.AtDatetime(DateTimeOffset.UtcNow.AddMinutes(-1)), Create.Reminder.AtDatetime(DateTimeOffset.UtcNow.AddMinutes(1)) ) .GetClient(); var items = await storage.FindByAsync(ReminderItemFilter.CreatedAtNow()); Assert.AreEqual(1, items.Length); }
public async Task FindAsync_GivenNonexistentItems_ShouldReturnEmptyCollection() { //Arrange var storage = new ReminderStorage(DatabaseTestsHelper.ConnectionString); await storage.AddAsync(Create.Reminder.InFuture()); await storage.AddAsync(Create.Reminder.InFuture()); //Act var found = await storage.FindAsync(ReminderItemFilter.CreatedAtNow()); //Assert CollectionAssert.IsEmpty(found); }