Esempio n. 1
0
        public async Task <IActionResult> Post([FromBody] VolunteerTaskViewModel task)
        {
            var volunteerTask = await ToModel(task, _mediator);

            if (volunteerTask == null)
            {
                return(BadRequest("Should have found a matching event Id"));
            }

            var hasPermissions = _determineIfATaskIsEditable.For(User, volunteerTask, _userManager);

            if (!hasPermissions)
            {
                return(Unauthorized());
            }

            if (await TaskExists(task.Id))
            {
                return(BadRequest());
            }

            await _mediator.SendAsync(new AddVolunteerTaskCommand { VolunteerTask = volunteerTask });

            //http://stackoverflow.com/questions/1860645/create-request-with-post-which-response-codes-200-or-201-and-content
            return(Created("", volunteerTask));
        }
Esempio n. 2
0
        public async Task <IActionResult> Put(int id, [FromBody] VolunteerTaskViewModel value)
        {
            var volunteerTask = await GetTaskBy(id);

            if (volunteerTask == null)
            {
                return(BadRequest());
            }

            var hasPermissions = _determineIfATaskIsEditable.For(User, volunteerTask, _userManager);

            if (!hasPermissions)
            {
                return(Unauthorized());
            }

            // Changing all the potential properties that the VM could have modified.
            volunteerTask.Name          = value.Name;
            volunteerTask.Description   = value.Description;
            volunteerTask.StartDateTime = value.StartDateTime.UtcDateTime;
            volunteerTask.EndDateTime   = value.EndDateTime.UtcDateTime;

            await _mediator.SendAsync(new UpdateVolunteerTaskCommand { VolunteerTask = volunteerTask });

            //http://stackoverflow.com/questions/2342579/http-status-code-for-update-and-delete
            return(NoContent());
        }
Esempio n. 3
0
        public async Task PostSendsTaskByTaskIdQueryWithCorrectTaskId()
        {
            var model = new VolunteerTaskViewModel {
                EventId = 1, Id = 1
            };

            var mediator = new Mock <IMediator>();

            mediator.Setup(x => x.SendAsync(It.IsAny <EventByEventIdQuery>())).ReturnsAsync(new Event());
            mediator.Setup(x => x.SendAsync(It.IsAny <VolunteerTaskByVolunteerTaskIdQuery>())).ReturnsAsync(new VolunteerTask());

            var provider = new Mock <IDetermineIfATaskIsEditable>();

            provider.Setup(x => x.For(It.IsAny <ClaimsPrincipal>(), It.IsAny <VolunteerTask>(), null)).Returns(true);

            var sut = new TaskApiController(mediator.Object, provider.Object, null);
            await sut.Post(model);

            mediator.Verify(x => x.SendAsync(It.Is <VolunteerTaskByVolunteerTaskIdQuery>(y => y.VolunteerTaskId == model.Id)));
        }
Esempio n. 4
0
        public async Task PutSendsUpdateTaskCommandWithCorrectAllReadyTask()
        {
            var volunteerTask = new VolunteerTask();
            var model         = new VolunteerTaskViewModel {
                Name = "name", Description = "description", StartDateTime = DateTime.UtcNow, EndDateTime = DateTime.UtcNow
            };

            var mediator = new Mock <IMediator>();

            mediator.Setup(x => x.SendAsync(It.IsAny <VolunteerTaskByVolunteerTaskIdQuery>())).ReturnsAsync(volunteerTask);

            var determineIfATaskIsEditable = new Mock <IDetermineIfATaskIsEditable>();

            determineIfATaskIsEditable.Setup(x => x.For(It.IsAny <ClaimsPrincipal>(), It.IsAny <VolunteerTask>(), null)).Returns(true);

            var sut = new TaskApiController(mediator.Object, determineIfATaskIsEditable.Object, null);
            await sut.Put(It.IsAny <int>(), model);

            mediator.Verify(x => x.SendAsync(It.Is <UpdateVolunteerTaskCommand>(y => y.VolunteerTask == volunteerTask)), Times.Once);
        }
Esempio n. 5
0
        public async Task PostReturnsHttpStatusCodeResultOf201()
        {
            var model = new VolunteerTaskViewModel {
                EventId = 1, Id = 0
            };

            var mediator = new Mock <IMediator>();

            mediator.Setup(x => x.SendAsync(It.IsAny <EventByEventIdQuery>())).ReturnsAsync(new Event());

            var provider = new Mock <IDetermineIfATaskIsEditable>();

            provider.Setup(x => x.For(It.IsAny <ClaimsPrincipal>(), It.IsAny <VolunteerTask>(), null)).Returns(true);

            var sut    = new TaskApiController(mediator.Object, provider.Object, null);
            var result = await sut.Post(model) as CreatedResult;

            Assert.IsType <CreatedResult>(result);
            Assert.Equal(201, result.StatusCode);
        }
