public void SaveAppraiserUser_should_throw_exception_if_users_role_is_illegal() { var viewContext = new ViewContext(); viewContext.HttpContext = MockHttpContext.FakeHttpContext(); IPrincipal currentUser = new GenericPrincipal(new GenericIdentity("someUser"), null); var dvsAdminRole = Singletones.ReferenceManager.GetRole(RoleType.DvsAdmin); viewContext.HttpContext.User.IsInRole(dvsAdminRole.RoleType.ToString()).Returns(true); _target.CommitProviderInstance = Substitute.For<ICommitProvider>(); _target.SetFakeControllerContext(viewContext.HttpContext); var addressViewModel = new AddressViewModel(); var appraiserUserContactViewModel = new AppraiserUserContactViewModel { PhysicalAddress = addressViewModel }; var userModel = new AppraiserUserCreateViewModel() { GeneralInfo = new CreateUserGeneralInfoViewModel() { RoleType = RoleType.DvsSuperAdmin }, Contact = appraiserUserContactViewModel, }; var companyModel = new AppraiserUserCompanyInfoViewModel(); // act _target.Invoking(a => a.SaveAppraiserUser(userModel, companyModel, true)).ShouldThrow<ArgumentException>(); }
public void SaveAppraiserUser_should_throw_exception_if_company_admin_assigns_user_to_inactive_branch() { var companyInfo = new AppraiserUserCompanyInfoViewModel() { CompanyID = 1 }; companyInfo.Branches = new List<AppraiserUserCompanyInfoBranchViewModel>(new AppraiserUserCompanyInfoBranchViewModel[] { new AppraiserUserCompanyInfoBranchViewModel() { BranchID = 1, Status = AppraisalCompanyStatus.Inactive} }); var companyAdminRole = Singletones.ReferenceManager.GetRole(RoleType.AppraisalCompanyAdmin); User user = new User() { Roles = new List<Role>(new Role[] { companyAdminRole }) }; _userManager.GetByEmail(Arg.Any<string>()).Returns(user); _appraiserService.GetAppraiserCompanyInfo(Arg.Any<string>()).Returns(companyInfo); _companyService.GetAppraisalCompanyDetails(Arg.Any<int>()).Returns(new AppraisalCompanyDetailsViewModel() { Status = AppraisalCompanyStatus.Applied }); var viewContext = new ViewContext(); viewContext.HttpContext = MockHttpContext.FakeHttpContext(); IPrincipal currentUser = new GenericPrincipal(new GenericIdentity("someUser"), null); viewContext.HttpContext.User.IsInRole(companyAdminRole.RoleType.ToString()).Returns(true); _target.CommitProviderInstance = Substitute.For<ICommitProvider>(); _target.SetFakeControllerContext(viewContext.HttpContext); var addressViewModel = new AddressViewModel(); var appraiserUserContactViewModel = new AppraiserUserContactViewModel { PhysicalAddress = addressViewModel }; var userModel = new AppraiserUserCreateViewModel() { GeneralInfo = new CreateUserGeneralInfoViewModel() { RoleType = RoleType.Appraiser }, Contact = appraiserUserContactViewModel, }; var companyModel = new AppraiserUserCompanyInfoViewModel() { CompanyID = 1, BranchID = 2 }; // act _target.Invoking(a => a.SaveAppraiserUser(userModel, companyModel, true)).ShouldThrow<ArgumentException>(); }
public void SaveAppraiserUser_should_redirect_to_Index_with_parameter_if_previous_url_is_AppraisalCompanuiesPipelineController() { var viewContext = new ViewContext(); viewContext.HttpContext = MockHttpContext.FakeHttpContext(); IPrincipal currentUser = new GenericPrincipal(new GenericIdentity("someUser"), null); var dvsAdminRole = Singletones.ReferenceManager.GetRole(RoleType.DvsAdmin); viewContext.HttpContext.User.IsInRole(dvsAdminRole.RoleType.ToString()).Returns(true); _target.CommitProviderInstance = Substitute.For<ICommitProvider>(); _target.SetFakeControllerContext(viewContext.HttpContext); _companyService.GetAppraisalCompanyDetails(Arg.Any<int>()).Returns(new AppraisalCompanyDetailsViewModel() { Status = AppraisalCompanyStatus.Applied }); var userModel = new AppraiserUserCreateViewModel() { GeneralInfo = new CreateUserGeneralInfoViewModel() { RoleType = RoleType.Appraiser }, PreviousUrl = NameHelper.AppraisalCompaniesPipeline.Controller, Contact = new AppraiserUserContactViewModel() { PhysicalAddress = new AddressViewModel() } }; int companyId = 10; var companyModel = new AppraiserUserCompanyInfoViewModel() { CompanyID = companyId }; _companyService.GetAppraiserUserCompanyInfo(Arg.Any<int>(), Arg.Any<int?>()).Returns(companyModel); // act var actual = _target.SaveAppraiserUser(userModel, companyModel, false); actual.Should().NotBeNull().And.BeOfType<RedirectToRouteResult>(); ((RedirectToRouteResult)actual).RouteValues["action"].Should().Be(NameHelper.AppraiserUserAdd.Index); ((RedirectToRouteResult)actual).RouteValues["appraisalCompanyId"].Should().Be(companyId); }
public void SaveAppraiserUser_should_redirect_to_previous_url_if_redirect_flag_is_set() { var viewContext = new ViewContext(); viewContext.HttpContext = MockHttpContext.FakeHttpContext(); IPrincipal currentUser = new GenericPrincipal(new GenericIdentity("someUser"), null); var dvsAdminRole = Singletones.ReferenceManager.GetRole(RoleType.DvsAdmin); viewContext.HttpContext.User.IsInRole(dvsAdminRole.RoleType.ToString()).Returns(true); _companyService.GetAppraisalCompanyDetails(Arg.Any<int>()).Returns(new AppraisalCompanyDetailsViewModel() { Status = AppraisalCompanyStatus.Applied }); _target.CommitProviderInstance = Substitute.For<ICommitProvider>(); _target.SetFakeControllerContext(viewContext.HttpContext); string url = "someUrl"; var userModel = new AppraiserUserCreateViewModel() { GeneralInfo = new CreateUserGeneralInfoViewModel() { RoleType = RoleType.Appraiser }, Contact = new AppraiserUserContactViewModel() { PhysicalAddress = new AddressViewModel() }, PreviousUrl = url, }; var companyModel = new AppraiserUserCompanyInfoViewModel(); _companyService.GetAppraiserUserCompanyInfo(Arg.Any<int>(), Arg.Any<int?>()).Returns(companyModel); // act var actual = _target.SaveAppraiserUser(userModel, companyModel, true); actual.Should().NotBeNull().And.BeOfType<RedirectResult>(); ((RedirectResult)actual).Url.Should().Be(url); }
public void CreateAppraiserUser_should_create_user() { var company = new AppraisalCompanyDetail() { Branches = new List<AppraisalCompanyBranch>() }; AppraisalCompanyManager.GetAppraisalCompanyById(1).Returns(company); var generalInfo = new CreateUserGeneralInfoViewModel() { Email = "email", Password = "******", RoleType = RoleType.Appraiser }; IAppraiserUserRepository appUserRepository = Substitute.For<IAppraiserUserRepository>(); var _taskManager = Substitute.For<ITaskManager>(); ReferenceManager.GetRoleWithoutCache(RoleType.Appraiser).Returns(new Role() { Id = (int)RoleType.Appraiser }); AppraiserManager = new AppraiserManagement(Substitute.For<IUserRepository>(), appUserRepository, ReferenceManager, _taskManager, Substitute.For<IAscGovLicenseService>()); Target = new AppraiserUserService(UsersManager, AppraiserManager, ReferenceManager, AppraisalCompanyManager, StatusHistoryManager, FeeManager, LicenseManager, AppraiserAccessManager, CryptographicProvider, DocumentService, Substitute.For<IGeocodingDataService>()); var contactInfo = new AppraiserUserContactViewModel() { PhysicalAddress = new AddressViewModel() }; var companyInfo = new AppraiserUserCompanyInfoViewModel() { CompanyID = 1 }; var appraiser = new AppraiserUserCreateViewModel() { GeneralInfo = generalInfo, Contact = contactInfo, CompanyInfo = companyInfo }; var serviceAreaRadiuses = new Dictionary<RefServiceAreaRadiuse, string>(); serviceAreaRadiuses.Add(new RefServiceAreaRadiuse() { ServiceAreaRadius = 1 }, "123"); ReferenceManager.GetServiceAreaRadiuses().Returns(serviceAreaRadiuses); //act Target.CreateAppraiserUser(appraiser); appUserRepository.Received().Add(Arg.Any<AppraiserUser>()); }
public void CreateAppraiserUser_should_throw_exception_if_user_assigned_to_nonexsistent_branch() { var company = new AppraisalCompanyDetail() { Branches = new List<AppraisalCompanyBranch>() }; ReferenceManager.GetRole(Arg.Any<RoleType>()).Returns(new Role() { Id = (int)RoleType.Appraiser }); AppraisalCompanyManager.GetAppraisalCompanyById(1).Returns(company); var generalInfo = new CreateUserGeneralInfoViewModel() { Email = "email", Password = "******" }; AppraiserUser appUser = new AppraiserUser(); appUser.User = new User(); appUser.User.Roles = new List<Role>() { new Role() { Id = (int)RoleType.Appraiser } }; AppraiserManager.CheckAndCreateAppraiserUser(Arg.Any<User>(), generalInfo.Password, Arg.Any<AppraiserUserStatus>()).Returns(appUser); var contactInfo = new AppraiserUserContactViewModel() { PhysicalAddress = new AddressViewModel() }; var companyInfo = new AppraiserUserCompanyInfoViewModel() { CompanyID = 1, BranchID = 10 }; var appraiser = new AppraiserUserCreateViewModel() { GeneralInfo = generalInfo, Contact = contactInfo, CompanyInfo = companyInfo }; //act Target.Invoking(a => a.CreateAppraiserUser(appraiser)).ShouldThrow<ArgumentException>(); }
public PartialViewResult AddEmptyPhone() { var phone = new PhoneItemViewModel { Id = Guid.NewGuid().ToString(), PhoneType = PhoneType.Mobile }; var phonesViewModel = new PhonesViewModel { PhoneItems = new List<PhoneItemViewModel> { phone } }; var model = new AppraiserUserCreateViewModel(); model.Contact.Phones = phonesViewModel; ViewBag.ExecuteBeginForm = true; ViewBag.AreaName = DVS.Logic.Constants.Areas.UserManagement; ViewBag.ControllerName = NameHelper.AppraiserUserAdd.Controller; return PartialView(Constants.Views.AppraiserPhonesPartial, model); }
public ActionResult Index(int? appraisalCompanyId) { ViewBag.GeocodingErrorMessage = TempData[GeocodingErrorMessage] as string; var appraiserInfo = TempData[_appraiserCreationKey] as AppraiserUserCreateViewModel; if (appraiserInfo == null) { appraiserInfo = new AppraiserUserCreateViewModel(); appraiserInfo.Contact.Phones.PhoneItems.Add(new PhoneItemViewModel() { Id = Guid.NewGuid().ToString(), PhoneType = PhoneType.Mobile }); } var isCurrentUserCompanyAdmin = SecurityContext.CurrentUser.HasUserAnyRoles(RoleType.AppraisalCompanyAdmin, RoleType.CompanyAdminAndAppraiser); if (isCurrentUserCompanyAdmin) { appraiserInfo.CompanyInfo = _appraiserService.GetAppraiserCompanyInfo(SecurityContext.CurrentUser.Email); if (appraisalCompanyId.HasValue && appraisalCompanyId.Value != appraiserInfo.CompanyInfo.CompanyID) { throw new SecurityException(string.Format("Access to company {0} is denied for user {1}", appraisalCompanyId, SecurityContext.CurrentUser.Email)); } CheckPageAvaibility(appraiserInfo.CompanyInfo.CompanyID); } else { if (appraisalCompanyId.HasValue) { appraiserInfo.CompanyInfo = _companyService.GetAppraiserUserCompanyInfo(appraisalCompanyId.Value, null); if (appraiserInfo.CompanyInfo == null) throw new ArgumentException("company id"); CheckPageAvaibility(appraiserInfo.CompanyInfo.CompanyID); } } if (appraiserInfo.CompanyInfo.Branches != null) { appraiserInfo.CompanyInfo.Branches = appraiserInfo.CompanyInfo.Branches.Where(e => e.Status == AppraisalCompanyStatus.Active).ToList(); if (appraiserInfo.CompanyInfo.Branches.Any(e => !Constants.Text.NoSelection.Equals(e.BranchName))) { appraiserInfo.CompanyInfo.Branches.Insert(0, new AppraiserUserCompanyInfoBranchViewModel() { BranchID = 0, BranchName = Constants.Text.NoSelection }); } } appraiserInfo.CompanyInfo.IsCompanyAdmin = false; appraiserInfo.CompanyInfo.IsCompanyRequired = !isCurrentUserCompanyAdmin && (appraiserInfo.GeneralInfo.RoleType == RoleType.AppraisalCompanyAdmin || appraiserInfo.GeneralInfo.RoleType == RoleType.CompanyAdminAndAppraiser); if (!appraisalCompanyId.HasValue && !isCurrentUserCompanyAdmin) { appraiserInfo.CompanyInfo.CompanyNameState = CompanyNameState.Editable; } else { appraiserInfo.CompanyInfo.CompanyNameState = CompanyNameState.Readonly; } if (Request.UrlReferrer != null && !Request.UrlReferrer.AbsolutePath.Contains(NameHelper.AppraiserUserAdd.Controller)) { appraiserInfo.PreviousUrl = Request.UrlReferrer.AbsolutePath; } var roles = new Dictionary<int, string>(); roles.Add(0, Constants.Text.NoSelection); roles = roles.Concat(Singletones.ReferenceManager.GetRolesForAppraisers()).ToDictionary(x => x.Key, x => x.Value); ViewBag.ListForDropDown = new SelectList(roles, "Key", "Value"); return View(appraiserInfo); }
public ActionResult RemovePhone(AppraiserUserCreateViewModel user, string phoneId) { ModelState.Clear(); var phoneItem = user.Contact.Phones.PhoneItems.Single(pi => pi.Id == phoneId); user.Contact.Phones.PhoneItems.Remove(phoneItem); TempData[_appraiserCreationKey] = user; return RedirectToAction(NameHelper.AppraiserUserAdd.Index); }
public ActionResult AddPhone(AppraiserUserCreateViewModel user) { ModelState.Clear(); user.Contact.Phones.PhoneItems.Add(new PhoneItemViewModel() { Id = Guid.NewGuid().ToString(), PhoneType = PhoneType.Mobile }); TempData[_appraiserCreationKey] = user; return RedirectToAction(NameHelper.AppraiserUserAdd.Index); }
private void SkipConditionalValidation(AppraiserUserCreateViewModel model) { bool isCompanyAdmin = User.IsInRole(RoleType.AppraisalCompanyAdmin.ToString()) || User.IsInRole(RoleType.AppraisalCompanyAdmin.ToString()); bool isCompanyRequired = !isCompanyAdmin && (model.GeneralInfo.RoleType == RoleType.AppraisalCompanyAdmin || model.GeneralInfo.RoleType == RoleType.CompanyAdminAndAppraiser); if (!isCompanyRequired) { if (!ModelState.IsValid) { Expression<Func<AppraiserUserCompanyInfoViewModel, string>> companyNameExpr = m => m.CompanyName; string key = ExpressionHelper.GetExpressionText(companyNameExpr); var error = ModelState[key].Errors.FirstOrDefault(); if (error != null && error.ErrorMessage.Equals("Required.", StringComparison.CurrentCultureIgnoreCase)) { ModelState.Remove(key); } } } }
private void SaveUser(AppraiserUserCreateViewModel user) { if (!Singletones.ReferenceManager.GetRolesForAppraisers().Select(e => e.Key).Contains((int)user.GeneralInfo.RoleType)) { throw new ArgumentException("role id"); } AppraiserUserCompanyInfoViewModel currentCompany; if (User.IsInRole(RoleType.AppraisalCompanyAdmin.ToString()) || User.IsInRole(RoleType.CompanyAdminAndAppraiser.ToString())) { var currentUser = _userManager.GetByEmail(User.Identity.Name); currentCompany = _appraiserService.GetAppraiserCompanyInfo(currentUser.Email); if (currentCompany.CompanyID != user.CompanyInfo.CompanyID) { throw new ArgumentException("company id"); } } else { currentCompany = _companyService.GetAppraiserUserCompanyInfo(user.CompanyInfo.CompanyID, user.CompanyInfo.BranchID); } if (currentCompany != null) CheckPageAvaibility(currentCompany.CompanyID); if (user.CompanyInfo.BranchID.GetValueOrDefault(0) != 0 && !currentCompany.Branches.Where(e => e.Status == AppraisalCompanyStatus.Active).Select(e => e.BranchID).Contains(user.CompanyInfo.BranchID.Value)) { throw new ArgumentException("branch id"); } AppraiserUserStatus currentUserStatus = AppraiserUserStatus.Applied; if (user.GeneralInfo.RoleType == RoleType.AppraisalCompanyAdmin || user.GeneralInfo.RoleType == RoleType.CompanyAdminAndAppraiser) currentUserStatus = AppraiserUserStatus.Active; _appraiserService.CreatAppraiserUserWithStatus(user, currentUserStatus); CommitProviderInstance.Commit(); if (user.GeneralInfo.RoleType == RoleType.Appraiser || user.GeneralInfo.RoleType == RoleType.CompanyAdminAndAppraiser) { var testOrder = _testOrderManager.CreateTestOrderForAppraiser(user.GeneralInfo.Email); CommitProviderInstance.Commit(); if (testOrder != null) { _taskManager.GenerateLOEDocument(testOrder.Id, base.SecurityContext.CurrentUser.Id); } } }
public ActionResult SaveAppraiserUser(AppraiserUserCreateViewModel user, AppraiserUserCompanyInfoViewModel company, bool? toRedirect) { var validateAddress = new ValidateAddressArg { City = user.Contact.PhysicalAddress.City, State = user.Contact.PhysicalAddress.State, Street = user.Contact.PhysicalAddress.Street, ZIP = user.Contact.PhysicalAddress.ZIP }; var geocodingValidationResult = _geocodingValidation.ValidateAddress(validateAddress); if (!geocodingValidationResult.IsValid) { TempData[GeocodingErrorMessage] = Constants.ErrorMessages.GeocodingVerificationError; TempData[_appraiserCreationKey] = user; return RedirectToAction(NameHelper.AppraiserUserAdd.Index); } user.CompanyInfo = company; SkipConditionalValidation(user); if (!ModelState.IsValid) { return View(NameHelper.AppraiserUserAdd.Index, user); } SaveUser(user); _taskManager.ScheduleManuallyRegisteredUserNotification(user.GeneralInfo.Email, user.GeneralInfo.Password); if (toRedirect.GetValueOrDefault(false)) { if (!string.IsNullOrEmpty(user.PreviousUrl)) { return Redirect(user.PreviousUrl); } return View(NameHelper.AppraiserUserAdd.Index, user); } AppraiserUserCreateViewModel newUser = new AppraiserUserCreateViewModel(); newUser.PreviousUrl = user.PreviousUrl; newUser.Contact.Phones.PhoneItems.Add(new PhoneItemViewModel() { Id = Guid.NewGuid().ToString(), PhoneType = PhoneType.Mobile }); TempData[_appraiserCreationKey] = newUser; if (!string.IsNullOrEmpty(user.PreviousUrl) && user.PreviousUrl.Contains(NameHelper.AppraisalCompaniesPipeline.Controller)) { return RedirectToAction(NameHelper.AppraiserUserAdd.Index, new { appraisalCompanyId = company.CompanyID }); } return RedirectToAction(NameHelper.AppraiserUserAdd.Index); }