public async Task EditGetReturnsHttpNotFoundResultWhenTaskIsNull() { var sut = new TaskController(Mock.Of<IMediator>(), Mock.Of<ITaskSummaryModelValidator>()); var result = await sut.Edit(It.IsAny<int>()); Assert.IsType<HttpNotFoundResult>(result); }
public async Task EditGetReturnsHttpUnauthorizedResultWhenUserIsNotOrgAdmin() { var mediator = new Mock<IMediator>(); mediator.Setup(x => x.SendAsync(It.IsAny<EditTaskQueryAsync>())).ReturnsAsync(new TaskSummaryModel()); var sut = new TaskController(mediator.Object, Mock.Of<ITaskSummaryModelValidator>()); sut.SetDefaultHttpContext(); var result = await sut.Edit(It.IsAny<int>()); Assert.IsType<HttpUnauthorizedResult>(result); }
public async Task EditPostRedirectsToCorrectAction_WhenUpdatingTask() { const int organizationId = 1; var model = new EditViewModel { Id = 1, OrganizationId = organizationId }; var mediator = new Mock<IMediator>(); mediator.Setup(x => x.SendAsync(It.IsAny<EditTaskCommandAsync>())).ReturnsAsync(1); var validator = new Mock<ITaskEditViewModelValidator>(); validator.Setup(x => x.Validate(It.IsAny<EditViewModel>())).Returns(new List<KeyValuePair<string, string>>()); var sut = new TaskController(mediator.Object, validator.Object); sut.MakeUserAnOrgAdmin(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); }
public async Task EditGetSendsEditTaskQueryAsyncWithCorrectTaskId() { const int taskId = 1; var mediator = new Mock<IMediator>(); var sut = new TaskController(mediator.Object, Mock.Of<ITaskSummaryModelValidator>()); await sut.Edit(taskId); mediator.Verify(x => x.SendAsync(It.Is<EditTaskQueryAsync>(y => y.TaskId == taskId)), Times.Once); }
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 TaskSummaryModel { 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 validator = new Mock<ITaskSummaryModelValidator>(); validator.Setup(x => x.Validate(It.IsAny<TaskSummaryModel>())).Returns(new List<KeyValuePair<string, string>>()); var sut = new TaskController(mediator.Object, validator.Object); MakeUserOrganizationAdminUser(sut, organizationId.ToString()); await sut.Edit(model); mediator.Verify(x => x.SendAsync(It.Is<EditTaskCommandAsync>(y => y.Task == model))); }
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); }
public async Task EditPostAddsCorrectModelStateErrorWhenValidatorReturnsError() { const string errorKey = "ErrorKey"; const string errorValue = "ErrorValue"; var validator = new Mock<ITaskEditViewModelValidator>(); validator.Setup(x => x.Validate(It.IsAny<EditViewModel>())) .Returns(new List<KeyValuePair<string, string>> { new KeyValuePair<string, string>(errorKey, errorValue) }); var sut = new TaskController(null, validator.Object); await sut.Edit(new EditViewModel()); var modelStateErrorCollection = sut.ModelState.GetErrorMessagesByKey(errorKey); Assert.Equal(modelStateErrorCollection.Single().ErrorMessage, errorValue); }
public async Task EditPostReturnsCorrectViewAndViewModelWhenValidatorReturnsError() { var model = new TaskSummaryModel { 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 validator = new Mock<ITaskSummaryModelValidator>(); validator.Setup(x => x.Validate(It.IsAny<TaskSummaryModel>())).Returns(new List<KeyValuePair<string, string>> { new KeyValuePair<string, string>(nameof(TaskSummaryModel.EndDateTime), "Ending time cannot be earlier than the starting time") }); var sut = new TaskController(mediator.Object, validator.Object); var result = await sut.Edit(model) as ViewResult; var modelResult = result.ViewData.Model as TaskSummaryModel; Assert.IsType<ViewResult>(result); Assert.Equal(modelResult, model); }
public async Task EditGetReturnsCorrectViewModelAndView() { const int organizationId = 1; var editViewModel = new EditViewModel { OrganizationId = organizationId }; var mediator = new Mock<IMediator>(); mediator.Setup(x => x.SendAsync(It.IsAny<EditTaskQueryAsync>())).ReturnsAsync(editViewModel); var urlHelper = new Mock<IUrlHelper>(); urlHelper.Setup(x => x.Action(It.IsAny<UrlActionContext>())).Returns(It.IsAny<string>()); var sut = new TaskController(mediator.Object, null) { Url = urlHelper.Object }; sut.MakeUserAnOrgAdmin(organizationId.ToString()); var result = await sut.Edit(It.IsAny<int>()) as ViewResult; var modelResult = result.ViewData.Model as EditViewModel; Assert.IsType<ViewResult>(result); Assert.IsType<EditViewModel>(modelResult); Assert.Equal(modelResult, editViewModel); }
public async Task EditPostInvokesValidateOnTaskSummaryModelValidatorWithCorrectParameters() { var model = new EditViewModel { EndDateTime = DateTimeOffset.Now.AddDays(-1), StartDateTime = DateTimeOffset.Now.AddDays(1), EventId = 1 }; var validator = new Mock<ITaskEditViewModelValidator>(); validator.Setup(x => x.Validate(model)).Returns(new List<KeyValuePair<string, string>>()).Verifiable(); var sut = new TaskController(null, validator.Object); sut.AddModelStateError(); await sut.Edit(model); validator.Verify(); }
public async Task EditGetPopulatesCorrectTitleOnViewBag() { var model = new EditViewModel { EventId = 1, OrganizationId = 1 }; var mediator = new Mock<IMediator>(); mediator.Setup(x => x.SendAsync(It.IsAny<EditTaskQueryAsync>())).ReturnsAsync(model); var urlHelper = new Mock<IUrlHelper>(); urlHelper.Setup(x => x.Action(It.IsAny<UrlActionContext>())).Returns(It.IsAny<string>()); var sut = new TaskController(mediator.Object, null) { Url = urlHelper.Object }; sut.MakeUserAnOrgAdmin(model.OrganizationId.ToString()); await sut.Edit(It.IsAny<int>()); Assert.Equal(sut.ViewBag.Title, "Edit Task"); }
public async Task EditGetAssignsCancelUrlToModel() { const string cancelUrl = "url"; var model = new EditViewModel { EventId = 1, OrganizationId = 1 }; var mediator = new Mock<IMediator>(); mediator.Setup(x => x.SendAsync(It.IsAny<EditTaskQueryAsync>())).ReturnsAsync(model); var urlHelper = new Mock<IUrlHelper>(); urlHelper.Setup(x => x.Action(It.IsAny<UrlActionContext>())).Returns(cancelUrl); var sut = new TaskController(mediator.Object, null) { Url = urlHelper.Object }; sut.MakeUserAnOrgAdmin(model.OrganizationId.ToString()); var result = await sut.Edit(It.IsAny<int>()) as ViewResult; var modelResult = result.Model as EditViewModel; Assert.Equal(modelResult.CancelUrl, cancelUrl); }
public async Task EditGetSendsEditTaskQueryAsyncWithCorrectTaskId() { const int taskId = 1; const int organizationId = 1; var mediator = new Mock<IMediator>(); mediator.Setup(x => x.SendAsync(It.IsAny<EditTaskQueryAsync>())).ReturnsAsync(new EditViewModel { OrganizationId = organizationId }); var urlHelper = new Mock<IUrlHelper>(); urlHelper.Setup(x => x.Action(It.IsAny<UrlActionContext>())).Returns(It.IsAny<string>()); var sut = new TaskController(mediator.Object, null) { Url = urlHelper.Object }; sut.MakeUserAnOrgAdmin(organizationId.ToString()); await sut.Edit(taskId); mediator.Verify(x => x.SendAsync(It.Is<EditTaskQueryAsync>(y => y.TaskId == taskId)), Times.Once); }
public async Task EditGetReturnsCorrectViewModelAndView() { const int organizationId = 1; var TaskSummaryModel = new TaskSummaryModel { OrganizationId = organizationId }; var mediator = new Mock<IMediator>(); mediator.Setup(x => x.SendAsync(It.IsAny<EditTaskQueryAsync>())).ReturnsAsync(TaskSummaryModel); var sut = new TaskController(mediator.Object, Mock.Of<ITaskSummaryModelValidator>()); MakeUserOrganizationAdminUser(sut, organizationId.ToString()); var result = await sut.Edit(It.IsAny<int>()) as ViewResult; var modelResult = result.ViewData.Model as TaskSummaryModel; Assert.IsType<ViewResult>(result); Assert.IsType<TaskSummaryModel>(modelResult); Assert.Equal(modelResult, TaskSummaryModel); }
public async Task EditPostReturnsCorrectViewAndViewModelWhenValidatorReturnsError() { var model = new EditViewModel(); var validator = new Mock<ITaskEditViewModelValidator>(); validator.Setup(x => x.Validate(It.IsAny<EditViewModel>())) .Returns(new List<KeyValuePair<string, string>> { new KeyValuePair<string, string>("key", "value") }); var sut = new TaskController(Mock.Of<IMediator>(), validator.Object); var result = await sut.Edit(model) as ViewResult; var modelResult = result.ViewData.Model as EditViewModel; Assert.IsType<ViewResult>(result); Assert.Equal(modelResult, model); }
public async Task EditPostCallsValidateOnTaskSummaryModelValidator() { var mediator = new Mock<IMediator>(); mediator.Setup(x => x.Send(It.IsAny<EventByIdQuery>())).Returns(new Event { Campaign = new Campaign { TimeZoneId = "Eastern Standard Time" } }); var validator = new Mock<ITaskSummaryModelValidator>(); validator.Setup(x => x.Validate(It.IsAny<TaskSummaryModel>())).Returns(new List<KeyValuePair<string, string>>()); var sut = new TaskController(mediator.Object, validator.Object); sut.SetFakeUserType(UserType.OrgAdmin); await sut.Edit(new TaskSummaryModel { EndDateTime = DateTimeOffset.Now.AddDays(-1), StartDateTime = DateTimeOffset.Now.AddDays(1), OrganizationId = 1 }); validator.Verify(x => x.Validate(It.IsAny<TaskSummaryModel>()), Times.Once); }
public async Task EditPostReturnsUnauthorizedResultWhenModelStateIsValidAndUserIsNotAnOrganizationAdminUser() { var validator = new Mock<ITaskEditViewModelValidator>(); validator.Setup(x => x.Validate(It.IsAny<EditViewModel>())).Returns(new List<KeyValuePair<string, string>>()); var sut = new TaskController(Mock.Of<IMediator>(), validator.Object); sut.SetDefaultHttpContext(); var result = await sut.Edit(new EditViewModel()); Assert.IsType<UnauthorizedResult>(result); }
public async Task EditPostReturnsHttpUnauthorizedResultWhenModelStateIsValidAndUserIsNotAnOrganizationAdminUser() { var startDateTime = DateTimeOffset.Now.AddDays(-1); var endDateTime = DateTimeOffset.Now.AddDays(1); var model = new TaskSummaryModel { 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 validator = new Mock<ITaskSummaryModelValidator>(); validator.Setup(x => x.Validate(It.IsAny<TaskSummaryModel>())).Returns(new List<KeyValuePair<string, string>>()); var sut = new TaskController(mediator.Object, validator.Object); sut.SetDefaultHttpContext(); var result = await sut.Edit(model); Assert.IsType<HttpUnauthorizedResult>(result); }
public async Task EditPostSendsEditTaskCommandAsyncWithCorrectModel_WhenModelStateIsValidAndUserIsOrganizationAdmin() { const int organizationId = 1; var model = new EditViewModel { OrganizationId = organizationId }; var mediator = new Mock<IMediator>(); mediator.Setup(x => x.SendAsync(It.IsAny<EditTaskCommandAsync>())).ReturnsAsync(1); var validator = new Mock<ITaskEditViewModelValidator>(); validator.Setup(x => x.Validate(It.IsAny<EditViewModel>())).Returns(new List<KeyValuePair<string, string>>()); var sut = new TaskController(mediator.Object, validator.Object); sut.MakeUserAnOrgAdmin(organizationId.ToString()); await sut.Edit(model); mediator.Verify(x => x.SendAsync(It.Is<EditTaskCommandAsync>(y => y.Task == model))); }
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 TaskSummaryModel { 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 validator = new Mock<ITaskSummaryModelValidator>(); validator.Setup(x => x.Validate(It.IsAny<TaskSummaryModel>())).Returns(new List<KeyValuePair<string, string>>()); var sut = new TaskController(mediator.Object, validator.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); }
public async Task EditPostAddsCorrectModelStateErrorWhenEndDateTimeIsLessThanStartDateTime() { 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); await sut.Edit(new TaskEditModel { EndDateTime = DateTimeOffset.Now.AddDays(-1), StartDateTime = DateTimeOffset.Now.AddDays(1)}); var modelStateErrorCollection = sut.ModelState.GetErrorMessagesByKey(nameof(TaskEditModel.EndDateTime)); Assert.Equal(modelStateErrorCollection.Single().ErrorMessage, "Ending time cannot be earlier than the starting time"); }