internal virtual bool ShouldSendReminder(EventTaskAssignmentModel eventTaskAssignment) { var reminderType = (ReminderTypes)eventTaskAssignment.AssignmentType; return(_oneTimeReminderTypes.Contains(reminderType) ? ShouldSendOneTimeReminder(eventTaskAssignment) : _recurringReminderTypes.Contains(reminderType) && ShouldSendRecurringReminder(eventTaskAssignment)); }
public void DoesNotSendReminderIfAlreadySent() { _dueDate = _currentTime.AddMinutes((int)ReminderTimes.Task - 1); eventTaskAssignment = new EventTaskAssignmentModel() { AssignmentType = (int)ReminderTypes.Task, LastReminderSent = DateTime.Now.AddMinutes(-5) }; var result = _sut.ShouldSendOneTimeReminder(eventTaskAssignment); Assert.That(result, Is.False, "Does not send reminder if already sent"); }
protected internal virtual async void SendReminder(EventTaskAssignmentModel eventTaskAssignment) { var guild = _client.GetGuild(eventTaskAssignment.Id); var reminderType = (ReminderTypes)eventTaskAssignment.AssignmentType; var logChannelId = GetReminderChannelForType(guild, reminderType); if (logChannelId == null) { //Check if the guild has that type of channel set ReminderServiceLog.Error($"Could not send reminder. {guild.Name} is likely missing a {reminderType} reminder channel"); } else { //Send the reminder var reminderChannel = (IMessageChannel)_client.GetChannel((ulong)logChannelId); await reminderChannel.SendMessageAsync(eventTaskAssignment.ReminderText); } }
protected internal virtual bool ShouldSendOneTimeReminder(EventTaskAssignmentModel eventTaskAssignment) { if (eventTaskAssignment.LastReminderSent != DateTime.MinValue) { return(false); //Do not send one time reminder if it has already been sent } var dueDate = GetDueDate(eventTaskAssignment); var currentTime = GetCurrentTime(); var timeSpan = dueDate - currentTime; if (dueDate < currentTime) { //Do not send a reminder if reminder time already past return(false); } //Finally, determine if within reminder window and return result return(timeSpan <= TimeSpan.FromMinutes((int)ReminderTimes.Task)); }
public void SetUp() { _currentTime = DateTime.Parse("October 29, 2019 16:30:00"); var provider = new ServiceCollection().BuildServiceProvider(); var mockSut = new Mock <ReminderService>(provider) { CallBase = true }; mockSut.Setup(x => x.InitServices(It.IsAny <IServiceProvider>())); mockSut.Setup(x => x.CreateReminderServiceLoggerConfiguration()).Returns(new LoggerConfiguration().CreateLogger); mockSut.Setup(x => x.GetCurrentTime()).Returns(() => _currentTime); mockSut.Setup(x => x.GetDueDate(It.IsAny <EventTaskAssignmentModel>())).Returns(() => _dueDate); eventTaskAssignment = new EventTaskAssignmentModel { AssignmentType = (int)ReminderTypes.Task, LastReminderSent = DateTime.MinValue }; _sut = mockSut.Object; }
protected internal virtual DateTime GetDueDate(EventTaskAssignmentModel eventTaskAssignment) { var modelType = (ReminderTypes)eventTaskAssignment.AssignmentType; if (_oneTimeReminderTypes.Contains(modelType)) { // These are reminders that occur a certain time before a scheduled run or task // e.g. Tell a runner to get ready 30m before a run return(eventTaskAssignment.TaskStartTime); } if (_recurringReminderTypes.Contains(modelType)) { // Returns a long term due date for Projects that may span multiple marathons or may not be tied to a specific marathon. // Examples include Creating a website, writing a schedule, recruiting runners etc return(eventTaskAssignment.ProjectDueDate); } throw new ArgumentException("Assignment does not have a valid type"); }
public void SetUp() { _taskStartTime = DateTime.Parse("October 29, 2016 16:30:00"); _projectDueDate = DateTime.Parse("August 13, 2018 7:15:00"); var provider = new ServiceCollection().BuildServiceProvider(); _mockSut = new Mock <ReminderService>(provider) { CallBase = true }; _mockSut.Setup(x => x.InitServices(It.IsAny <IServiceProvider>())); _mockSut.Setup(x => x.CreateReminderServiceLoggerConfiguration()).Returns(new LoggerConfiguration().CreateLogger); _sut = _mockSut.Object; _eventTaskAssignment = new EventTaskAssignmentModel { TaskStartTime = _taskStartTime, ProjectDueDate = _projectDueDate }; }
protected internal virtual bool ShouldSendRecurringReminder(EventTaskAssignmentModel eventTaskAssignment) { //Not implemented yet return(false); }