public async Task PostSendsAddTaskCommandAsyncWithCorrectData() { var model = new TaskViewModel { EventId = 1, Id = 1 }; var allReadyTask = new AllReadyTask(); var mediator = new Mock<IMediator>(); mediator.Setup(x => x.SendAsync(It.IsAny<EventByEventIdQuery>())).ReturnsAsync(new Event()); mediator.SetupSequence(x => x.SendAsync(It.IsAny<TaskByTaskIdQuery>())) .ReturnsAsync(allReadyTask).ReturnsAsync(null); var determineIfATaskIsEditable = new Mock<IDetermineIfATaskIsEditable>(); determineIfATaskIsEditable.Setup(x => x.For(It.IsAny<ClaimsPrincipal>(), It.IsAny<AllReadyTask>(), null)).Returns(true); var sut = new TaskApiController(mediator.Object, determineIfATaskIsEditable.Object, null); await sut.Post(model); mediator.Verify(x => x.SendAsync(It.Is<AddTaskCommand>(y => y.AllReadyTask == allReadyTask)), Times.Once); }
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.TaskSignupViewModel { Name = "task1", TaskId = 1 }; var @event = new Event { Campaign = campaign, TimeZoneId = "EventTimeZoneId" }; var sut = new EventViewModel(@event); var @task = new TaskViewModel { CampaignName = sut.CampaignName, CampaignId = sut.CampaignId, eventName = sut.Title, Name = "tasks" }; var tasks = new List<TaskViewModel> { @task }; 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 = tasks; sut.TimeZoneId = "US Mountain Standard Time"; sut.Title = "Test Event"; sut.UserId = "99"; sut.UserSkills = userSkills; sut.UserTasks = tasks; 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, tasks); Assert.Equal(sut.SignupModel, signup); Assert.Equal(sut.RequiredSkills, skills); }
public async Task<AllReadyTask> ToModel(TaskViewModel taskViewModel, IMediator mediator) { var @event = await mediator.SendAsync(new EventByEventIdQuery { EventId = taskViewModel.EventId }); if (@event == null) { return null; } var newTask = true; AllReadyTask allReadyTask; if (taskViewModel.Id == 0) { allReadyTask = new AllReadyTask(); } else { allReadyTask = await mediator.SendAsync(new TaskByTaskIdQuery { TaskId = taskViewModel.Id }); newTask = false; } allReadyTask.Id = taskViewModel.Id; allReadyTask.Description = taskViewModel.Description; allReadyTask.Event = @event; allReadyTask.EndDateTime = taskViewModel.EndDateTime.UtcDateTime; allReadyTask.StartDateTime = taskViewModel.StartDateTime.UtcDateTime; allReadyTask.Name = taskViewModel.Name; allReadyTask.RequiredSkills = allReadyTask.RequiredSkills ?? new List<TaskSkill>(); 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 taskUsersList = await assignedVolunteers.ToTaskSignups(allReadyTask, _mediator); // We may be updating an existing task if (newTask || allReadyTask.AssignedVolunteers.Count == 0) { allReadyTask.AssignedVolunteers = taskUsersList; } else { // Can probably rewrite this more efficiently. foreach (var taskUsers in taskUsersList) { if (!(from entry in allReadyTask.AssignedVolunteers where entry.User.Id == taskUsers.User.Id select entry).Any()) { allReadyTask.AssignedVolunteers.Add(taskUsers); } } } } return allReadyTask; }
private bool IfTaskExists(TaskViewModel task) { return GetTaskBy(task.Id) != null; }
public async Task PostSendsTaskByTaskIdQueryWithCorrectTaskId() { var model = new TaskViewModel { 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<TaskByTaskIdQuery>())).ReturnsAsync(new AllReadyTask()); var provider = new Mock<IDetermineIfATaskIsEditable>(); provider.Setup(x => x.For(It.IsAny<ClaimsPrincipal>(), It.IsAny<AllReadyTask>(), null)).Returns(true); var sut = new TaskApiController(mediator.Object, provider.Object, null); await sut.Post(model); mediator.Verify(x => x.SendAsync(It.Is<TaskByTaskIdQuery>(y => y.TaskId == model.Id))); }
public async Task PutReturnsHttpStatusCodeResultOf204() { var allReadyTask = new AllReadyTask(); var model = new TaskViewModel { Name = "name", Description = "description", StartDateTime = DateTime.UtcNow, EndDateTime = DateTime.UtcNow }; var mediator = new Mock<IMediator>(); mediator.Setup(x => x.SendAsync(It.IsAny<TaskByTaskIdQuery>())).ReturnsAsync(allReadyTask); var determineIfATaskIsEditable = new Mock<IDetermineIfATaskIsEditable>(); determineIfATaskIsEditable.Setup(x => x.For(It.IsAny<ClaimsPrincipal>(), It.IsAny<AllReadyTask>(), 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(result.StatusCode, 204); }
public async Task PutSendsUpdateTaskCommandWithCorrectAllReadyTask() { var allReadyTask = new AllReadyTask(); var model = new TaskViewModel { Name = "name", Description = "description", StartDateTime = DateTime.UtcNow, EndDateTime = DateTime.UtcNow }; var mediator = new Mock<IMediator>(); mediator.Setup(x => x.SendAsync(It.IsAny<TaskByTaskIdQuery>())).ReturnsAsync(allReadyTask); var determineIfATaskIsEditable = new Mock<IDetermineIfATaskIsEditable>(); determineIfATaskIsEditable.Setup(x => x.For(It.IsAny<ClaimsPrincipal>(), It.IsAny<AllReadyTask>(), 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<UpdateTaskCommand>(y => y.AllReadyTask == allReadyTask)), Times.Once); }
public async Task PostReturnsHttpStatusCodeResultOf201() { var model = new TaskViewModel { 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<AllReadyTask>(), 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(result.StatusCode, 201); }
public static AllReadyTask ToModel(this TaskViewModel taskViewModel, IMediator mediator) { var campaignEvent = mediator.Send(new EventByIdQuery { EventId = taskViewModel.EventId }); if (campaignEvent == null) { return(null); } var newTask = true; AllReadyTask dbtask; if (taskViewModel.Id == 0) { dbtask = new AllReadyTask(); } else { dbtask = mediator.Send(new TaskByTaskIdQuery { TaskId = taskViewModel.Id }); newTask = false; } dbtask.Id = taskViewModel.Id; dbtask.Description = taskViewModel.Description; dbtask.Event = campaignEvent; dbtask.EndDateTime = taskViewModel.EndDateTime.UtcDateTime; dbtask.StartDateTime = taskViewModel.StartDateTime.UtcDateTime; dbtask.Name = taskViewModel.Name; dbtask.RequiredSkills = dbtask.RequiredSkills ?? new List <TaskSkill>(); 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 taskUsersList = taskViewModel.AssignedVolunteers.Select(tvm => new TaskSignup { Task = dbtask, User = mediator.Send(new UserByUserIdQuery { UserId = tvm.UserId }) }).ToList(); // We may be updating an existing task if (newTask || dbtask.AssignedVolunteers.Count == 0) { dbtask.AssignedVolunteers = taskUsersList; } else { // Can probably rewrite this more efficiently. foreach (var taskUsers in taskUsersList) { if (!(from entry in dbtask.AssignedVolunteers where entry.User.Id == taskUsers.User.Id select entry).Any()) { dbtask.AssignedVolunteers.Add(taskUsers); } } } } return(dbtask); }