public ActionResult CreateStepTwo(ProjectEditModel viewModel) { if (!viewModel.ProjectCategory.HasValue) ModelState.AddModelError("ProjectCategory", "Project Category is required"); if (!viewModel.ProjectType.HasValue) ModelState.AddModelError("ProjectType", "Project Type is required"); if (ModelState.IsValid) { try { int userId = _security.GetUserId(User.Identity.Name); int companyId = _service.GetUserProfile(userId).CompanyId; // create project BCModel.Projects.Project toCreate = new BCModel.Projects.Project { Number = viewModel.Number, ArchitectId = viewModel.ArchitectId, Address = viewModel.Address, BidDateTime = viewModel.BidDateTime, BuildingTypeId = viewModel.BuildingTypeId, City = viewModel.City, ConstructionTypeId = viewModel.ConstructionTypeId, CreatedById = userId, Description = viewModel.Description, PostalCode = viewModel.PostalCode, ProjectType = viewModel.ProjectType.Value, ProjectCategory = viewModel.ProjectCategory.Value, StateId = viewModel.StateId, Title = viewModel.Title, Scopes = new List<ProjectXScope>(), BidPackages = new List<BidPackage>(), WalkThruDateTime = viewModel.WalkThruDateTime, WalkThruStatus = viewModel.WalkThruStatus.Value, HiddenFromSearch = viewModel.HiddenFromSearch, InvitationOnly = viewModel.InvitationOnly }; GeoLocator locator = new GeoLocator(); string state = _service.GetStates().Where(x => x.Id == viewModel.StateId).FirstOrDefault().Abbr; if (viewModel.Address == null || viewModel.Address == string.Empty) { toCreate.GeoLocation = locator.GetFromCityStateZip(viewModel.City, state, viewModel.PostalCode); } else { toCreate.GeoLocation = locator.GetFromAddress(viewModel.Address, viewModel.City, state, viewModel.PostalCode); } // create master bid package BidPackage projectPackage = new BidPackage { IsMaster = true, BidDateTime = toCreate.BidDateTime, Description = "Master Bid Package", CreatedById = viewModel.ArchitectId, Project = toCreate, Scopes = new List<BidPackageXScope>(), Invitees = new List<Invitation>() }; // if user is a GC, self-invite if (_security.IsUserInRole("general_contractor")) { projectPackage.Invitees.Add(new Invitation { BidPackage = projectPackage, SentToId = companyId, SentDate = DateTime.Now, AcceptedDate = DateTime.Now, InvitationType = InvitationType.SentFromCreatedBy }); } // add bp to project toCreate.BidPackages.Add(projectPackage); // set selected scopes for bp and project for (int i = 0; i < viewModel.SelectedScope.Count(); i++) { toCreate.Scopes.Add(new ProjectXScope { Project = toCreate, ScopeId = viewModel.SelectedScope.ElementAt(i) }); projectPackage.Scopes.Add(new BidPackageXScope { BidPackage = projectPackage, ScopeId = viewModel.SelectedScope.ElementAt(i) }); } // add project to system if (_service.Create(toCreate)) { return RedirectToRoute("Default", new { controller = "Project", action = "Details", id = toCreate.Id }); } else { Util.MapValidationErrors(_service.ValidationDic, this.ModelState); rePopViewModel(viewModel); return View("CreateStepTwo", viewModel); } } catch (Exception ex) { ModelState.AddModelError("Exception", ex.Message); rePopViewModel(viewModel); return View("CreateStepTwo", viewModel); } } // modelstate is not valid rePopViewModel(viewModel); return View("CreateStepTwo", viewModel); }
public void PostCreateDuplicateRedirectsToDuplicates() { // arrange DupeCheckViewModel viewModel = new DupeCheckViewModel { ArchitectId = 3, Number = "abc123 hello hello", Title = "build a house for cake" }; Project found = new Project { Id = 2, ArchitectId = viewModel.ArchitectId.Value, Title = viewModel.Title, Number = viewModel.Number }; Mock<IProjectServiceLayer> service = new Mock<IProjectServiceLayer>(); service.Setup(s => s.FindDuplicate(viewModel.Title, viewModel.Number, viewModel.ArchitectId.Value)).Returns(new List<Project> { found }); // return empty list. no matches found Mock<INotificationSender> notice = new Mock<INotificationSender>(); Mock<IWebSecurityWrapper> security = new Mock<IWebSecurityWrapper>(); ProjectController controller = new ProjectController(service.Object, security.Object, notice.Object); // act var result = controller.Create(viewModel); // assert Assert.IsNotNull(result); Assert.IsInstanceOfType(result, typeof(RedirectToRouteResult)); Assert.AreEqual("Duplicates", ((RedirectToRouteResult)result).RouteValues["action"]); Assert.AreEqual("Project", ((RedirectToRouteResult)result).RouteValues["controller"]); }
public void PostEditValidProjectRedirectsToDetails() { // arrange ProjectEditModel viewModel = new ProjectEditModel { Id = 1, PostalCode = "98008" }; viewModel.SelectedScope = new int[0]; Project aProject = new Project { Id = 1, ArchitectId = 1, Scopes = new List<ProjectXScope>(), BidPackages = new List<BidPackage>(), Title = "foo" }; aProject.BidPackages.Add(new BidPackage { Id = 1, IsMaster = true, Project = aProject, ProjectId = aProject.Id, Scopes = new List<BidPackageXScope>(), CreatedById = 1 }); Mock<IProjectServiceLayer> service = new Mock<IProjectServiceLayer>(); service.Setup(s => s.Update(It.IsAny<BCModel.Projects.Project>())).Returns(true); service.Setup(s => s.GetUserProfile(It.IsAny<int>())).Returns(new BCModel.UserProfile { CompanyId = 1, UserId = 1 }); service.Setup(s => s.Get(It.IsAny<int>())).Returns(aProject); Mock<IWebSecurityWrapper> security = new Mock<IWebSecurityWrapper>(); security.Setup(s => s.GetUserId(It.IsAny<string>())).Returns(1); Mock<INotificationSender> notice = new Mock<INotificationSender>(); ProjectController controller = new ProjectController(service.Object, security.Object, notice.Object); Mock<IPrincipal> principal = new Mock<IPrincipal>(); principal.Setup(p => p.Identity.Name).Returns("*****@*****.**"); Mock<ControllerContext> context = new Mock<ControllerContext>(); context.SetupGet(c => c.HttpContext.User.Identity.Name).Returns("*****@*****.**"); context.SetupGet(c => c.HttpContext.Request.IsAuthenticated).Returns(true); controller.ControllerContext = context.Object; // act var result = controller.Edit(viewModel); // assert Assert.IsNotNull(result); Assert.IsInstanceOfType(result, typeof(RedirectToRouteResult)); Assert.AreEqual("Details", ((RedirectToRouteResult)result).RouteValues["action"]); }
public ActionResult Create(BCWeb.Areas.Admin.Models.Projects.ViewModel.ProjectEditModel viewModel) { if (!viewModel.ProjectCategory.HasValue) ModelState.AddModelError("ProjectCategory", "Project Category is required"); if (!viewModel.ProjectType.HasValue) ModelState.AddModelError("ProjectType", "Project Type is required"); if (ModelState.IsValid) { BCModel.Projects.Project toCreate = new BCModel.Projects.Project { Address = viewModel.Address, ArchitectId = viewModel.ArchitectId, BidDateTime = viewModel.BidDateTime, BuildingTypeId = viewModel.BuildingTypeId, City = viewModel.City, ConstructionTypeId = viewModel.ConstructionTypeId, CreatedById = viewModel.CreatedById, Description = viewModel.Description, Number = viewModel.Number, PostalCode = viewModel.PostalCode, ProjectCategory = viewModel.ProjectCategory.Value, ProjectType = viewModel.ProjectType.Value, StateId = viewModel.StateId, Title = viewModel.Title, BidPackages = new List<BidPackage>(), Scopes = new List<ProjectXScope>(), WalkThruDateTime = viewModel.WalkThruDateTime, WalkThruStatus = viewModel.WalkThruStatus.Value }; GeoLocator locator = new GeoLocator(); State projectState = _service.GetState(viewModel.StateId); if (viewModel.Address == null && viewModel.City == null && viewModel.StateId != null && viewModel.PostalCode != null) { toCreate.GeoLocation = locator.GetFromStateZip(projectState.Abbr, viewModel.PostalCode); } else if ((viewModel.Address == null || viewModel.Address == string.Empty) && viewModel.StateId != null && viewModel.PostalCode != null) { toCreate.GeoLocation = locator.GetFromCityStateZip(viewModel.City, projectState.Abbr, viewModel.PostalCode); } else if ((viewModel.Address != null && viewModel.Address != string.Empty) && (viewModel.City != null && viewModel.City != string.Empty) && viewModel.StateId != null && viewModel.PostalCode != null) { toCreate.GeoLocation = locator.GetFromAddress(viewModel.Address, viewModel.City, projectState.Abbr, viewModel.PostalCode); } BidPackage projectPackage = new BidPackage { IsMaster = true, BidDateTime = toCreate.BidDateTime, Description = "Master Bid Package", CreatedById = viewModel.ArchitectId, Project = toCreate, Scopes = new List<BidPackageXScope>(), Invitees = new List<Invitation>() }; UserProfile createdBy = _service.GetUserProfile(viewModel.CreatedById); // if createdby is a GC, self-invite if (createdBy.Company.BusinessType == BusinessType.GeneralContractor) { projectPackage.Invitees.Add(new Invitation { BidPackage = projectPackage, SentToId = viewModel.CreatedById, SentDate = DateTime.Now, AcceptedDate = DateTime.Now, InvitationType = InvitationType.SentFromCreatedBy }); } // add bp to project toCreate.BidPackages.Add(projectPackage); // set selected scopes for bp and project for (int i = 0; i < viewModel.SelectedScope.Count(); i++) { toCreate.Scopes.Add(new ProjectXScope { Project = toCreate, ScopeId = viewModel.SelectedScope.ElementAt(i) }); projectPackage.Scopes.Add(new BidPackageXScope { BidPackage = projectPackage, ScopeId = viewModel.SelectedScope.ElementAt(i) }); } // add project to system if (_service.Create(toCreate)) { return RedirectToAction("Index"); } else { Util.MapValidationErrors(_service.ValidationDic, this.ModelState); } } rePopVieModel(viewModel); return View(); }