Esempio n. 6
0
        public async Task PutReturnsHttpStatusCodeResultOf204()
        {
            var volunteerTask = new VolunteerTask();
            var model         = new VolunteerTaskViewModel {
                Name = "name", Description = "description", StartDateTime = DateTime.UtcNow, EndDateTime = DateTime.UtcNow
            };

            var mediator = new Mock <IMediator>();

            mediator.Setup(x => x.SendAsync(It.IsAny <VolunteerTaskByVolunteerTaskIdQuery>())).ReturnsAsync(volunteerTask);

            var determineIfATaskIsEditable = new Mock <IDetermineIfATaskIsEditable>();

            determineIfATaskIsEditable.Setup(x => x.For(It.IsAny <ClaimsPrincipal>(), It.IsAny <VolunteerTask>(), null)).Returns(true);

            var sut    = new TaskApiController(mediator.Object, determineIfATaskIsEditable.Object, null);
            var result = await sut.Put(It.IsAny <int>(), model) as NoContentResult;

            Assert.IsType <NoContentResult>(result);
            Assert.Equal(204, result.StatusCode);
        }
Esempio n. 7
0
        public async Task PostSendsAddTaskCommandAsyncWithCorrectData()
        {
            var model = new VolunteerTaskViewModel {
                EventId = 1, Id = 1
            };
            var volunteerTask = new VolunteerTask();

            var mediator = new Mock <IMediator>();

            mediator.Setup(x => x.SendAsync(It.IsAny <EventByEventIdQuery>())).ReturnsAsync(new Event());
            mediator.SetupSequence(x => x.SendAsync(It.IsAny <VolunteerTaskByVolunteerTaskIdQuery>()))
            .ReturnsAsync(volunteerTask).ReturnsAsync(null);

            var determineIfATaskIsEditable = new Mock <IDetermineIfATaskIsEditable>();

            determineIfATaskIsEditable.Setup(x => x.For(It.IsAny <ClaimsPrincipal>(), It.IsAny <VolunteerTask>(), null)).Returns(true);

            var sut = new TaskApiController(mediator.Object, determineIfATaskIsEditable.Object, null);
            await sut.Post(model);

            mediator.Verify(x => x.SendAsync(It.Is <AddVolunteerTaskCommand>(y => y.VolunteerTask == volunteerTask)), Times.Once);
        }
Esempio n. 8
0
        private async Task <VolunteerTask> ToModel(VolunteerTaskViewModel taskViewModel, IMediator mediator)
        {
            var @event = await mediator.SendAsync(new EventByEventIdQuery { EventId = taskViewModel.EventId });

            if (@event == null)
            {
                return(null);
            }

            var           newTask = true;
            VolunteerTask volunteerTask;

            if (taskViewModel.Id == 0)
            {
                volunteerTask = new VolunteerTask();
            }
            else
            {
                volunteerTask = await mediator.SendAsync(new VolunteerTaskByVolunteerTaskIdQuery { VolunteerTaskId = taskViewModel.Id });

                newTask = false;
            }

            volunteerTask.Id             = taskViewModel.Id;
            volunteerTask.Description    = taskViewModel.Description;
            volunteerTask.Event          = @event;
            volunteerTask.EndDateTime    = taskViewModel.EndDateTime.UtcDateTime;
            volunteerTask.StartDateTime  = taskViewModel.StartDateTime.UtcDateTime;
            volunteerTask.Name           = taskViewModel.Name;
            volunteerTask.RequiredSkills = volunteerTask.RequiredSkills ?? new List <VolunteerTaskSkill>();
            taskViewModel.RequiredSkills = taskViewModel.RequiredSkills ?? new List <int>();
            ////Remove old skills
            //dbtask.RequiredSkills.RemoveAll(ts => !taskViewModel.RequiredSkills.Any(s => ts.SkillId == s));
            ////Add new skills
            //dbtask.RequiredSkills.AddRange(taskViewModel.RequiredSkills
            //    .Where(rs => !dbtask.RequiredSkills.Any(ts => ts.SkillId == rs))
            //    .Select(rs => new TaskSkill() { SkillId = rs, TaskId = taskViewModel.Id }));

            // Workaround:  POST is bringing in empty AssignedVolunteers.  Clean this up. Discussing w/ Kiran Challa.
            // Workaround: the if statement is superflous, and should go away once we have the proper fix referenced above.
            if (taskViewModel.AssignedVolunteers != null)
            {
                var bogusAssignedVolunteers = (from assignedVolunteer in taskViewModel.AssignedVolunteers
                                               where string.IsNullOrEmpty(assignedVolunteer.UserId)
                                               select assignedVolunteer).ToList();
                foreach (var bogus in bogusAssignedVolunteers)
                {
                    taskViewModel.AssignedVolunteers.Remove(bogus);
                }
            }
            // end workaround

            if (taskViewModel.AssignedVolunteers != null && taskViewModel.AssignedVolunteers.Count > 0)
            {
                var assignedVolunteers = taskViewModel.AssignedVolunteers.ToList();

                var volunteerTaskUsersList = await assignedVolunteers.ToVolunteerTaskSignups(volunteerTask, _mediator);

                // We may be updating an existing task
                if (newTask || volunteerTask.AssignedVolunteers.Count == 0)
                {
                    volunteerTask.AssignedVolunteers = volunteerTaskUsersList;
                }
                else
                {
                    // Can probably rewrite this more efficiently.
                    foreach (var volunteerTaskUsers in volunteerTaskUsersList)
                    {
                        if (!(from entry in volunteerTask.AssignedVolunteers
                              where entry.User.Id == volunteerTaskUsers.User.Id
                              select entry).Any())
                        {
                            volunteerTask.AssignedVolunteers.Add(volunteerTaskUsers);
                        }
                    }
                }
            }
            return(volunteerTask);
        }
