Ejemplo n.º 1
0
 public IActionResult Create(int activityId)
 {
     var activity = _dataAccess.GetActivity(activityId);
     if (activity == null || !User.IsTenantAdmin(activity.TenantId))
     {
         return HttpUnauthorized();
     }
     var viewModel = new TaskEditModel()
     {
         ActivityId = activity.Id,
         ActivityName = activity.Name,
         CampaignId = activity.CampaignId,
         CampaignName = activity.Campaign.Name,
         TenantId = activity.TenantId
     };
     return View("Edit", viewModel);
 }
Ejemplo n.º 2
0
        public IActionResult Create(int activityId, TaskEditModel model)
        {
            if (model.EndDateTime < model.StartDateTime)
            {
                ModelState.AddModelError("EndDateTime", "Ending time cannot be earlier than the starting time");
            }

            if (ModelState.IsValid)
            {
                if (!User.IsTenantAdmin(model.TenantId))
                {
                    return HttpUnauthorized();
                }
                _bus.Send(new EditTaskCommand() { Task = model });
                return RedirectToAction("Details", "Activity", new { id = activityId });
            }
            return View("Edit", model);
        }
Ejemplo n.º 3
0
 public IActionResult Create(int activityId)
 {
     var activity = _dataAccess.GetActivity(activityId);
     if (activity == null || !User.IsOrganizationAdmin(activity.Campaign.ManagingOrganizationId))
     {
         return HttpUnauthorized();
     }
     var viewModel = new TaskEditModel()
     {
         ActivityId = activity.Id,
         ActivityName = activity.Name,
         CampaignId = activity.CampaignId,
         CampaignName = activity.Campaign.Name,
         OrganizationId = activity.Campaign.ManagingOrganizationId,
         TimeZoneId = activity.Campaign.TimeZoneId,
         StartDateTime = activity.StartDateTime,
         EndDateTime = activity.EndDateTime,
     };
     return View("Edit", viewModel);
 }
Ejemplo n.º 4
0
        public IActionResult Create(int activityId, TaskEditModel model)
        {
            if (model.EndDateTime < model.StartDateTime)
            {
                ModelState.AddModelError(nameof(model.EndDateTime), "Ending time cannot be earlier than the starting time");
            }

            WarnDateTimeOutOfRange(ref model);

            if (ModelState.IsValid)
            {
                if (!User.IsOrganizationAdmin(model.OrganizationId))
                {
                    return HttpUnauthorized();
                }
                _mediator.Send(new EditTaskCommand() { Task = model });
                return RedirectToAction("Details", "Activity", new { id = activityId });
            }
            return View("Edit", model);
        }
Ejemplo n.º 5
0
        public IActionResult Create(int eventId)
        {
            var campaignEvent = GetEventBy(eventId);
            if (campaignEvent == null || !User.IsOrganizationAdmin(campaignEvent.Campaign.ManagingOrganizationId))
            {
                return HttpUnauthorized();
            }
            
            var viewModel = new TaskEditModel
            {
                EventId = campaignEvent.Id,
                EventName = campaignEvent.Name,
                CampaignId = campaignEvent.CampaignId,
                CampaignName = campaignEvent.Campaign.Name,
                OrganizationId = campaignEvent.Campaign.ManagingOrganizationId,
                TimeZoneId = campaignEvent.Campaign.TimeZoneId,
                StartDateTime = campaignEvent.StartDateTime,
                EndDateTime = campaignEvent.EndDateTime
            };

            return View("Edit", viewModel);
        }
Ejemplo n.º 6
0
        public async Task<IActionResult> Edit(TaskEditModel model)
        {
            if (model.EndDateTime < model.StartDateTime)
            {
                ModelState.AddModelError(nameof(model.EndDateTime), "Ending time cannot be earlier than the starting time");
            }
            
            WarnDateTimeOutOfRange(ref model);

            if (ModelState.IsValid)
            {
                if (!User.IsOrganizationAdmin(model.OrganizationId))
                {
                    return HttpUnauthorized();
                }
                
                await _mediator.SendAsync(new EditTaskCommandAsync { Task = model });

                return RedirectToAction(nameof(Details), "Task", new { id = model.Id });
            }

            return View(model);
        }
Ejemplo n.º 7
0
        public async Task<IActionResult> Create(int activityId, TaskEditModel model)
        {
            if (model.EndDateTime < model.StartDateTime)
            {
                ModelState.AddModelError(nameof(model.EndDateTime), "Ending time cannot be earlier than the starting time");
            }
            
            WarnDateTimeOutOfRange(ref model);

            if (ModelState.IsValid)
            {
                if (!User.IsOrganizationAdmin(model.OrganizationId))
                {
                    return HttpUnauthorized();
                }
                
                await _mediator.SendAsync(new EditTaskCommandAsync { Task = model });

                //mgmccarthy: I'm assuming this is ActivityController in the Admin area
                return RedirectToAction(nameof(Details), "Activity", new { id = activityId });
            }

            return View("Edit", model);
        }
