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);
                }
            }
        }
Beispiel #3
0
        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);
        }