Esempio n. 9
0
        public void ConstructEventViewModel_WithTheCorrectData()
        {
            var campaign = new Campaign {
                Id = 1, Name = "Campaignname", TimeZoneId = "CampaignTimeZoneId"
            };
            var location = new AllReady.ViewModels.Shared.LocationViewModel {
                City = "Amsterdam"
            };
            var skills = new List <SkillViewModel> {
                new SkillViewModel {
                    Name = "F sharp"
                }
            };
            var userSkills = new List <SkillViewModel> {
                new SkillViewModel {
                    Name = "Medic", Description = "first aid helper", HierarchicalName = "med01", Id = 1
                }
            };
            var signup = new AllReady.ViewModels.Shared.VolunteerTaskSignupViewModel {
                Name = "task1", VolunteerTaskId = 1
            };
            var @event = new Event {
                Campaign = campaign, TimeZoneId = "EventTimeZoneId"
            };

            var sut           = new EventViewModel(@event);
            var volunteerTask = new VolunteerTaskViewModel {
                CampaignName = sut.CampaignName, CampaignId = sut.CampaignId, EventName = sut.Title, Name = "volunteerTasks"
            };
            var volunteerTasks = new List <VolunteerTaskViewModel> {
                volunteerTask
            };

            sut.Description      = "Testing the allReady from htbox";
            sut.EndDateTime      = DateTimeOffset.Now.AddDays(3650);
            sut.EventType        = EventType.Rally;
            sut.HasPrivacyPolicy = false;
            sut.Headline         = "the Already test campaing";
            sut.Id                = 1;
            sut.ImageUrl          = "http://www.htbox.org/";
            sut.IsAllowWaitList   = false;
            sut.IsClosed          = false;
            sut.IsLimitVolunteers = true;
            sut.Location          = location;
            sut.OrganizationId    = 1;
            sut.OrganizationName  = "TestOrg";
            sut.RequiredSkills    = skills;
            sut.SignupModel       = signup;
            sut.StartDateTime     = DateTimeOffset.Now.AddDays(365);
            sut.Tasks             = volunteerTasks;
            sut.TimeZoneId        = "US Mountain Standard Time";
            sut.Title             = "Test Event";
            sut.UserId            = "99";
            sut.UserSkills        = userSkills;
            sut.UserTasks         = volunteerTasks;

            Assert.Equal(sut.CampaignId, campaign.Id);
            Assert.Equal(sut.CampaignName, campaign.Name);
            Assert.Equal(sut.Location, location);
            Assert.Equal(sut.UserSkills, userSkills);
            Assert.Equal(sut.UserTasks, volunteerTasks);
            Assert.Equal(sut.SignupModel, signup);
            Assert.Equal(sut.RequiredSkills, skills);
        }