Ejemplo n.º 8
0
        public async Task EditPostRedirectsToCorrectAction()
        {
            const int organizationId = 1;
            var taskSummaryModel = new TaskSummaryModel { OrganizationId = organizationId };
            var startDateTime = DateTimeOffset.Now.AddDays(-1);
            var endDateTime = DateTimeOffset.Now.AddDays(1);
            var model = new TaskEditModel { Id = 1, StartDateTime = startDateTime, EndDateTime = endDateTime, OrganizationId = organizationId };

            var mediator = new Mock<IMediator>();
            mediator.Setup(x => x.Send(It.IsAny<EventByIdQuery>())).Returns(new Event
            {
                Campaign = new Campaign { TimeZoneId = "Eastern Standard Time" },
                StartDateTime = startDateTime.AddDays(-1),
                EndDateTime = endDateTime.AddDays(1)
            });
            mediator.Setup(x => x.SendAsync(It.IsAny<TaskQueryAsync>())).ReturnsAsync(taskSummaryModel);

            var sut = new TaskController(mediator.Object);
            MakeUserOrganizationAdminUser(sut, organizationId.ToString());

            var result = await sut.Edit(model) as RedirectToActionResult;

            var routeValues = new Dictionary<string, object>{ ["id"] = model.Id };

            Assert.Equal(result.ControllerName, "Task");
            Assert.Equal(result.ActionName, nameof(TaskController.Details));
            Assert.Equal(result.RouteValues, routeValues);
        }
Ejemplo n.º 9
0
        public async Task EditPostSendsEditTaskCommandAsyncWhenModelStateIsValidAndUserIsOrganizationAdmin()
        {
            const int organizationId = 1;
            var taskSummaryModel = new TaskSummaryModel { OrganizationId = organizationId };
            var startDateTime = DateTimeOffset.Now.AddDays(-1);
            var endDateTime = DateTimeOffset.Now.AddDays(1);

            var model = new TaskEditModel { StartDateTime = startDateTime, EndDateTime = endDateTime, OrganizationId = organizationId };

            var mediator = new Mock<IMediator>();
            mediator.Setup(x => x.Send(It.IsAny<EventByIdQuery>())).Returns(new Event
            {
                Campaign = new Campaign { TimeZoneId = "Eastern Standard Time" }, StartDateTime = startDateTime.AddDays(-1), EndDateTime = endDateTime.AddDays(1)
            });
            mediator.Setup(x => x.SendAsync(It.IsAny<TaskQueryAsync>())).ReturnsAsync(taskSummaryModel);

            var sut = new TaskController(mediator.Object);
            MakeUserOrganizationAdminUser(sut, organizationId.ToString());

            await sut.Edit(model);

            mediator.Verify(x => x.SendAsync(It.Is<EditTaskCommandAsync>(y => y.Task == model)));
        }
Ejemplo n.º 10
0
        public async Task EditPostReturnsHttpUnauthorizedResultWhenModelStateIsValidAndUserIsNotAnOrganizationAdminUser()
        {
            var startDateTime = DateTimeOffset.Now.AddDays(-1);
            var endDateTime = DateTimeOffset.Now.AddDays(1);
            var model = new TaskEditModel { StartDateTime = startDateTime, EndDateTime = endDateTime, OrganizationId = 1 };

            var mediator = new Mock<IMediator>();
            mediator.Setup(x => x.Send(It.IsAny<EventByIdQuery>())).Returns(new Event
            {
                Campaign = new Campaign { TimeZoneId = "Eastern Standard Time" },
                StartDateTime = startDateTime.AddDays(-1),
                EndDateTime = endDateTime.AddDays(1)
            });

            var sut = new TaskController(mediator.Object);
            sut.SetDefaultHttpContext();

            var result = await sut.Edit(model);

            Assert.IsType<HttpUnauthorizedResult>(result);
        }
Ejemplo n.º 11
0
        public async Task EditPostReturnsCorrectViewAndViewModelWhenEndDateTimeIsLessThanStartDateTimeAndModelStateIsInvalid()
        {
            var model = new TaskEditModel { EndDateTime = DateTimeOffset.Now.AddDays(-1), StartDateTime = DateTimeOffset.Now.AddDays(1) };

            var mediator = new Mock<IMediator>();
            mediator.Setup(x => x.Send(It.IsAny<EventByIdQuery>())).Returns(new Event { Campaign = new Campaign { TimeZoneId = "Eastern Standard Time" } });

            var sut = new TaskController(mediator.Object);
            var result = await sut.Edit(model) as ViewResult;
            var modelResult = result.ViewData.Model as TaskEditModel;

            Assert.IsType<ViewResult>(result);
            Assert.Equal(modelResult, model);
        }
