public async void PassANotifyVolunteersCommandToTheMediatorWhenEmailIsProvided()
        {
            const int    volunteerTaskSignupId = 1001;
            const int    volunteerTaskId       = 12314;
            const string email    = "*****@*****.**";
            const string userMail = "*****@*****.**";

            var mediator = new Mock <IMediator>();

            var options = new Mock <IOptions <GeneralSettings> >();

            options.Setup(o => o.Value).Returns(new GeneralSettings {
                SiteBaseUrl = "allready.com"
            });

            var notification = new VolunteerTaskSignupStatusChanged {
                SignupId = volunteerTaskSignupId
            };

            var context             = Context;
            var volunteerTaskSignup = CreateTaskSignup(volunteerTaskSignupId, volunteerTaskId, email, userMail: userMail);

            context.VolunteerTaskSignups.Add(volunteerTaskSignup);
            context.SaveChanges();

            var target = new NotifyAdminForVolunteerTaskSignupStatusChangeHandler(context, mediator.Object, options.Object);
            await target.Handle(notification);

            mediator.VerifyAll();
        }
        public async void UsesUserFirstAndLastNameAsSubjectWhenProvided()
        {
            const int    volunteerTaskSignupId = 1001;
            const int    volunteerTaskId       = 12314;
            const string email     = "*****@*****.**";
            const string firstName = "Simon";
            const string lastName  = "Says";
            const string userEmail = "*****@*****.**";

            var mediator = new Mock <IMediator>();

            var options = new Mock <IOptions <GeneralSettings> >();

            options.Setup(o => o.Value).Returns(new GeneralSettings {
                SiteBaseUrl = "allready.com"
            });

            var notification = new VolunteerTaskSignupStatusChanged {
                SignupId = volunteerTaskSignupId
            };

            var volunteerTaskSignup = CreateTaskSignup(volunteerTaskSignupId, volunteerTaskId, email, firstName, lastName, userEmail);

            Context.VolunteerTaskSignups.Add(volunteerTaskSignup);
            Context.SaveChanges();

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

            mediator.Verify(x => x.SendAsync(It.Is <NotifyVolunteersCommand>(y => y.ViewModel.Subject == $"{firstName} {lastName}")));
        }
        public async void NotPassANotifyVolunteersCommandToTheMediatorWhenCampaignContactsIsNull()
        {
            const int volunteerTaskSignupId = 1001;
            const int volunteerTaskId       = 12314;

            var mediator = new Mock <IMediator>();
            var options  = new Mock <IOptions <GeneralSettings> >();

            var notification = new VolunteerTaskSignupStatusChanged {
                SignupId = volunteerTaskSignupId
            };

            var context             = Context;
            var volunteerTaskSignup = CreateTaskSignupWithoutCampaignContacts(volunteerTaskSignupId, volunteerTaskId);

            context.VolunteerTaskSignups.Add(volunteerTaskSignup);
            context.SaveChanges();

            var target = new NotifyAdminForVolunteerTaskSignupStatusChangeHandler(context, mediator.Object, options.Object);
            await target.Handle(notification);

            mediator.Verify(m => m.SendAsync(It.IsAny <NotifyVolunteersCommand>()), Times.Never);
        }
Example #4
0
        public async Task <VolunteerTaskChangeResult> Handle(ChangeVolunteerTaskStatusCommand message)
        {
            var volunteerTask = await GetVolunteerTask(message);

            if (volunteerTask == null)
            {
                throw new InvalidOperationException($"Task {message.VolunteerTaskId} does not exist");
            }

            var volunteerTaskSignup = volunteerTask.AssignedVolunteers.SingleOrDefault(c => c.User.Id == message.UserId);

            if (volunteerTaskSignup == null)
            {
                throw new InvalidOperationException($"Sign-up for user {message.UserId} does not exist");
            }

            switch (message.VolunteerTaskStatus)
            {
            case VolunteerTaskStatus.Assigned:
                break;

            case VolunteerTaskStatus.Accepted:
                if (volunteerTaskSignup.Status != VolunteerTaskStatus.Assigned && volunteerTaskSignup.Status != VolunteerTaskStatus.CanNotComplete && volunteerTaskSignup.Status != VolunteerTaskStatus.Completed)
                {
                    throw new ArgumentException("Task must be assigned before being accepted or undoing CanNotComplete or Completed");
                }
                break;

            case VolunteerTaskStatus.Rejected:
                if (volunteerTaskSignup.Status != VolunteerTaskStatus.Assigned)
                {
                    throw new ArgumentException("Task must be assigned before being rejected");
                }
                break;

            case VolunteerTaskStatus.Completed:
                if (volunteerTaskSignup.Status != VolunteerTaskStatus.Accepted && volunteerTaskSignup.Status != VolunteerTaskStatus.Assigned)
                {
                    throw new ArgumentException("Task must be accepted before being completed");
                }
                break;

            case VolunteerTaskStatus.CanNotComplete:
                if (volunteerTaskSignup.Status != VolunteerTaskStatus.Accepted && volunteerTaskSignup.Status != VolunteerTaskStatus.Assigned)
                {
                    throw new ArgumentException($"Task must be assigned or accepted before it can be marked as {message.VolunteerTaskStatus}");
                }
                break;

            default:
                throw new ArgumentException($"Invalid sign-up status value: {message.VolunteerTaskStatus}");
            }

            volunteerTaskSignup.Status            = message.VolunteerTaskStatus;
            volunteerTaskSignup.StatusDateTimeUtc = DateTimeUtcNow();
            volunteerTaskSignup.StatusDescription = message.VolunteerTaskStatusDescription;

            await _context.SaveChangesAsync();

            var notification = new VolunteerTaskSignupStatusChanged {
                SignupId = volunteerTaskSignup.Id
            };
            await _mediator.PublishAsync(notification);

            return(new VolunteerTaskChangeResult {
                Status = "success", VolunteerTask = volunteerTask
            });
        }