internal virtual bool ShouldSendReminder(EventTaskAssignmentModel eventTaskAssignment)
        {
            var reminderType = (ReminderTypes)eventTaskAssignment.AssignmentType;

            return(_oneTimeReminderTypes.Contains(reminderType) ? ShouldSendOneTimeReminder(eventTaskAssignment)
                : _recurringReminderTypes.Contains(reminderType) && ShouldSendRecurringReminder(eventTaskAssignment));
        }
Exemple #2
0
            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));
        }
Exemple #5
0
            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");
        }
Exemple #7
0
            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);
 }