Ejemplo n.º 12
0
        public async Task EditGetReturnsCorrectViewModelAndView()
        {
            const int organizationId = 1;
            var taskEditModel = new TaskEditModel { OrganizationId = organizationId };

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

            var sut = new TaskController(mediator.Object);
            MakeUserOrganizationAdminUser(sut, organizationId.ToString());

            var result = await sut.Edit(It.IsAny<int>()) as ViewResult;
            var modelResult = result.ViewData.Model as TaskEditModel;

            Assert.IsType<ViewResult>(result);
            Assert.IsType<TaskEditModel>(modelResult);
            Assert.Equal(modelResult, taskEditModel);
        }
Ejemplo n.º 13
0
        private void WarnDateTimeOutOfRange(ref TaskEditModel model)
        {
            if (model.StartDateTime.HasValue || model.EndDateTime.HasValue)
            {
                var activity = _dataAccess.GetActivity(model.ActivityId);
                TimeZoneInfo timeZone = TimeZoneInfo.FindSystemTimeZoneById(activity.Campaign.TimeZoneId);

                DateTimeOffset? convertedStartDateTime = null;
                if (model.StartDateTime.HasValue)
                {
                    var startDateValue = model.StartDateTime.Value;
                    var startDateTimeOffset = timeZone.GetUtcOffset(startDateValue);
                    convertedStartDateTime = new DateTimeOffset(startDateValue.Year, startDateValue.Month, startDateValue.Day, startDateValue.Hour, startDateValue.Minute, 0, startDateTimeOffset);
                }

                DateTimeOffset? convertedEndDateTime = null;
                if (model.EndDateTime.HasValue)
                {
                    var endDateValue = model.EndDateTime.Value;
                    var endDateTimeOffset = timeZone.GetUtcOffset(endDateValue);
                    convertedEndDateTime = new DateTimeOffset(endDateValue.Year, endDateValue.Month, endDateValue.Day, endDateValue.Hour, endDateValue.Minute, 0, endDateTimeOffset);
                }

                if ((convertedStartDateTime < activity.StartDateTime || convertedEndDateTime > activity.EndDateTime) &&
                    (model.IgnoreTimeRangeWarning == false))
                {
                    ModelState.AddModelError("", "Although valid, task time is out of range for activity time from " +
                        activity.StartDateTime.DateTime.ToString("g") + " to " + activity.EndDateTime.DateTime.ToString("g") + " " + activity.Campaign.TimeZoneId.ToString());
                    ModelState.Remove("IgnoreTimeRangeWarning");
                    model.IgnoreTimeRangeWarning = true;
                }
            }
            
        }
Ejemplo n.º 14
0
        private void WarnDateTimeOutOfRange(ref TaskEditModel model)
        {
            if (model.StartDateTime.HasValue || model.EndDateTime.HasValue)
            {
                var campaignEvent = GetEventBy(model.EventId);
                var timeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById(campaignEvent.Campaign.TimeZoneId);

                DateTimeOffset? convertedStartDateTime = null;
                if (model.StartDateTime.HasValue)
                {
                    var startDateValue = model.StartDateTime.Value;
                    var startDateTimeOffset = timeZoneInfo.GetUtcOffset(startDateValue);
                    convertedStartDateTime = new DateTimeOffset(startDateValue.Year, startDateValue.Month, startDateValue.Day, startDateValue.Hour, startDateValue.Minute, 0, startDateTimeOffset);
                }

                DateTimeOffset? convertedEndDateTime = null;
                if (model.EndDateTime.HasValue)
                {
                    var endDateValue = model.EndDateTime.Value;
                    var endDateTimeOffset = timeZoneInfo.GetUtcOffset(endDateValue);
                    convertedEndDateTime = new DateTimeOffset(endDateValue.Year, endDateValue.Month, endDateValue.Day, endDateValue.Hour, endDateValue.Minute, 0, endDateTimeOffset);
                }

                if ((convertedStartDateTime < campaignEvent.StartDateTime || convertedEndDateTime > campaignEvent.EndDateTime) &&
                    (model.IgnoreTimeRangeWarning == false))
                {
                    ModelState.AddModelError("", "Although valid, task time is out of range for event time from " +
                        campaignEvent.StartDateTime.DateTime.ToString("g") + " to " + campaignEvent.EndDateTime.DateTime.ToString("g") + " " + campaignEvent.Campaign.TimeZoneId);
                    ModelState.Remove("IgnoreTimeRangeWarning");
                    model.IgnoreTimeRangeWarning = true;
                }
            }
        }