public async void LogTheExceptionIfAnExceptionOccurs()
        {
            var mediator = new Mock <IMediator>();

            mediator.Setup(x => x.SendAsync(It.IsAny <NotifyVolunteersCommand>()))
            .Throws(new InvalidOperationException("Test Exception"));

            var logger  = new Mock <ILogger <NotifyAdminForUserUnenrolls> >();
            var options = new TestOptions <GeneralSettings>();

            options.Value.SiteBaseUrl = "localhost";

            var notification = new VolunteerSignedUpNotification
            {
                UserId = Context.Users.First().Id,
                TaskId = Context.Tasks.First().Id
            };

            var target = new NotifyAdminForSignup(Context, mediator.Object, options, logger.Object);
            await target.Handle(notification);

            logger.Verify(x => x.Log(It.IsAny <LogLevel>(),
                                     It.IsAny <EventId>(), It.IsAny <object>(),
                                     It.IsAny <InvalidOperationException>(),
                                     It.IsAny <Func <object, Exception, string> >()), Times.AtLeastOnce);
        }
        public async void SkipNotificationIfAdminEmailIsNotSpecified()
        {
            var mediator = new Mock <IMediator>();
            var logger   = Mock.Of <ILogger <NotifyAdminForUserUnenrolls> >();

            var options = new TestOptions <GeneralSettings>();

            options.Value.SiteBaseUrl = "localhost";

            var notification = new VolunteerSignedUpNotification
            {
                UserId = Context.Users.First().Id,
                TaskId = Context.Tasks.Skip(1).First().Id
            };

            var target = new NotifyAdminForSignup(Context, mediator.Object, options, logger);
            await target.Handle(notification);

            mediator.Verify(x => x.SendAsync(It.IsAny <NotifyVolunteersCommand>()), Times.Never);
        }
        public async void SendToTheAdminEmail()
        {
            const string adminEmail = "AdminEmail";

            var taskDetailForNotificationModel = new TaskDetailForNotificationModel
            {
                Volunteer = new ApplicationUser {
                    Email = "VolunteerEmail", PhoneNumber = "VolunteerPhoneNumber"
                },
                CampaignContacts = new List <CampaignContact>
                {
                    new CampaignContact
                    {
                        ContactType = (int)ContactTypes.Primary,
                        Contact     = new Contact {
                            Email = adminEmail
                        }
                    }
                }
            };

            var mediator = new Mock <IMediator>();

            mediator.Setup(x => x.SendAsync(It.IsAny <TaskDetailForNotificationQuery>()))
            .ReturnsAsync(taskDetailForNotificationModel);

            var options = new TestOptions <GeneralSettings>();

            options.Value.SiteBaseUrl = "localhost";

            var notification = new VolunteerSignedUpNotification
            {
                UserId = Context.Users.First().Id,
                TaskId = Context.Tasks.First().Id
            };

            var target = new NotifyAdminForSignup(Context, mediator.Object, options, null);
            await target.Handle(notification);

            mediator.Verify(x => x.SendAsync(It.Is <NotifyVolunteersCommand>(y => y.ViewModel.EmailRecipients.Contains(adminEmail))), Times.Once);
        }
        public async void SkipNotificationIfAdminEmailIsNotSpecified()
        {
            var mediator = new Mock<IMediator>();
            var logger = Mock.Of<ILogger<NotifyAdminForUserUnenrolls>>();

            var options = new TestOptions<GeneralSettings>();
            options.Value.SiteBaseUrl = "localhost";

            var notification = new VolunteerSignedUpNotification
            {
                UserId = Context.Users.First().Id,
                TaskId = Context.Tasks.Skip(1).First().Id
            };

            var target = new NotifyAdminForSignup(Context, mediator.Object, options, logger);
            await target.Handle(notification);

            mediator.Verify(x => x.SendAsync(It.IsAny<NotifyVolunteersCommand>()), Times.Never);
        }
        public async void LogTheExceptionIfAnExceptionOccurs()
        {
            var mediator = new Mock<IMediator>();

            mediator.Setup(x => x.SendAsync(It.IsAny<NotifyVolunteersCommand>()))
                .Throws(new InvalidOperationException("Test Exception"));

            var logger = new Mock<ILogger<NotifyAdminForUserUnenrolls>>();
            var options = new TestOptions<GeneralSettings>();
            options.Value.SiteBaseUrl = "localhost";

            var notification = new VolunteerSignedUpNotification
            {
                UserId = Context.Users.First().Id,
                TaskId = Context.Tasks.First().Id
            };

            var target = new NotifyAdminForSignup(Context, mediator.Object, options, logger.Object);
            await target.Handle(notification);

            logger.Verify(x => x.Log(It.IsAny<LogLevel>(),
                It.IsAny<EventId>(), It.IsAny<object>(),
                It.IsAny<InvalidOperationException>(),
                It.IsAny<Func<object, Exception, string>>()), Times.AtLeastOnce);
        }
        public async void SendToTheAdminEmail()
        {
            const string adminEmail = "AdminEmail";

            var taskDetailForNotificationModel = new TaskDetailForNotificationModel
            {
                Volunteer = new ApplicationUser { Email = "VolunteerEmail", PhoneNumber = "VolunteerPhoneNumber" },
                CampaignContacts = new List<CampaignContact>
                {
                    new CampaignContact
                    {
                        ContactType = (int) ContactTypes.Primary,
                        Contact = new Contact { Email = adminEmail }
                    }
                }
            };

            var mediator = new Mock<IMediator>();
            mediator.Setup(x => x.SendAsync(It.IsAny<TaskDetailForNotificationQuery>()))
                .ReturnsAsync(taskDetailForNotificationModel);

            var options = new TestOptions<GeneralSettings>();
            options.Value.SiteBaseUrl = "localhost";

            var notification = new VolunteerSignedUpNotification
            {
                UserId = Context.Users.First().Id,
                TaskId = Context.Tasks.First().Id
            };

            var target = new NotifyAdminForSignup(Context, mediator.Object, options, null);
            await target.Handle(notification);

            mediator.Verify(x => x.SendAsync(It.Is<NotifyVolunteersCommand>(y => y.ViewModel.EmailRecipients.Contains(adminEmail))), Times.Once);
        }